* dibusb-common.c FE_HAS_LOCK problem
@ 2009-11-07 9:56 Mario Bachmann
2009-11-19 15:37 ` Patrick Boettcher
0 siblings, 1 reply; 10+ messages in thread
From: Mario Bachmann @ 2009-11-07 9:56 UTC (permalink / raw)
To: Patrick Boettcher; +Cc: linux-media
Hi there,
I tried linux-2.6.31.5 and tuning still does not work:
tuning to 738000000 Hz
video pid 0x0131, audio pid 0x0132
status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
status 04 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
With some changes for the following file it works again:
/usr/src/linux/drivers/media/dvb/dvb-usb/dibusb-common.c
diff -Naur dibusb-common.c-ORIGINAL dibusb-common.c
--- dibusb-common.c-ORIGINAL 2009-11-07 10:30:43.705344308 +0100
+++ dibusb-common.c 2009-11-07 10:33:49.969345253 +0100
@@ -133,17 +133,14 @@
for (i = 0; i < num; i++) {
/* write/read request */
- if (i+1 < num && (msg[i].flags & I2C_M_RD) == 0
- && (msg[i+1].flags & I2C_M_RD)) {
+ if (i+1 < num && (msg[i+1].flags & I2C_M_RD)) {
if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,
msg[i+1].buf,msg[i+1].len) < 0)
break;
i++;
- } else if ((msg[i].flags & I2C_M_RD) == 0) {
+ } else
if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,NULL,0) < 0)
break;
- } else
- break;
}
mutex_unlock(&d->i2c_mutex);
With this patch, tuning works again:
tuning to 738000000 Hz
video pid 0x0131, audio pid 0x0132
status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
status 1f | signal ffff | snr 008d | ber 001fffff | unc 0000ffff | FE_HAS_LOCK
status 1f | signal ffff | snr 00a1 | ber 000005a4 | unc 00000043 | FE_HAS_LOCK
status 1f | signal ffff | snr 00a3 | ber 000005a4 | unc 00000043 | FE_HAS_LOCK
status 1f | signal ffff | snr 009d | ber 00000000 | unc 00000000 | FE_HAS_LOCK
This is my DVB-T-Box (dmesg):
usb 4-2: new full speed USB device using ohci_hcd and address 6
usb 4-2: configuration #1 chosen from 1 choice
dvb-usb: found a 'TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1
DVB-T device' in warm state. dvb-usb: will use the device's hardware
PID filter (table count: 16). DVB: registering new adapter (TwinhanDTV
USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device) DVB:
registering adapter 0 frontend 0 (DiBcom 3000M-B DVB-T)... dibusb: This
device has the Thomson Cable onboard. Which is default. input:
IR-receiver inside an USB DVB receiver
as /devices/pci0000:00/0000:00:04.0/usb4/4-2/input/input6 dvb-usb:
schedule remote query interval to 150 msecs. dvb-usb: TwinhanDTV
USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device successfully
initialized and connected.
Mario
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: dibusb-common.c FE_HAS_LOCK problem
2009-11-07 9:56 dibusb-common.c FE_HAS_LOCK problem Mario Bachmann
@ 2009-11-19 15:37 ` Patrick Boettcher
2009-11-21 17:25 ` grafgrimm77
0 siblings, 1 reply; 10+ messages in thread
From: Patrick Boettcher @ 2009-11-19 15:37 UTC (permalink / raw)
To: Mario Bachmann; +Cc: Linux Media Mailing List
On Sat, 7 Nov 2009, Mario Bachmann wrote:
> Hi there,
>
> I tried linux-2.6.31.5 and tuning still does not work:
> tuning to 738000000 Hz
> video pid 0x0131, audio pid 0x0132
> status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> status 04 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
>
> With some changes for the following file it works again:
> /usr/src/linux/drivers/media/dvb/dvb-usb/dibusb-common.c
>
> diff -Naur dibusb-common.c-ORIGINAL dibusb-common.c
>
> --- dibusb-common.c-ORIGINAL 2009-11-07 10:30:43.705344308 +0100
> +++ dibusb-common.c 2009-11-07 10:33:49.969345253 +0100
> @@ -133,17 +133,14 @@
>
> for (i = 0; i < num; i++) {
> /* write/read request */
> - if (i+1 < num && (msg[i].flags & I2C_M_RD) == 0
> - && (msg[i+1].flags & I2C_M_RD)) {
> + if (i+1 < num && (msg[i+1].flags & I2C_M_RD)) {
> if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,
> msg[i+1].buf,msg[i+1].len) < 0)
> break;
> i++;
> - } else if ((msg[i].flags & I2C_M_RD) == 0) {
> + } else
> if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,NULL,0) < 0)
> break;
> - } else
> - break;
> }
Doing it is reverting a fix which avoids that uncontrolled i2c-access from
userspace is destroying the USB-eeprom.
I understand that this is breaking the tuning for your board. I'm just not
understanding why.
If you have some time to debug this issue, could you please try the
following:
One of the devices for your board is trying to do an I2c access which is
falling into the last 'else'-branch - can you add a printk to find out
which one it is? The access must be wrongly constructed and must be fixed
in that driver.
thanks,
PS: if you don't have time to do it, please tell so.
--
Patrick
http://www.kernellabs.com/
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: dibusb-common.c FE_HAS_LOCK problem
2009-11-19 15:37 ` Patrick Boettcher
@ 2009-11-21 17:25 ` grafgrimm77
2009-11-23 9:01 ` Patrick Boettcher
0 siblings, 1 reply; 10+ messages in thread
From: grafgrimm77 @ 2009-11-21 17:25 UTC (permalink / raw)
To: Patrick Boettcher; +Cc: Linux Media Mailing List
Am Thu, 19 Nov 2009 16:37:18 +0100 (CET)
schrieb Patrick Boettcher <pboettcher@kernellabs.com>:
> On Sat, 7 Nov 2009, Mario Bachmann wrote:
>
> > Hi there,
> >
> > I tried linux-2.6.31.5 and tuning still does not work:
> > tuning to 738000000 Hz
> > video pid 0x0131, audio pid 0x0132
> > status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> > status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> > status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> > status 04 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> >
> > With some changes for the following file it works again:
> > /usr/src/linux/drivers/media/dvb/dvb-usb/dibusb-common.c
> >
> > diff -Naur dibusb-common.c-ORIGINAL dibusb-common.c
> >
> > --- dibusb-common.c-ORIGINAL 2009-11-07 10:30:43.705344308 +0100
> > +++ dibusb-common.c 2009-11-07 10:33:49.969345253 +0100
> > @@ -133,17 +133,14 @@
> >
> > for (i = 0; i < num; i++) {
> > /* write/read request */
> > - if (i+1 < num && (msg[i].flags & I2C_M_RD) == 0
> > - && (msg[i+1].flags & I2C_M_RD)) {
> > + if (i+1 < num && (msg[i+1].flags & I2C_M_RD)) {
> > if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,
> > msg[i+1].buf,msg[i+1].len) < 0)
> > break;
> > i++;
> > - } else if ((msg[i].flags & I2C_M_RD) == 0) {
> > + } else
> > if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,NULL,0) < 0)
> > break;
> > - } else
> > - break;
> > }
>
> Doing it is reverting a fix which avoids that uncontrolled i2c-access from
> userspace is destroying the USB-eeprom.
>
> I understand that this is breaking the tuning for your board. I'm just not
> understanding why.
>
> If you have some time to debug this issue, could you please try the
> following:
>
> One of the devices for your board is trying to do an I2c access which is
> falling into the last 'else'-branch - can you add a printk to find out
> which one it is? The access must be wrongly constructed and must be fixed
> in that driver.
>
> thanks,
>
> PS: if you don't have time to do it, please tell so.
>
> --
>
> Patrick
> http://www.kernellabs.com/
I do not understand exactly. printk what? Could you please give me a
complete piece of code with the printk command? Would be great!
My printk-tries ends up in an "Oops".
Thank you.
Mario
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: dibusb-common.c FE_HAS_LOCK problem
2009-11-21 17:25 ` grafgrimm77
@ 2009-11-23 9:01 ` Patrick Boettcher
2009-11-23 11:03 ` Mario Bachmann
0 siblings, 1 reply; 10+ messages in thread
From: Patrick Boettcher @ 2009-11-23 9:01 UTC (permalink / raw)
To: grafgrimm77; +Cc: Linux Media Mailing List
Hi Mario,
On Sat, 21 Nov 2009, grafgrimm77@gmx.de wrote:
> Am Thu, 19 Nov 2009 16:37:18 +0100 (CET)
> schrieb Patrick Boettcher <pboettcher@kernellabs.com>:
>
>> On Sat, 7 Nov 2009, Mario Bachmann wrote:
>>
>>> Hi there,
>>>
>>> I tried linux-2.6.31.5 and tuning still does not work:
>>> tuning to 738000000 Hz
>>> video pid 0x0131, audio pid 0x0132
>>> status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
>>> status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
>>> status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
>>> status 04 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
>>>
>>> With some changes for the following file it works again:
>>> /usr/src/linux/drivers/media/dvb/dvb-usb/dibusb-common.c
>>>
>>> diff -Naur dibusb-common.c-ORIGINAL dibusb-common.c
>>>
>>> --- dibusb-common.c-ORIGINAL 2009-11-07 10:30:43.705344308 +0100
>>> +++ dibusb-common.c 2009-11-07 10:33:49.969345253 +0100
>>> @@ -133,17 +133,14 @@
>>>
>>> for (i = 0; i < num; i++) {
>>> /* write/read request */
>>> - if (i+1 < num && (msg[i].flags & I2C_M_RD) == 0
>>> - && (msg[i+1].flags & I2C_M_RD)) {
>>> + if (i+1 < num && (msg[i+1].flags & I2C_M_RD)) {
>>> if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,
>>> msg[i+1].buf,msg[i+1].len) < 0)
>>> break;
>>> i++;
>>> - } else if ((msg[i].flags & I2C_M_RD) == 0) {
>>> + } else
>>> if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,NULL,0) < 0)
>>> break;
>>> - } else
>>> - break;
>>> }
>>
>> Doing it is reverting a fix which avoids that uncontrolled i2c-access from
>> userspace is destroying the USB-eeprom.
>>
>> I understand that this is breaking the tuning for your board. I'm just not
>> understanding why.
>>
>> If you have some time to debug this issue, could you please try the
>> following:
>>
>> One of the devices for your board is trying to do an I2c access which is
>> falling into the last 'else'-branch - can you add a printk to find out
>> which one it is? The access must be wrongly constructed and must be fixed
>> in that driver.
>>
>> thanks,
>>
>> PS: if you don't have time to do it, please tell so.
>>
>> --
>>
>> Patrick
>> http://www.kernellabs.com/
>
> I do not understand exactly. printk what? Could you please give me a
> complete piece of code with the printk command? Would be great!
>
> My printk-tries ends up in an "Oops".
There is a
} else
break;
sequence in dibusb_i2c_xfer
instead of break, please add something like
printk(KERN_ERR "----- hello stupid I2C access ----\n");
recompile and load the new module, then check whether the line is
appearing in /var/log/messages or /var/log/syslog when you tune the board.
If this is the case, try to identify which device is issuing the access by
printing the i2c-address of struct i2c_msg.
HTH,
--
Patrick
http://www.kernellabs.com/
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: dibusb-common.c FE_HAS_LOCK problem
2009-11-23 9:01 ` Patrick Boettcher
@ 2009-11-23 11:03 ` Mario Bachmann
2009-11-23 11:11 ` Patrick Boettcher
0 siblings, 1 reply; 10+ messages in thread
From: Mario Bachmann @ 2009-11-23 11:03 UTC (permalink / raw)
To: Patrick Boettcher; +Cc: Linux Media Mailing List
Am Mon, 23 Nov 2009 10:01:36 +0100 (CET)
schrieb Patrick Boettcher <pboettcher@kernellabs.com>:
> Hi Mario,
>
> On Sat, 21 Nov 2009, grafgrimm77@gmx.de wrote:
>
> > Am Thu, 19 Nov 2009 16:37:18 +0100 (CET)
> > schrieb Patrick Boettcher <pboettcher@kernellabs.com>:
> >
> >> On Sat, 7 Nov 2009, Mario Bachmann wrote:
> >>
> >>> Hi there,
> >>>
> >>> I tried linux-2.6.31.5 and tuning still does not work:
> >>> tuning to 738000000 Hz
> >>> video pid 0x0131, audio pid 0x0132
> >>> status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> >>> status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> >>> status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> >>> status 04 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> >>>
> >>> With some changes for the following file it works again:
> >>> /usr/src/linux/drivers/media/dvb/dvb-usb/dibusb-common.c
> >>>
> >>> diff -Naur dibusb-common.c-ORIGINAL dibusb-common.c
> >>>
> >>> --- dibusb-common.c-ORIGINAL 2009-11-07 10:30:43.705344308 +0100
> >>> +++ dibusb-common.c 2009-11-07 10:33:49.969345253 +0100
> >>> @@ -133,17 +133,14 @@
> >>>
> >>> for (i = 0; i < num; i++) {
> >>> /* write/read request */
> >>> - if (i+1 < num && (msg[i].flags & I2C_M_RD) == 0
> >>> - && (msg[i+1].flags & I2C_M_RD)) {
> >>> + if (i+1 < num && (msg[i+1].flags & I2C_M_RD)) {
> >>> if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,
> >>> msg[i+1].buf,msg[i+1].len) < 0)
> >>> break;
> >>> i++;
> >>> - } else if ((msg[i].flags & I2C_M_RD) == 0) {
> >>> + } else
> >>> if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,NULL,0) < 0)
> >>> break;
> >>> - } else
> >>> - break;
> >>> }
> >>
> >> Doing it is reverting a fix which avoids that uncontrolled i2c-access from
> >> userspace is destroying the USB-eeprom.
> >>
> >> I understand that this is breaking the tuning for your board. I'm just not
> >> understanding why.
> >>
> >> If you have some time to debug this issue, could you please try the
> >> following:
> >>
> >> One of the devices for your board is trying to do an I2c access which is
> >> falling into the last 'else'-branch - can you add a printk to find out
> >> which one it is? The access must be wrongly constructed and must be fixed
> >> in that driver.
> >>
> >> thanks,
> >>
> >> PS: if you don't have time to do it, please tell so.
> >>
> >> --
> >>
> >> Patrick
> >> http://www.kernellabs.com/
> >
> > I do not understand exactly. printk what? Could you please give me a
> > complete piece of code with the printk command? Would be great!
> >
> > My printk-tries ends up in an "Oops".
>
> There is a
> } else
> break;
>
> sequence in dibusb_i2c_xfer
>
> instead of break, please add something like
>
> printk(KERN_ERR "----- hello stupid I2C access ----\n");
>
> recompile and load the new module, then check whether the line is
> appearing in /var/log/messages or /var/log/syslog when you tune the board.
>
> If this is the case, try to identify which device is issuing the access by
> printing the i2c-address of struct i2c_msg.
>
> HTH,
> --
>
> Patrick
> http://www.kernellabs.com/
Hello Patrick,
I tried it with Kernel 2.6.31.6 (same as before).
I made the printk-change, recompiled and reloaded the modules and pluged in my Twinhan Magic Box...
It definately jumps in the last else-branch and shows "hello stupid I2C access", but no KERN_ERR ?!
dmesg
usb 4-2: new full speed USB device using ohci_hcd and address 4
usb 4-2: configuration #1 chosen from 1 choice
dvb-usb: found a 'TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device' in cold state, will try to load a firmware
usb 4-2: firmware: requesting dvb-usb-dibusb-5.0.0.11.fw
dvb-usb: downloading firmware from file 'dvb-usb-dibusb-5.0.0.11.fw'
usbcore: registered new interface driver dvb_usb_dibusb_mb
usb 4-2: USB disconnect, address 4
dvb-usb: generic DVB-USB module successfully deinitialized and disconnected.
usb 4-2: new full speed USB device using ohci_hcd and address 5
usb 4-2: configuration #1 chosen from 1 choice
dvb-usb: found a 'TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device' in warm state.
dvb-usb: will use the device's hardware PID filter (table count: 16).
DVB: registering new adapter (TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device)
DVB: registering adapter 0 frontend 0 (DiBcom 3000M-B DVB-T)...
dibusb: This device has the Thomson Cable onboard. Which is default.
----- hello stupid I2C access ----
input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:04.0/usb4/4-2/input/input5
dvb-usb: schedule remote query interval to 150 msecs.
dvb-usb: TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device successfully initialized and connected.
tail -30 /var/log/messages
Nov 23 11:49:46 x2 kernel: usb 4-2: new full speed USB device using ohci_hcd and address 4
Nov 23 11:49:46 x2 kernel: usb 4-2: configuration #1 chosen from 1 choice
Nov 23 11:49:46 x2 kernel: dvb-usb: found a 'TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device' in cold state, will try to load a firmware
Nov 23 11:49:46 x2 kernel: usb 4-2: firmware: requesting dvb-usb-dibusb-5.0.0.11.fw
Nov 23 11:49:46 x2 kernel: dvb-usb: downloading firmware from file 'dvb-usb-dibusb-5.0.0.11.fw'
Nov 23 11:49:48 x2 kernel: usbcore: registered new interface driver dvb_usb_dibusb_mb
Nov 23 11:49:48 x2 kernel: usb 4-2: USB disconnect, address 4
Nov 23 11:49:48 x2 kernel: dvb-usb: generic DVB-USB module successfully deinitialized and disconnected.
Nov 23 11:49:50 x2 kernel: usb 4-2: new full speed USB device using ohci_hcd and address 5
Nov 23 11:49:50 x2 kernel: usb 4-2: configuration #1 chosen from 1 choice
Nov 23 11:49:50 x2 kernel: dvb-usb: found a 'TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device' in warm state.
Nov 23 11:49:50 x2 kernel: dvb-usb: will use the device's hardware PID filter (table count: 16).
Nov 23 11:49:50 x2 kernel: DVB: registering new adapter (TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device)
Nov 23 11:49:50 x2 kernel: DVB: registering adapter 0 frontend 0 (DiBcom 3000M-B DVB-T)...
Nov 23 11:49:50 x2 kernel: dibusb: This device has the Thomson Cable onboard. Which is default.
Nov 23 11:49:50 x2 kernel: ----- hello stupid I2C access ----
Nov 23 11:49:50 x2 kernel: input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:04.0/usb4/4-2/input/input5
Nov 23 11:49:50 x2 kernel: dvb-usb: schedule remote query interval to 150 msecs.
Nov 23 11:49:50 x2 kernel: dvb-usb: TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device successfully initialized and connected.
Hey, without the break-command, tuning seems to work:
$ tzap pro7 -r
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
reading channels from file '/home/grafrotz/.tzap/channels.conf'
tuning to 738000000 Hz
video pid 0x0131, audio pid 0x0132
status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
status 1f | signal 0b20 | snr 008d | ber 001fffff | unc 0000ffff | FE_HAS_LOCK
status 1f | signal f4dd | snr 0077 | ber 00000770 | unc 00000000 | FE_HAS_LOCK
status 1f | signal ffff | snr 008c | ber 00000770 | unc 00000000 | FE_HAS_LOCK
Greetings
Mario
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: dibusb-common.c FE_HAS_LOCK problem
2009-11-23 11:03 ` Mario Bachmann
@ 2009-11-23 11:11 ` Patrick Boettcher
2009-11-23 11:33 ` grafgrimm77
0 siblings, 1 reply; 10+ messages in thread
From: Patrick Boettcher @ 2009-11-23 11:11 UTC (permalink / raw)
To: Mario Bachmann; +Cc: Linux Media Mailing List
On Mon, 23 Nov 2009, Mario Bachmann wrote:
>> sequence in dibusb_i2c_xfer
>>
>> instead of break, please add something like
>>
>> printk(KERN_ERR "----- hello stupid I2C access ----\n");
>>
>> recompile and load the new module, then check whether the line is
>> appearing in /var/log/messages or /var/log/syslog when you tune the board.
>>
>> If this is the case, try to identify which device is issuing the access by
>> printing the i2c-address of struct i2c_msg.
>>
>> HTH,
>> --
>>
>> Patrick
>> http://www.kernellabs.com/
>
> Hello Patrick,
>
> I tried it with Kernel 2.6.31.6 (same as before).
>
> I made the printk-change, recompiled and reloaded the modules and pluged in my Twinhan Magic Box...
> It definately jumps in the last else-branch and shows "hello stupid I2C access", but no KERN_ERR ?!
KERN_ERR is a prefix for printk to define the message priority to high.
(to have it in syslog or messages)
> dibusb: This device has the Thomson Cable onboard. Which is default.
> ----- hello stupid I2C access ----
Hmm... where is this coming from:
can you write it like that:
else {
printk(...);
dump_stack();
}
> Hey, without the break-command, tuning seems to work:
> $ tzap pro7 -r
> using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
> reading channels from file '/home/grafrotz/.tzap/channels.conf'
> tuning to 738000000 Hz
> video pid 0x0131, audio pid 0x0132
> status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> status 1f | signal 0b20 | snr 008d | ber 001fffff | unc 0000ffff | FE_HAS_LOCK
> status 1f | signal f4dd | snr 0077 | ber 00000770 | unc 00000000 | FE_HAS_LOCK
> status 1f | signal ffff | snr 008c | ber 00000770 | unc 00000000 | FE_HAS_LOCK
We are close to identify the drivers in charge for the stupid I2c access.
--
Patrick Boettcher - Kernel Labs
http://www.kernellabs.com/
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: dibusb-common.c FE_HAS_LOCK problem
2009-11-23 11:11 ` Patrick Boettcher
@ 2009-11-23 11:33 ` grafgrimm77
2009-11-23 12:24 ` Patrick Boettcher
0 siblings, 1 reply; 10+ messages in thread
From: grafgrimm77 @ 2009-11-23 11:33 UTC (permalink / raw)
To: Patrick Boettcher; +Cc: Linux Media Mailing List
Am Mon, 23 Nov 2009 12:11:40 +0100 (CET)
schrieb Patrick Boettcher <pboettcher@kernellabs.com>:
> On Mon, 23 Nov 2009, Mario Bachmann wrote:
> >> sequence in dibusb_i2c_xfer
> >>
> >> instead of break, please add something like
> >>
> >> printk(KERN_ERR "----- hello stupid I2C access ----\n");
> >>
> >> recompile and load the new module, then check whether the line is
> >> appearing in /var/log/messages or /var/log/syslog when you tune the board.
> >>
> >> If this is the case, try to identify which device is issuing the access by
> >> printing the i2c-address of struct i2c_msg.
> >>
> >> HTH,
> >> --
> >>
> >> Patrick
> >> http://www.kernellabs.com/
> >
> > Hello Patrick,
> >
> > I tried it with Kernel 2.6.31.6 (same as before).
> >
> > I made the printk-change, recompiled and reloaded the modules and pluged in my Twinhan Magic Box...
> > It definately jumps in the last else-branch and shows "hello stupid I2C access", but no KERN_ERR ?!
>
> KERN_ERR is a prefix for printk to define the message priority to high.
> (to have it in syslog or messages)
>
> > dibusb: This device has the Thomson Cable onboard. Which is default.
> > ----- hello stupid I2C access ----
>
> Hmm... where is this coming from:
>
> can you write it like that:
>
> else {
> printk(...);
> dump_stack();
> }
>
> > Hey, without the break-command, tuning seems to work:
> > $ tzap pro7 -r
> > using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
> > reading channels from file '/home/grafrotz/.tzap/channels.conf'
> > tuning to 738000000 Hz
> > video pid 0x0131, audio pid 0x0132
> > status 00 | signal 0000 | snr 0000 | ber 001fffff | unc 0000ffff |
> > status 1f | signal 0b20 | snr 008d | ber 001fffff | unc 0000ffff | FE_HAS_LOCK
> > status 1f | signal f4dd | snr 0077 | ber 00000770 | unc 00000000 | FE_HAS_LOCK
> > status 1f | signal ffff | snr 008c | ber 00000770 | unc 00000000 | FE_HAS_LOCK
>
> We are close to identify the drivers in charge for the stupid I2c access.
>
> --
>
> Patrick Boettcher - Kernel Labs
> http://www.kernellabs.com/
I use this code now:
} else
printk(KERN_ERR "----- hello stupid I2C access ----\n");
dump_stack();
}
dmesg
dvb-usb: TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device successfully deinitialized and disconnected.
usbcore: deregistering interface driver dvb_usb_dibusb_mb
usb 4-2: new full speed USB device using ohci_hcd and address 6
usb 4-2: configuration #1 chosen from 1 choice
dvb-usb: found a 'TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device' in cold state, will try to load a firmware
usb 4-2: firmware: requesting dvb-usb-dibusb-5.0.0.11.fw
dvb-usb: downloading firmware from file 'dvb-usb-dibusb-5.0.0.11.fw'
usbcore: registered new interface driver dvb_usb_dibusb_mb
usb 4-2: USB disconnect, address 6
dvb-usb: generic DVB-USB module successfully deinitialized and disconnected.
usb 4-2: new full speed USB device using ohci_hcd and address 7
usb 4-2: configuration #1 chosen from 1 choice
dvb-usb: found a 'TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device' in warm state.
dvb-usb: will use the device's hardware PID filter (table count: 16).
DVB: registering new adapter (TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device)
Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
Call Trace:
[<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
[<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
[<ffffffffa0059c23>] ? dib3000_read_reg+0x63/0x80 [dib3000mb]
[<ffffffffa005ad52>] ? dib3000mb_attach+0x52/0xd4 [dib3000mb]
[<ffffffffa0073268>] ? dibusb_dib3000mb_frontend_attach+0x28/0x50 [dvb_usb_dibusb_mb]
[<ffffffffa0034ef3>] ? dvb_usb_adapter_frontend_init+0x13/0x100 [dvb_usb]
[<ffffffffa0034837>] ? dvb_usb_device_init+0x357/0x630 [dvb_usb]
[<ffffffff81314021>] ? usb_match_one_id+0x31/0xb0
[<ffffffffa0073050>] ? dibusb_probe+0x20/0xa0 [dvb_usb_dibusb_mb]
[<ffffffff81314962>] ? usb_probe_interface+0xa2/0x170
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff81313af0>] ? usb_set_configuration+0x4a0/0x670
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff8131c1cf>] ? generic_probe+0x2f/0xb0
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff8130ceda>] ? usb_new_device+0x5a/0xd0
[<ffffffff8130e220>] ? hub_thread+0x7e0/0x1040
[<ffffffff810564c6>] ? dequeue_task_fair+0x46/0x190
[<ffffffff81074e70>] ? autoremove_wake_function+0x0/0x30
[<ffffffff8130da40>] ? hub_thread+0x0/0x1040
[<ffffffff81074ade>] ? kthread+0x9e/0xb0
[<ffffffff8102c73a>] ? child_rip+0xa/0x20
[<ffffffff81074a40>] ? kthread+0x0/0xb0
[<ffffffff8102c730>] ? child_rip+0x0/0x20
Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
Call Trace:
[<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
[<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
[<ffffffffa0059c23>] ? dib3000_read_reg+0x63/0x80 [dib3000mb]
[<ffffffffa005ad66>] ? dib3000mb_attach+0x66/0xd4 [dib3000mb]
[<ffffffffa0073268>] ? dibusb_dib3000mb_frontend_attach+0x28/0x50 [dvb_usb_dibusb_mb]
[<ffffffffa0034ef3>] ? dvb_usb_adapter_frontend_init+0x13/0x100 [dvb_usb]
[<ffffffffa0034837>] ? dvb_usb_device_init+0x357/0x630 [dvb_usb]
[<ffffffff81314021>] ? usb_match_one_id+0x31/0xb0
[<ffffffffa0073050>] ? dibusb_probe+0x20/0xa0 [dvb_usb_dibusb_mb]
[<ffffffff81314962>] ? usb_probe_interface+0xa2/0x170
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff81313af0>] ? usb_set_configuration+0x4a0/0x670
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff8131c1cf>] ? generic_probe+0x2f/0xb0
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff8130ceda>] ? usb_new_device+0x5a/0xd0
[<ffffffff8130e220>] ? hub_thread+0x7e0/0x1040
[<ffffffff810564c6>] ? dequeue_task_fair+0x46/0x190
[<ffffffff81074e70>] ? autoremove_wake_function+0x0/0x30
[<ffffffff8130da40>] ? hub_thread+0x0/0x1040
[<ffffffff81074ade>] ? kthread+0x9e/0xb0
[<ffffffff8102c73a>] ? child_rip+0xa/0x20
[<ffffffff81074a40>] ? kthread+0x0/0xb0
[<ffffffff8102c730>] ? child_rip+0x0/0x20
DVB: registering adapter 0 frontend 0 (DiBcom 3000M-B DVB-T)...
Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
Call Trace:
[<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
[<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
[<ffffffffa0059081>] ? dib3000_write_reg+0x51/0x70 [dib3000mb]
[<ffffffffa0059a4f>] ? dib3000mb_tuner_pass_ctrl+0x1f/0x70 [dib3000mb]
[<ffffffffa007318e>] ? dibusb_tuner_probe_and_attach+0x7e/0x130 [dvb_usb_dibusb_mb]
[<ffffffffa0034f60>] ? dvb_usb_adapter_frontend_init+0x80/0x100 [dvb_usb]
[<ffffffffa0034837>] ? dvb_usb_device_init+0x357/0x630 [dvb_usb]
[<ffffffff81314021>] ? usb_match_one_id+0x31/0xb0
[<ffffffffa0073050>] ? dibusb_probe+0x20/0xa0 [dvb_usb_dibusb_mb]
[<ffffffff81314962>] ? usb_probe_interface+0xa2/0x170
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff81313af0>] ? usb_set_configuration+0x4a0/0x670
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff8131c1cf>] ? generic_probe+0x2f/0xb0
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff8130ceda>] ? usb_new_device+0x5a/0xd0
[<ffffffff8130e220>] ? hub_thread+0x7e0/0x1040
[<ffffffff810564c6>] ? dequeue_task_fair+0x46/0x190
[<ffffffff81074e70>] ? autoremove_wake_function+0x0/0x30
[<ffffffff8130da40>] ? hub_thread+0x0/0x1040
[<ffffffff81074ade>] ? kthread+0x9e/0xb0
[<ffffffff8102c73a>] ? child_rip+0xa/0x20
[<ffffffff81074a40>] ? kthread+0x0/0xb0
[<ffffffff8102c730>] ? child_rip+0x0/0x20
Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
Call Trace:
[<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
[<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
[<ffffffffa0059081>] ? dib3000_write_reg+0x51/0x70 [dib3000mb]
[<ffffffffa00731a5>] ? dibusb_tuner_probe_and_attach+0x95/0x130 [dvb_usb_dibusb_mb]
[<ffffffffa0034f60>] ? dvb_usb_adapter_frontend_init+0x80/0x100 [dvb_usb]
[<ffffffffa0034837>] ? dvb_usb_device_init+0x357/0x630 [dvb_usb]
[<ffffffff81314021>] ? usb_match_one_id+0x31/0xb0
[<ffffffffa0073050>] ? dibusb_probe+0x20/0xa0 [dvb_usb_dibusb_mb]
[<ffffffff81314962>] ? usb_probe_interface+0xa2/0x170
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff81313af0>] ? usb_set_configuration+0x4a0/0x670
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff8131c1cf>] ? generic_probe+0x2f/0xb0
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff8130ceda>] ? usb_new_device+0x5a/0xd0
[<ffffffff8130e220>] ? hub_thread+0x7e0/0x1040
[<ffffffff810564c6>] ? dequeue_task_fair+0x46/0x190
[<ffffffff81074e70>] ? autoremove_wake_function+0x0/0x30
[<ffffffff8130da40>] ? hub_thread+0x0/0x1040
[<ffffffff81074ade>] ? kthread+0x9e/0xb0
[<ffffffff8102c73a>] ? child_rip+0xa/0x20
[<ffffffff81074a40>] ? kthread+0x0/0xb0
[<ffffffff8102c730>] ? child_rip+0x0/0x20
Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
Call Trace:
[<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
[<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
[<ffffffffa0059081>] ? dib3000_write_reg+0x51/0x70 [dib3000mb]
[<ffffffffa0059a6d>] ? dib3000mb_tuner_pass_ctrl+0x3d/0x70 [dib3000mb]
[<ffffffffa00731c5>] ? dibusb_tuner_probe_and_attach+0xb5/0x130 [dvb_usb_dibusb_mb]
[<ffffffffa0034f60>] ? dvb_usb_adapter_frontend_init+0x80/0x100 [dvb_usb]
[<ffffffffa0034837>] ? dvb_usb_device_init+0x357/0x630 [dvb_usb]
[<ffffffff81314021>] ? usb_match_one_id+0x31/0xb0
[<ffffffffa0073050>] ? dibusb_probe+0x20/0xa0 [dvb_usb_dibusb_mb]
[<ffffffff81314962>] ? usb_probe_interface+0xa2/0x170
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff81313af0>] ? usb_set_configuration+0x4a0/0x670
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff8131c1cf>] ? generic_probe+0x2f/0xb0
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff8130ceda>] ? usb_new_device+0x5a/0xd0
[<ffffffff8130e220>] ? hub_thread+0x7e0/0x1040
[<ffffffff810564c6>] ? dequeue_task_fair+0x46/0x190
[<ffffffff81074e70>] ? autoremove_wake_function+0x0/0x30
[<ffffffff8130da40>] ? hub_thread+0x0/0x1040
[<ffffffff81074ade>] ? kthread+0x9e/0xb0
[<ffffffff8102c73a>] ? child_rip+0xa/0x20
[<ffffffff81074a40>] ? kthread+0x0/0xb0
[<ffffffff8102c730>] ? child_rip+0x0/0x20
dibusb: This device has the Thomson Cable onboard. Which is default.
Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
Call Trace:
[<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
[<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
[<ffffffffa0059081>] ? dib3000_write_reg+0x51/0x70 [dib3000mb]
[<ffffffffa0059a4f>] ? dib3000mb_tuner_pass_ctrl+0x1f/0x70 [dib3000mb]
[<ffffffffa00855b9>] ? dvb_pll_attach+0x99/0x238 [dvb_pll]
[<ffffffffa00730ff>] ? dibusb_thomson_tuner_attach+0x2f/0x40 [dvb_usb_dibusb_mb]
[<ffffffffa0073226>] ? dibusb_tuner_probe_and_attach+0x116/0x130 [dvb_usb_dibusb_mb]
[<ffffffffa0034f60>] ? dvb_usb_adapter_frontend_init+0x80/0x100 [dvb_usb]
[<ffffffffa0034837>] ? dvb_usb_device_init+0x357/0x630 [dvb_usb]
[<ffffffff81314021>] ? usb_match_one_id+0x31/0xb0
[<ffffffffa0073050>] ? dibusb_probe+0x20/0xa0 [dvb_usb_dibusb_mb]
[<ffffffff81314962>] ? usb_probe_interface+0xa2/0x170
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff81313af0>] ? usb_set_configuration+0x4a0/0x670
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff8131c1cf>] ? generic_probe+0x2f/0xb0
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff8130ceda>] ? usb_new_device+0x5a/0xd0
[<ffffffff8130e220>] ? hub_thread+0x7e0/0x1040
[<ffffffff810564c6>] ? dequeue_task_fair+0x46/0x190
[<ffffffff81074e70>] ? autoremove_wake_function+0x0/0x30
[<ffffffff8130da40>] ? hub_thread+0x0/0x1040
[<ffffffff81074ade>] ? kthread+0x9e/0xb0
[<ffffffff8102c73a>] ? child_rip+0xa/0x20
[<ffffffff81074a40>] ? kthread+0x0/0xb0
[<ffffffff8102c730>] ? child_rip+0x0/0x20
----- hello stupid I2C access ----
Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
Call Trace:
[<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
[<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
[<ffffffffa0059081>] ? dib3000_write_reg+0x51/0x70 [dib3000mb]
[<ffffffffa00855c9>] ? dvb_pll_attach+0xa9/0x238 [dvb_pll]
[<ffffffffa00730ff>] ? dibusb_thomson_tuner_attach+0x2f/0x40 [dvb_usb_dibusb_mb]
[<ffffffffa0073226>] ? dibusb_tuner_probe_and_attach+0x116/0x130 [dvb_usb_dibusb_mb]
[<ffffffffa0034f60>] ? dvb_usb_adapter_frontend_init+0x80/0x100 [dvb_usb]
[<ffffffffa0034837>] ? dvb_usb_device_init+0x357/0x630 [dvb_usb]
[<ffffffff81314021>] ? usb_match_one_id+0x31/0xb0
[<ffffffffa0073050>] ? dibusb_probe+0x20/0xa0 [dvb_usb_dibusb_mb]
[<ffffffff81314962>] ? usb_probe_interface+0xa2/0x170
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff81313af0>] ? usb_set_configuration+0x4a0/0x670
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff8131c1cf>] ? generic_probe+0x2f/0xb0
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff8130ceda>] ? usb_new_device+0x5a/0xd0
[<ffffffff8130e220>] ? hub_thread+0x7e0/0x1040
[<ffffffff810564c6>] ? dequeue_task_fair+0x46/0x190
[<ffffffff81074e70>] ? autoremove_wake_function+0x0/0x30
[<ffffffff8130da40>] ? hub_thread+0x0/0x1040
[<ffffffff81074ade>] ? kthread+0x9e/0xb0
[<ffffffff8102c73a>] ? child_rip+0xa/0x20
[<ffffffff81074a40>] ? kthread+0x0/0xb0
[<ffffffff8102c730>] ? child_rip+0x0/0x20
Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
Call Trace:
[<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
[<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
[<ffffffffa0059081>] ? dib3000_write_reg+0x51/0x70 [dib3000mb]
[<ffffffffa0059a6d>] ? dib3000mb_tuner_pass_ctrl+0x3d/0x70 [dib3000mb]
[<ffffffffa0085613>] ? dvb_pll_attach+0xf3/0x238 [dvb_pll]
[<ffffffffa00730ff>] ? dibusb_thomson_tuner_attach+0x2f/0x40 [dvb_usb_dibusb_mb]
[<ffffffffa0073226>] ? dibusb_tuner_probe_and_attach+0x116/0x130 [dvb_usb_dibusb_mb]
[<ffffffffa0034f60>] ? dvb_usb_adapter_frontend_init+0x80/0x100 [dvb_usb]
[<ffffffffa0034837>] ? dvb_usb_device_init+0x357/0x630 [dvb_usb]
[<ffffffff81314021>] ? usb_match_one_id+0x31/0xb0
[<ffffffffa0073050>] ? dibusb_probe+0x20/0xa0 [dvb_usb_dibusb_mb]
[<ffffffff81314962>] ? usb_probe_interface+0xa2/0x170
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff81313af0>] ? usb_set_configuration+0x4a0/0x670
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff8131c1cf>] ? generic_probe+0x2f/0xb0
[<ffffffff812b0ca0>] ? driver_probe_device+0x80/0x180
[<ffffffff812b0e69>] ? __device_attach+0x29/0x60
[<ffffffff812b0e40>] ? __device_attach+0x0/0x60
[<ffffffff812b013c>] ? bus_for_each_drv+0x5c/0x90
[<ffffffff812b0f55>] ? device_attach+0x85/0x90
[<ffffffff812aff45>] ? bus_probe_device+0x25/0x40
[<ffffffff812ae879>] ? device_add+0x4d9/0x5a0
[<ffffffff8130ceda>] ? usb_new_device+0x5a/0xd0
[<ffffffff8130e220>] ? hub_thread+0x7e0/0x1040
[<ffffffff810564c6>] ? dequeue_task_fair+0x46/0x190
[<ffffffff81074e70>] ? autoremove_wake_function+0x0/0x30
[<ffffffff8130da40>] ? hub_thread+0x0/0x1040
[<ffffffff81074ade>] ? kthread+0x9e/0xb0
[<ffffffff8102c73a>] ? child_rip+0xa/0x20
[<ffffffff81074a40>] ? kthread+0x0/0xb0
[<ffffffff8102c730>] ? child_rip+0x0/0x20
input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:04.0/usb4/4-2/input/input6
dvb-usb: schedule remote query interval to 150 msecs.
dvb-usb: TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device successfully initialized and connected.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: dibusb-common.c FE_HAS_LOCK problem
2009-11-23 11:33 ` grafgrimm77
@ 2009-11-23 12:24 ` Patrick Boettcher
2009-11-23 13:19 ` Patrick Boettcher
0 siblings, 1 reply; 10+ messages in thread
From: Patrick Boettcher @ 2009-11-23 12:24 UTC (permalink / raw)
To: grafgrimm77; +Cc: Linux Media Mailing List
On Mon, 23 Nov 2009, grafgrimm77@gmx.de wrote:
> [..]
> ----- hello stupid I2C access ----
> Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
> Call Trace:
> [<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
> [<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
> [<ffffffffa0059081>] ? dib3000_write_reg+0x51/0x70 [dib3000mb]
> [<ffffffffa00855c9>] ? dvb_pll_attach+0xa9/0x238 [dvb_pll]
> [..]
Voila.
This is the access with makes the dvb-pll-driver not create the tuner
driver.
This is (I forgot the correct name) read-without-write-i2caccess. It is
bad handled by the dibusb-driver and it can destroy the eeprom on the USB
side.
Please try whether the attached patch fixes the whole situation for you.
If so, please send back a line like this:
Tested-by: Your name <email>
thanks,
--
Patrick
http://www.kernellabs.com/
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: dibusb-common.c FE_HAS_LOCK problem
2009-11-23 12:24 ` Patrick Boettcher
@ 2009-11-23 13:19 ` Patrick Boettcher
2009-11-23 13:41 ` grafgrimm77
0 siblings, 1 reply; 10+ messages in thread
From: Patrick Boettcher @ 2009-11-23 13:19 UTC (permalink / raw)
To: grafgrimm77; +Cc: Linux Media Mailing List
[-- Attachment #1: Type: TEXT/PLAIN, Size: 969 bytes --]
On Mon, 23 Nov 2009, Patrick Boettcher wrote:
> On Mon, 23 Nov 2009, grafgrimm77@gmx.de wrote:
>> [..]
>> ----- hello stupid I2C access ----
>> Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
>> Call Trace:
>> [<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
>> [<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
>> [<ffffffffa0059081>] ? dib3000_write_reg+0x51/0x70 [dib3000mb]
>> [<ffffffffa00855c9>] ? dvb_pll_attach+0xa9/0x238 [dvb_pll]
>> [..]
>
> Voila.
>
> This is the access with makes the dvb-pll-driver not create the tuner driver.
>
> This is (I forgot the correct name) read-without-write-i2caccess. It is bad
> handled by the dibusb-driver and it can destroy the eeprom on the USB side.
>
> Please try whether the attached patch fixes the whole situation for you.
>
> If so, please send back a line like this:
>
> Tested-by: Your name <email>
The patch attached.
--
Patrick Boettcher - Kernel Labs
http://www.kernellabs.com/
[-- Attachment #2: Type: TEXT/PLAIN, Size: 776 bytes --]
diff -r 52da57b5e800 linux/drivers/media/dvb/dvb-usb/dibusb-common.c
--- a/linux/drivers/media/dvb/dvb-usb/dibusb-common.c Thu Nov 19 17:15:37 2009 +0100
+++ b/linux/drivers/media/dvb/dvb-usb/dibusb-common.c Mon Nov 23 13:20:10 2009 +0100
@@ -142,8 +142,13 @@
} else if ((msg[i].flags & I2C_M_RD) == 0) {
if (dibusb_i2c_msg(d, msg[i].addr, msg[i].buf,msg[i].len,NULL,0) < 0)
break;
- } else
- break;
+ } else if (msg[i].addr != 0x50) {
+ /* 0x50 is the address of the eeprom - we need to protect it
+ * from dibusb's bad i2c implementation: reads without
+ * writing the offset before are forbidden */
+ if (dibusb_i2c_msg(d, msg[i].addr, NULL, 0, msg[i].buf, msg[i].len) < 0)
+ break;
+ }
}
mutex_unlock(&d->i2c_mutex);
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: dibusb-common.c FE_HAS_LOCK problem
2009-11-23 13:19 ` Patrick Boettcher
@ 2009-11-23 13:41 ` grafgrimm77
0 siblings, 0 replies; 10+ messages in thread
From: grafgrimm77 @ 2009-11-23 13:41 UTC (permalink / raw)
To: Patrick Boettcher; +Cc: Linux Media Mailing List
Am Mon, 23 Nov 2009 14:19:10 +0100 (CET)
schrieb Patrick Boettcher <pboettcher@kernellabs.com>:
> On Mon, 23 Nov 2009, Patrick Boettcher wrote:
>
> > On Mon, 23 Nov 2009, grafgrimm77@gmx.de wrote:
> >> [..]
> >> ----- hello stupid I2C access ----
> >> Pid: 255, comm: khubd Tainted: P A 2.6.31.6 #1
> >> Call Trace:
> >> [<ffffffffa0042292>] ? dibusb_i2c_xfer+0xe2/0x130 [dvb_usb_dibusb_common]
> >> [<ffffffff81341dc1>] ? i2c_transfer+0x91/0xe0
> >> [<ffffffffa0059081>] ? dib3000_write_reg+0x51/0x70 [dib3000mb]
> >> [<ffffffffa00855c9>] ? dvb_pll_attach+0xa9/0x238 [dvb_pll]
> >> [..]
> >
> > Voila.
> >
> > This is the access with makes the dvb-pll-driver not create the tuner driver.
> >
> > This is (I forgot the correct name) read-without-write-i2caccess. It is bad
> > handled by the dibusb-driver and it can destroy the eeprom on the USB side.
> >
> > Please try whether the attached patch fixes the whole situation for you.
> >
> > If so, please send back a line like this:
> >
> > Tested-by: Your name <email>
>
> The patch attached.
>
> --
>
> Patrick Boettcher - Kernel Labs
> http://www.kernellabs.com/
Hi Patrick,
your patch [dibusb-common-fix text/PLAIN (1054 bytes)] works here.
Tested-by: Mario Bachmann <grafgrimm77@gmx.de>
Mario
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2009-11-23 13:41 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-07 9:56 dibusb-common.c FE_HAS_LOCK problem Mario Bachmann
2009-11-19 15:37 ` Patrick Boettcher
2009-11-21 17:25 ` grafgrimm77
2009-11-23 9:01 ` Patrick Boettcher
2009-11-23 11:03 ` Mario Bachmann
2009-11-23 11:11 ` Patrick Boettcher
2009-11-23 11:33 ` grafgrimm77
2009-11-23 12:24 ` Patrick Boettcher
2009-11-23 13:19 ` Patrick Boettcher
2009-11-23 13:41 ` grafgrimm77
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox