Skip to contentSkip to conversation

Wintv-1250 - EEPROM decoding - V4L DVB

DISCUSSION Michel Dansereau 3 participants 9 messages Mar 29, 2009 – Apr 3, 2009 1 message not in the archive Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

Hi,
I was trying to get the WINTV HVR1250 analog interface to work. So far I kludged the cx23885-cards.c file to enable the decoding of
the eeprom.
The required offset in the eeprom is 0xC0

cx23885 driver version 0.0.1 loaded
cx23885 0000:05:00.0: PCI INT A -> Link[APC5] -> GSI 16 (level, low) -> IRQ 16 cx23885[0]/0: cx23885_dev_setup() Memory configured for PCIe bridge type 885 cx23885[0]/0: cx23885_init_tsport(portno=2)
CORE cx23885[0]: subsystem: 0070:7911, board: Hauppauge WinTV-HVR1250 [card=3,autodetected] cx23885[0]/0: cx23885_pci_quirks()
cx23885[0]/0: cx23885_dev_setup() tuner_type = 0x0 tuner_addr = 0x0 cx23885[0]/0: cx23885_dev_setup() radio_type = 0x0 radio_addr = 0x0 cx23885[0]/0: cx23885_reset()
cx23885[0]/0: cx23885_sram_channel_setup() Configuring channel [VID A] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch2] cx23885[0]/0: cx23885_sram_channel_setup() Configuring channel [TS1 B] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch4] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch5] cx23885[0]/0: cx23885_sram_channel_setup() Configuring channel [TS2 C] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch7] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch8] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch9]
tuner' 3-0043: chip found @ 0x86 (cx23885[0])
tda9887 3-0043: creating new instance
tda9887 3-0043: tda988[5/6/7] found
tuner' 3-0043: type set to tda9887
tuner' 3-0043: tv freq set to 0.00
tuner' 3-0043: TV freq (0.00) out of range (44-958)
tuner' 3-0043: cx23885[0] tuner' I2C addr 0x86 with type 74 used for 0x0e cx25840' 4-0044: cx25 0-21 found @ 0x88 (cx23885[0])
tveeprom 2-0050: full 256-byte eeprom dump:
tveeprom 2-0050: 00: 20 00 13 00 00 00 00 00 2c 00 05 00 70 00 11 79 tveeprom 2-0050: 10: 50 03 05 00 04 80 00 08 0c 03 05 80 0e 01 00 00 tveeprom 2-0050: 20: 78 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff tveeprom 2-0050: 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff tveeprom 2-0050: 40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff tveeprom 2-0050: 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff tveeprom 2-0050: 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff tveeprom 2-0050: 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff tveeprom 2-0050: 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff tveeprom 2-0050: 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff tveeprom 2-0050: a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff tveeprom 2-0050: b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff tveeprom 2-0050: c0: 84 09 00 04 20 77 00 40 13 73 4a f0 73 05 27 00 tveeprom 2-0050: d0: 84 08 00 06 99 34 01 00 19 29 95 72 07 70 73 09 tveeprom 2-0050: e0: 21 7f 73 0a 88 8b 72 0b 2f 72 0f 01 72 10 01 72 tveeprom 2-0050: f0: 11 ff 79 c1 00 00 00 00 00 00 00 00 00 00 00 00 tveeprom 2-0050: Tag [04] + 8 bytes: 20 77 00 40 13 73 4a f0
tveeprom 2-0050: Tag [05] + 2 bytes: 27 00
tveeprom 2-0050: Tag [06] + 7 bytes: 99 34 01 00 19 29 95
tveeprom 2-0050: Tag [07] + 1 bytes: 70
tveeprom 2-0050: Tag [09] + 2 bytes: 21 7f
tveeprom 2-0050: Tag [0a] + 2 bytes: 88 8b
tveeprom 2-0050: Tag [0b] + 1 bytes: 2f
tveeprom 2-0050: Tag [0f] + 1 bytes: 01
tveeprom 2-0050: Tag [10] + 1 bytes: 01
tveeprom 2-0050: Not sure what to do with tag [10]
tveeprom 2-0050: Tag [11] + 1 bytes: ff
tveeprom 2-0050: Not sure what to do with tag [11]
tveeprom 2-0050: Hauppauge model 79001, rev E2D9, serial# 4879123
tveeprom 2-0050: MAC address is 00-0D-FE-4A-73-13
tveeprom 2-0050: tuner model is Microtune MT2131 (idx 139, type 4)
tveeprom 2-0050: TV standards NTSC(M) ATSC/DVB Digital (eeprom 0x88) tveeprom 2-0050: audio processor is CX23885 (idx 39)
tveeprom 2-0050: decoder processor is CX23885 (idx 33)
tveeprom 2-0050: has no radio, has IR receiver, has no IR transmitter cx23885[0]: hauppauge eeprom: model=79001
cx23885_dvb_register() allocating 1 frontend(s)
cx23885[0]: cx23885 based dvb card
mt2131: mt2131_attach()
MT2131: successfully identified at address 0x61
DVB: registering new adapter (cx23885[0])
DVB: registering adapter 0 frontend 0 (Samsung S5H1409 QAM/8VSB Frontend)... cx23885_dev_checkrevision() Hardware revision = 0xc0
cx23885[0]/0: found at 0000:05:00.0, rev: 3, irq: 16, latency: 0, mmio: 0xfdc00000 cx23885 0000:05:00.0: setting latency timer to 64
IRQ 16/cx23885[0]: IRQF_DISABLED is not guaranteed on shared IRQs
tuner 5-0061: Cmd VIDIOC_G_TUNER accepted for analog TV
tuner 5-0061: Cmd VIDIOC_G_TUNER accepted for analog TV
tuner 5-0061: Cmd VIDIOC_G_TUNER accepted for analog TV

I did not get very for after that.

FYI the firmware suggested by development site sees wrong ... The
encoder firmware especially. I think that the following profile is required by the code.
The code requiresfirmware with these sizes (these are from the
hauppage distro.

-r--r--r-- 1 root root 376836 2009-03-29 13:03 /lib/firmware/v4l-cx23885-enc.fw -r--r--r-- 1 root root 16382 2009-03-29 13:04 /lib/firmware/v4l-cx23885-avcore-01.fw

void cx23885_card_setup(struct cx23885_dev *dev)

{
       struct cx23885_tsport *ts1 = &dev->ts1;
       struct cx23885_tsport *ts2 = &dev->ts2;

       static u8 eeprom[256];

       if (dev->i2c_bus[0].i2c_rc == 0) {
               dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1;
               tveeprom_read(&dev->i2c_bus[0].i2c_client,
                             eeprom, sizeof(eeprom));
       }

       switch (dev->board) {
/* removed        case CX23885_BOARD_HAUPPAUGE_HVR1250: */
       case CX23885_BOARD_HAUPPAUGE_HVR1500:
       case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
       case CX23885_BOARD_HAUPPAUGE_HVR1400:
               if (dev->i2c_bus[0].i2c_rc == 0)
                       hauppauge_eeprom(dev, eeprom+0x80);
               break;
       case CX23885_BOARD_HAUPPAUGE_HVR1250: /*added*/
       case CX23885_BOARD_HAUPPAUGE_HVR1800:
       case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
       case CX23885_BOARD_HAUPPAUGE_HVR1200:
       case CX23885_BOARD_HAUPPAUGE_HVR1700:
               if (dev->i2c_bus[0].i2c_rc == 0)
                       hauppauge_eeprom(dev, eeprom+0xc0);
               break;
       }

I hope this helps.

Michel

#1 lore raw
Quoted 9 lines
       switch (dev->board) {
/* removed        case CX23885_BOARD_HAUPPAUGE_HVR1250: */
       case CX23885_BOARD_HAUPPAUGE_HVR1500:
       case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
       case CX23885_BOARD_HAUPPAUGE_HVR1400:
               if (dev->i2c_bus[0].i2c_rc == 0)
                       hauppauge_eeprom(dev, eeprom+0x80);
               break;
       case CX23885_BOARD_HAUPPAUGE_HVR1250: /*added*/
Quoted 8 lines
       case CX23885_BOARD_HAUPPAUGE_HVR1800:
       case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
       case CX23885_BOARD_HAUPPAUGE_HVR1200:
       case CX23885_BOARD_HAUPPAUGE_HVR1700:
               if (dev->i2c_bus[0].i2c_rc == 0)
                       hauppauge_eeprom(dev, eeprom+0xc0);
               break;
       }

Thanks.

Hauppauge have various revs of the 1250 and the eeprom offset can change. It looks like your model is different the the stock HVR-1250 I've seen.

- Steve

#3 lore raw
In reply to a message not in the archive
Quoted 28 lines · Michel Dansereau

Then my next question is: how different is my board from the one supported? Does the analog section work at this point? Sure does not for me!

Quoted 23 lines · Steven Toth
Quoted 9 lines
       switch (dev->board) {
/* removed        case CX23885_BOARD_HAUPPAUGE_HVR1250: */
       case CX23885_BOARD_HAUPPAUGE_HVR1500:
       case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
       case CX23885_BOARD_HAUPPAUGE_HVR1400:
               if (dev->i2c_bus[0].i2c_rc == 0)
                       hauppauge_eeprom(dev, eeprom+0x80);
               break;
       case CX23885_BOARD_HAUPPAUGE_HVR1250: /*added*/
Quoted 8 lines
       case CX23885_BOARD_HAUPPAUGE_HVR1800:
       case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
       case CX23885_BOARD_HAUPPAUGE_HVR1200:
       case CX23885_BOARD_HAUPPAUGE_HVR1700:
               if (dev->i2c_bus[0].i2c_rc == 0)
                       hauppauge_eeprom(dev, eeprom+0xc0);
               break;
       }

Thanks.

Hauppauge have various revs of the 1250 and the eeprom offset can change. It looks like your model is different the the stock HVR-1250 I've seen.

- Steve

Please don't drop the mailing list off of replies. Linux wouldn't exist if we perpetuated this habit.

To answer your question, no significant differences. Analog won't work because I haven't done it. :)

The eeprom offset is the only notable difference at this point. I'll look into this, at some point.

- Steve

#9 lore raw
In reply to Steven Toth

I have implemented this same change and found this eeprom offset works correctly on my HVR-1250 as well. Not that it really helps anything at this point. Is there a datasheet available to the public for this chipset?

Quoted 28 lines · Steven Toth
Quoted 9 lines
       switch (dev->board) {
/* removed        case CX23885_BOARD_HAUPPAUGE_HVR1250: */
       case CX23885_BOARD_HAUPPAUGE_HVR1500:
       case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
       case CX23885_BOARD_HAUPPAUGE_HVR1400:
               if (dev->i2c_bus[0].i2c_rc == 0)
                       hauppauge_eeprom(dev, eeprom+0x80);
               break;
       case CX23885_BOARD_HAUPPAUGE_HVR1250: /*added*/
Quoted 8 lines
       case CX23885_BOARD_HAUPPAUGE_HVR1800:
       case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
       case CX23885_BOARD_HAUPPAUGE_HVR1200:
       case CX23885_BOARD_HAUPPAUGE_HVR1700:
               if (dev->i2c_bus[0].i2c_rc == 0)
                       hauppauge_eeprom(dev, eeprom+0xc0);
               break;
       }

Thanks.

Hauppauge have various revs of the 1250 and the eeprom offset can change. It looks like your model is different the the stock HVR-1250 I've seen.

- Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#4 lore raw
In reply to Steven Toth

Steve,
Point taken about dropping the mailing list.
Thanks!
Michel

Quoted 37 lines · Steven Toth
Quoted 28 lines · Michel Dansereau

Then my next question is: how different is my board from the one supported? Does the analog section work at this point? Sure does not for me!

Quoted 23 lines · Steven Toth
Quoted 9 lines
       switch (dev->board) {
/* removed        case CX23885_BOARD_HAUPPAUGE_HVR1250: */
       case CX23885_BOARD_HAUPPAUGE_HVR1500:
       case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
       case CX23885_BOARD_HAUPPAUGE_HVR1400:
               if (dev->i2c_bus[0].i2c_rc == 0)
                       hauppauge_eeprom(dev, eeprom+0x80);
               break;
       case CX23885_BOARD_HAUPPAUGE_HVR1250: /*added*/
Quoted 8 lines
       case CX23885_BOARD_HAUPPAUGE_HVR1800:
       case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
       case CX23885_BOARD_HAUPPAUGE_HVR1200:
       case CX23885_BOARD_HAUPPAUGE_HVR1700:
               if (dev->i2c_bus[0].i2c_rc == 0)
                       hauppauge_eeprom(dev, eeprom+0xc0);
               break;
       }

Thanks.

Hauppauge have various revs of the 1250 and the eeprom offset can change. It looks like your model is different the the stock HVR-1250 I've seen.

- Steve

Please don't drop the mailing list off of replies. Linux wouldn't exist if we perpetuated this habit.

To answer your question, no significant differences. Analog won't work because I haven't done it. :)

