summaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2015-04-16 21:55:31 -0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-06-10 10:09:20 -0400
commit76b91be3d360af85f4ad2a27a54268726bee7679 (patch)
tree3d22fb95488dc5e4278eded1c5621e58878ea78d /drivers/media
parent478932b16052f5ded74685d096ae920cd17d6424 (diff)
[media] em28xx: PCTV 461e use I2C client for demod and SEC
Use I2C client binding for demod and SEC. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/usb/em28xx/em28xx-dvb.c136
1 files changed, 83 insertions, 53 deletions
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c
index be0abca04fb4..a38248360833 100644
--- a/drivers/media/usb/em28xx/em28xx-dvb.c
+++ b/drivers/media/usb/em28xx/em28xx-dvb.c
@@ -1521,64 +1521,94 @@ static int em28xx_dvb_init(struct em28xx *dev)
1521 } 1521 }
1522 } 1522 }
1523 break; 1523 break;
1524 case EM28178_BOARD_PCTV_461E: 1524 case EM28178_BOARD_PCTV_461E: {
1525 { 1525 struct i2c_client *client;
1526 /* demod I2C adapter */ 1526 struct i2c_adapter *i2c_adapter;
1527 struct i2c_adapter *i2c_adapter; 1527 struct i2c_board_info board_info;
1528 struct i2c_client *client; 1528 struct m88ds3103_platform_data m88ds3103_pdata = {};
1529 struct i2c_board_info info; 1529 struct ts2020_config ts2020_config = {};
1530 struct ts2020_config ts2020_config = { 1530 struct a8293_platform_data a8293_pdata = {};
1531 };
1532 memset(&info, 0, sizeof(struct i2c_board_info));
1533
1534 /* attach demod */
1535 dvb->fe[0] = dvb_attach(m88ds3103_attach,
1536 &pctv_461e_m88ds3103_config,
1537 &dev->i2c_adap[dev->def_i2c_bus],
1538 &i2c_adapter);
1539 if (dvb->fe[0] == NULL) {
1540 result = -ENODEV;
1541 goto out_free;
1542 }
1543
1544 /* attach tuner */
1545 ts2020_config.fe = dvb->fe[0];
1546 strlcpy(info.type, "ts2022", I2C_NAME_SIZE);
1547 info.addr = 0x60;
1548 info.platform_data = &ts2020_config;
1549 request_module("ts2020");
1550 client = i2c_new_device(i2c_adapter, &info);
1551 if (client == NULL || client->dev.driver == NULL) {
1552 dvb_frontend_detach(dvb->fe[0]);
1553 result = -ENODEV;
1554 goto out_free;
1555 }
1556
1557 if (!try_module_get(client->dev.driver->owner)) {
1558 i2c_unregister_device(client);
1559 dvb_frontend_detach(dvb->fe[0]);
1560 result = -ENODEV;
1561 goto out_free;
1562 }
1563 1531
1564 /* delegate signal strength measurement to tuner */ 1532 /* attach demod */
1565 dvb->fe[0]->ops.read_signal_strength = 1533 m88ds3103_pdata.clk = 27000000;
1566 dvb->fe[0]->ops.tuner_ops.get_rf_strength; 1534 m88ds3103_pdata.i2c_wr_max = 33;
1535 m88ds3103_pdata.ts_mode = M88DS3103_TS_PARALLEL;
1536 m88ds3103_pdata.ts_clk = 16000;
1537 m88ds3103_pdata.ts_clk_pol = 1;
1538 m88ds3103_pdata.agc = 0x99;
1539 memset(&board_info, 0, sizeof(board_info));
1540 strlcpy(board_info.type, "m88ds3103", I2C_NAME_SIZE);
1541 board_info.addr = 0x68;
1542 board_info.platform_data = &m88ds3103_pdata;
1543 request_module("m88ds3103");
1544 client = i2c_new_device(&dev->i2c_adap[dev->def_i2c_bus], &board_info);
1545 if (client == NULL || client->dev.driver == NULL) {
1546 result = -ENODEV;
1547 goto out_free;
1548 }
1549 if (!try_module_get(client->dev.driver->owner)) {
1550 i2c_unregister_device(client);
1551 result = -ENODEV;
1552 goto out_free;
1553 }
1554 dvb->fe[0] = m88ds3103_pdata.get_dvb_frontend(client);
1555 i2c_adapter = m88ds3103_pdata.get_i2c_adapter(client);
1556 dvb->i2c_client_demod = client;
1567 1557
1568 /* attach SEC */ 1558 /* attach tuner */
1569 if (!dvb_attach(a8293_attach, dvb->fe[0], 1559 ts2020_config.fe = dvb->fe[0];
1570 &dev->i2c_adap[dev->def_i2c_bus], 1560 memset(&board_info, 0, sizeof(board_info));
1571 &em28xx_a8293_config)) { 1561 strlcpy(board_info.type, "ts2022", I2C_NAME_SIZE);
1572 module_put(client->dev.driver->owner); 1562 board_info.addr = 0x60;
1573 i2c_unregister_device(client); 1563 board_info.platform_data = &ts2020_config;
1574 dvb_frontend_detach(dvb->fe[0]); 1564 request_module("ts2020");
1575 result = -ENODEV; 1565 client = i2c_new_device(i2c_adapter, &board_info);
1576 goto out_free; 1566 if (client == NULL || client->dev.driver == NULL) {
1577 } 1567 module_put(dvb->i2c_client_demod->dev.driver->owner);
1568 i2c_unregister_device(dvb->i2c_client_demod);
1569 result = -ENODEV;
1570 goto out_free;
1571 }
1572 if (!try_module_get(client->dev.driver->owner)) {
1573 i2c_unregister_device(client);
1574 module_put(dvb->i2c_client_demod->dev.driver->owner);
1575 i2c_unregister_device(dvb->i2c_client_demod);
1576 result = -ENODEV;
1577 goto out_free;
1578 }
1579 dvb->i2c_client_tuner = client;
1580 /* delegate signal strength measurement to tuner */
1581 dvb->fe[0]->ops.read_signal_strength =
1582 dvb->fe[0]->ops.tuner_ops.get_rf_strength;
1578 1583
1579 dvb->i2c_client_tuner = client; 1584 /* attach SEC */
1585 a8293_pdata.dvb_frontend = dvb->fe[0];
1586 memset(&board_info, 0, sizeof(board_info));
1587 strlcpy(board_info.type, "a8293", I2C_NAME_SIZE);
1588 board_info.addr = 0x08;
1589 board_info.platform_data = &a8293_pdata;
1590 request_module("a8293");
1591 client = i2c_new_device(&dev->i2c_adap[dev->def_i2c_bus], &board_info);
1592 if (client == NULL || client->dev.driver == NULL) {
1593 module_put(dvb->i2c_client_tuner->dev.driver->owner);
1594 i2c_unregister_device(dvb->i2c_client_tuner);
1595 module_put(dvb->i2c_client_demod->dev.driver->owner);
1596 i2c_unregister_device(dvb->i2c_client_demod);
1597 result = -ENODEV;
1598 goto out_free;
1599 }
1600 if (!try_module_get(client->dev.driver->owner)) {
1601 i2c_unregister_device(client);
1602 module_put(dvb->i2c_client_tuner->dev.driver->owner);
1603 i2c_unregister_device(dvb->i2c_client_tuner);
1604 module_put(dvb->i2c_client_demod->dev.driver->owner);
1605 i2c_unregister_device(dvb->i2c_client_demod);
1606 result = -ENODEV;
1607 goto out_free;
1580 } 1608 }
1609 dvb->i2c_client_sec = client;
1581 break; 1610 break;
1611 }
1582 case EM28178_BOARD_PCTV_292E: 1612 case EM28178_BOARD_PCTV_292E:
1583 { 1613 {
1584 struct i2c_adapter *adapter; 1614 struct i2c_adapter *adapter;