diff options
author | Antti Palosaari <crope@iki.fi> | 2013-12-02 22:38:41 +0100 |
---|---|---|
committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2013-12-19 12:24:05 +0100 |
commit | eafa2ad6e46c523da7d6970306167b24c861504f (patch) | |
tree | 6b96fa6cb17c189ccc67cdc9480755e74665e1ed /drivers/media/usb/em28xx/em28xx-dvb.c | |
parent | [media] m88ds3103: I/O optimize inittab write (diff) | |
download | linux-eafa2ad6e46c523da7d6970306167b24c861504f.tar.xz linux-eafa2ad6e46c523da7d6970306167b24c861504f.zip |
[media] m88ts2022: convert to Kernel I2C driver model
Convert driver from proprietary DVB driver model to standard I2C
driver model.
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/usb/em28xx/em28xx-dvb.c')
-rw-r--r-- | drivers/media/usb/em28xx/em28xx-dvb.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c index 4f8f687ea99a..ddc0e609065d 100644 --- a/drivers/media/usb/em28xx/em28xx-dvb.c +++ b/drivers/media/usb/em28xx/em28xx-dvb.c @@ -89,6 +89,7 @@ struct em28xx_dvb { struct semaphore pll_mutex; bool dont_attach_fe1; int lna_gpio; + struct i2c_client *i2c_client_tuner; }; @@ -819,11 +820,6 @@ static const struct m88ds3103_config pctv_461e_m88ds3103_config = { .agc = 0x99, }; -static const struct m88ts2022_config em28xx_m88ts2022_config = { - .i2c_addr = 0x60, - .clock = 27000000, -}; - /* ------------------------------------------------------------------ */ static int em28xx_attach_xc3028(u8 addr, struct em28xx *dev) @@ -1349,6 +1345,11 @@ static int em28xx_dvb_init(struct em28xx *dev) { /* demod I2C adapter */ struct i2c_adapter *i2c_adapter; + struct i2c_board_info info; + struct m88ts2022_config m88ts2022_config = { + .clock = 27000000, + }; + memset(&info, 0, sizeof(struct i2c_board_info)); /* attach demod */ dvb->fe[0] = dvb_attach(m88ds3103_attach, @@ -1361,13 +1362,12 @@ static int em28xx_dvb_init(struct em28xx *dev) } /* attach tuner */ - if (!dvb_attach(m88ts2022_attach, dvb->fe[0], - i2c_adapter, - &em28xx_m88ts2022_config)) { - dvb_frontend_detach(dvb->fe[0]); - result = -ENODEV; - goto out_free; - } + m88ts2022_config.fe = dvb->fe[0]; + strlcpy(info.type, "m88ts2022", I2C_NAME_SIZE); + info.addr = 0x60; + info.platform_data = &m88ts2022_config; + request_module("m88ts2022"); + dvb->i2c_client_tuner = i2c_new_device(i2c_adapter, &info); /* delegate signal strength measurement to tuner */ dvb->fe[0]->ops.read_signal_strength = @@ -1445,6 +1445,7 @@ static int em28xx_dvb_fini(struct em28xx *dev) prevent_sleep(&dvb->fe[1]->ops); } + i2c_release_client(dvb->i2c_client_tuner); em28xx_unregister_dvb(dvb); kfree(dvb); dev->dvb = NULL; |