em28xx: msi Digivox ATSC board id [0db0:8810]
Commit Message
Am 30.11.2012 02:45, schrieb Matthew Gyurgyik:
> On 11/29/2012 02:28 PM, Frank Schäfer wrote:
>> Matthew, stay tuned but be patient. ;) Regards, Frank
>
> Sure thing, just let me know what you need me to do!
>
Ok, please test the attached experimental patch and post the dmesg output.
Open questions:
- setting of EM2874 register 0x0f (XCLK): the Windows doesn't touch this
register, so the default value seems to be used.
The patch adds 2 debugging lines to find out the default which default
value the em2874 uses.
For now, I've set this to 12MHz, because the picture shows a 12MHz
oszillator.
- meaning of the gpio sequence / gpio lines assignment (see comments in
the patch).
- remote control support: looking at the product picture on the MSI website,
the remote control could be the same as sues by the Digivox III. But
that's just a guess.
- LGDT3305 configuration: a few parameters can not be taken form the USB
log. Will ask the author of the driver for help.
But let's do things step by step and see what happens with the patch.
Regards,
Frank
Comments
On 12/02/2012 01:44 PM, Frank Schäfer wrote:
> Am 30.11.2012 02:45, schrieb Matthew Gyurgyik:
>> On 11/29/2012 02:28 PM, Frank Schäfer wrote:
>>> Matthew, stay tuned but be patient. ;) Regards, Frank
>>
>> Sure thing, just let me know what you need me to do!
>>
>
> Ok, please test the attached experimental patch and post the dmesg output.
>
> Open questions:
> - setting of EM2874 register 0x0f (XCLK): the Windows doesn't touch this
> register, so the default value seems to be used.
> The patch adds 2 debugging lines to find out the default which default
> value the em2874 uses.
> For now, I've set this to 12MHz, because the picture shows a 12MHz
> oszillator.
> - meaning of the gpio sequence / gpio lines assignment (see comments in
> the patch).
> - remote control support: looking at the product picture on the MSI website,
> the remote control could be the same as sues by the Digivox III. But
> that's just a guess.
> - LGDT3305 configuration: a few parameters can not be taken form the USB
> log. Will ask the author of the driver for help.
>
> But let's do things step by step and see what happens with the patch.
>
> Regards,
> Frank
>
Hello
I looked the patch quickly and here are the findings:
I2C addresses are in "8-bit" format. Will not work. Example for tuner,
0xc0 should be 0x60. Same for the demod. Due to that, no worth to test
patch. I2C addresses are normally 7-bit, but "unofficial" 8-bit notation
is also used widely. em28xx uses official notation as almost all other
media drivers.
You are using tda18271c2dd tuner driver. I recommended to change to the
other driver named tda18271. tda18271c2dd is very bad choice in that
case as it discards all the I2C error without any error logging and just
silently ignores. I remember case when I used that tuner driver for one
em28xx + drx-k combination and wasted very many hours trying to get it
working due to missing error logging :/
Don't care XCLK register, it most likely will just as it is. There is
many EM2874 boards already supported.
12MHz clock is correct and it is seen from the hardware. Generally 12MHz
xtal is used very often for USB (device to device) as it is suitable
reference clock.
According to comments, GPIO7 is used when streaming is started /
stopped. It is about 99% sure LOCK LED :)
When you look sniffs and see some GPIO is changed for example just
before and after tuner communication you could make assumption it does
have something to do with tuner (example tuner hw reset / standby).
You should look used intermediate frequencies from the tuner driver and
configure demod according to that. OK, 3-4 MHz sounds very reasonable
low-IF values used with tda18271. tda18271 driver supports also get IF
callback, but demod driver not. That callback allows automatically
configure correct IF according to what tuner uses. Anyhow, in that case
you must ensure those manually from tuner driver as demod driver does
not support get IF. IF is *critical*, if it is wrong then nothing works
(because demodulator does not get signal from tuner).
regards
Antti
Am 02.12.2012 15:23, schrieb Antti Palosaari:
> On 12/02/2012 01:44 PM, Frank Schäfer wrote:
>> Am 30.11.2012 02:45, schrieb Matthew Gyurgyik:
>>> On 11/29/2012 02:28 PM, Frank Schäfer wrote:
>>>> Matthew, stay tuned but be patient. ;) Regards, Frank
>>>
>>> Sure thing, just let me know what you need me to do!
>>>
>>
>> Ok, please test the attached experimental patch and post the dmesg
>> output.
>>
>> Open questions:
>> - setting of EM2874 register 0x0f (XCLK): the Windows doesn't touch this
>> register, so the default value seems to be used.
>> The patch adds 2 debugging lines to find out the default which
>> default
>> value the em2874 uses.
>> For now, I've set this to 12MHz, because the picture shows a 12MHz
>> oszillator.
>> - meaning of the gpio sequence / gpio lines assignment (see comments in
>> the patch).
>> - remote control support: looking at the product picture on the MSI
>> website,
>> the remote control could be the same as sues by the Digivox III. But
>> that's just a guess.
>> - LGDT3305 configuration: a few parameters can not be taken form the USB
>> log. Will ask the author of the driver for help.
>>
>> But let's do things step by step and see what happens with the patch.
>>
>> Regards,
>> Frank
>>
>
> Hello
> I looked the patch quickly and here are the findings:
> I2C addresses are in "8-bit" format. Will not work. Example for tuner,
> 0xc0 should be 0x60. Same for the demod. Due to that, no worth to test
> patch. I2C addresses are normally 7-bit, but "unofficial" 8-bit
> notation is also used widely. em28xx uses official notation as almost
> all other media drivers.
Argh, yeah, I didn't check that. The mixed usage of 7 and 8 bit
notations is a mess.
>
> You are using tda18271c2dd tuner driver. I recommended to change to
> the other driver named tda18271. tda18271c2dd is very bad choice in
> that case as it discards all the I2C error without any error logging
> and just silently ignores. I remember case when I used that tuner
> driver for one em28xx + drx-k combination and wasted very many hours
> trying to get it working due to missing error logging :/
Ok, thanks. So we have two drivers for the same chip and tda18271c2dd is
deprecated ? Can both drivers handle both chip models ?
I thought tda18271c2dd is for the c2 model of the chip and tda18271 for
the "normal" model...
I also wonder why tda18271 is in media/tuners while tda18271c2dd is in
media/dvb-frontends ?
>
> Don't care XCLK register, it most likely will just as it is. There is
> many EM2874 boards already supported.
>
> 12MHz clock is correct and it is seen from the hardware. Generally
> 12MHz xtal is used very often for USB (device to device) as it is
> suitable reference clock.
Likely. But XCLK register also controls a few other things (e.g. remote
control settings) and the em28xx driver overwrites the default register
content in any case.
So let's see what dmesg tells us.
>
> According to comments, GPIO7 is used when streaming is started /
> stopped. It is about 99% sure LOCK LED :)
>
> When you look sniffs and see some GPIO is changed for example just
> before and after tuner communication you could make assumption it does
> have something to do with tuner (example tuner hw reset / standby).
That's possible, but on the other hand, there is a delay of 20ms after
GPIO_7. That shouldn't be necessary for a LED.
Any idea what GPIO_0 is ? it is to set to high (50ms delay afterwards)
when the first chunk of data is read from the eeprom and set back to low
afterwards.
>
> You should look used intermediate frequencies from the tuner driver
> and configure demod according to that. OK, 3-4 MHz sounds very
> reasonable low-IF values used with tda18271. tda18271 driver supports
> also get IF callback, but demod driver not. That callback allows
> automatically configure correct IF according to what tuner uses.
> Anyhow, in that case you must ensure those manually from tuner driver
> as demod driver does not support get IF. IF is *critical*, if it is
> wrong then nothing works (because demodulator does not get signal from
> tuner).
Ok, that means the 'qam_if_khz' and 'vsb_if_khz' in struct
lgdt3305_config are mandatory values and must be set manually.
Looking into the tda18271 driver, vsb_if_khz should be set to 3250.
That's what the other em28xx board uses, too.
I will send an updated version of the patch soon. Thanks for your comments.
Regards,
Frank
>
>
> regards
> Antti
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
From 77012eb1462912f3ddc38b609bc826b37e55bf1d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Frank=20Sch=C3=A4fer?= <fschaefer.oss@googlemail.com>
Date: Sun, 2 Dec 2012 11:19:20 +0100
Subject: [PATCH] Experimental patch for the 'MSI DIGIVOX ATSC' V1
---
drivers/media/usb/em28xx/em28xx-cards.c | 33 +++++++++++++++++++++++++++++++
drivers/media/usb/em28xx/em28xx-dvb.c | 30 ++++++++++++++++++++++++++++
drivers/media/usb/em28xx/em28xx.h | 1 +
3 Dateien geändert, 64 Zeilen hinzugefügt(+)
@@ -393,6 +393,21 @@ static struct em28xx_reg_seq pctv_520e[] = {
{ -1, -1, -1, -1},
};
+/* 0db0:8810 MSI DIGIVOX ATSC (HU345-Q)
+ * GPIO_0 - ??? (related to eeprom reading ?)
+ * GPIO_6 - ??? (TDA18271C2 or/and LGDT3305 reset ?)
+ * GPIO_7 - ??? (wakeup or stream enable ?)
+ */
+static struct em28xx_reg_seq msi_digivox_atsc[] = {
+ {EM2874_R80_GPIO, 0xff, 0xff, 50}, /* GPIO_0=1 */
+ {0x0d, 0xff, 0xff, 0},
+ {EM2874_R80_GPIO, 0xfe, 0xff, 0}, /* GPIO_0=0 */
+ {EM2874_R80_GPIO, 0xbe, 0xff, 135}, /* GPIO_6=0 */
+ {EM2874_R80_GPIO, 0xfe, 0xff, 135}, /* GPIO_6=1 */
+ {EM2874_R80_GPIO, 0x7e, 0xff, 20}, /* GPIO_7=0 */
+ { -1, -1, -1, -1},
+};
+
/*
* Board definitions
*/
@@ -1988,6 +2003,19 @@ struct em28xx_board em28xx_boards[] = {
EM28XX_I2C_CLK_WAIT_ENABLE |
EM28XX_I2C_FREQ_400_KHZ,
},
+ /* 0db0:8810 MSI DIGIVOX ATSC (HU345-Q)
+ * Empia EM2874B + TDA18271HDC2 + LGDT3305 */
+ [EM2874_BOARD_MSI_DIGIVOX_ATSC] = {
+ .name = "MSI DIGIVOX ATSC",
+ .dvb_gpio = msi_digivox_atsc,
+ .has_dvb = 1,
+ .tuner_type = TUNER_ABSENT,
+ .ir_codes = RC_MAP_MSI_DIGIVOX_III, /* just a guess from looking at the picture */
+ .xclk = EM28XX_XCLK_FREQUENCY_12MHZ, /* TODO */
+ .i2c_speed = EM2874_I2C_SECONDARY_BUS_SELECT |
+ EM28XX_I2C_CLK_WAIT_ENABLE |
+ EM28XX_I2C_FREQ_100_KHZ,
+ },
};
const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);
@@ -2145,6 +2173,8 @@ struct usb_device_id em28xx_id_table[] = {
.driver_info = EM2884_BOARD_PCTV_510E },
{ USB_DEVICE(0x2013, 0x0251),
.driver_info = EM2884_BOARD_PCTV_520E },
+ { USB_DEVICE(0x0db0, 0x8810),
+ .driver_info = EM2874_BOARD_MSI_DIGIVOX_ATSC },
{ },
};
MODULE_DEVICE_TABLE(usb, em28xx_id_table);
@@ -2963,6 +2993,9 @@ static int em28xx_init_dev(struct em28xx *dev, struct usb_device *udev,
dev->em28xx_read_reg_req = em28xx_read_reg_req;
dev->board.is_em2800 = em28xx_boards[dev->model].is_em2800;
+int regval = em28xx_read_reg(dev, EM28XX_R0F_XCLK);
+pr_err("EM28XX DEBUG: default value of reg 0x0F (EM28XX_R0F_XCLK): 0x%02x\n", regval);
+
em28xx_set_model(dev);
/* Set the default GPO/GPIO for legacy devices */
@@ -263,6 +263,19 @@ static struct lgdt3305_config em2870_lgdt3304_dev = {
.qam_if_khz = 4000,
};
+static struct lgdt3305_config em2874_lgdt3305_dev = {
+ .i2c_addr = 0x1c,
+ .demod_chip = LGDT3305,
+/* .deny_i2c_rptr = 1, */ /* should we deny access to i2c gate ctrl ??? */
+ .spectral_inversion = 1,
+ .rf_agc_loop = 0,
+ .mpeg_mode = LGDT3305_MPEG_SERIAL,
+ .tpclk_edge = LGDT3305_TPCLK_RISING_EDGE,
+ .tpvalid_polarity = LGDT3305_TP_VALID_HIGH,
+/* .vsb_if_khz = 3250, */ /* nothing in the log, needed ? */
+/* .qam_if_khz = 4000, */ /* confirmed, needed ? */
+};
+
static struct s921_config sharp_isdbt = {
.demod_address = 0x30 >> 1
};
@@ -1235,6 +1248,23 @@ static int em28xx_dvb_init(struct em28xx *dev)
goto out_free;
}
break;
+ case EM2874_BOARD_MSI_DIGIVOX_ATSC:
+ dvb->fe[0] = dvb_attach(lgdt3305_attach,
+ &em2874_lgdt3305_dev,
+ &dev->i2c_adap);
+ if (dvb->fe[0]) {
+ /* FE 0 attach tuner */
+ if (!dvb_attach(tda18271c2dd_attach,
+ dvb->fe[0],
+ &dev->i2c_adap,
+ 0xc0)) {
+
+ dvb_frontend_detach(dvb->fe[0]);
+ result = -EINVAL;
+ goto out_free;
+ }
+ }
+ break;
default:
em28xx_errdev("/2: The frontend of your DVB/ATSC card"
" isn't supported yet\n");
@@ -129,6 +129,7 @@
#define EM2884_BOARD_PCTV_510E 85
#define EM2884_BOARD_PCTV_520E 86
#define EM2884_BOARD_TERRATEC_HTC_USB_XS 87
+#define EM2874_BOARD_MSI_DIGIVOX_ATSC 88
/* Limits minimum and default number of buffers */
#define EM28XX_MIN_BUF 4
--
1.7.10.4