diff options
author | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2014-11-26 14:07:41 +0100 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2014-12-04 16:52:45 +0100 |
commit | a2ea5561173f5c2c14e6050b261d225acd99fa08 (patch) | |
tree | cdff8c08c5d0a7c5b321fd3427a18c271e5aefed /drivers/media/dvb-frontends/stv090x.h | |
parent | [media] dvb-usb-dvbsky: add TechnoTrend CT2-4400 and CT2-4650 devices support (diff) | |
download | linux-a2ea5561173f5c2c14e6050b261d225acd99fa08.tar.xz linux-a2ea5561173f5c2c14e6050b261d225acd99fa08.zip |
[media] stv090x: remove export symbol for stv090x_set_gpio()
Drivers that use dvb_attach can have just one exported symbol,
or they will cause compilation breakages depending on the
selected frontends.
As Jim reported:
drivers/built-in.o: In function `technisat_usb2_set_voltage':
technisat-usb2.c:(.text+0x3b4919): undefined reference to `stv090x_set_gpio'
make: *** [vmlinux] Error 1
That happens because, on his configuration, the configuration
is:
CONFIG_DVB_USB=y
CONFIG_DVB_STV090x=m
Luis proposed ar way to fix, but that would just force the
STV090x to be selected, even if one wants to use a device
with a different frontend.
Instead, let's do the right thing: move set_gpio to the
configuration structure and fill it during dvb_attach().
This way, the driver can still call it, and dvb_attach()
will load stv090x module only if the device really needs it.
Reported by: Jim Davis <jim.epost@gmail.com>
Cc: Luis Rodriguez <mcgrof@suse.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/dvb-frontends/stv090x.h')
-rw-r--r-- | drivers/media/dvb-frontends/stv090x.h | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/drivers/media/dvb-frontends/stv090x.h b/drivers/media/dvb-frontends/stv090x.h index 0bd6adcfee8a..f7f452f435f2 100644 --- a/drivers/media/dvb-frontends/stv090x.h +++ b/drivers/media/dvb-frontends/stv090x.h @@ -101,18 +101,18 @@ struct stv090x_config { int (*tuner_set_refclk) (struct dvb_frontend *fe, u32 refclk); int (*tuner_get_status) (struct dvb_frontend *fe, u32 *status); void (*tuner_i2c_lock) (struct dvb_frontend *fe, int lock); + + /* dir = 0 -> output, dir = 1 -> input/open-drain */ + int (*set_gpio)(struct dvb_frontend *fe, u8 gpio, u8 dir, u8 value, + u8 xor_value); }; #if IS_ENABLED(CONFIG_DVB_STV090x) -extern struct dvb_frontend *stv090x_attach(const struct stv090x_config *config, +extern struct dvb_frontend *stv090x_attach(struct stv090x_config *config, struct i2c_adapter *i2c, enum stv090x_demodulator demod); -/* dir = 0 -> output, dir = 1 -> input/open-drain */ -extern int stv090x_set_gpio(struct dvb_frontend *fe, u8 gpio, - u8 dir, u8 value, u8 xor_value); - #else static inline struct dvb_frontend *stv090x_attach(const struct stv090x_config *config, @@ -123,12 +123,6 @@ static inline struct dvb_frontend *stv090x_attach(const struct stv090x_config *c return NULL; } -static inline int stv090x_set_gpio(struct dvb_frontend *fe, u8 gpio, - u8 opd, u8 value, u8 xor_value) -{ - printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); - return -ENODEV; -} #endif /* CONFIG_DVB_STV090x */ #endif /* __STV090x_H */ |