OSDN Git Service

Merge branch 'for-3.8/upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 31 Jan 2013 21:44:59 +0000 (08:44 +1100)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 31 Jan 2013 21:44:59 +0000 (08:44 +1100)
PullHID fixes from Jiri Kosina:

 - fix i2c-hid and hidraw interaction, by Benjamin Tissoires

 - a quirk to make a particular device (Formosa IR receiver) work
   properly, by Nicholas Santos

* 'for-3.8/upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid:
  HID: i2c-hid: fix i2c_hid_output_raw_report
  HID: usbhid: quirk for Formosa IR receiver
  HID: remove x bit from sensor doc

1  2 
drivers/hid/i2c-hid/i2c-hid.c

@@@ -540,13 -540,24 +540,24 @@@ static int i2c_hid_output_raw_report(st
  {
        struct i2c_client *client = hid->driver_data;
        int report_id = buf[0];
+       int ret;
  
        if (report_type == HID_INPUT_REPORT)
                return -EINVAL;
  
-       return i2c_hid_set_report(client,
+       if (report_id) {
+               buf++;
+               count--;
+       }
+       ret = i2c_hid_set_report(client,
                                report_type == HID_FEATURE_REPORT ? 0x03 : 0x02,
                                report_id, buf, count);
+       if (report_id && ret >= 0)
+               ret++; /* add report_id to the number of transfered bytes */
+       return ret;
  }
  
  static int i2c_hid_parse(struct hid_device *hid)
@@@ -731,7 -742,7 +742,7 @@@ static struct hid_ll_driver i2c_hid_ll_
        .hidinput_input_event = i2c_hid_hidinput_input_event,
  };
  
 -static int __devinit i2c_hid_init_irq(struct i2c_client *client)
 +static int i2c_hid_init_irq(struct i2c_client *client)
  {
        struct i2c_hid *ihid = i2c_get_clientdata(client);
        int ret;
        return 0;
  }
  
 -static int __devinit i2c_hid_fetch_hid_descriptor(struct i2c_hid *ihid)
 +static int i2c_hid_fetch_hid_descriptor(struct i2c_hid *ihid)
  {
        struct i2c_client *client = ihid->client;
        struct i2c_hid_desc *hdesc = &ihid->hdesc;
        return 0;
  }
  
 -static int __devinit i2c_hid_probe(struct i2c_client *client,
 -              const struct i2c_device_id *dev_id)
 +static int i2c_hid_probe(struct i2c_client *client,
 +                       const struct i2c_device_id *dev_id)
  {
        int ret;
        struct i2c_hid *ihid;
@@@ -902,7 -913,7 +913,7 @@@ err
        return ret;
  }
  
 -static int __devexit i2c_hid_remove(struct i2c_client *client)
 +static int i2c_hid_remove(struct i2c_client *client)
  {
        struct i2c_hid *ihid = i2c_get_clientdata(client);
        struct hid_device *hid;
@@@ -967,7 -978,7 +978,7 @@@ static struct i2c_driver i2c_hid_drive
        },
  
        .probe          = i2c_hid_probe,
 -      .remove         = __devexit_p(i2c_hid_remove),
 +      .remove         = i2c_hid_remove,
  
        .id_table       = i2c_hid_id_table,
  };