Commit c5dec9fb authored by Trent Piepho's avatar Trent Piepho Committed by Mauro Carvalho Chehab

V4L/DVB (4751): Fix DBV_FE_CUSTOMISE for card drivers compiled into kernel

When a front-end is disabled, card drivers that use it are compiled with
a stub version of the front-end's attach function.  This way they have no
references to the front-end's code and don't need it to be loaded.
If a card driver is compiled into the kernel, and a front-end is a
module, then that front-end is effectively disabled wrt the card driver. 
In this case, the card driver should get the stub version.  This was not
happening.
The stub vs real attach function selection is changed so that when the
front-end is a module the real attach function is only used if the card
driver is a module as well.  This means a module front-end will be
supported by card drivers that are modules and not supported by card
drivers compiled into the kernel.
Signed-off-by: default avatarTrent Piepho <xyzzy@speakeasy.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 9bb6e259
...@@ -34,7 +34,7 @@ struct bcm3510_config ...@@ -34,7 +34,7 @@ struct bcm3510_config
int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
}; };
#if defined(CONFIG_DVB_BCM3510) || defined(CONFIG_DVB_BCM3510_MODULE) #if defined(CONFIG_DVB_BCM3510) || (defined(CONFIG_DVB_BCM3510_MODULE) && defined(MODULE))
extern struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config, extern struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -31,7 +31,7 @@ struct cx22700_config ...@@ -31,7 +31,7 @@ struct cx22700_config
u8 demod_address; u8 demod_address;
}; };
#if defined(CONFIG_DVB_CX22700) || defined(CONFIG_DVB_CX22700_MODULE) #if defined(CONFIG_DVB_CX22700) || (defined(CONFIG_DVB_CX22700_MODULE) && defined(MODULE))
extern struct dvb_frontend* cx22700_attach(const struct cx22700_config* config, extern struct dvb_frontend* cx22700_attach(const struct cx22700_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -41,7 +41,7 @@ struct cx22702_config ...@@ -41,7 +41,7 @@ struct cx22702_config
u8 output_mode; u8 output_mode;
}; };
#if defined(CONFIG_DVB_CX22702) || defined(CONFIG_DVB_CX22702_MODULE) #if defined(CONFIG_DVB_CX22702) || (defined(CONFIG_DVB_CX22702_MODULE) && defined(MODULE))
extern struct dvb_frontend* cx22702_attach(const struct cx22702_config* config, extern struct dvb_frontend* cx22702_attach(const struct cx22702_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -41,7 +41,7 @@ static inline int cx24110_pll_write(struct dvb_frontend *fe, u32 val) { ...@@ -41,7 +41,7 @@ static inline int cx24110_pll_write(struct dvb_frontend *fe, u32 val) {
return r; return r;
} }
#if defined(CONFIG_DVB_CX24110) || defined(CONFIG_DVB_CX24110_MODULE) #if defined(CONFIG_DVB_CX24110) || (defined(CONFIG_DVB_CX24110_MODULE) && defined(MODULE))
extern struct dvb_frontend* cx24110_attach(const struct cx24110_config* config, extern struct dvb_frontend* cx24110_attach(const struct cx24110_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -35,7 +35,7 @@ struct cx24123_config ...@@ -35,7 +35,7 @@ struct cx24123_config
int lnb_polarity; int lnb_polarity;
}; };
#if defined(CONFIG_DVB_CX24123) || defined(CONFIG_DVB_CX24123_MODULE) #if defined(CONFIG_DVB_CX24123) || (defined(CONFIG_DVB_CX24123_MODULE) && defined(MODULE))
extern struct dvb_frontend* cx24123_attach(const struct cx24123_config* config, extern struct dvb_frontend* cx24123_attach(const struct cx24123_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -41,7 +41,7 @@ struct dib_fe_xfer_ops ...@@ -41,7 +41,7 @@ struct dib_fe_xfer_ops
int (*tuner_pass_ctrl)(struct dvb_frontend *fe, int onoff, u8 pll_ctrl); int (*tuner_pass_ctrl)(struct dvb_frontend *fe, int onoff, u8 pll_ctrl);
}; };
#if defined(CONFIG_DVB_DIB3000MB) || defined(CONFIG_DVB_DIB3000MB_MODULE) #if defined(CONFIG_DVB_DIB3000MB) || (defined(CONFIG_DVB_DIB3000MB_MODULE) && defined(MODULE))
extern struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config, extern struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config,
struct i2c_adapter* i2c, struct dib_fe_xfer_ops *xfer_ops); struct i2c_adapter* i2c, struct dib_fe_xfer_ops *xfer_ops);
#else #else
......
...@@ -39,7 +39,7 @@ struct dib3000mc_config { ...@@ -39,7 +39,7 @@ struct dib3000mc_config {
#define DEFAULT_DIB3000MC_I2C_ADDRESS 16 #define DEFAULT_DIB3000MC_I2C_ADDRESS 16
#define DEFAULT_DIB3000P_I2C_ADDRESS 24 #define DEFAULT_DIB3000P_I2C_ADDRESS 24
#if defined(CONFIG_DVB_DIB3000MC) || defined(CONFIG_DVB_DIB3000MC_MODULE) #if defined(CONFIG_DVB_DIB3000MC) || (defined(CONFIG_DVB_DIB3000MC_MODULE) && defined(MODULE))
extern struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg); extern struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg);
#else #else
static inline struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg) static inline struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg)
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
#define ISL6421_ISEL1 0x20 #define ISL6421_ISEL1 0x20
#define ISL6421_DCL 0x40 #define ISL6421_DCL 0x40
#if defined(CONFIG_DVB_ISL6421) || defined(CONFIG_DVB_ISL6421_MODULE) #if defined(CONFIG_DVB_ISL6421) || (defined(CONFIG_DVB_ISL6421_MODULE) && defined(MODULE))
/* override_set and override_clear control which system register bits (above) to always set & clear */ /* override_set and override_clear control which system register bits (above) to always set & clear */
extern struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr, extern struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr,
u8 override_set, u8 override_clear); u8 override_set, u8 override_clear);
......
...@@ -31,7 +31,7 @@ struct l64781_config ...@@ -31,7 +31,7 @@ struct l64781_config
u8 demod_address; u8 demod_address;
}; };
#if defined(CONFIG_DVB_L64781) || defined(CONFIG_DVB_L64781_MODULE) #if defined(CONFIG_DVB_L64781) || (defined(CONFIG_DVB_L64781_MODULE) && defined(MODULE))
extern struct dvb_frontend* l64781_attach(const struct l64781_config* config, extern struct dvb_frontend* l64781_attach(const struct l64781_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -52,7 +52,7 @@ struct lgdt330x_config ...@@ -52,7 +52,7 @@ struct lgdt330x_config
int clock_polarity_flip; int clock_polarity_flip;
}; };
#if defined(CONFIG_DVB_LGDT330X) || defined(CONFIG_DVB_LGDT330X_MODULE) #if defined(CONFIG_DVB_LGDT330X) || (defined(CONFIG_DVB_LGDT330X_MODULE) && defined(MODULE))
extern struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config, extern struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
#include <linux/dvb/frontend.h> #include <linux/dvb/frontend.h>
#if defined(CONFIG_DVB_LNBP21) || defined(CONFIG_DVB_LNBP21_MODULE) #if defined(CONFIG_DVB_LNBP21) || (defined(CONFIG_DVB_LNBP21_MODULE) && defined(MODULE))
/* override_set and override_clear control which system register bits (above) to always set & clear */ /* override_set and override_clear control which system register bits (above) to always set & clear */
extern struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 override_set, u8 override_clear); extern struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 override_set, u8 override_clear);
#else #else
......
...@@ -34,7 +34,7 @@ struct mt312_config ...@@ -34,7 +34,7 @@ struct mt312_config
u8 demod_address; u8 demod_address;
}; };
#if defined(CONFIG_DVB_MT312) || defined(CONFIG_DVB_MT312_MODULE) #if defined(CONFIG_DVB_MT312) || (defined(CONFIG_DVB_MT312_MODULE) && defined(MODULE))
struct dvb_frontend* vp310_mt312_attach(const struct mt312_config* config, struct dvb_frontend* vp310_mt312_attach(const struct mt312_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -51,7 +51,7 @@ struct mt352_config ...@@ -51,7 +51,7 @@ struct mt352_config
int (*demod_init)(struct dvb_frontend* fe); int (*demod_init)(struct dvb_frontend* fe);
}; };
#if defined(CONFIG_DVB_MT352) || defined(CONFIG_DVB_MT352_MODULE) #if defined(CONFIG_DVB_MT352) || (defined(CONFIG_DVB_MT352_MODULE) && defined(MODULE))
extern struct dvb_frontend* mt352_attach(const struct mt352_config* config, extern struct dvb_frontend* mt352_attach(const struct mt352_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -45,7 +45,7 @@ struct nxt200x_config ...@@ -45,7 +45,7 @@ struct nxt200x_config
int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured);
}; };
#if defined(CONFIG_DVB_NXT200X) || defined(CONFIG_DVB_NXT200X_MODULE) #if defined(CONFIG_DVB_NXT200X) || (defined(CONFIG_DVB_NXT200X_MODULE) && defined(MODULE))
extern struct dvb_frontend* nxt200x_attach(const struct nxt200x_config* config, extern struct dvb_frontend* nxt200x_attach(const struct nxt200x_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -33,7 +33,7 @@ struct nxt6000_config ...@@ -33,7 +33,7 @@ struct nxt6000_config
u8 clock_inversion:1; u8 clock_inversion:1;
}; };
#if defined(CONFIG_DVB_NXT6000) || defined(CONFIG_DVB_NXT6000_MODULE) #if defined(CONFIG_DVB_NXT6000) || (defined(CONFIG_DVB_NXT6000_MODULE) && defined(MODULE))
extern struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config, extern struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -34,7 +34,7 @@ struct or51132_config ...@@ -34,7 +34,7 @@ struct or51132_config
int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured);
}; };
#if defined(CONFIG_DVB_OR51132) || defined(CONFIG_DVB_OR51132_MODULE) #if defined(CONFIG_DVB_OR51132) || (defined(CONFIG_DVB_OR51132_MODULE) && defined(MODULE))
extern struct dvb_frontend* or51132_attach(const struct or51132_config* config, extern struct dvb_frontend* or51132_attach(const struct or51132_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -37,7 +37,7 @@ struct or51211_config ...@@ -37,7 +37,7 @@ struct or51211_config
void (*sleep)(struct dvb_frontend * fe); void (*sleep)(struct dvb_frontend * fe);
}; };
#if defined(CONFIG_DVB_OR51211) || defined(CONFIG_DVB_OR51211_MODULE) #if defined(CONFIG_DVB_OR51211) || (defined(CONFIG_DVB_OR51211_MODULE) && defined(MODULE))
extern struct dvb_frontend* or51211_attach(const struct or51211_config* config, extern struct dvb_frontend* or51211_attach(const struct or51211_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -34,7 +34,7 @@ struct s5h1420_config ...@@ -34,7 +34,7 @@ struct s5h1420_config
u8 invert:1; u8 invert:1;
}; };
#if defined(CONFIG_DVB_S5H1420) || defined(CONFIG_DVB_S5H1420_MODULE) #if defined(CONFIG_DVB_S5H1420) || (defined(CONFIG_DVB_S5H1420_MODULE) && defined(MODULE))
extern struct dvb_frontend* s5h1420_attach(const struct s5h1420_config* config, extern struct dvb_frontend* s5h1420_attach(const struct s5h1420_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -35,7 +35,7 @@ struct sp8870_config ...@@ -35,7 +35,7 @@ struct sp8870_config
int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
}; };
#if defined(CONFIG_DVB_SP8870) || defined(CONFIG_DVB_SP8870_MODULE) #if defined(CONFIG_DVB_SP8870) || (defined(CONFIG_DVB_SP8870_MODULE) && defined(MODULE))
extern struct dvb_frontend* sp8870_attach(const struct sp8870_config* config, extern struct dvb_frontend* sp8870_attach(const struct sp8870_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -17,7 +17,7 @@ struct sp887x_config ...@@ -17,7 +17,7 @@ struct sp887x_config
int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
}; };
#if defined(CONFIG_DVB_SP887X) || defined(CONFIG_DVB_SP887X_MODULE) #if defined(CONFIG_DVB_SP887X) || (defined(CONFIG_DVB_SP887X_MODULE) && defined(MODULE))
extern struct dvb_frontend* sp887x_attach(const struct sp887x_config* config, extern struct dvb_frontend* sp887x_attach(const struct sp887x_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -42,7 +42,7 @@ struct stv0297_config ...@@ -42,7 +42,7 @@ struct stv0297_config
u8 stop_during_read:1; u8 stop_during_read:1;
}; };
#if defined(CONFIG_DVB_STV0297) || defined(CONFIG_DVB_STV0297_MODULE) #if defined(CONFIG_DVB_STV0297) || (defined(CONFIG_DVB_STV0297_MODULE) && defined(MODULE))
extern struct dvb_frontend* stv0297_attach(const struct stv0297_config* config, extern struct dvb_frontend* stv0297_attach(const struct stv0297_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -89,7 +89,7 @@ struct stv0299_config ...@@ -89,7 +89,7 @@ struct stv0299_config
int (*set_symbol_rate)(struct dvb_frontend* fe, u32 srate, u32 ratio); int (*set_symbol_rate)(struct dvb_frontend* fe, u32 srate, u32 ratio);
}; };
#if defined(CONFIG_DVB_STV0299) || defined(CONFIG_DVB_STV0299_MODULE) #if defined(CONFIG_DVB_STV0299) || (defined(CONFIG_DVB_STV0299_MODULE) && defined(MODULE))
extern struct dvb_frontend* stv0299_attach(const struct stv0299_config* config, extern struct dvb_frontend* stv0299_attach(const struct stv0299_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -32,7 +32,7 @@ struct tda10021_config ...@@ -32,7 +32,7 @@ struct tda10021_config
u8 demod_address; u8 demod_address;
}; };
#if defined(CONFIG_DVB_TDA10021) || defined(CONFIG_DVB_TDA10021_MODULE) #if defined(CONFIG_DVB_TDA10021) || (defined(CONFIG_DVB_TDA10021_MODULE) && defined(MODULE))
extern struct dvb_frontend* tda10021_attach(const struct tda10021_config* config, extern struct dvb_frontend* tda10021_attach(const struct tda10021_config* config,
struct i2c_adapter* i2c, u8 pwm); struct i2c_adapter* i2c, u8 pwm);
#else #else
......
...@@ -71,7 +71,7 @@ struct tda1004x_config ...@@ -71,7 +71,7 @@ struct tda1004x_config
int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name);
}; };
#if defined(CONFIG_DVB_TDA1004X) || defined(CONFIG_DVB_TDA1004X_MODULE) #if defined(CONFIG_DVB_TDA1004X) || (defined(CONFIG_DVB_TDA1004X_MODULE) && defined(MODULE))
extern struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config, extern struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
......
...@@ -35,7 +35,7 @@ struct tda10086_config ...@@ -35,7 +35,7 @@ struct tda10086_config
u8 invert; u8 invert;
}; };
#if defined(CONFIG_DVB_TDA10086) || defined(CONFIG_DVB_TDA10086_MODULE) #if defined(CONFIG_DVB_TDA10086) || (defined(CONFIG_DVB_TDA10086_MODULE) && defined(MODULE))
extern struct dvb_frontend* tda10086_attach(const struct tda10086_config* config, extern struct dvb_frontend* tda10086_attach(const struct tda10086_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -35,7 +35,7 @@ struct tda8083_config ...@@ -35,7 +35,7 @@ struct tda8083_config
u8 demod_address; u8 demod_address;
}; };
#if defined(CONFIG_DVB_TDA8083) || defined(CONFIG_DVB_TDA8083_MODULE) #if defined(CONFIG_DVB_TDA8083) || (defined(CONFIG_DVB_TDA8083_MODULE) && defined(MODULE))
extern struct dvb_frontend* tda8083_attach(const struct tda8083_config* config, extern struct dvb_frontend* tda8083_attach(const struct tda8083_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
* @param has_loopthrough Set to 1 if the card has a loopthrough RF connector. * @param has_loopthrough Set to 1 if the card has a loopthrough RF connector.
* @return FE pointer on success, NULL on failure. * @return FE pointer on success, NULL on failure.
*/ */
#if defined(CONFIG_DVB_TDA826X) || defined(CONFIG_DVB_TDA826X_MODULE) #if defined(CONFIG_DVB_TDA826X) || (defined(CONFIG_DVB_TDA826X_MODULE) && defined(MODULE))
extern struct dvb_frontend* tda826x_attach(struct dvb_frontend *fe, int addr, extern struct dvb_frontend* tda826x_attach(struct dvb_frontend *fe, int addr,
struct i2c_adapter *i2c, struct i2c_adapter *i2c,
int has_loopthrough); int has_loopthrough);
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#include <linux/i2c.h> #include <linux/i2c.h>
#include "dvb_frontend.h" #include "dvb_frontend.h"
#if defined(CONFIG_DVB_TUA6100) || defined(CONFIG_DVB_TUA6100_MODULE) #if defined(CONFIG_DVB_TUA6100) || (defined(CONFIG_DVB_TUA6100_MODULE) && defined(MODULE))
extern struct dvb_frontend *tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c); extern struct dvb_frontend *tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c);
#else #else
static inline struct dvb_frontend* tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c) static inline struct dvb_frontend* tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c)
......
...@@ -41,7 +41,7 @@ struct ves1820_config ...@@ -41,7 +41,7 @@ struct ves1820_config
u8 selagc:1; u8 selagc:1;
}; };
#if defined(CONFIG_DVB_VES1820) || defined(CONFIG_DVB_VES1820_MODULE) #if defined(CONFIG_DVB_VES1820) || (defined(CONFIG_DVB_VES1820_MODULE) && defined(MODULE))
extern struct dvb_frontend* ves1820_attach(const struct ves1820_config* config, extern struct dvb_frontend* ves1820_attach(const struct ves1820_config* config,
struct i2c_adapter* i2c, u8 pwm); struct i2c_adapter* i2c, u8 pwm);
#else #else
......
...@@ -40,7 +40,7 @@ struct ves1x93_config ...@@ -40,7 +40,7 @@ struct ves1x93_config
u8 invert_pwm:1; u8 invert_pwm:1;
}; };
#if defined(CONFIG_DVB_VES1X93) || defined(CONFIG_DVB_VES1X93_MODULE) #if defined(CONFIG_DVB_VES1X93) || (defined(CONFIG_DVB_VES1X93_MODULE) && defined(MODULE))
extern struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config, extern struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config,
struct i2c_adapter* i2c); struct i2c_adapter* i2c);
#else #else
......
...@@ -36,7 +36,7 @@ struct zl10353_config ...@@ -36,7 +36,7 @@ struct zl10353_config
int parallel_ts; int parallel_ts;
}; };
#if defined(CONFIG_DVB_ZL10353) || defined(CONFIG_DVB_ZL10353_MODULE) #if defined(CONFIG_DVB_ZL10353) || (defined(CONFIG_DVB_ZL10353_MODULE) && defined(MODULE))
extern struct dvb_frontend* zl10353_attach(const struct zl10353_config *config, extern struct dvb_frontend* zl10353_attach(const struct zl10353_config *config,
struct i2c_adapter *i2c); struct i2c_adapter *i2c);
#else #else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment