Michael Krufky schrieb:
> Aapo Tahkola wrote:
>> On Fri, 02 Mar 2007 23:06:15 +0100
>> Pierre Willenbrock <[EMAIL PROTECTED]> wrote:
>>
>>> Michael Krufky schrieb:
>>>> Pierre Willenbrock wrote:
>>>>> Hi list,
>>>>>
>>>>> I am owner of a "MSI DIGIVOX mini-II". I got it to work using the
>>>>> attached patch and firmware. The patch and firmware are the result
>>>>> of analyzing some usb logs from windows.
>>>>>
>>>>> The patch breaks all users of tda10046, as i don't understand how
>>>>> that chip is supposed to work. The same goes for my driver
>>>>> implementation of the Philips 8275a.
>>>>>
>>>>> So this mess needs to be fixed before it can go into the
>>>>> repository.
>>>>>
>>>>> The patch is against a fresh hg checkout from
>>>>> http://linuxtv.org/hg/v4l-dvb at 2007-02-22 21:00 UTC.
>>>>>
>>>>> Regards,
>>>>> Pierre
>>>> Pierre-
>>>>
>>>> I am very happy to hear that you got this device working...
>>>> Interestingly enough, we have already created a new tda827x dvb fe
>>>> module, which might be better for your device... This new tda827x
>>>> module has not yet been merged into the master v4l-dvb repository,
>>>> but it will be soon. Could you try to use the code located in:
>>>>
>>>> http://linuxtv.org/hg/~hhackmann/v4l-dvb
>>>>
>>>> The tda827x module will be able to detect the difference between
>>>> the tda8275 and the tda8275a ... You do not have to fill the
>>>> callback functions in the config struct -- that is really meant as
>>>> a hack for some required GPIO handling in the saa7134-dvb driver
>>>> for input switching.
>>>>
>>>> If you can generate a new patch against the repository above, it
>>>> would make it _much_ easier to integrate your patch into the
>>>> sources. After you get that done, we can work out the tda1004x
>>>> differences.
>>>>
>>>> You might also want to speak to aett and friedrich, regulars of the
>>>> #linuxtv irc chat room on irc.freenode.net ... aet is the author of
>>>> the m920x driver, and friedrich has the same device that you have.
>>>> They have been working on it, but haven't yet gotten successful
>>>> results.
>>>>
>>>> Good work! Hopefully we can clean this up after you generate a new
>>>> patch using the tda827x module from hhackmann's repository.
>>>>
>>>> Regards,
>>>>
>>>> Mike Krufky
>>>>
>>> Hi Mike and Hartmut,
>>>
>>> this time, the patch does not change tda827x.c at all. I fiddled with
>>> the PHY2 value in tda1004x.c and found it to be related to the
>>> IF(there seems to be some factor between the IF and PHY2 introduced
>>> somewhere else). This leaves some differences in tda1004x.c. I don't
>>> know what to do with these, so i would be glad to get any hints.
>>
>> Updated patch. I'm fine with these m920x changes.
>
>
> Pierre and Aapo BOTH,
>
> I'd like to push this into a dev repository so that all of the developers
> currently working on m920x can test it without having to worry about patch
> conflicts, etc... but I would prefer to have your sign-off before pushing it
> to
> there.
>
> Can both of you you please reply to this email with a short patch description
> and
> sign-off, as described in:
>
> http://linuxtv.org/hg/v4l-dvb?f=-1;file=README.patches
>
> Then, I can push in this patch, and we can continue working on this from
> there.
>
> Cheers,
>
> Michael Krufky
>
>
Changelog:
Add support for Anubis Electronics "Lifeview" (usb-ID 0x10fd:0x1513).
Breaks other users of tda1004x.c.
Signed-off-by: Pierre Willenbrock <[EMAIL PROTECTED]>
>>
>> ------------------------------------------------------------------------
>>
>> diff -r 2541388e71f4 linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
>> --- a/linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h Sat Mar 03 02:56:04
>> 2007 +0200
>> +++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h Sat Mar 03 03:01:00
>> 2007 +0200
>> @@ -37,6 +37,7 @@
>> #define USB_VID_ULTIMA_ELECTRONIC 0x05d8
>> #define USB_VID_UNIWILL 0x1584
>> #define USB_VID_WIDEVIEW 0x14aa
>> +#define USB_VID_ANUBIS_ELECTRONIC 0x10fd
>>
>> /* Product IDs */
>> #define USB_PID_ADSTECH_USB2_COLD 0xa333
>> @@ -140,6 +141,7 @@
>> #define USB_PID_GENPIX_8PSK_COLD 0x0200
>> #define USB_PID_GENPIX_8PSK_WARM 0x0201
>> #define USB_PID_SIGMATEK_DVB_110 0x6610
>> +#define USB_PID_ANUBIS_ELECTRONIC_MSI_DIGI_VOX_MINI_II 0x1513
>>
>>
>> #endif
>> diff -r 2541388e71f4 linux/drivers/media/dvb/dvb-usb/m920x.c
>> --- a/linux/drivers/media/dvb/dvb-usb/m920x.c Sat Mar 03 02:56:04
>> 2007 +0200
>> +++ b/linux/drivers/media/dvb/dvb-usb/m920x.c Sat Mar 03 03:06:23
>> 2007 +0200
>> @@ -14,6 +14,8 @@
>> #include "mt352.h"
>> #include "mt352_priv.h"
>> #include "qt1010.h"
>> +#include "tda1004x.h"
>> +#include "tda827x.h"
>>
>> /* debug */
>> static int dvb_usb_m920x_debug;
>> @@ -47,12 +49,16 @@ static inline int m920x_read(struct usb_
>> ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
>> request, USB_TYPE_VENDOR | USB_DIR_IN,
>> value, index, data, size, 2000);
>> - if (ret < 0)
>> - return ret;
>> -
>> - if (ret != size)
>> + if (ret < 0) {
>> + printk(KERN_INFO "m920x_read = error: %d\n", ret);
>> + return ret;
>> + }
>> +
>> + if (ret != size) {
>> + deb("m920x_read = no data\n");
>> return -EIO;
>> -
>> + }
>> +
>> return 0;
>> }
>>
>> @@ -64,6 +70,7 @@ static inline int m920x_write(struct usb
>> ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
>> request, USB_TYPE_VENDOR | USB_DIR_OUT,
>> value, index, NULL, 0, 2000);
>> +
>> return ret;
>> }
>>
>> @@ -317,6 +324,7 @@ static int m920x_firmware_download(struc
>> i += size;
>> }
>> if (i != fw->size) {
>> + deb("bad firmware file!\n");
>> ret = -EINVAL;
>> goto done;
>> }
>> @@ -402,8 +410,65 @@ static int megasky_qt1010_tuner_attach(s
>> return 0;
>> }
>>
>> +static struct tda1004x_config digivox_tda10046_config = {
>> + /* the demodulator's i2c address */
>> + .demod_address = 0x08,
>> +
>> + /* does the "inversion" need inverted? */
>> + .invert = 0,
>> +
>> + /* Does the OCLK signal need inverted? */
>> + .invert_oclk = 0,
>> +
>> + /* Xtal frequency, 4 or 16MHz*/
>> + .xtal_freq = TDA10046_XTAL_16M,
>> +
>> + /* IF frequency */
>> + .if_freq = TDA10046_FREQ_045,/*currently doing our own*/
>> +
>> + /* AGC configuration */
>> +/* .agc_config = TDA10046_AGC_DIGIVOX,*/
>> +
>> + /* setting of GPIO1 and 3 */
>> +/* .gpio_config;*/
>> +
>> + /* slave address and configuration of the tuner */
>> +/* .tuner_address;*/
>> +/* .tuner_config;*/
>> +/* .antenna_switch;*/
>> +
>> + /* if the board uses another I2c Bridge (tda8290), its address */
>> +/* .i2c_gate;*/
>> +
>> + /* request firmware for device */
>> + /* set this to NULL if the card has a firmware EEPROM */
>> + .request_firmware = NULL,/*uses firmware EEPROM - TODO: invalid
>> revision*/
>> +};
>> +
>> +static int digivox_tda10046_frontend_attach(struct dvb_usb_adapter *adap)
>> +{
>> + deb("digivox_tda10046_frontend_attach!\n");
>> +
>> + if ((adap->fe = dvb_attach(tda10046_attach, &digivox_tda10046_config,
>> &adap->dev->i2c_adap)) == NULL)
>> + return -EIO;
>> +
>> + return 0;
>> +}
>> +
>> +static struct tda827x_config digivox_tda8275_config = {
>> +};
>> +
>> +static int digivox_tda8275_tuner_attach(struct dvb_usb_adapter *adap)
>> +{
>> + if (dvb_attach(tda827x_attach, adap->fe, 0x60, &adap->dev->i2c_adap,
>> + &digivox_tda8275_config) == NULL)
>> + return -ENODEV;
>> + return 0;
>> +}
>> +
>> /* DVB USB Driver stuff */
>> static struct dvb_usb_device_properties megasky_properties;
>> +static struct dvb_usb_device_properties digivox_properties;
>>
>> static int m920x_probe(struct usb_interface *intf,
>> const struct usb_device_id *id)
>> @@ -413,12 +478,15 @@ static int m920x_probe(struct usb_interf
>> int ret;
>>
>> deb("Probed!\n");
>> -
>> +
>> if ((ret = dvb_usb_device_init(intf, &megasky_properties, THIS_MODULE,
>> &d)) == 0)
>> goto found;
>> -
>> - return ret;
>> -
>> +
>> + if ((ret = dvb_usb_device_init(intf, &digivox_properties, THIS_MODULE,
>> &d)) == 0)
>> + goto found;
>> +
>> + return ret;
>> +
>> found:
>>
>> alt = usb_altnum_to_altsetting(intf, 1);
>> @@ -489,6 +557,55 @@ static struct dvb_usb_device_properties
>> { "MSI Mega Sky 580 DVB-T USB2.0",
>> { &m920x_table[0], NULL },
>> { NULL },
>> + }
>> + }
>> +};
>> +
>> +static struct dvb_usb_device_properties digivox_properties = {
>> + .caps = DVB_USB_IS_AN_I2C_ADAPTER,
>> +
>> + .usb_ctrl = DEVICE_SPECIFIC,
>> + .firmware = "dvb-usb-digivox-02.fw",
>> + .download_firmware = m920x_firmware_download,
>> +
>> +/* .rc_interval = 100,
>> + .rc_key_map = digivox_rc_keys,
>> + .rc_key_map_size = ARRAY_SIZE(digivox_rc_keys),
>> + .rc_query = m920x_rc_query,*/
>> +
>> + .size_of_priv = sizeof(struct m920x_state),
>> +
>> + .identify_state = m920x_identify_state,
>> + .num_adapters = 1,
>> + .adapter = {{
>> + .caps = DVB_USB_ADAP_HAS_PID_FILTER |
>> + DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
>> +
>> + .pid_filter_count = 8,
>> + .pid_filter = m920x_pid_filter,
>> + .pid_filter_ctrl = m920x_pid_filter_ctrl,
>> +
>> + .frontend_attach = digivox_tda10046_frontend_attach,
>> + .tuner_attach = digivox_tda8275_tuner_attach,
>> +
>> + .stream = {
>> + .type = USB_BULK,
>> + .count = 8,
>> + .endpoint = 0x81,
>> + .u = {
>> + .bulk = {
>> + .buffersize = 0x4000,
>> + }
>> + }
>> + },
>> + }},
>> + .i2c_algo = &m920x_i2c_algo,
>> +
>> + .num_device_descs = 1,
>> + .devices = {
>> + { "MSI DIGI VOX mini II DVB-T USB2.0",
>> + { &m920x_table[1], NULL },
>> + { NULL },
>> },
>> }
>> };
>> diff -r 2541388e71f4 linux/drivers/media/dvb/frontends/tda1004x.c
>> --- a/linux/drivers/media/dvb/frontends/tda1004x.c Sat Mar 03 02:56:04
>> 2007 +0200
>> +++ b/linux/drivers/media/dvb/frontends/tda1004x.c Sat Mar 03 03:01:17
>> 2007 +0200
>> @@ -256,6 +256,17 @@ static int tda10046h_set_bandwidth(struc
>> static int tda10046h_set_bandwidth(struct tda1004x_state *state,
>> fe_bandwidth_t bandwidth)
>> {
>> +#if 1
>> + static u8 digivox_vhf[] = { 0x79, 0x16, 0x1c, 0x21, 0xc2 };
>> + static u8 digivox_uhf[] = { 0x5b, 0x02, 0xd0, 0x2d, 0x03 };
>> +
>> + tda1004x_write_buf(state, TDA10046H_TIME_WREF1, digivox_uhf,
>> + sizeof(digivox_uhf));
>> +/*for vhf: 0x09, 0xd9 with if=4.5MHz, uhf: 0x0b, 0xb2 with if=4.75MHz*/
>> +/*0x0c,0x4f with if=5.0MHz(retrieved by trial and error)*/
>> + tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0c);
>> + tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x4f);
>> +#else
>> static u8 bandwidth_6mhz_53M[] = { 0x7b, 0x2e, 0x11, 0xf0, 0xd2 };
>> static u8 bandwidth_7mhz_53M[] = { 0x6a, 0x02, 0x6a, 0x43, 0x9f };
>> static u8 bandwidth_8mhz_53M[] = { 0x5c, 0x32, 0xc2, 0x96, 0x6d };
>> @@ -313,6 +324,7 @@ static int tda10046h_set_bandwidth(struc
>> default:
>> return -EINVAL;
>> }
>> +#endif
>>
>> return 0;
>> }
>> @@ -359,8 +371,10 @@ static int tda1004x_check_upload_ok(stru
>> u8 data1, data2;
>> unsigned long timeout;
>>
>> + dprintk("%s\n", __FUNCTION__);
>> +
>> if (state->demod_type == TDA1004X_DEMOD_TDA10046) {
>> - timeout = jiffies + 2 * HZ;
>> + timeout = jiffies + 4 * HZ;
>> while(!(tda1004x_read_byte(state, TDA1004X_STATUS_CD) & 0x20)) {
>> if (time_after(jiffies, timeout)) {
>> printk(KERN_ERR "tda1004x: timeout waiting for
>> DSP ready\n");
>> @@ -437,6 +451,11 @@ static void tda10046_init_plls(struct dv
>> tda10046_clk53m = 1;
>>
>> tda1004x_write_byteI(state, TDA10046H_CONFPLL1, 0xf0);
>> +#if 1
>> + printk(KERN_INFO "tda1004x: setting up plls for 52MHz sampling
>> clock\n");
>> + tda1004x_write_byteI(state, TDA10046H_CONFPLL2, 0x07); // PLL M = 7
>> +#endif
>> +#if 0
>> if(tda10046_clk53m) {
>> printk(KERN_INFO "tda1004x: setting up plls for 53MHz sampling
>> clock\n");
>> tda1004x_write_byteI(state, TDA10046H_CONFPLL2, 0x08); // PLL M
>> = 8
>> @@ -444,6 +463,7 @@ static void tda10046_init_plls(struct dv
>> printk(KERN_INFO "tda1004x: setting up plls for 48MHz sampling
>> clock\n");
>> tda1004x_write_byteI(state, TDA10046H_CONFPLL2, 0x03); // PLL M
>> = 3
>> }
>> +#endif
>> if (state->config->xtal_freq == TDA10046_XTAL_4M ) {
>> dprintk("%s: setting up PLLs for a 4 MHz Xtal\n", __FUNCTION__);
>> tda1004x_write_byteI(state, TDA10046H_CONFPLL3, 0); // PLL P =
>> N = 0
>> @@ -632,6 +652,12 @@ static int tda10046_init(struct dvb_fron
>> return -EIO;
>> }
>>
>> +/*from windows driver*/
>> + tda1004x_write_byteI(state, TDA1004X_CONFC4, 0x00);
>> + tda1004x_write_byteI(state, TDA10046H_CONF_TRISTATE2, 0x2f);
>> + tda1004x_write_byteI(state, TDA10046H_GPIO_OUT_SEL, 0xcf);
>> +/*from windows driver*/
>> +
>> // tda setup
>> tda1004x_write_mask(state, TDA1004X_CONFC4, 0x20, 0); // disable DSP
>> watchdog timer
>> tda1004x_write_byteI(state, TDA1004X_AUTO, 0x87); // 100 ppm
>> crystal, select HP stream
>> @@ -656,9 +682,19 @@ static int tda10046_init(struct dvb_fron
>> tda1004x_write_byteI(state, TDA10046H_AGC_RENORM, 0x08); //
>> Gain Renormalize
>> tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0,
>> 0x60); // set AGC polarities
>> break;
>> - }
>> + case TDA10046_AGC_DIGIVOX:
>> + tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x0a); // AGC
>> setup
>> + tda1004x_write_byteI(state, TDA10046H_AGC_THR, 0x70); // set
>> AGC threshold
>> + tda1004x_write_byteI(state, TDA10046H_CONF_POLARITY, 0x24); //
>> set AGC polarities
>> + break;
>> + }
>> +#if 1
>> + tda1004x_write_byteI(state, TDA1004X_CONFADC2, 0x34);
>> + tda1004x_write_byteI(state, TDA10046H_CONF_TRISTATE1, 0xa1);
>> +#else
>> tda1004x_write_byteI(state, TDA1004X_CONFADC2, 0x38);
>> tda1004x_write_byteI(state, TDA10046H_CONF_TRISTATE1, 0x79); // Turn IF
>> AGC output on
>> +#endif
>> tda1004x_write_byteI(state, TDA10046H_AGC_TUN_MIN, 0); // }
>> tda1004x_write_byteI(state, TDA10046H_AGC_TUN_MAX, 0xff); // } AGC
>> min/max values
>> tda1004x_write_byteI(state, TDA10046H_AGC_IF_MIN, 0); // }
>> diff -r 2541388e71f4 linux/drivers/media/dvb/frontends/tda1004x.h
>> --- a/linux/drivers/media/dvb/frontends/tda1004x.h Sat Mar 03 02:56:04
>> 2007 +0200
>> +++ b/linux/drivers/media/dvb/frontends/tda1004x.h Sat Mar 03 03:01:17
>> 2007 +0200
>> @@ -36,6 +36,7 @@ enum tda10046_agc {
>> TDA10046_AGC_IFO_AUTO_NEG, /* IF AGC only, automatic, negtive */
>> TDA10046_AGC_IFO_AUTO_POS, /* IF AGC only, automatic, positive */
>> TDA10046_AGC_TDA827X, /* IF AGC only, special setup for
>> tda827x */
>> + TDA10046_AGC_DIGIVOX, /* setup for msi digivox mini ii*/
>> };
>>
>> /* Many (hybrid) boards use GPIO 1 and 3
>
_______________________________________________
linux-dvb mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb