diff options
| -rw-r--r-- | drivers/media/dvb/dvb-usb/au6610.c | 29 | ||||
| -rw-r--r-- | drivers/media/dvb/dvb-usb/gl861.c | 25 |
2 files changed, 49 insertions, 5 deletions
diff --git a/drivers/media/dvb/dvb-usb/au6610.c b/drivers/media/dvb/dvb-usb/au6610.c index 1796a7d63aa1..1c0160dfc2af 100644 --- a/drivers/media/dvb/dvb-usb/au6610.c +++ b/drivers/media/dvb/dvb-usb/au6610.c | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* DVB USB compliant linux driver for Sigmatek DVB-110 DVB-T USB2.0 receiver | 1 | /* DVB USB compliant linux driver for Sigmatek DVB-110 DVB-T USB2.0 receiver |
| 2 | * | 2 | * |
| 3 | * Copyright (C) 2006 Antti Palosaari (crope@iki.fi) | 3 | * Copyright (C) 2006 Antti Palosaari <crope@iki.fi> |
| 4 | * | 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
| 6 | * under the terms of the GNU General Public License as published by the Free | 6 | * under the terms of the GNU General Public License as published by the Free |
| @@ -19,7 +19,6 @@ static int dvb_usb_au6610_debug; | |||
| 19 | module_param_named(debug, dvb_usb_au6610_debug, int, 0644); | 19 | module_param_named(debug, dvb_usb_au6610_debug, int, 0644); |
| 20 | MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS); | 20 | MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS); |
| 21 | 21 | ||
| 22 | |||
| 23 | static int au6610_usb_msg(struct dvb_usb_device *d, u8 operation, u8 addr, | 22 | static int au6610_usb_msg(struct dvb_usb_device *d, u8 operation, u8 addr, |
| 24 | u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) | 23 | u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) |
| 25 | { | 24 | { |
| @@ -127,7 +126,6 @@ static struct zl10353_config au6610_zl10353_config = { | |||
| 127 | .parallel_ts = 1, | 126 | .parallel_ts = 1, |
| 128 | }; | 127 | }; |
| 129 | 128 | ||
| 130 | |||
| 131 | static int au6610_zl10353_frontend_attach(struct dvb_usb_adapter *adap) | 129 | static int au6610_zl10353_frontend_attach(struct dvb_usb_adapter *adap) |
| 132 | { | 130 | { |
| 133 | if ((adap->fe = dvb_attach(zl10353_attach, &au6610_zl10353_config, | 131 | if ((adap->fe = dvb_attach(zl10353_attach, &au6610_zl10353_config, |
| @@ -138,6 +136,29 @@ static int au6610_zl10353_frontend_attach(struct dvb_usb_adapter *adap) | |||
| 138 | return -EIO; | 136 | return -EIO; |
| 139 | } | 137 | } |
| 140 | 138 | ||
| 139 | static struct qt1010_config au6610_qt1010_config = { | ||
| 140 | .i2c_address = 0xc4 | ||
| 141 | }; | ||
| 142 | |||
| 143 | static int au6610_qt1010_tuner_attach(struct dvb_usb_adapter *adap) | ||
| 144 | { | ||
| 145 | /* TODO FIXME; probably I2C gate. | ||
| 146 | QT1010 tuner does not respond before we write 0x1a to ZL10353 demodulator | ||
| 147 | register 0x62. This ought to be done somewhere in demodulator initialization. | ||
| 148 | This solution is temporary hack. */ | ||
| 149 | u8 buf[2] = { 0x62, 0x1a }; | ||
| 150 | struct i2c_msg msg = { | ||
| 151 | .addr = au6610_zl10353_config.demod_address, .flags = 0, .buf = buf, .len = 2 | ||
| 152 | }; | ||
| 153 | if (i2c_transfer(&adap->dev->i2c_adap, &msg, 1) != 1) { | ||
| 154 | printk(KERN_WARNING "au6610 tuner attach failed\n"); | ||
| 155 | return -EREMOTEIO; | ||
| 156 | } | ||
| 157 | return dvb_attach(qt1010_attach, | ||
| 158 | adap->fe, &adap->dev->i2c_adap, | ||
| 159 | &au6610_qt1010_config) == NULL ? -ENODEV : 0; | ||
| 160 | } | ||
| 161 | |||
| 141 | /* DVB USB Driver stuff */ | 162 | /* DVB USB Driver stuff */ |
| 142 | static struct dvb_usb_device_properties au6610_properties; | 163 | static struct dvb_usb_device_properties au6610_properties; |
| 143 | 164 | ||
| @@ -180,7 +201,7 @@ static struct dvb_usb_device_properties au6610_properties = { | |||
| 180 | .adapter = { | 201 | .adapter = { |
| 181 | { | 202 | { |
| 182 | .frontend_attach = au6610_zl10353_frontend_attach, | 203 | .frontend_attach = au6610_zl10353_frontend_attach, |
| 183 | .tuner_attach = qt1010_tuner_attach, | 204 | .tuner_attach = au6610_qt1010_tuner_attach, |
| 184 | 205 | ||
| 185 | .stream = { | 206 | .stream = { |
| 186 | .type = USB_ISOC, | 207 | .type = USB_ISOC, |
diff --git a/drivers/media/dvb/dvb-usb/gl861.c b/drivers/media/dvb/dvb-usb/gl861.c index 7dbfc7927880..200ba13d1d19 100644 --- a/drivers/media/dvb/dvb-usb/gl861.c +++ b/drivers/media/dvb/dvb-usb/gl861.c | |||
| @@ -116,6 +116,29 @@ static int gl861_frontend_attach(struct dvb_usb_adapter *adap) | |||
| 116 | return -EIO; | 116 | return -EIO; |
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | static struct qt1010_config gl861_qt1010_config = { | ||
| 120 | .i2c_address = 0xc4 | ||
| 121 | }; | ||
| 122 | |||
| 123 | static int gl861_tuner_attach(struct dvb_usb_adapter *adap) | ||
| 124 | { | ||
| 125 | /* TODO FIXME; probably I2C gate. | ||
| 126 | QT1010 tuner does not respond before we write 0x1a to ZL10353 demodulator | ||
| 127 | register 0x62. This ought to be done somewhere in demodulator initialization. | ||
| 128 | This solution is temporary hack. */ | ||
| 129 | u8 buf[2] = { 0x62, 0x1a }; | ||
| 130 | struct i2c_msg msg = { | ||
| 131 | .addr = gl861_zl10353_config.demod_address, .flags = 0, .buf = buf, .len = 2 | ||
| 132 | }; | ||
| 133 | if (i2c_transfer(&adap->dev->i2c_adap, &msg, 1) != 1) { | ||
| 134 | printk(KERN_WARNING "gl861 tuner attach failed\n"); | ||
| 135 | return -EREMOTEIO; | ||
| 136 | } | ||
| 137 | return dvb_attach(qt1010_attach, | ||
| 138 | adap->fe, &adap->dev->i2c_adap, | ||
| 139 | &gl861_qt1010_config) == NULL ? -ENODEV : 0; | ||
| 140 | } | ||
| 141 | |||
| 119 | /* DVB USB Driver stuff */ | 142 | /* DVB USB Driver stuff */ |
| 120 | static struct dvb_usb_device_properties gl861_properties; | 143 | static struct dvb_usb_device_properties gl861_properties; |
| 121 | 144 | ||
| @@ -161,7 +184,7 @@ static struct dvb_usb_device_properties gl861_properties = { | |||
| 161 | .adapter = {{ | 184 | .adapter = {{ |
| 162 | 185 | ||
| 163 | .frontend_attach = gl861_frontend_attach, | 186 | .frontend_attach = gl861_frontend_attach, |
| 164 | .tuner_attach = qt1010_tuner_attach, | 187 | .tuner_attach = gl861_tuner_attach, |
| 165 | 188 | ||
| 166 | .stream = { | 189 | .stream = { |
| 167 | .type = USB_BULK, | 190 | .type = USB_BULK, |
