Re: [PATCH 3/3] cxusb: Geniatech T230 support.
Reviewed-by: Olli Salonen olli.salo...@iki.fi On Fri, 14 Nov 2014, CrazyCat wrote: Geniatech Mygica T230 DVB-T/T2/C USB stick support. Signed-off-by: Evgeny Plehov evgenyple...@ukr.net --- drivers/media/dvb-core/dvb-usb-ids.h | 1 + drivers/media/usb/dvb-usb/cxusb.c| 127 +++ 2 files changed, 128 insertions(+) diff --git a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h index e07a84e..80ab8d0 100644 --- a/drivers/media/dvb-core/dvb-usb-ids.h +++ b/drivers/media/dvb-core/dvb-usb-ids.h @@ -356,6 +356,7 @@ #define USB_PID_MSI_DIGI_VOX_MINI_III 0x8807 #define USB_PID_SONY_PLAYTV 0x0003 #define USB_PID_MYGICA_D689 0xd811 +#define USB_PID_MYGICA_T2300xc688 #define USB_PID_ELGATO_EYETV_DIVERSITY 0x0011 #define USB_PID_ELGATO_EYETV_DTT0x0021 #define USB_PID_ELGATO_EYETV_DTT_2 0x003f diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c index b46f84d..7346698 100644 --- a/drivers/media/usb/dvb-usb/cxusb.c +++ b/drivers/media/usb/dvb-usb/cxusb.c @@ -1408,6 +1408,76 @@ static int cxusb_mygica_d689_frontend_attach(struct dvb_usb_adapter *adap) return 0; } +static int cxusb_mygica_t230_frontend_attach(struct dvb_usb_adapter *adap) +{ + struct dvb_usb_device *d = adap-dev; + struct cxusb_state *st = d-priv; + struct i2c_adapter *adapter; + struct i2c_client *client_demod; + struct i2c_client *client_tuner; + struct i2c_board_info info; + struct si2168_config si2168_config; + struct si2157_config si2157_config; + + /* Select required USB configuration */ + if (usb_set_interface(d-udev, 0, 0) 0) + err(set interface failed); + + /* Unblock all USB pipes */ + usb_clear_halt(d-udev, + usb_sndbulkpipe(d-udev, d-props.generic_bulk_ctrl_endpoint)); + usb_clear_halt(d-udev, + usb_rcvbulkpipe(d-udev, d-props.generic_bulk_ctrl_endpoint)); + usb_clear_halt(d-udev, + usb_rcvbulkpipe(d-udev, d-props.adapter[0].fe[0].stream.endpoint)); + + /* attach frontend */ + si2168_config.i2c_adapter = adapter; + si2168_config.fe = adap-fe_adap[0].fe; + si2168_config.ts_mode = SI2168_TS_PARALLEL; + si2168_config.ts_clock_inv = 1; + memset(info, 0, sizeof(struct i2c_board_info)); + strlcpy(info.type, si2168, I2C_NAME_SIZE); + info.addr = 0x64; + info.platform_data = si2168_config; + request_module(info.type); + client_demod = i2c_new_device(d-i2c_adap, info); + if (client_demod == NULL || client_demod-dev.driver == NULL) + return -ENODEV; + + if (!try_module_get(client_demod-dev.driver-owner)) { + i2c_unregister_device(client_demod); + return -ENODEV; + } + + st-i2c_client_demod = client_demod; + + /* attach tuner */ + memset(si2157_config, 0, sizeof(si2157_config)); + si2157_config.fe = adap-fe_adap[0].fe; + memset(info, 0, sizeof(struct i2c_board_info)); + strlcpy(info.type, si2157, I2C_NAME_SIZE); + info.addr = 0x60; + info.platform_data = si2157_config; + request_module(info.type); + client_tuner = i2c_new_device(adapter, info); + if (client_tuner == NULL || client_tuner-dev.driver == NULL) { + module_put(client_demod-dev.driver-owner); + i2c_unregister_device(client_demod); + return -ENODEV; + } + if (!try_module_get(client_tuner-dev.driver-owner)) { + i2c_unregister_device(client_tuner); + module_put(client_demod-dev.driver-owner); + i2c_unregister_device(client_demod); + return -ENODEV; + } + + st-i2c_client_tuner = client_tuner; + + return 0; +} + static int cxusb_tt_ct2_4400_attach(struct dvb_usb_adapter *adap) { struct dvb_usb_device *d = adap-dev; @@ -1609,6 +1679,7 @@ static struct dvb_usb_device_properties cxusb_bluebird_nano2_needsfirmware_prope static struct dvb_usb_device_properties cxusb_aver_a868r_properties; static struct dvb_usb_device_properties cxusb_d680_dmb_properties; static struct dvb_usb_device_properties cxusb_mygica_d689_properties; +static struct dvb_usb_device_properties cxusb_mygica_t230_properties; static struct dvb_usb_device_properties cxusb_tt_ct2_4400_properties; static int cxusb_probe(struct usb_interface *intf, @@ -1640,6 +1711,8 @@ static int cxusb_probe(struct usb_interface *intf, THIS_MODULE, NULL, adapter_nr) || 0 == dvb_usb_device_init(intf, cxusb_mygica_d689_properties, THIS_MODULE, NULL, adapter_nr) || + 0 == dvb_usb_device_init(intf, cxusb_mygica_t230_properties, +
[PATCH 3/3] cxusb: Geniatech T230 support.
Geniatech Mygica T230 DVB-T/T2/C USB stick support. Signed-off-by: Evgeny Plehov evgenyple...@ukr.net --- drivers/media/dvb-core/dvb-usb-ids.h | 1 + drivers/media/usb/dvb-usb/cxusb.c| 127 +++ 2 files changed, 128 insertions(+) diff --git a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h index e07a84e..80ab8d0 100644 --- a/drivers/media/dvb-core/dvb-usb-ids.h +++ b/drivers/media/dvb-core/dvb-usb-ids.h @@ -356,6 +356,7 @@ #define USB_PID_MSI_DIGI_VOX_MINI_III 0x8807 #define USB_PID_SONY_PLAYTV0x0003 #define USB_PID_MYGICA_D6890xd811 +#define USB_PID_MYGICA_T2300xc688 #define USB_PID_ELGATO_EYETV_DIVERSITY 0x0011 #define USB_PID_ELGATO_EYETV_DTT 0x0021 #define USB_PID_ELGATO_EYETV_DTT_2 0x003f diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c index b46f84d..7346698 100644 --- a/drivers/media/usb/dvb-usb/cxusb.c +++ b/drivers/media/usb/dvb-usb/cxusb.c @@ -1408,6 +1408,76 @@ static int cxusb_mygica_d689_frontend_attach(struct dvb_usb_adapter *adap) return 0; } +static int cxusb_mygica_t230_frontend_attach(struct dvb_usb_adapter *adap) +{ + struct dvb_usb_device *d = adap-dev; + struct cxusb_state *st = d-priv; + struct i2c_adapter *adapter; + struct i2c_client *client_demod; + struct i2c_client *client_tuner; + struct i2c_board_info info; + struct si2168_config si2168_config; + struct si2157_config si2157_config; + + /* Select required USB configuration */ + if (usb_set_interface(d-udev, 0, 0) 0) + err(set interface failed); + + /* Unblock all USB pipes */ + usb_clear_halt(d-udev, + usb_sndbulkpipe(d-udev, d-props.generic_bulk_ctrl_endpoint)); + usb_clear_halt(d-udev, + usb_rcvbulkpipe(d-udev, d-props.generic_bulk_ctrl_endpoint)); + usb_clear_halt(d-udev, + usb_rcvbulkpipe(d-udev, d-props.adapter[0].fe[0].stream.endpoint)); + + /* attach frontend */ + si2168_config.i2c_adapter = adapter; + si2168_config.fe = adap-fe_adap[0].fe; + si2168_config.ts_mode = SI2168_TS_PARALLEL; + si2168_config.ts_clock_inv = 1; + memset(info, 0, sizeof(struct i2c_board_info)); + strlcpy(info.type, si2168, I2C_NAME_SIZE); + info.addr = 0x64; + info.platform_data = si2168_config; + request_module(info.type); + client_demod = i2c_new_device(d-i2c_adap, info); + if (client_demod == NULL || client_demod-dev.driver == NULL) + return -ENODEV; + + if (!try_module_get(client_demod-dev.driver-owner)) { + i2c_unregister_device(client_demod); + return -ENODEV; + } + + st-i2c_client_demod = client_demod; + + /* attach tuner */ + memset(si2157_config, 0, sizeof(si2157_config)); + si2157_config.fe = adap-fe_adap[0].fe; + memset(info, 0, sizeof(struct i2c_board_info)); + strlcpy(info.type, si2157, I2C_NAME_SIZE); + info.addr = 0x60; + info.platform_data = si2157_config; + request_module(info.type); + client_tuner = i2c_new_device(adapter, info); + if (client_tuner == NULL || client_tuner-dev.driver == NULL) { + module_put(client_demod-dev.driver-owner); + i2c_unregister_device(client_demod); + return -ENODEV; + } + if (!try_module_get(client_tuner-dev.driver-owner)) { + i2c_unregister_device(client_tuner); + module_put(client_demod-dev.driver-owner); + i2c_unregister_device(client_demod); + return -ENODEV; + } + + st-i2c_client_tuner = client_tuner; + + return 0; +} + static int cxusb_tt_ct2_4400_attach(struct dvb_usb_adapter *adap) { struct dvb_usb_device *d = adap-dev; @@ -1609,6 +1679,7 @@ static struct dvb_usb_device_properties cxusb_bluebird_nano2_needsfirmware_prope static struct dvb_usb_device_properties cxusb_aver_a868r_properties; static struct dvb_usb_device_properties cxusb_d680_dmb_properties; static struct dvb_usb_device_properties cxusb_mygica_d689_properties; +static struct dvb_usb_device_properties cxusb_mygica_t230_properties; static struct dvb_usb_device_properties cxusb_tt_ct2_4400_properties; static int cxusb_probe(struct usb_interface *intf, @@ -1640,6 +1711,8 @@ static int cxusb_probe(struct usb_interface *intf, THIS_MODULE, NULL, adapter_nr) || 0 == dvb_usb_device_init(intf, cxusb_mygica_d689_properties, THIS_MODULE, NULL, adapter_nr) || + 0 == dvb_usb_device_init(intf, cxusb_mygica_t230_properties, +THIS_MODULE, NULL, adapter_nr) ||