summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2007-09-24 17:01:49 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2007-09-24 17:01:49 -0300
commit11d6a758915f3fb7aec24a300880bd80cb8384e3 (patch)
tree552aa3473caa25882a9d224ea12116e41a1b01e1
parentd31a589db0cb69b5c28b66c91c44024fa607b6ec (diff)
downloadmediapointer-dvb-s2-11d6a758915f3fb7aec24a300880bd80cb8384e3.tar.gz
mediapointer-dvb-s2-11d6a758915f3fb7aec24a300880bd80cb8384e3.tar.bz2
tm6000: Add support for ADSTech Mini Dual TV (PTV-339).
From: Michel Ludwig <michel.ludwig@gmail.com> Signed-off-by: Michel Ludwig <michel.ludwig@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--linux/drivers/staging/tm6000/tm6000-cards.c19
-rw-r--r--linux/drivers/staging/tm6000/tm6000-core.c7
-rw-r--r--linux/drivers/staging/tm6000/tm6000-dvb.c19
-rw-r--r--linux/drivers/staging/tm6000/tm6000-i2c.c6
-rw-r--r--linux/drivers/staging/tm6000/tm6000.h1
5 files changed, 42 insertions, 10 deletions
diff --git a/linux/drivers/staging/tm6000/tm6000-cards.c b/linux/drivers/staging/tm6000/tm6000-cards.c
index 9210e4060..bda9c2a2d 100644
--- a/linux/drivers/staging/tm6000/tm6000-cards.c
+++ b/linux/drivers/staging/tm6000/tm6000-cards.c
@@ -38,6 +38,7 @@
#define TM5600_BOARD_10MOONS_UT330 4
#define TM6000_BOARD_ADSTECH_DUAL_TV 5
#define TM6000_BOARD_FREECOM_AND_SIMILAR 6
+#define TM6000_BOARD_ADSTECH_MINI_DUAL_TV 7
#define TM6000_MAXBOARDS 16
static unsigned int card[] = {[0 ... (TM6000_MAXBOARDS - 1)] = UNSET };
@@ -70,7 +71,6 @@ struct tm6000_board {
#endif
};
-
struct tm6000_board tm6000_boards[] = {
[TM6000_BOARD_UNKNOWN] = {
.name = "Unknown tm6000 video grabber",
@@ -133,7 +133,7 @@ struct tm6000_board tm6000_boards[] = {
},
[TM6000_BOARD_FREECOM_AND_SIMILAR] = {
.name = "Freecom Hybrid Stick / Moka DVB-T Receiver Dual",
- .tuner_type = TUNER_XC2028,
+ .tuner_type = TUNER_XC2028, /* has a XC3028 */
.tuner_addr = 0xc2,
.demod_addr = 0x1e,
.caps = {
@@ -141,6 +141,20 @@ struct tm6000_board tm6000_boards[] = {
.has_dvb = 1,
.has_zl10353 = 1,
.has_eeprom = 0,
+ .has_remote = 1,
+ },
+ .gpio_addr_tun_reset = TM6000_GPIO_4,
+ },
+ [TM6000_BOARD_ADSTECH_MINI_DUAL_TV] = {
+ .name = "ADSTECH Mini Dual TV USB",
+ .tuner_type = TUNER_XC2028, /* has a XC3028 */
+ .tuner_addr = 0xc8,
+ .demod_addr = 0x1e,
+ .caps = {
+ .has_tuner = 1,
+ .has_dvb = 1,
+ .has_zl10353 = 1,
+ .has_eeprom = 0,
},
.gpio_addr_tun_reset = TM6000_GPIO_4,
},
@@ -151,6 +165,7 @@ struct usb_device_id tm6000_id_table [] = {
{ USB_DEVICE(0x6000, 0x0001), .driver_info = TM5600_BOARD_10MOONS_UT821 },
{ USB_DEVICE(0x06e1, 0xf332), .driver_info = TM6000_BOARD_ADSTECH_DUAL_TV },
{ USB_DEVICE(0x14aa, 0x0620), .driver_info = TM6000_BOARD_FREECOM_AND_SIMILAR },
+ { USB_DEVICE(0x06e1, 0xb339), .driver_info = TM6000_BOARD_ADSTECH_MINI_DUAL_TV },
{ },
};
diff --git a/linux/drivers/staging/tm6000/tm6000-core.c b/linux/drivers/staging/tm6000/tm6000-core.c
index 44abe8382..1a1846bc7 100644
--- a/linux/drivers/staging/tm6000/tm6000-core.c
+++ b/linux/drivers/staging/tm6000/tm6000-core.c
@@ -233,12 +233,17 @@ int tm6000_init_digital_mode (struct tm6000_core *dev)
tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00d1, 0xd8);
tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00d2, 0xc0);
tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00d6, 0x60);
+
+ tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00e2, 0x0c);
+ tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00e8, 0xff);
+ tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00eb, 0x08);
msleep(50);
tm6000_set_reg (dev, REQ_04_EN_DISABLE_MCU_INT, 0x0020, 0x00);
+ msleep(50);
tm6000_set_reg (dev, REQ_04_EN_DISABLE_MCU_INT, 0x0020, 0x01);
+ msleep(50);
tm6000_set_reg (dev, REQ_04_EN_DISABLE_MCU_INT, 0x0020, 0x00);
-
msleep(100);
return 0;
diff --git a/linux/drivers/staging/tm6000/tm6000-dvb.c b/linux/drivers/staging/tm6000/tm6000-dvb.c
index 21a9b7c43..2849f375c 100644
--- a/linux/drivers/staging/tm6000/tm6000-dvb.c
+++ b/linux/drivers/staging/tm6000/tm6000-dvb.c
@@ -65,10 +65,6 @@ int tm6000_start_stream(struct tm6000_core *dev)
tm6000_init_digital_mode(dev);
-// ret = usb_set_interface(dev->udev, 0, 1);
-// if (ret<0)
-// return ret;
-
/*
ret = tm6000_set_led_status(tm6000_dev, 0x1);
if(ret < 0) {
@@ -98,10 +94,17 @@ int tm6000_start_stream(struct tm6000_core *dev)
dvb->bulk_urb->transfer_buffer,
maxPaketSize,
tm6000_urb_received, dev);
+
+ ret = usb_set_interface(dev->udev, 0, 1);
+ if(ret < 0) {
+ printk(KERN_ERR "tm6000: error %i in %s during set interface\n", ret, __FUNCTION__);
+ return ret;
+ }
+
ret = usb_clear_halt(dev->udev, pipe);
if(ret < 0) {
printk(KERN_ERR "tm6000: error %i in %s during pipe reset\n",ret,__FUNCTION__);
-// return ret;
+ return ret;
}
else {
printk(KERN_ERR "tm6000: pipe resetted\n");
@@ -125,10 +128,16 @@ int tm6000_start_stream(struct tm6000_core *dev)
void tm6000_stop_stream(struct tm6000_core *dev)
{
+ int ret;
struct tm6000_dvb *dvb = dev->dvb;
// tm6000_set_led_status(tm6000_dev, 0x0);
+ ret = usb_set_interface(dev->udev, 0, 0);
+ if(ret < 0) {
+ printk(KERN_ERR "tm6000: error %i in %s during set interface\n",ret,__FUNCTION__);
+ }
+
if(dvb->bulk_urb) {
usb_kill_urb(dvb->bulk_urb);
kfree(dvb->bulk_urb->transfer_buffer);
diff --git a/linux/drivers/staging/tm6000/tm6000-i2c.c b/linux/drivers/staging/tm6000/tm6000-i2c.c
index 65ccf9bf2..aced39fa5 100644
--- a/linux/drivers/staging/tm6000/tm6000-i2c.c
+++ b/linux/drivers/staging/tm6000/tm6000-i2c.c
@@ -312,9 +312,10 @@ static int tm6000_tuner_callback(void *ptr, int command, int arg)
case 0:
tm6000_set_reg (dev, REQ_03_SET_GET_MCU_PIN,
dev->tuner_reset_gpio, 0x00);
- msleep(10);
+ msleep(130);
tm6000_set_reg (dev, REQ_03_SET_GET_MCU_PIN,
dev->tuner_reset_gpio, 0x01);
+ msleep(130);
break;
case 1:
tm6000_set_reg (dev, REQ_04_EN_DISABLE_MCU_INT,
@@ -327,9 +328,10 @@ static int tm6000_tuner_callback(void *ptr, int command, int arg)
TM6000_GPIO_CLK, 0);
if (rc<0)
return rc;
- msleep(10);
+ msleep(100);
rc=tm6000_set_reg (dev, REQ_03_SET_GET_MCU_PIN,
TM6000_GPIO_CLK, 1);
+ msleep(100);
break;
}
}
diff --git a/linux/drivers/staging/tm6000/tm6000.h b/linux/drivers/staging/tm6000/tm6000.h
index d75cbb59b..ce5dc2125 100644
--- a/linux/drivers/staging/tm6000/tm6000.h
+++ b/linux/drivers/staging/tm6000/tm6000.h
@@ -112,6 +112,7 @@ struct tm6000_capabilities {
unsigned int has_dvb:1;
unsigned int has_zl10353:1;
unsigned int has_eeprom:1;
+ unsigned int has_remote:1;
};
struct tm6000_dvb {