[PATCH] b2c2: make front-ends selectable and include noob option

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

 



Hi,

this patch probably needs some touch-up but mainly I am sking the dvb guys why 
don't they do something like this. Current situation:

For my Skystar2 card I am forced to compile in half a dozen front-ends + fw 
loader - but I only need one front-end driver and no fw loader. Furthermore 
this crap in the log goes away by throwing unneccessary stuff out:

before:
b2c2-flexcop: B2C2 FlexcopII/II(b)/III digital TV receiver chip loaded 
successfully
flexcop-pci: will use the HW PID filter.
flexcop-pci: card revision 1
ACPI: PCI Interrupt Link [APC1] enabled at IRQ 16
ACPI: PCI Interrupt 0000:01:08.0[A] -> Link [APC1] -> GSI 16 (level, high) -> 
IRQ 17
DVB: registering new adapter (FlexCop Digital TV device).
b2c2-flexcop: MAC address = 00:d0:d7:03:73:66
b2c2-flexcop: i2c master_xfer failed
b2c2-flexcop: i2c master_xfer failed
b2c2-flexcop: i2c master_xfer failed
mt352_read_register: readreg error (reg=127, ret==-121)
b2c2-flexcop: i2c master_xfer failed
i2c_readbytes: i2c read error (addr 0a, err == -121)
b2c2-flexcop: i2c master_xfer failed
lgdt330x: i2c_read_demod_bytes: addr 0x59 select 0x02 error (ret == -121)
b2c2-flexcop: i2c master_xfer failed
b2c2-flexcop: i2c master_xfer failed
stv0297_readreg: readreg error (reg == 0x80, ret == -22)
b2c2-flexcop: found the vp310 (aka mt312) at i2c address: 0x0e
DVB: registering frontend 0 (Zarlink VP310 DVB-S)...
b2c2-flexcop: initialization of 'Sky2PC/SkyStar 2 DVB-S (old version)' at the 
'PCI' bus controlled by a 'FlexCopII' complete

after:
b2c2-flexcop: B2C2 FlexcopII/II(b)/III digital TV receiver chip loaded 
successfully
flexcop-pci: will use the HW PID filter.
flexcop-pci: card revision 1
ACPI: PCI Interrupt Link [APC1] enabled at IRQ 16
ACPI: PCI Interrupt 0000:01:08.0[A] -> Link [APC1] -> GSI 16 (level, high) -> 
IRQ 17
DVB: registering new adapter (FlexCop Digital TV device).
b2c2-flexcop: MAC address = 00:d0:d7:03:73:66
b2c2-flexcop: found the vp310 (aka mt312) at i2c address: 0x0e
DVB: registering frontend 0 (Zarlink VP310 DVB-S)...
b2c2-flexcop: initialization of 'Sky2PC/SkyStar 2 DVB-S (old version)' at the 
'PCI' bus controlled by a 'FlexCopII' complete

Needless to say that my kernel size is a bit smaller and my card still works.

I made the patch trying to follow: http://www.linuxjournal.com/article/5780
by Greg Kroah-Hartman, esp the paragraph "No ifdefs in .c Code". Unfortunately 
there this is the problem with request_firmware(...) which I needed to ifdef 
out. Probably someone has a better idea.

I also added an *option* to include every supported front-end, so that noobs 
don't have to guess around and I guess this was the intention by the dvb devs 
by selection all frontends by default. I only dislike the missing possibility 
to deselect unwanted ones. (Is it possible to select this option by default? 
I don't know much about Kbuild.)

Anyway I asked the dvb guys why the included everything unselectable by 
default, but I got no response, thus I submit this patch hoping to get more 
response now.

Of course, this patch only addresses the b2c2 chips. So here it goes, hoping I 
haven't missed anything:

signed-off-by: Prakash Punnoor <[email protected]>


diff -urd dvb.old/b2c2/flexcop-fe-tuner.c dvb/b2c2/flexcop-fe-tuner.c
--- dvb.old/b2c2/flexcop-fe-tuner.c	2005-12-06 19:55:39.060449080 +0100
+++ dvb/b2c2/flexcop-fe-tuner.c	2005-12-06 20:29:55.144876736 +0100
@@ -293,8 +293,12 @@
 
 static int flexcop_fe_request_firmware(struct dvb_frontend* fe, const struct 
firmware **fw, char* name)
 {
+#ifdef CONFIG_FW_LOADER
 	struct flexcop_device *fc = fe->dvb->priv;
 	return request_firmware(fw, name, fc->dev);
+#else
+	return -EINVAL;
+#endif
 }
 
 static int lgdt3303_pll_set(struct dvb_frontend* fe,
diff -urd dvb.old/b2c2/Kconfig dvb/b2c2/Kconfig
--- dvb.old/b2c2/Kconfig	2005-12-06 19:55:39.060449080 +0100
+++ dvb/b2c2/Kconfig	2005-12-06 20:36:36.751823200 +0100
@@ -1,6 +1,15 @@
 config DVB_B2C2_FLEXCOP
 	tristate "Technisat/B2C2 FlexCopII(b) and FlexCopIII adapters"
 	depends on DVB_CORE
+	help
+	  Support for the digital TV receiver chip made by B2C2 Inc. included in
+	  Technisats PCI cards and USB boxes.
+
+	  Say Y if you own such a device and want to use it.
+
+config DVB_B2C2_FLEXCOP_ALL_FRONTENDS
+	bool "Select all supported front-ends"
+	depends on DVB_B2C2_FLEXCOP
 	select DVB_STV0299
 	select DVB_MT352
 	select DVB_MT312
@@ -9,10 +18,12 @@
 	select DVB_BCM3510
 	select DVB_LGDT330X
 	help
-	  Support for the digital TV receiver chip made by B2C2 Inc. included in
-	  Technisats PCI cards and USB boxes.
+	  Selects all supported front-ends by Technisat/B2C2 driver.
+	  If you don't select this option, you must select the correct
+	  front-end by hand.
+
+	  Say Y if you don't know your front-end.
 
-	  Say Y if you own such a device and want to use it.
 
 config DVB_B2C2_FLEXCOP_PCI
 	tristate "Technisat/B2C2 Air/Sky/Cable2PC PCI"
diff -urd dvb.old/frontends/bcm3510.h dvb/frontends/bcm3510.h
--- dvb.old/frontends/bcm3510.h	2005-12-06 19:55:39.445390560 +0100
+++ dvb/frontends/bcm3510.h	2005-12-06 20:09:37.878929288 +0100
@@ -34,7 +34,15 @@
 	int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, 
char* name);
 };
 
+#ifdef CONFIG_DVB_BCM3510
 extern struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* 
config,
 					   struct i2c_adapter* i2c);
+#else
+static inline struct dvb_frontend* bcm3510_attach(const struct 
bcm3510_config* config,
+						  struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+#endif
 
 #endif
diff -urd dvb.old/frontends/lgdt330x.h dvb/frontends/lgdt330x.h
--- dvb.old/frontends/lgdt330x.h	2005-12-06 19:55:39.645360160 +0100
+++ dvb/frontends/lgdt330x.h	2005-12-06 20:00:10.309213000 +0100
@@ -53,8 +53,16 @@
 	int clock_polarity_flip;
 };
 
+#ifdef CONFIG_DVB_LGDT330X
 extern struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* 
config,
 					    struct i2c_adapter* i2c);
+#else
+static inline struct dvb_frontend* lgdt330x_attach(const struct 
lgdt330x_config* config,
+						   struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+#endif
 
 #endif /* LGDT330X_H */
 
diff -urd dvb.old/frontends/mt312.h dvb/frontends/mt312.h
--- dvb.old/frontends/mt312.h	2005-12-06 19:55:39.503381744 +0100
+++ dvb/frontends/mt312.h	2005-12-06 20:04:07.191201464 +0100
@@ -38,10 +38,24 @@
 	int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* 
params);
 };
 
+#ifdef CONFIG_DVB_MT312
 extern struct dvb_frontend* mt312_attach(const struct mt312_config* config,
 					 struct i2c_adapter* i2c);
 
 extern struct dvb_frontend* vp310_attach(const struct mt312_config* config,
 					 struct i2c_adapter* i2c);
+#else
+static inline struct dvb_frontend* mt312_attach(const struct mt312_config* 
config,
+						struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+
+static inline struct dvb_frontend* vp310_attach(const struct mt312_config* 
config,
+						struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+#endif
 
 #endif // MT312_H
diff -urd dvb.old/frontends/mt352.h dvb/frontends/mt352.h
--- dvb.old/frontends/mt352.h	2005-12-06 19:55:39.540376120 +0100
+++ dvb/frontends/mt352.h	2005-12-06 20:04:21.881968128 +0100
@@ -57,9 +57,22 @@
 	int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* 
params, u8* pllbuf);
 };
 
+#ifdef CONFIG_DVB_MT352
 extern struct dvb_frontend* mt352_attach(const struct mt352_config* config,
 					 struct i2c_adapter* i2c);
 
 extern int mt352_write(struct dvb_frontend* fe, u8* ibuf, int ilen);
+#else
+static inline struct dvb_frontend* mt352_attach(const struct mt352_config* 
config,
+						struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+
+static inline int mt352_write(struct dvb_frontend* fe, u8* ibuf, int ilen)
+{
+	return 0;
+}
+#endif
 
 #endif // MT352_H
diff -urd dvb.old/frontends/nxt2002.h dvb/frontends/nxt2002.h
--- dvb.old/frontends/nxt2002.h	2005-12-06 19:55:39.540376120 +0100
+++ dvb/frontends/nxt2002.h	2005-12-06 20:08:39.722770368 +0100
@@ -17,7 +17,15 @@
 	int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, 
char* name);
 };
 
+#ifdef CONFIG_DVB_NXT2002
 extern struct dvb_frontend* nxt2002_attach(const struct nxt2002_config* 
config,
 					   struct i2c_adapter* i2c);
+#else
+static inline struct dvb_frontend* nxt2002_attach(const struct 
nxt2002_config* config,
+						  struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+#endif
 
 #endif // NXT2002_H
diff -urd dvb.old/frontends/stv0297.h dvb/frontends/stv0297.h
--- dvb.old/frontends/stv0297.h	2005-12-06 19:55:39.577370496 +0100
+++ dvb/frontends/stv0297.h	2005-12-06 20:06:34.959737232 +0100
@@ -43,8 +43,21 @@
 	int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* 
params);
 };
 
+#ifdef CONFIG_DVB_STV0297
 extern struct dvb_frontend* stv0297_attach(const struct stv0297_config* 
config,
 					   struct i2c_adapter* i2c);
 extern int stv0297_enable_plli2c(struct dvb_frontend* fe);
+#else
+static inline struct dvb_frontend* stv0297_attach(const struct 
stv0297_config* config,
+						  struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+
+static inline int stv0297_enable_plli2c(struct dvb_frontend* fe)
+{
+	return 0;
+}
+#endif
 
 #endif // STV0297_H
diff -urd dvb.old/frontends/stv0299.h dvb/frontends/stv0299.h
--- dvb.old/frontends/stv0299.h	2005-12-06 19:55:39.681354688 +0100
+++ dvb/frontends/stv0299.h	2005-12-06 19:59:45.158036560 +0100
@@ -93,9 +93,22 @@
 	int (*pll_set)(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct 
dvb_frontend_parameters *params);
 };
 
+#ifdef CONFIG_DVB_STV0299
 extern int stv0299_writereg (struct dvb_frontend* fe, u8 reg, u8 data);
 
 extern struct dvb_frontend* stv0299_attach(const struct stv0299_config* 
config,
 					   struct i2c_adapter* i2c);
+#else
+static inline int stv0299_writereg (struct dvb_frontend* fe, u8 reg, u8 data)
+{
+	return 0;
+}
+
+static inline struct dvb_frontend* stv0299_attach(const struct 
stv0299_config* config,
+						  struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+#endif
 
 #endif // STV0299_H




-- 
(°=                 =°)
//\ Prakash Punnoor /\\
V_/                 \_V
diff -urd dvb.old/b2c2/flexcop-fe-tuner.c dvb/b2c2/flexcop-fe-tuner.c
--- dvb.old/b2c2/flexcop-fe-tuner.c	2005-12-06 19:55:39.060449080 +0100
+++ dvb/b2c2/flexcop-fe-tuner.c	2005-12-06 20:29:55.144876736 +0100
@@ -293,8 +293,12 @@
 
 static int flexcop_fe_request_firmware(struct dvb_frontend* fe, const struct firmware **fw, char* name)
 {
+#ifdef CONFIG_FW_LOADER
 	struct flexcop_device *fc = fe->dvb->priv;
 	return request_firmware(fw, name, fc->dev);
+#else
+	return -EINVAL;
+#endif
 }
 
 static int lgdt3303_pll_set(struct dvb_frontend* fe,
diff -urd dvb.old/b2c2/Kconfig dvb/b2c2/Kconfig
--- dvb.old/b2c2/Kconfig	2005-12-06 19:55:39.060449080 +0100
+++ dvb/b2c2/Kconfig	2005-12-06 20:36:36.751823200 +0100
@@ -1,6 +1,15 @@
 config DVB_B2C2_FLEXCOP
 	tristate "Technisat/B2C2 FlexCopII(b) and FlexCopIII adapters"
 	depends on DVB_CORE
+	help
+	  Support for the digital TV receiver chip made by B2C2 Inc. included in
+	  Technisats PCI cards and USB boxes.
+
+	  Say Y if you own such a device and want to use it.
+
+config DVB_B2C2_FLEXCOP_ALL_FRONTENDS
+	bool "Select all supported front-ends"
+	depends on DVB_B2C2_FLEXCOP
 	select DVB_STV0299
 	select DVB_MT352
 	select DVB_MT312
@@ -9,10 +18,12 @@
 	select DVB_BCM3510
 	select DVB_LGDT330X
 	help
-	  Support for the digital TV receiver chip made by B2C2 Inc. included in
-	  Technisats PCI cards and USB boxes.
+	  Selects all supported front-ends by Technisat/B2C2 driver.
+	  If you don't select this option, you must select the correct
+	  front-end by hand.
+
+	  Say Y if you don't know your front-end.
 
-	  Say Y if you own such a device and want to use it.
 
 config DVB_B2C2_FLEXCOP_PCI
 	tristate "Technisat/B2C2 Air/Sky/Cable2PC PCI"
diff -urd dvb.old/frontends/bcm3510.h dvb/frontends/bcm3510.h
--- dvb.old/frontends/bcm3510.h	2005-12-06 19:55:39.445390560 +0100
+++ dvb/frontends/bcm3510.h	2005-12-06 20:09:37.878929288 +0100
@@ -34,7 +34,15 @@
 	int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
 };
 
+#ifdef CONFIG_DVB_BCM3510
 extern struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config,
 					   struct i2c_adapter* i2c);
+#else
+static inline struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config,
+						  struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+#endif
 
 #endif
diff -urd dvb.old/frontends/lgdt330x.h dvb/frontends/lgdt330x.h
--- dvb.old/frontends/lgdt330x.h	2005-12-06 19:55:39.645360160 +0100
+++ dvb/frontends/lgdt330x.h	2005-12-06 20:00:10.309213000 +0100
@@ -53,8 +53,16 @@
 	int clock_polarity_flip;
 };
 
+#ifdef CONFIG_DVB_LGDT330X
 extern struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config,
 					    struct i2c_adapter* i2c);
+#else
+static inline struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config,
+						   struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+#endif
 
 #endif /* LGDT330X_H */
 
diff -urd dvb.old/frontends/mt312.h dvb/frontends/mt312.h
--- dvb.old/frontends/mt312.h	2005-12-06 19:55:39.503381744 +0100
+++ dvb/frontends/mt312.h	2005-12-06 20:04:07.191201464 +0100
@@ -38,10 +38,24 @@
 	int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
 };
 
+#ifdef CONFIG_DVB_MT312
 extern struct dvb_frontend* mt312_attach(const struct mt312_config* config,
 					 struct i2c_adapter* i2c);
 
 extern struct dvb_frontend* vp310_attach(const struct mt312_config* config,
 					 struct i2c_adapter* i2c);
+#else
+static inline struct dvb_frontend* mt312_attach(const struct mt312_config* config,
+						struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+
+static inline struct dvb_frontend* vp310_attach(const struct mt312_config* config,
+						struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+#endif
 
 #endif // MT312_H
diff -urd dvb.old/frontends/mt352.h dvb/frontends/mt352.h
--- dvb.old/frontends/mt352.h	2005-12-06 19:55:39.540376120 +0100
+++ dvb/frontends/mt352.h	2005-12-06 20:04:21.881968128 +0100
@@ -57,9 +57,22 @@
 	int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params, u8* pllbuf);
 };
 
+#ifdef CONFIG_DVB_MT352
 extern struct dvb_frontend* mt352_attach(const struct mt352_config* config,
 					 struct i2c_adapter* i2c);
 
 extern int mt352_write(struct dvb_frontend* fe, u8* ibuf, int ilen);
+#else
+static inline struct dvb_frontend* mt352_attach(const struct mt352_config* config,
+						struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+
+static inline int mt352_write(struct dvb_frontend* fe, u8* ibuf, int ilen)
+{
+	return 0;
+}
+#endif
 
 #endif // MT352_H
diff -urd dvb.old/frontends/nxt2002.h dvb/frontends/nxt2002.h
--- dvb.old/frontends/nxt2002.h	2005-12-06 19:55:39.540376120 +0100
+++ dvb/frontends/nxt2002.h	2005-12-06 20:08:39.722770368 +0100
@@ -17,7 +17,15 @@
 	int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
 };
 
+#ifdef CONFIG_DVB_NXT2002
 extern struct dvb_frontend* nxt2002_attach(const struct nxt2002_config* config,
 					   struct i2c_adapter* i2c);
+#else
+static inline struct dvb_frontend* nxt2002_attach(const struct nxt2002_config* config,
+						  struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+#endif
 
 #endif // NXT2002_H
diff -urd dvb.old/frontends/stv0297.h dvb/frontends/stv0297.h
--- dvb.old/frontends/stv0297.h	2005-12-06 19:55:39.577370496 +0100
+++ dvb/frontends/stv0297.h	2005-12-06 20:06:34.959737232 +0100
@@ -43,8 +43,21 @@
 	int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);
 };
 
+#ifdef CONFIG_DVB_STV0297
 extern struct dvb_frontend* stv0297_attach(const struct stv0297_config* config,
 					   struct i2c_adapter* i2c);
 extern int stv0297_enable_plli2c(struct dvb_frontend* fe);
+#else
+static inline struct dvb_frontend* stv0297_attach(const struct stv0297_config* config,
+						  struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+
+static inline int stv0297_enable_plli2c(struct dvb_frontend* fe)
+{
+	return 0;
+}
+#endif
 
 #endif // STV0297_H
diff -urd dvb.old/frontends/stv0299.h dvb/frontends/stv0299.h
--- dvb.old/frontends/stv0299.h	2005-12-06 19:55:39.681354688 +0100
+++ dvb/frontends/stv0299.h	2005-12-06 19:59:45.158036560 +0100
@@ -93,9 +93,22 @@
 	int (*pll_set)(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct dvb_frontend_parameters *params);
 };
 
+#ifdef CONFIG_DVB_STV0299
 extern int stv0299_writereg (struct dvb_frontend* fe, u8 reg, u8 data);
 
 extern struct dvb_frontend* stv0299_attach(const struct stv0299_config* config,
 					   struct i2c_adapter* i2c);
+#else
+static inline int stv0299_writereg (struct dvb_frontend* fe, u8 reg, u8 data)
+{
+	return 0;
+}
+
+static inline struct dvb_frontend* stv0299_attach(const struct stv0299_config* config,
+						  struct i2c_adapter* i2c)
+{
+	return NULL;
+}
+#endif
 
 #endif // STV0299_H

Attachment: pgpK7bQQPU9jO.pgp
Description: PGP signature


[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux