Message ID | 4974E4BE.2060107@free.fr (mailing list archive) |
---|---|
State | Rejected |
Headers | show |
On Mon, 19 Jan 2009 21:38:22 +0100 matthieu castet <castet.matthieu@free.fr> wrote: > matthieu castet wrote: > > Hi, > > > > I got a LITE-ON USB2.0 DVB-T Tuner that loose it's cold state vid/pid > > and got FX2 dev kit one (0x04b4, 0x8613). > > > > This patch introduce an option similar to the DVB_USB_DIBUSB_MB_FAULTY : > > it add the FX2 dev kit ids to the DIBUSB_MC driver if > > DVB_USB_DIBUSB_MC_FAULTY is selected. > > > > Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr> > > > > diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig > index f00a0eb..a656b9b 100644 > --- a/drivers/media/dvb/dvb-usb/Kconfig > +++ b/drivers/media/dvb/dvb-usb/Kconfig > @@ -68,6 +68,12 @@ config DVB_USB_DIBUSB_MC > Say Y if you own such a device and want to use it. You should build it as > a module. > > +config DVB_USB_DIBUSB_MC_FAULTY > + bool "Support faulty USB IDs" > + depends on DVB_USB_DIBUSB_MC > + help > + Support for faulty USB IDs due to an invalid EEPROM on some LITE-ON devices. > + > config DVB_USB_DIB0700 > tristate "DiBcom DiB0700 USB DVB devices (see help for supported devices)" > depends on DVB_USB > diff --git a/drivers/media/dvb/dvb-usb/dibusb-mc.c b/drivers/media/dvb/dvb-usb/dibusb-mc.c > index 059cec9..ab5766a 100644 > --- a/drivers/media/dvb/dvb-usb/dibusb-mc.c > +++ b/drivers/media/dvb/dvb-usb/dibusb-mc.c > @@ -42,6 +42,17 @@ static struct usb_device_id dibusb_dib3000mc_table [] = { > /* 11 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ARTEC_T14_WARM) }, > /* 12 */ { USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_COLD) }, > /* 13 */ { USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_WARM) }, > +/* > + * XXX: Some LITE-ON devices seem to loose their id after some time. Bad EEPROM ???. > + * We don't catch these faulty IDs (namely 'Cypress FX2 USB controller') that > + * have been left on the device. If you don't have such a device but an LITE-ON > + * device that's supposed to work with this driver but is not detected by it, > + * free to enable CONFIG_DVB_USB_DIBUSB_MC_FAULTY via your kernel config. > + */ > + > +#ifdef CONFIG_DVB_USB_DIBUSB_MC_FAULTY > +/* 14 */ { USB_DEVICE(USB_VID_CYPRESS, USB_PID_ULTIMA_TVBOX_USB2_FX_COLD) }, > +#endif It doesn't sound a very good approach the need of recompiling the driver to allow it to work with a broken card. The better would be to have some modprobe option to force it to accept a certain USB ID as a valid ID for the card. > { } /* Terminating entry */ > }; > MODULE_DEVICE_TABLE (usb, dibusb_dib3000mc_table); > @@ -88,7 +99,11 @@ static struct dvb_usb_device_properties dibusb_mc_properties = { > > .generic_bulk_ctrl_endpoint = 0x01, > > +#ifdef CONFIG_DVB_USB_DIBUSB_MC_FAULTY > + .num_device_descs = 8, > +#else > .num_device_descs = 7, > +#endif The above is really ugly. IMO, we should replace this by ARRAY_SIZE(dibusb_mc_properties.devices). Of course, for this to work, num_device_descs should be bellow devices. > .devices = { > { "DiBcom USB2.0 DVB-T reference design (MOD3000P)", > { &dibusb_dib3000mc_table[0], NULL }, > @@ -119,6 +134,13 @@ static struct dvb_usb_device_properties dibusb_mc_properties = { > { &dibusb_dib3000mc_table[12], NULL }, > { &dibusb_dib3000mc_table[13], NULL }, > }, > +#ifdef CONFIG_DVB_USB_DIBUSB_MC_FAULTY > + { "LITE-ON USB2.0 DVB-T Tuner (faulty USB IDs)", > + /* Also rebranded as Intuix S800, Toshiba */ > + { &dibusb_dib3000mc_table[14], NULL }, > + { NULL }, > + }, > +#endif > { NULL }, > } > }; Patrick, Comments? Cheers, Mauro -- 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
Hi, sorry for not answering ealier, recently I became the master of postponing things. :( On Thu, 29 Jan 2009, Mauro Carvalho Chehab wrote: >> +/* 14 */ { USB_DEVICE(USB_VID_CYPRESS, USB_PID_ULTIMA_TVBOX_USB2_FX_COLD) }, >> +#endif > > It doesn't sound a very good approach the need of recompiling the driver to > allow it to work with a broken card. The better would be to have some modprobe > option to force it to accept a certain USB ID as a valid ID for the card. The most correct way would be to reprogram the eeprom, by simply writing to 0xa0 (0x50 << 1) I2C address... There was a thread on the linux-dvb some time ago. > The above is really ugly. IMO, we should replace this by > ARRAY_SIZE(dibusb_mc_properties.devices). Of course, for this to work, > num_device_descs should be bellow devices. We could do that, still I'm not sure if ARRAY_SIZE will work in that situation?! Are you sure, Mauro? Patrick. -- Mail: patrick.boettcher@desy.de WWW: http://www.wi-bw.tfh-wildau.de/~pboettch/ -- 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
Hi Patrick, Patrick Boettcher wrote: > Hi, > > sorry for not answering ealier, recently I became the master of > postponing things. :( > > On Thu, 29 Jan 2009, Mauro Carvalho Chehab wrote: > >>> +/* 14 */ { USB_DEVICE(USB_VID_CYPRESS, >>> USB_PID_ULTIMA_TVBOX_USB2_FX_COLD) }, >>> +#endif >> >> It doesn't sound a very good approach the need of recompiling the >> driver to >> allow it to work with a broken card. The better would be to have some >> modprobe >> option to force it to accept a certain USB ID as a valid ID for the card. > > The most correct way would be to reprogram the eeprom, by simply writing > to 0xa0 (0x50 << 1) I2C address... There was a thread on the linux-dvb > some time ago. > Why not, I only don't want to maintain a patch for my device. I wonder why didn't they use WP pin of the eeprom to avoid write. Do you know what should be written. After a quick search, I found [1]. Is that ok ? Matthieu [1] EEPROM Address Contents 0 0xC0 1 Vendor ID (VID) L 2 Vendor ID (VID) H 3 Product ID (PID) L 4 Product ID (PID) H 5 Device ID (DID) L 6 Device ID (DID) H 7 Configuration byte -- 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
matthieu castet wrote: > Hi Patrick, > > Patrick Boettcher wrote: >> Hi, >> >> sorry for not answering ealier, recently I became the master of >> postponing things. :( >> >> On Thu, 29 Jan 2009, Mauro Carvalho Chehab wrote: >> >>>> +/* 14 */ { USB_DEVICE(USB_VID_CYPRESS, >>>> USB_PID_ULTIMA_TVBOX_USB2_FX_COLD) }, >>>> +#endif >>> >>> It doesn't sound a very good approach the need of recompiling the >>> driver to >>> allow it to work with a broken card. The better would be to have some >>> modprobe >>> option to force it to accept a certain USB ID as a valid ID for the >>> card. >> >> The most correct way would be to reprogram the eeprom, by simply >> writing to 0xa0 (0x50 << 1) I2C address... There was a thread on the >> linux-dvb some time ago. >> BTW dibusb_i2c_xfer seems to do things very dangerous : it assumes that it get only write/read request or write request. That means that read can be understood as write. For example a program doing file = open("/dev/i2c-x", O_RDWR); ioctl(file, I2C_SLAVE, 0x50) read(file, data, 10) will corrupt the eeprom as it will be understood as a write. Now that I think of that, I run sensors-detect on this machine, may be this is what trash the eeprom ? Matthieu -- 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
diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig index f00a0eb..a656b9b 100644 --- a/drivers/media/dvb/dvb-usb/Kconfig +++ b/drivers/media/dvb/dvb-usb/Kconfig @@ -68,6 +68,12 @@ config DVB_USB_DIBUSB_MC Say Y if you own such a device and want to use it. You should build it as a module. +config DVB_USB_DIBUSB_MC_FAULTY + bool "Support faulty USB IDs" + depends on DVB_USB_DIBUSB_MC + help + Support for faulty USB IDs due to an invalid EEPROM on some LITE-ON devices. + config DVB_USB_DIB0700 tristate "DiBcom DiB0700 USB DVB devices (see help for supported devices)" depends on DVB_USB diff --git a/drivers/media/dvb/dvb-usb/dibusb-mc.c b/drivers/media/dvb/dvb-usb/dibusb-mc.c index 059cec9..ab5766a 100644 --- a/drivers/media/dvb/dvb-usb/dibusb-mc.c +++ b/drivers/media/dvb/dvb-usb/dibusb-mc.c @@ -42,6 +42,17 @@ static struct usb_device_id dibusb_dib3000mc_table [] = { /* 11 */ { USB_DEVICE(USB_VID_ULTIMA_ELECTRONIC, USB_PID_ARTEC_T14_WARM) }, /* 12 */ { USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_COLD) }, /* 13 */ { USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_WARM) }, +/* + * XXX: Some LITE-ON devices seem to loose their id after some time. Bad EEPROM ???. + * We don't catch these faulty IDs (namely 'Cypress FX2 USB controller') that + * have been left on the device. If you don't have such a device but an LITE-ON + * device that's supposed to work with this driver but is not detected by it, + * free to enable CONFIG_DVB_USB_DIBUSB_MC_FAULTY via your kernel config. + */ + +#ifdef CONFIG_DVB_USB_DIBUSB_MC_FAULTY +/* 14 */ { USB_DEVICE(USB_VID_CYPRESS, USB_PID_ULTIMA_TVBOX_USB2_FX_COLD) }, +#endif { } /* Terminating entry */ }; MODULE_DEVICE_TABLE (usb, dibusb_dib3000mc_table); @@ -88,7 +99,11 @@ static struct dvb_usb_device_properties dibusb_mc_properties = { .generic_bulk_ctrl_endpoint = 0x01, +#ifdef CONFIG_DVB_USB_DIBUSB_MC_FAULTY + .num_device_descs = 8, +#else .num_device_descs = 7, +#endif .devices = { { "DiBcom USB2.0 DVB-T reference design (MOD3000P)", { &dibusb_dib3000mc_table[0], NULL }, @@ -119,6 +134,13 @@ static struct dvb_usb_device_properties dibusb_mc_properties = { { &dibusb_dib3000mc_table[12], NULL }, { &dibusb_dib3000mc_table[13], NULL }, }, +#ifdef CONFIG_DVB_USB_DIBUSB_MC_FAULTY + { "LITE-ON USB2.0 DVB-T Tuner (faulty USB IDs)", + /* Also rebranded as Intuix S800, Toshiba */ + { &dibusb_dib3000mc_table[14], NULL }, + { NULL }, + }, +#endif { NULL }, } };