proposals on DST/DST_CA/DVB_PLL.c deselection, part 1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Part1: Trent Piepho's fantastic work, differently arranged, 3 hunks cut out

--- a/drivers/media/dvb/bt8xx/dst.c Fri Apr 27 12:16:31 2007 -0300
+++ b/drivers/media/dvb/bt8xx/dst.c Mon Apr 30 12:39:33 2007 -0700
@@ -1721,23 +1721,30 @@ static void dst_release(struct dvb_front
 		symbol_put(dst_ca_attach);
 #endif
 	}
-#ifdef CONFIG_DVB_CORE_ATTACH
-	symbol_put(dst_attach);
-#endif
 	kfree(state);
 }
 
 static struct dvb_frontend_ops dst_dvbt_ops;
 static struct dvb_frontend_ops dst_dvbs_ops;
 static struct dvb_frontend_ops dst_dvbc_ops;
 static struct dvb_frontend_ops dst_atsc_ops;
 
-struct dst_state *dst_attach(struct dst_state *state, struct dvb_adapter *dvb_adapter)
-{
+struct dvb_frontend *dst_attach(struct dst_config *config, struct bt878 *bt,
+ struct i2c_adapter *i2c)
+{
+struct dst_state *state = kzalloc(sizeof(*state), GFP_KERNEL);
+
+	if (!state) {
+	printk(KERN_ERR "dst: No memory!\n");
+	return NULL;;
+	}
+	state->i2c = i2c;
+	state->config = config;
+	state->bt = bt;
+
 	/* check if the ASIC is there */
 	if (dst_probe(state) < 0) {
-		kfree(state);
-		return NULL;
+		goto fail;
 	}
 	/* determine settings based on type */
 	/* create dvb_frontend */
@@ -1756,12 +1763,15 @@ struct dst_state *dst_attach(struct dst_
 		break;
 	default:
 		dprintk(verbose, DST_ERROR, 1, "unknown DST type. please report to the LinuxTV.org DVB mailinglist.");
-		kfree(state);
-		return NULL;
+		goto fail;
 	}
 	state->frontend.demodulator_priv = state;
 
-	return state;				/*	Manu (DST is a card not a frontend)	*/
+	return &state->frontend; /* Manu (DST is a card not a frontend) */
+
+	fail:
+	kfree(state);
+	return NULL;
 }
 
 EXPORT_SYMBOL(dst_attach);
--- a/drivers/media/dvb/bt8xx/dst_ca.c Fri Apr 27 12:16:31 2007 -0300
+++ b/drivers/media/dvb/bt8xx/dst_ca.c Mon Apr 30 12:39:33 2007 -0700
@@ -699,8 +699,9 @@ static struct dvb_device dvbdev_ca = {
 	.fops = &dst_ca_fops
 };
 
-struct dvb_device *dst_ca_attach(struct dst_state *dst, struct dvb_adapter *dvb_adapter)
-{
+struct dvb_device *dst_ca_attach(struct dvb_frontend *fe, struct dvb_adapter *dvb_adapter)
+{
+	struct dst_state *dst = fe->demodulator_priv;
 	struct dvb_device *dvbdev;
 
 	dprintk(verbose, DST_CA_ERROR, 1, "registering DST-CA device");
--- a/drivers/media/dvb/bt8xx/dst_common.h Fri Apr 27 12:16:31 2007 -0300
+++ b/drivers/media/dvb/bt8xx/dst_common.h Mon Apr 30 12:39:33 2007 -0700
@@ -178,11 +178,25 @@ int write_dst(struct dst_state *state, u
 int write_dst(struct dst_state *state, u8 * data, u8 len);
 int read_dst(struct dst_state *state, u8 * ret, u8 len);
 u8 dst_check_sum(u8 * buf, u32 len);
-struct dst_state* dst_attach(struct dst_state* state, struct dvb_adapter *dvb_adapter);
-struct dvb_device *dst_ca_attach(struct dst_state *state, struct dvb_adapter *dvb_adapter);
-int dst_gpio_outb(struct dst_state* state, u32 mask, u32 enbb, u32 outhigh, int delay);
-
-int dst_command(struct dst_state* state, u8 * data, u8 len);
-
-
+int dst_gpio_outb(struct dst_state* state, u32 mask, u32 enbb, u32 outhigh, int delay);
+int dst_command(struct dst_state* state, u8 * data, u8 len);
+
+#if defined(CONFIG_DVB_DST) || (defined(CONFIG_DVB_DST_MODULE) && defined(MODULE))
+struct dvb_frontend *dst_attach(struct dst_config *config, struct bt878 *bt,
+struct i2c_adapter *i2c);
+struct dvb_device *dst_ca_attach(struct dvb_frontend *fe, struct dvb_adapter *dvb_adapter);
+#else
+static inline struct dvb_frontend *dst_attach(struct dst_config *config,
+ struct bt878 *bt, struct i2c_adapter *i2c)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__);
+ return NULL;
+}
+static inline struct dvb_device *dst_ca_attach(struct dvb_frontend *fe,
+ struct dvb_adapter *dvb_adapter)
+{
+ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__);
+ return NULL;
+}
+#endif // CONFIG_DVB_DST
 #endif // DST_COMMON_H
--- a/drivers/media/dvb/bt8xx/dvb-bt8xx.c Fri Apr 27 12:16:31 2007 -0300
+++ b/drivers/media/dvb/bt8xx/dvb-bt8xx.c Mon Apr 30 12:39:33 2007 -0700
@@ -659,26 +659,17 @@ static void frontend_init(struct dvb_bt8
 
 	case BTTV_BOARD_TWINHAN_DST:
 		/*	DST is not a frontend driver !!!		*/
-		state = kmalloc(sizeof (struct dst_state), GFP_KERNEL);
-		if (!state) {
-			printk("dvb_bt8xx: No memory\n");
-			break;
-		}
-		/*	Setup the Card					*/
-		state->config = &dst_config;
-		state->i2c = card->i2c_adapter;
-		state->bt = card->bt;
-		state->dst_ca = NULL;
 		/*	DST is not a frontend, attaching the ASIC	*/
-		if (dvb_attach(dst_attach, state, &card->dvb_adapter) == NULL) {
-			printk("%s: Could not find a Twinhan DST.\n", __FUNCTION__);
+		card->fe = dvb_attach(dst_attach, &dst_config, card->bt,
+		card->i2c_adapter);
+		if (card->fe != NULL) {
+		printk(KERN_ERR "%s: Could not find a Twinhan DST.\n", __FUNCTION__);
 			break;
 		}
 		/*	Attach other DST peripherals if any		*/
 		/*	Conditional Access device			*/
-		card->fe = &state->frontend;
 		if (state->dst_hw_cap & DST_TYPE_HAS_CA)
-			dvb_attach(dst_ca_attach, state, &card->dvb_adapter);
+			dvb_attach(dst_ca_attach, card->fe, &card->dvb_adapter);
 		break;
 
 	case BTTV_BOARD_PINNACLESAT:

-- 
"Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ...
Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail

_______________________________________________
linux-dvb mailing list
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux