aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/dvb-usb/af9015.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/dvb-usb/af9015.c')
-rw-r--r--drivers/media/dvb/dvb-usb/af9015.c60
1 files changed, 40 insertions, 20 deletions
diff --git a/drivers/media/dvb/dvb-usb/af9015.c b/drivers/media/dvb/dvb-usb/af9015.c
index 6a97a40d3dfb..f0ba8b07b84f 100644
--- a/drivers/media/dvb/dvb-usb/af9015.c
+++ b/drivers/media/dvb/dvb-usb/af9015.c
@@ -27,9 +27,7 @@
27#include "qt1010.h" 27#include "qt1010.h"
28#include "tda18271.h" 28#include "tda18271.h"
29#include "mxl5005s.h" 29#include "mxl5005s.h"
30#if 0 30#include "mc44s803.h"
31#include "mc44s80x.h"
32#endif
33 31
34static int dvb_usb_af9015_debug; 32static int dvb_usb_af9015_debug;
35module_param_named(debug, dvb_usb_af9015_debug, int, 0644); 33module_param_named(debug, dvb_usb_af9015_debug, int, 0644);
@@ -37,9 +35,6 @@ MODULE_PARM_DESC(debug, "set debugging level" DVB_USB_DEBUG_STATUS);
37static int dvb_usb_af9015_remote; 35static int dvb_usb_af9015_remote;
38module_param_named(remote, dvb_usb_af9015_remote, int, 0644); 36module_param_named(remote, dvb_usb_af9015_remote, int, 0644);
39MODULE_PARM_DESC(remote, "select remote"); 37MODULE_PARM_DESC(remote, "select remote");
40static int dvb_usb_af9015_dual_mode;
41module_param_named(dual_mode, dvb_usb_af9015_dual_mode, int, 0644);
42MODULE_PARM_DESC(dual_mode, "enable dual mode");
43DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); 38DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
44 39
45static DEFINE_MUTEX(af9015_usb_mutex); 40static DEFINE_MUTEX(af9015_usb_mutex);
@@ -283,6 +278,21 @@ Due to that the only way to select correct tuner is use demodulator I2C-gate.
283 req.data = &msg[i+1].buf[0]; 278 req.data = &msg[i+1].buf[0];
284 ret = af9015_ctrl_msg(d, &req); 279 ret = af9015_ctrl_msg(d, &req);
285 i += 2; 280 i += 2;
281 } else if (msg[i].flags & I2C_M_RD) {
282 ret = -EINVAL;
283 if (msg[i].addr ==
284 af9015_af9013_config[0].demod_address)
285 goto error;
286 else
287 req.cmd = READ_I2C;
288 req.i2c_addr = msg[i].addr;
289 req.addr = addr;
290 req.mbox = mbox;
291 req.addr_len = addr_len;
292 req.data_len = msg[i].len;
293 req.data = &msg[i].buf[0];
294 ret = af9015_ctrl_msg(d, &req);
295 i += 1;
286 } else { 296 } else {
287 if (msg[i].addr == 297 if (msg[i].addr ==
288 af9015_af9013_config[0].demod_address) 298 af9015_af9013_config[0].demod_address)
@@ -748,6 +758,16 @@ static int af9015_read_config(struct usb_device *udev)
748 af9015_config.ir_table_size = 758 af9015_config.ir_table_size =
749 ARRAY_SIZE(af9015_ir_table_digittrade); 759 ARRAY_SIZE(af9015_ir_table_digittrade);
750 break; 760 break;
761 case AF9015_REMOTE_AVERMEDIA_KS:
762 af9015_properties[i].rc_key_map =
763 af9015_rc_keys_avermedia;
764 af9015_properties[i].rc_key_map_size =
765 ARRAY_SIZE(af9015_rc_keys_avermedia);
766 af9015_config.ir_table =
767 af9015_ir_table_avermedia_ks;
768 af9015_config.ir_table_size =
769 ARRAY_SIZE(af9015_ir_table_avermedia_ks);
770 break;
751 } 771 }
752 } else { 772 } else {
753 switch (le16_to_cpu(udev->descriptor.idVendor)) { 773 switch (le16_to_cpu(udev->descriptor.idVendor)) {
@@ -836,9 +856,6 @@ static int af9015_read_config(struct usb_device *udev)
836 goto error; 856 goto error;
837 af9015_config.dual_mode = val; 857 af9015_config.dual_mode = val;
838 deb_info("%s: TS mode:%d\n", __func__, af9015_config.dual_mode); 858 deb_info("%s: TS mode:%d\n", __func__, af9015_config.dual_mode);
839 /* disable dual mode by default because it is buggy */
840 if (!dvb_usb_af9015_dual_mode)
841 af9015_config.dual_mode = 0;
842 859
843 /* Set adapter0 buffer size according to USB port speed, adapter1 buffer 860 /* Set adapter0 buffer size according to USB port speed, adapter1 buffer
844 size can be static because it is enabled only USB2.0 */ 861 size can be static because it is enabled only USB2.0 */
@@ -935,7 +952,6 @@ static int af9015_read_config(struct usb_device *udev)
935 switch (val) { 952 switch (val) {
936 case AF9013_TUNER_ENV77H11D5: 953 case AF9013_TUNER_ENV77H11D5:
937 case AF9013_TUNER_MT2060: 954 case AF9013_TUNER_MT2060:
938 case AF9013_TUNER_MC44S803:
939 case AF9013_TUNER_QT1010: 955 case AF9013_TUNER_QT1010:
940 case AF9013_TUNER_UNKNOWN: 956 case AF9013_TUNER_UNKNOWN:
941 case AF9013_TUNER_MT2060_2: 957 case AF9013_TUNER_MT2060_2:
@@ -948,6 +964,10 @@ static int af9015_read_config(struct usb_device *udev)
948 case AF9013_TUNER_MXL5005R: 964 case AF9013_TUNER_MXL5005R:
949 af9015_af9013_config[i].rf_spec_inv = 0; 965 af9015_af9013_config[i].rf_spec_inv = 0;
950 break; 966 break;
967 case AF9013_TUNER_MC44S803:
968 af9015_af9013_config[i].gpio[1] = AF9013_GPIO_LO;
969 af9015_af9013_config[i].rf_spec_inv = 1;
970 break;
951 default: 971 default:
952 warn("tuner id:%d not supported, please report!", val); 972 warn("tuner id:%d not supported, please report!", val);
953 return -ENODEV; 973 return -ENODEV;
@@ -1135,6 +1155,11 @@ static struct mxl5005s_config af9015_mxl5005_config = {
1135 .AgcMasterByte = 0x00, 1155 .AgcMasterByte = 0x00,
1136}; 1156};
1137 1157
1158static struct mc44s803_config af9015_mc44s803_config = {
1159 .i2c_address = 0xc0,
1160 .dig_out = 1,
1161};
1162
1138static int af9015_tuner_attach(struct dvb_usb_adapter *adap) 1163static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
1139{ 1164{
1140 struct af9015_state *state = adap->dev->priv; 1165 struct af9015_state *state = adap->dev->priv;
@@ -1179,15 +1204,8 @@ static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
1179 DVB_PLL_TDA665X) == NULL ? -ENODEV : 0; 1204 DVB_PLL_TDA665X) == NULL ? -ENODEV : 0;
1180 break; 1205 break;
1181 case AF9013_TUNER_MC44S803: 1206 case AF9013_TUNER_MC44S803:
1182#if 0 1207 ret = dvb_attach(mc44s803_attach, adap->fe, i2c_adap,
1183 ret = dvb_attach(mc44s80x_attach, adap->fe, i2c_adap) 1208 &af9015_mc44s803_config) == NULL ? -ENODEV : 0;
1184 == NULL ? -ENODEV : 0;
1185#else
1186 ret = -ENODEV;
1187 info("Freescale MC44S803 tuner found but no driver for that" \
1188 "tuner. Look at the Linuxtv.org for tuner driver" \
1189 "status.");
1190#endif
1191 break; 1209 break;
1192 case AF9013_TUNER_UNKNOWN: 1210 case AF9013_TUNER_UNKNOWN:
1193 default: 1211 default:
@@ -1218,6 +1236,7 @@ static struct usb_device_id af9015_usb_table[] = {
1218 {USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A309)}, 1236 {USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A309)},
1219/* 15 */{USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III)}, 1237/* 15 */{USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III)},
1220 {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U)}, 1238 {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U)},
1239 {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_2)},
1221 {0}, 1240 {0},
1222}; 1241};
1223MODULE_DEVICE_TABLE(usb, af9015_usb_table); 1242MODULE_DEVICE_TABLE(usb, af9015_usb_table);
@@ -1417,7 +1436,8 @@ static struct dvb_usb_device_properties af9015_properties[] = {
1417 { 1436 {
1418 .name = "KWorld USB DVB-T TV Stick II " \ 1437 .name = "KWorld USB DVB-T TV Stick II " \
1419 "(VS-DVB-T 395U)", 1438 "(VS-DVB-T 395U)",
1420 .cold_ids = {&af9015_usb_table[16], NULL}, 1439 .cold_ids = {&af9015_usb_table[16],
1440 &af9015_usb_table[17], NULL},
1421 .warm_ids = {NULL}, 1441 .warm_ids = {NULL},
1422 }, 1442 },
1423 } 1443 }