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@xxxxxxxxxxxxxxxxx>: > 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@xxxxxxxxx>: >> > 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@xxxxxxxxx>: >> >> 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@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html