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
- Follow-Ups:
- Re: [PATCH] b2c2: make front-ends selectable and include noob option
- From: Michael Krufky <[email protected]>
- Re: [PATCH] b2c2: make front-ends selectable and include noob option
- Prev by Date: Re: [PATCH] sata_sil: combined irq + LBT DMA patch for testing
- Next by Date: [ANNOUNCE] December Release of LTP
- Previous by thread: core-iscsi v1.6.2.1 STABLE
- Next by thread: Re: [PATCH] b2c2: make front-ends selectable and include noob option
- Index(es):