]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'for-3.9/multitouch' into for-next
authorJiri Kosina <jkosina@suse.cz>
Tue, 5 Feb 2013 13:09:13 +0000 (14:09 +0100)
committerJiri Kosina <jkosina@suse.cz>
Tue, 5 Feb 2013 13:09:13 +0000 (14:09 +0100)
Conflicts:
drivers/hid/i2c-hid/i2c-hid.c

1  2 
drivers/hid/hid-core.c
drivers/hid/hid-ids.h
drivers/hid/hid-multitouch.c
drivers/hid/i2c-hid/i2c-hid.c
include/linux/hid.h

Simple merge
Simple merge
Simple merge
index 9e46e4295bd9006addbb92ea136f7d98d0e1d093,e766b5614ef59fcae45aaeff49a98df9de3e9693..ec7930217a6dff1fceb15b1a445ec0462cb47b82
@@@ -813,72 -821,8 +824,72 @@@ static int i2c_hid_fetch_hid_descriptor
        return 0;
  }
  
- static int __devinit i2c_hid_probe(struct i2c_client *client,
-               const struct i2c_device_id *dev_id)
 +#ifdef CONFIG_ACPI
 +static int i2c_hid_acpi_pdata(struct i2c_client *client,
 +              struct i2c_hid_platform_data *pdata)
 +{
 +      static u8 i2c_hid_guid[] = {
 +              0xF7, 0xF6, 0xDF, 0x3C, 0x67, 0x42, 0x55, 0x45,
 +              0xAD, 0x05, 0xB3, 0x0A, 0x3D, 0x89, 0x38, 0xDE,
 +      };
 +      struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER, NULL };
 +      union acpi_object params[4], *obj;
 +      struct acpi_object_list input;
 +      struct acpi_device *adev;
 +      acpi_handle handle;
 +
 +      handle = ACPI_HANDLE(&client->dev);
 +      if (!handle || acpi_bus_get_device(handle, &adev))
 +              return -ENODEV;
 +
 +      input.count = ARRAY_SIZE(params);
 +      input.pointer = params;
 +
 +      params[0].type = ACPI_TYPE_BUFFER;
 +      params[0].buffer.length = sizeof(i2c_hid_guid);
 +      params[0].buffer.pointer = i2c_hid_guid;
 +      params[1].type = ACPI_TYPE_INTEGER;
 +      params[1].integer.value = 1;
 +      params[2].type = ACPI_TYPE_INTEGER;
 +      params[2].integer.value = 1; /* HID function */
 +      params[3].type = ACPI_TYPE_INTEGER;
 +      params[3].integer.value = 0;
 +
 +      if (ACPI_FAILURE(acpi_evaluate_object(handle, "_DSM", &input, &buf))) {
 +              dev_err(&client->dev, "device _DSM execution failed\n");
 +              return -ENODEV;
 +      }
 +
 +      obj = (union acpi_object *)buf.pointer;
 +      if (obj->type != ACPI_TYPE_INTEGER) {
 +              dev_err(&client->dev, "device _DSM returned invalid type: %d\n",
 +                      obj->type);
 +              kfree(buf.pointer);
 +              return -EINVAL;
 +      }
 +
 +      pdata->hid_descriptor_address = obj->integer.value;
 +
 +      kfree(buf.pointer);
 +      return 0;
 +}
 +
 +static const struct acpi_device_id i2c_hid_acpi_match[] = {
 +      {"ACPI0C50", 0 },
 +      {"PNP0C50", 0 },
 +      { },
 +};
 +MODULE_DEVICE_TABLE(acpi, i2c_hid_acpi_match);
 +#else
 +static inline int i2c_hid_acpi_pdata(struct i2c_client *client,
 +              struct i2c_hid_platform_data *pdata)
 +{
 +      return -ENODEV;
 +}
 +#endif
 +
+ static int i2c_hid_probe(struct i2c_client *client,
+                        const struct i2c_device_id *dev_id)
  {
        int ret;
        struct i2c_hid *ihid;
Simple merge