The eeprom offset is the only notable difference at this point. I'll look into this, at some point.

- Steve

#5 lore raw
Quoted 4 lines · Michel Dansereau

Steve,
Point taken about dropping the mailing list.
Thanks!
Michel

Thanks, one last question.

Look a the white Hauppauge label on the HVR-1250 tuner, its should say something like Rev NNNN.

What is your rev?

- Steve

#6 lore raw

I have rev E1D9. Below is my dmesg output after applying the same change as Michel had shown.

[  466.833952] cx23885 driver version 0.0.1 loaded
[  466.833979] cx23885 0000:03:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19
[  466.833981] cx23885[0]/0: cx23885_dev_setup() Memory configured for PCIe bridge type 885
[  466.833982] cx23885[0]/0: cx23885_init_tsport(portno=2)
[  466.834054] CORE cx23885[0]: subsystem: 0070:7911, board: Hauppauge WinTV-HVR1250 [card=3,autodetected]
[  466.834055] cx23885[0]/0: cx23885_pci_quirks()
[  466.834057] cx23885[0]/0: cx23885_dev_setup() tuner_type = 0x0 tuner_addr = 0x0
[  466.834059] cx23885[0]/0: cx23885_dev_setup() radio_type = 0x0 radio_addr = 0x0
[  466.834059] cx23885[0]/0: cx23885_reset()
[  466.934080] cx23885[0]/0: cx23885_sram_channel_setup() Configuring channel [VID A]
[  466.934091] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch2]
[  466.934092] cx23885[0]/0: cx23885_sram_channel_setup() Configuring channel [TS1 B]
[  466.934106] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch4]
[  466.934107] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch5]
[  466.934108] cx23885[0]/0: cx23885_sram_channel_setup() Configuring channel [TS2 C]
[  466.934122] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch7]
[  466.934123] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch8]
[  466.934125] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch9]
[  466.961642] tveeprom 1-0050: Hauppauge model 79001, rev E1D9, serial# 3450857
[  466.961645] tveeprom 1-0050: MAC address is 00-0D-FE-34-A7-E9
[  466.961646] tveeprom 1-0050: tuner model is Microtune MT2131 (idx 139, type 4)
[  466.961648] tveeprom 1-0050: TV standards NTSC(M) ATSC/DVB Digital (eeprom 0x88)
[  466.961649] tveeprom 1-0050: audio processor is CX23885 (idx 39)
[  466.961650] tveeprom 1-0050: decoder processor is CX23885 (idx 33)
[  466.961651] tveeprom 1-0050: has no radio, has IR receiver, has no IR transmitter
[  466.961652] cx23885[0]: hauppauge eeprom: model=79001
[  466.961654] cx23885_dvb_register() allocating 1 frontend(s)
[  466.962728] cx23885[0]: cx23885 based dvb card
[  466.991727] MT2131: successfully identified at address 0x61
[  466.991730] DVB: registering new adapter (cx23885[0])
[  466.991732] DVB: registering adapter 0 frontend -1601531515 (Samsung S5H1409 QAM/8VSB Frontend)...
[  466.992748] cx23885_dev_checkrevision() Hardware revision = 0xc0
[  466.992754] cx23885[0]/0: found at 0000:03:00.0, rev: 3, irq: 19, latency: 0, mmio: 0xea000000
[  466.992761] cx23885 0000:03:00.0: setting latency timer to 64
Quoted 19 lines · Steven Toth
Quoted 4 lines · Michel Dansereau

Steve,
Point taken about dropping the mailing list.
Thanks!
Michel

Thanks, one last question.

Look a the white Hauppauge label on the HVR-1250 tuner, its should say something like Rev NNNN.

What is your rev?

- Steve

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#7 lore raw
In reply to Steven Toth

Hi,
The label says E2D9.
Michel

Quoted 14 lines · Steven Toth
Quoted 4 lines · Michel Dansereau

Steve,
Point taken about dropping the mailing list.
Thanks!
Michel

Thanks, one last question.

Look a the white Hauppauge label on the HVR-1250 tuner, its should say something like Rev NNNN.

What is your rev?

- Steve

#8 lore raw
In reply to Steven Toth

I have rev E1D9. Below is my dmesg output after applying the same change as Michel had shown.

[  466.833952] cx23885 driver version 0.0.1 loaded
[  466.833979] cx23885 0000:03:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19
[  466.833981] cx23885[0]/0: cx23885_dev_setup() Memory configured for PCIe bridge type 885
[  466.833982] cx23885[0]/0: cx23885_init_tsport(portno=2)
[  466.834054] CORE cx23885[0]: subsystem: 0070:7911, board: Hauppauge WinTV-HVR1250 [card=3,autodetected]
[  466.834055] cx23885[0]/0: cx23885_pci_quirks()
[  466.834057] cx23885[0]/0: cx23885_dev_setup() tuner_type = 0x0 tuner_addr = 0x0
[  466.834059] cx23885[0]/0: cx23885_dev_setup() radio_type = 0x0 radio_addr = 0x0
[  466.834059] cx23885[0]/0: cx23885_reset()
[  466.934080] cx23885[0]/0: cx23885_sram_channel_setup() Configuring channel [VID A]
[  466.934091] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch2]
[  466.934092] cx23885[0]/0: cx23885_sram_channel_setup() Configuring channel [TS1 B]
[  466.934106] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch4]
[  466.934107] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch5]
[  466.934108] cx23885[0]/0: cx23885_sram_channel_setup() Configuring channel [TS2 C]
[  466.934122] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch7]
[  466.934123] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch8]
[  466.934125] cx23885[0]/0: cx23885_sram_channel_setup() Erasing channel [ch9]
[  466.961642] tveeprom 1-0050: Hauppauge model 79001, rev E1D9, serial# 3450857
[  466.961645] tveeprom 1-0050: MAC address is 00-0D-FE-34-A7-E9
[  466.961646] tveeprom 1-0050: tuner model is Microtune MT2131 (idx 139, type 4)
[  466.961648] tveeprom 1-0050: TV standards NTSC(M) ATSC/DVB Digital (eeprom 0x88)
[  466.961649] tveeprom 1-0050: audio processor is CX23885 (idx 39)
[  466.961650] tveeprom 1-0050: decoder processor is CX23885 (idx 33)
[  466.961651] tveeprom 1-0050: has no radio, has IR receiver, has no IR transmitter
[  466.961652] cx23885[0]: hauppauge eeprom: model=79001
[  466.961654] cx23885_dvb_register() allocating 1 frontend(s)
[  466.962728] cx23885[0]: cx23885 based dvb card
[  466.991727] MT2131: successfully identified at address 0x61
[  466.991730] DVB: registering new adapter (cx23885[0])
[  466.991732] DVB: registering adapter 0 frontend -1601531515 (Samsung S5H1409 QAM/8VSB Frontend)...
[  466.992748] cx23885_dev_checkrevision() Hardware revision = 0xc0
[  466.992754] cx23885[0]/0: found at 0000:03:00.0, rev: 3, irq: 19, latency: 0, mmio: 0xea000000
[  466.992761] cx23885 0000:03:00.0: setting latency timer to 64
Quoted 19 lines · Steven Toth
Quoted 4 lines · Michel Dansereau

Steve,
Point taken about dropping the mailing list.
Thanks!
Michel

Thanks, one last question.

Look a the white Hauppauge label on the HVR-1250 tuner, its should say something like Rev NNNN.

What is your rev?

- Steve

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html