Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=89f4267d6fa96cb3db053d5183558c94ad5f46e5
Commit:     89f4267d6fa96cb3db053d5183558c94ad5f46e5
Parent:     8d99996b0942ff566c62602d83ac2c13521bbe40
Author:     Janne Grunau <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 31 19:45:13 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Tue Oct 9 22:04:05 2007 -0300

    V4L/DVB (5964): Fixed remote control for dib0700 with new firmware
    
    The new firmware returns the data of the REQUEST_POLL_RC request in
    reversed order. The default is RC5, but it can be adjusted using a
    module parameter.
    
    Signed-off-by: Janne Grunau <[EMAIL PROTECTED]>
    Signed-off-by: Patrick Boettcher <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/dvb/dvb-usb/dib0700.h         |    1 +
 drivers/media/dvb/dvb-usb/dib0700_core.c    |   21 ++++++++++++++++++++-
 drivers/media/dvb/dvb-usb/dib0700_devices.c |   10 +++++-----
 3 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/drivers/media/dvb/dvb-usb/dib0700.h 
b/drivers/media/dvb/dvb-usb/dib0700.h
index 74ae6c2..4a903ea 100644
--- a/drivers/media/dvb/dvb-usb/dib0700.h
+++ b/drivers/media/dvb/dvb-usb/dib0700.h
@@ -30,6 +30,7 @@ extern int dvb_usb_dib0700_debug;
        // 1 Byte: 4MSB(1 = enable streaming, 0 = disable streaming) 4LSB(Video 
Mode: 0 = MPEG2 188Bytes, 1 = Analog)
        // 2 Byte: MPEG2 mode:  4MSB(1 = Master Mode, 0 = Slave Mode) 
4LSB(Channel 1 = bit0, Channel 2 = bit1)
        // 2 Byte: Analog mode: 4MSB(0 = 625 lines, 1 = 525 lines)    4LSB(     
"                "           )
+#define REQUEST_SET_RC       0x11
 #define REQUEST_GET_VERSION  0x15
 
 struct dib0700_state {
diff --git a/drivers/media/dvb/dvb-usb/dib0700_core.c 
b/drivers/media/dvb/dvb-usb/dib0700_core.c
index 8a1ea11..3ea294e 100644
--- a/drivers/media/dvb/dvb-usb/dib0700_core.c
+++ b/drivers/media/dvb/dvb-usb/dib0700_core.c
@@ -13,6 +13,10 @@ int dvb_usb_dib0700_debug;
 module_param_named(debug,dvb_usb_dib0700_debug, int, 0644);
 MODULE_PARM_DESC(debug, "set debugging level (1=info,2=fw,4=fwdata,8=data 
(or-able))." DVB_USB_DEBUG_STATUS);
 
+static int dvb_usb_dib0700_ir_proto = 1;
+module_param(dvb_usb_dib0700_ir_proto, int, 0644);
+MODULE_PARM_DESC(dvb_usb_dib0700_ir_proto, "set ir protocol (0=NEC, 1=RC5 
(default), 2=RC6).");
+
 /* expecting rx buffer: request data[0] data[1] ... data[2] */
 static int dib0700_ctrl_wr(struct dvb_usb_device *d, u8 *tx, u8 txlen)
 {
@@ -260,14 +264,29 @@ int dib0700_streaming_ctrl(struct dvb_usb_adapter *adap, 
int onoff)
        return dib0700_ctrl_wr(adap->dev, b, 4);
 }
 
+static int dib0700_rc_setup(struct dvb_usb_device *d)
+{
+       u8 rc_setup[3] = {REQUEST_SET_RC, dvb_usb_dib0700_ir_proto, 0};
+       int i = dib0700_ctrl_wr(d, rc_setup, 3);
+       if (i<0) {
+               err("ir protocol setup failed");
+               return -1;
+       }
+       return 0;
+}
+
 static int dib0700_probe(struct usb_interface *intf,
                const struct usb_device_id *id)
 {
        int i;
+       struct dvb_usb_device *dev;
 
        for (i = 0; i < dib0700_device_count; i++)
-               if (dvb_usb_device_init(intf, &dib0700_devices[i], THIS_MODULE, 
NULL) == 0)
+               if (dvb_usb_device_init(intf, &dib0700_devices[i], THIS_MODULE, 
&dev) == 0)
+               {
+                       dib0700_rc_setup(dev);
                        return 0;
+               }
 
        return -ENODEV;
 }
diff --git a/drivers/media/dvb/dvb-usb/dib0700_devices.c 
b/drivers/media/dvb/dvb-usb/dib0700_devices.c
index 0eca0fc..4a3c546 100644
--- a/drivers/media/dvb/dvb-usb/dib0700_devices.c
+++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c
@@ -275,19 +275,19 @@ static int dib0700_rc_query(struct dvb_usb_device *d, u32 
*event, int *state)
        i=dib0700_ctrl_rd(d,rc_request,2,key,4);
        if (i<=0) {
                err("RC Query Failed");
-               return 0;
+               return -1;
        }
        if (key[0]==0 && key[1]==0 && key[2]==0 && key[3]==0) return 0;
-       if (key[1]!=st->rc_toggle) {
+       if (key[3-1]!=st->rc_toggle) {
                for (i=0;i<d->props.rc_key_map_size; i++) {
-                       if (keymap[i].custom == key[2] && keymap[i].data == 
key[3]) {
+                       if (keymap[i].custom == key[3-2] && keymap[i].data == 
key[3-3]) {
                                *event = keymap[i].event;
                                *state = REMOTE_KEY_PRESSED;
-                               st->rc_toggle=key[1];
+                               st->rc_toggle=key[3-1];
                                return 0;
                        }
                }
-               err("Unknown remote controller key : %2X 
%2X",(int)key[2],(int)key[3]);
+               err("Unknown remote controller key : %2X 
%2X",(int)key[3-2],(int)key[3-3]);
        }
        return 0;
 }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to