Re: [PATCH] media: Pinnacle 73e infrared control stopped working since kernel 3.17

David Cimbůrek
2015-02-12T07:15:42Z

I'll try to describe my thoughts.

The changed structure "dib0700_rc_response" is used in
dib0700_core.c:dib0700_rc_urb_completion(struct urb *purb) function:

struct dib0700_rc_response *poll_reply;
...
poll_reply = purb->transfer_buffer;

dib0700_rc_urb_completion() is then used in
dib0700_core.c:dib0700_rc_setup() in macros usb_fill_bulk_urb and
usb_fill_int_urb. These macros are defined in header file usb.h. Here
I have found in macro description this:

* @transfer_buffer: pointer to the transfer buffer

I suppose that it means that the struct dib0700_rc_response is being
filled from this transfer buffer. Therefore I suppose that the order
of structure members IS important.

Of course it's only my guess but my patch is really working for me :-)

2015-02-12 1:10 GMT+01:00 Luis de Bethencourt <luis@debethencourt.com>:
> On Tue, Feb 10, 2015 at 11:38:11AM +0100, David Cimbůrek wrote:
>> Please include this patch to kernel! It takes too much time for such a
>> simple fix!
>>
>
> The patch is simple but why it fixes the issue isn't that simple. Could you
> explain why the order of the variables inside the structure is breaking things?
>
> All the uses of the variables inside the structure that I can see are by name.
> Not by memory offsets.
>
> Thanks,
> Luis
>
>>
>> 2015-01-07 13:51 GMT+01:00 David Cimbůrek <david.cimburek@gmail.com>:
>> > No one is interested? I'd like to get this patch to kernel to fix the
>> > issue. Can someone here do it please?
>> >
>> >
>> > 2014-12-20 14:36 GMT+01:00 David Cimbůrek <david.cimburek@gmail.com>:
>> >> Hi,
>> >>
>> >> with kernel 3.17 remote control for Pinnacle 73e (ID 2304:0237
>> >> Pinnacle Systems, Inc. PCTV 73e [DiBcom DiB7000PC]) does not work
>> >> anymore.
>> >>
>> >> I checked the changes and found out the problem in commit
>> >> af3a4a9bbeb00df3e42e77240b4cdac5479812f9.
>> >>
>> >> In dib0700_core.c in struct dib0700_rc_response the following union:
>> >>
>> >> union {
>> >> u16 system16;
>> >> struct {
>> >> u8 not_system;
>> >> u8 system;
>> >> };
>> >> };
>> >>
>> >> has been replaced by simple variables:
>> >>
>> >> u8 system;
>> >> u8 not_system;
>> >>
>> >> But these variables are in reverse order! When I switch the order
>> >> back, the remote works fine again! Here is the patch:
>> >>
>> >>
>> >> --- a/drivers/media/usb/dvb-usr/dib0700_core.c 2014-12-20
>> >> 14:27:15.000000000 +0100
>> >> +++ b/drivers/media/usb/dvb-usr/dib0700_core.c 2014-12-20
>> >> 14:27:36.000000000 +0100
>> >> @@ -658,8 +658,8 @@
>> >> struct dib0700_rc_response {
>> >> u8 report_id;
>> >> u8 data_state;
>> >> - u8 system;
>> >> u8 not_system;
>> >> + u8 system;
>> >> u8 data;
>> >> u8 not_data;
>> >> };
>> >>
>> >>
>> >> Regards,
>> >> David
>> --
>> 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