]> git.karo-electronics.de Git - linux-beck.git/commitdiff
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 20 Mar 2011 05:27:06 +0000 (22:27 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 20 Mar 2011 05:27:06 +0000 (22:27 -0700)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (64 commits)
  Input: tsc2005 - remove 'disable' sysfs attribute
  Input: tsc2005 - add open/close
  Input: tsc2005 - handle read errors from SPI layer
  Input: tsc2005 - do not rearm timer in hardirq handler
  Input: tsc2005 - don't use work for 'pen up' handling
  Input: tsc2005 - do not use 0 in place of NULL
  Input: tsc2005 - use true/false for boolean variables
  Input: tsc2005 - hide selftest attribute if we can't reset
  Input: tsc2005 - rework driver initialization code
  Input: tsc2005 - set up bus type in input device
  Input: tsc2005 - set up parent device
  Input: tsc2005 - clear driver data after unbinding
  Input: tsc2005 - add module description
  Input: tsc2005 - remove driver banner message
  Input: tsc2005 - remove incorrect module alias
  Input: tsc2005 - convert to using dev_pm_ops
  Input: tsc2005 - use spi_get/set_drvdata()
  Input: introduce tsc2005 driver
  Input: xen-kbdfront - move to drivers/input/misc
  Input: xen-kbdfront - add grant reference for shared page
  ...

1  2 
arch/arm/mach-s5pv210/mach-goni.c
drivers/hid/hid-core.c
drivers/hid/hid-ids.h
drivers/hid/hid-input.c
drivers/media/rc/rc-main.c

index 243291722c667484a22ec85337cc17b3f521f89e,be0eb7a2e61244b8b373460b25883562615a6a2d..31d5aa76975310a529084e575e0116e08a7846df
@@@ -15,7 -15,7 +15,7 @@@
  #include <linux/fb.h>
  #include <linux/i2c.h>
  #include <linux/i2c-gpio.h>
- #include <linux/i2c/qt602240_ts.h>
+ #include <linux/i2c/atmel_mxt_ts.h>
  #include <linux/mfd/max8998.h>
  #include <linux/mfd/wm8994/pdata.h>
  #include <linux/regulator/fixed.h>
@@@ -25,6 -25,7 +25,7 @@@
  #include <linux/gpio_keys.h>
  #include <linux/input.h>
  #include <linux/gpio.h>
+ #include <linux/interrupt.h>
  
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
@@@ -45,7 -46,6 +46,7 @@@
  #include <plat/keypad.h>
  #include <plat/sdhci.h>
  #include <plat/clock.h>
 +#include <plat/s5p-time.h>
  
  /* Following are default values for UCON, ULCON and UFCON UART registers */
  #define GONI_UCON_DEFAULT     (S3C2410_UCON_TXILEVEL |        \
@@@ -109,8 -109,6 +110,8 @@@ static struct s3c_fb_pd_win goni_fb_win
        },
        .max_bpp        = 32,
        .default_bpp    = 16,
 +      .virtual_x      = 480,
 +      .virtual_y      = 2 * 800,
  };
  
  static struct s3c_fb_platdata goni_lcd_pdata __initdata = {
@@@ -225,7 -223,7 +226,7 @@@ static void __init goni_radio_init(void
  }
  
  /* TSP */
- static struct qt602240_platform_data qt602240_platform_data = {
+ static struct mxt_platform_data qt602240_platform_data = {
        .x_line         = 17,
        .y_line         = 11,
        .x_size         = 800,
        .blen           = 0x21,
        .threshold      = 0x28,
        .voltage        = 2800000,              /* 2.8V */
-       .orient         = QT602240_DIAGONAL,
+       .orient         = MXT_DIAGONAL,
+       .irqflags       = IRQF_TRIGGER_FALLING,
  };
  
  static struct s3c2410_platform_i2c i2c2_data __initdata = {
@@@ -272,30 -271,10 +274,30 @@@ static void __init goni_tsp_init(void
  /* MAX8998 regulators */
  #if defined(CONFIG_REGULATOR_MAX8998) || defined(CONFIG_REGULATOR_MAX8998_MODULE)
  
 +static struct regulator_consumer_supply goni_ldo3_consumers[] = {
 +      REGULATOR_SUPPLY("vusb_a", "s3c-hsotg"),
 +};
 +
  static struct regulator_consumer_supply goni_ldo5_consumers[] = {
        REGULATOR_SUPPLY("vmmc", "s3c-sdhci.0"),
  };
  
 +static struct regulator_consumer_supply goni_ldo8_consumers[] = {
 +      REGULATOR_SUPPLY("vusb_d", "s3c-hsotg"),
 +};
 +
 +static struct regulator_consumer_supply goni_ldo11_consumers[] = {
 +      REGULATOR_SUPPLY("vddio", "0-0030"), /* "CAM_IO_2.8V" */
 +};
 +
 +static struct regulator_consumer_supply goni_ldo13_consumers[] = {
 +      REGULATOR_SUPPLY("vdda", "0-0030"), /* "CAM_A_2.8V" */
 +};
 +
 +static struct regulator_consumer_supply goni_ldo14_consumers[] = {
 +      REGULATOR_SUPPLY("vdd_core", "0-0030"), /* "CAM_CIF_1.8V" */
 +};
 +
  static struct regulator_init_data goni_ldo2_data = {
        .constraints    = {
                .name           = "VALIVE_1.1V",
  
  static struct regulator_init_data goni_ldo3_data = {
        .constraints    = {
 -              .name           = "VUSB/MIPI_1.1V",
 +              .name           = "VUSB+MIPI_1.1V",
                .min_uV         = 1100000,
                .max_uV         = 1100000,
                .apply_uV       = 1,
 -              .always_on      = 1,
 +              .valid_ops_mask = REGULATOR_CHANGE_STATUS,
        },
 +      .num_consumer_supplies = ARRAY_SIZE(goni_ldo3_consumers),
 +      .consumer_supplies = goni_ldo3_consumers,
  };
  
  static struct regulator_init_data goni_ldo4_data = {
@@@ -336,7 -313,6 +338,7 @@@ static struct regulator_init_data goni_
                .min_uV         = 2800000,
                .max_uV         = 2800000,
                .apply_uV       = 1,
 +              .valid_ops_mask = REGULATOR_CHANGE_STATUS,
        },
        .num_consumer_supplies = ARRAY_SIZE(goni_ldo5_consumers),
        .consumer_supplies = goni_ldo5_consumers,
@@@ -363,22 -339,21 +365,22 @@@ static struct regulator_init_data goni_
  
  static struct regulator_init_data goni_ldo8_data = {
        .constraints    = {
 -              .name           = "VUSB/VADC_3.3V",
 +              .name           = "VUSB+VADC_3.3V",
                .min_uV         = 3300000,
                .max_uV         = 3300000,
                .apply_uV       = 1,
 -              .always_on      = 1,
 +              .valid_ops_mask = REGULATOR_CHANGE_STATUS,
        },
 +      .num_consumer_supplies = ARRAY_SIZE(goni_ldo8_consumers),
 +      .consumer_supplies = goni_ldo8_consumers,
  };
  
  static struct regulator_init_data goni_ldo9_data = {
        .constraints    = {
 -              .name           = "VCC/VCAM_2.8V",
 +              .name           = "VCC+VCAM_2.8V",
                .min_uV         = 2800000,
                .max_uV         = 2800000,
                .apply_uV       = 1,
 -              .always_on      = 1,
        },
  };
  
@@@ -398,10 -373,8 +400,10 @@@ static struct regulator_init_data goni_
                .min_uV         = 2800000,
                .max_uV         = 2800000,
                .apply_uV       = 1,
 -              .always_on      = 1,
 +              .valid_ops_mask = REGULATOR_CHANGE_STATUS,
        },
 +      .num_consumer_supplies  = ARRAY_SIZE(goni_ldo11_consumers),
 +      .consumer_supplies      = goni_ldo11_consumers,
  };
  
  static struct regulator_init_data goni_ldo12_data = {
                .min_uV         = 1200000,
                .max_uV         = 1200000,
                .apply_uV       = 1,
 -              .always_on      = 1,
        },
  };
  
@@@ -419,10 -393,8 +421,10 @@@ static struct regulator_init_data goni_
                .min_uV         = 2800000,
                .max_uV         = 2800000,
                .apply_uV       = 1,
 -              .always_on      = 1,
 +              .valid_ops_mask = REGULATOR_CHANGE_STATUS,
        },
 +      .num_consumer_supplies  = ARRAY_SIZE(goni_ldo13_consumers),
 +      .consumer_supplies      = goni_ldo13_consumers,
  };
  
  static struct regulator_init_data goni_ldo14_data = {
                .min_uV         = 1800000,
                .max_uV         = 1800000,
                .apply_uV       = 1,
 -              .always_on      = 1,
 +              .valid_ops_mask = REGULATOR_CHANGE_STATUS,
        },
 +      .num_consumer_supplies  = ARRAY_SIZE(goni_ldo14_consumers),
 +      .consumer_supplies      = goni_ldo14_consumers,
  };
  
  static struct regulator_init_data goni_ldo15_data = {
                .min_uV         = 3300000,
                .max_uV         = 3300000,
                .apply_uV       = 1,
 -              .always_on      = 1,
        },
  };
  
@@@ -452,6 -423,7 +454,6 @@@ static struct regulator_init_data goni_
                .min_uV         = 1800000,
                .max_uV         = 1800000,
                .apply_uV       = 1,
 -              .always_on      = 1,
        },
  };
  
@@@ -466,11 -438,13 +468,11 @@@ static struct regulator_init_data goni_
  };
  
  /* BUCK */
 -static struct regulator_consumer_supply buck1_consumer[] = {
 -      {       .supply = "vddarm", },
 -};
 +static struct regulator_consumer_supply buck1_consumer =
 +      REGULATOR_SUPPLY("vddarm", NULL);
  
 -static struct regulator_consumer_supply buck2_consumer[] = {
 -      {       .supply = "vddint", },
 -};
 +static struct regulator_consumer_supply buck2_consumer =
 +      REGULATOR_SUPPLY("vddint", NULL);
  
  static struct regulator_init_data goni_buck1_data = {
        .constraints    = {
                .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
                                  REGULATOR_CHANGE_STATUS,
        },
 -      .num_consumer_supplies  = ARRAY_SIZE(buck1_consumer),
 -      .consumer_supplies      = buck1_consumer,
 +      .num_consumer_supplies  = 1,
 +      .consumer_supplies      = &buck1_consumer,
  };
  
  static struct regulator_init_data goni_buck2_data = {
                .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
                                  REGULATOR_CHANGE_STATUS,
        },
 -      .num_consumer_supplies  = ARRAY_SIZE(buck2_consumer),
 -      .consumer_supplies      = buck2_consumer,
 +      .num_consumer_supplies  = 1,
 +      .consumer_supplies      = &buck2_consumer,
  };
  
  static struct regulator_init_data goni_buck3_data = {
@@@ -549,24 -523,33 +551,24 @@@ static struct max8998_platform_data gon
        .buck1_set1     = S5PV210_GPH0(3),
        .buck1_set2     = S5PV210_GPH0(4),
        .buck2_set3     = S5PV210_GPH0(5),
 -      .buck1_max_voltage1 = 1200000,
 -      .buck1_max_voltage2 = 1200000,
 -      .buck2_max_voltage = 1200000,
 +      .buck1_voltage1 = 1200000,
 +      .buck1_voltage2 = 1200000,
 +      .buck1_voltage3 = 1200000,
 +      .buck1_voltage4 = 1200000,
 +      .buck2_voltage1 = 1200000,
 +      .buck2_voltage2 = 1200000,
  };
  #endif
  
  static struct regulator_consumer_supply wm8994_fixed_voltage0_supplies[] = {
 -      {
 -              .dev_name       = "5-001a",
 -              .supply         = "DBVDD",
 -      }, {
 -              .dev_name       = "5-001a",
 -              .supply         = "AVDD2",
 -      }, {
 -              .dev_name       = "5-001a",
 -              .supply         = "CPVDD",
 -      },
 +      REGULATOR_SUPPLY("DBVDD", "5-001a"),
 +      REGULATOR_SUPPLY("AVDD2", "5-001a"),
 +      REGULATOR_SUPPLY("CPVDD", "5-001a"),
  };
  
  static struct regulator_consumer_supply wm8994_fixed_voltage1_supplies[] = {
 -      {
 -              .dev_name       = "5-001a",
 -              .supply         = "SPKVDD1",
 -      }, {
 -              .dev_name       = "5-001a",
 -              .supply         = "SPKVDD2",
 -      },
 +      REGULATOR_SUPPLY("SPKVDD1", "5-001a"),
 +      REGULATOR_SUPPLY("SPKVDD2", "5-001a"),
  };
  
  static struct regulator_init_data wm8994_fixed_voltage0_init_data = {
@@@ -615,11 -598,15 +617,11 @@@ static struct platform_device wm8994_fi
        },
  };
  
 -static struct regulator_consumer_supply wm8994_avdd1_supply = {
 -      .dev_name       = "5-001a",
 -      .supply         = "AVDD1",
 -};
 +static struct regulator_consumer_supply wm8994_avdd1_supply =
 +      REGULATOR_SUPPLY("AVDD1", "5-001a");
  
 -static struct regulator_consumer_supply wm8994_dcvdd_supply = {
 -      .dev_name       = "5-001a",
 -      .supply         = "DCVDD",
 -};
 +static struct regulator_consumer_supply wm8994_dcvdd_supply =
 +      REGULATOR_SUPPLY("DCVDD", "5-001a");
  
  static struct regulator_init_data wm8994_ldo1_data = {
        .constraints    = {
@@@ -806,7 -793,6 +808,7 @@@ static struct platform_device *goni_dev
        &goni_i2c_gpio5,
        &mmc2_fixed_voltage,
        &goni_device_gpiokeys,
 +      &s3c_device_i2c0,
        &s5p_device_fimc0,
        &s5p_device_fimc1,
        &s5p_device_fimc2,
@@@ -836,7 -822,6 +838,7 @@@ static void __init goni_map_io(void
        s5p_init_io(NULL, 0, S5P_VA_CHIPID);
        s3c24xx_init_clocks(24000000);
        s3c24xx_init_uarts(goni_uartcfgs, ARRAY_SIZE(goni_uartcfgs));
 +      s5p_set_timer_source(S5P_PWM3, S5P_PWM4);
  }
  
  static void __init goni_machine_init(void)
        /* Radio: call before I2C 1 registeration */
        goni_radio_init();
  
 +      /* I2C0 */
 +      s3c_i2c0_set_platdata(NULL);
 +
        /* I2C1 */
        s3c_i2c1_set_platdata(NULL);
        i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs));
@@@ -890,5 -872,5 +892,5 @@@ MACHINE_START(GONI, "GONI"
        .init_irq       = s5pv210_init_irq,
        .map_io         = goni_map_io,
        .init_machine   = goni_machine_init,
 -      .timer          = &s3c24xx_timer,
 +      .timer          = &s5p_timer,
  MACHINE_END
diff --combined drivers/hid/hid-core.c
index c3d66269ed7d584bb655be926cef4b8e073699a9,48a0a2f3e0721b987a51ffe68f689e52f19ced53..e9687768a335d5461e1ed7785d0d8bd551af3724
@@@ -1159,32 -1159,6 +1159,32 @@@ static bool hid_hiddev(struct hid_devic
        return !!hid_match_id(hdev, hid_hiddev_list);
  }
  
 +
 +static ssize_t
 +read_report_descriptor(struct file *filp, struct kobject *kobj,
 +              struct bin_attribute *attr,
 +              char *buf, loff_t off, size_t count)
 +{
 +      struct device *dev = container_of(kobj, struct device, kobj);
 +      struct hid_device *hdev = container_of(dev, struct hid_device, dev);
 +
 +      if (off >= hdev->rsize)
 +              return 0;
 +
 +      if (off + count > hdev->rsize)
 +              count = hdev->rsize - off;
 +
 +      memcpy(buf, hdev->rdesc + off, count);
 +
 +      return count;
 +}
 +
 +static struct bin_attribute dev_bin_attr_report_desc = {
 +      .attr = { .name = "report_descriptor", .mode = 0444 },
 +      .read = read_report_descriptor,
 +      .size = HID_MAX_DESCRIPTOR_SIZE,
 +};
 +
  int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
  {
        static const char *types[] = { "Device", "Pointer", "Mouse", "Device",
        char buf[64];
        unsigned int i;
        int len;
 +      int ret;
  
        if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE)
                connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV);
                bus = "<UNKNOWN>";
        }
  
 +      ret = device_create_bin_file(&hdev->dev, &dev_bin_attr_report_desc);
 +      if (ret)
 +              hid_warn(hdev,
 +                       "can't create sysfs report descriptor attribute err: %d\n", ret);
 +
        hid_info(hdev, "%s: %s HID v%x.%02x %s [%s] on %s\n",
                 buf, bus, hdev->version >> 8, hdev->version & 0xff,
                 type, hdev->name, hdev->phys);
@@@ -1272,7 -1240,6 +1272,7 @@@ EXPORT_SYMBOL_GPL(hid_connect)
  
  void hid_disconnect(struct hid_device *hdev)
  {
 +      device_remove_bin_file(&hdev->dev, &dev_bin_attr_report_desc);
        if (hdev->claimed & HID_CLAIMED_INPUT)
                hidinput_disconnect(hdev);
        if (hdev->claimed & HID_CLAIMED_HIDDEV)
@@@ -1289,7 -1256,9 +1289,7 @@@ static const struct hid_device_id hid_h
        { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
        { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
        { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
 -#if defined(CONFIG_HID_ACRUX_FF) || defined(CONFIG_HID_ACRUX_FF_MODULE)
        { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
 -#endif
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_TRUETOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0011) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) },
        { HID_USB_DEVICE(USB_VENDOR_ID_HANVON, USB_DEVICE_ID_HANVON_MULTITOUCH) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS, USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
        { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) },
        { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000 ) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFP_WHEEL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_16) },
        { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_17) },
        { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
        { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPLUS) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KOVAPLUS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
@@@ -1840,6 -1804,9 +1843,9 @@@ static const struct hid_device_id hid_m
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
        { }
diff --combined drivers/hid/hid-ids.h
index d485894ff4db877f2045db8c21934cbd2d41d547,ca32ecbdce0678f3e9bcde19b2524c9836a94bae..65ac53d7aeccf86a9f3a0c1e7a6a9c00af0a470f
  #define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI 0x0242
  #define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO  0x0243
  #define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS  0x0244
+ #define USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI  0x0245
+ #define USB_DEVICE_ID_APPLE_WELLSPRING5_ISO   0x0246
+ #define USB_DEVICE_ID_APPLE_WELLSPRING5_JIS   0x0247
  #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI  0x0239
  #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO   0x023a
  #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS   0x023b
  #define USB_VENDOR_ID_IMATION         0x0718
  #define USB_DEVICE_ID_DISC_STAKKA     0xd000
  
 +#define USB_VENDOR_ID_IRTOUCHSYSTEMS  0x6615
 +#define USB_DEVICE_ID_IRTOUCH_INFRARED_USB    0x0070
 +
  #define USB_VENDOR_ID_JESS            0x0c45
  #define USB_DEVICE_ID_JESS_YUREX      0x1010
  
  #define USB_VENDOR_ID_KWORLD          0x1b80
  #define USB_DEVICE_ID_KWORLD_RADIO_FM700      0xd700
  
 +#define USB_VENDOR_ID_KEYTOUCH                0x0926
 +#define USB_DEVICE_ID_KEYTOUCH_IEC    0x3333
 +
  #define USB_VENDOR_ID_KYE             0x0458
  #define USB_DEVICE_ID_KYE_ERGO_525V   0x0087
  #define USB_DEVICE_ID_KYE_GPEN_560    0x5003
  #define USB_VENDOR_ID_LABTEC          0x1020
  #define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD        0x0006
  
 +#define USB_VENDOR_ID_LCPOWER         0x1241
 +#define USB_DEVICE_ID_LCPOWER_LC1000  0xf767
 +
  #define USB_VENDOR_ID_LD              0x0f11
  #define USB_DEVICE_ID_LD_CASSY                0x1000
  #define USB_DEVICE_ID_LD_POCKETCASSY  0x1010
  #define USB_DEVICE_ID_LOGITECH_WHEEL  0xc294
  #define USB_DEVICE_ID_LOGITECH_WINGMAN_FFG    0xc293
  #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL     0xc295
 +#define USB_DEVICE_ID_LOGITECH_DFP_WHEEL      0xc298
  #define USB_DEVICE_ID_LOGITECH_G25_WHEEL      0xc299
  #define USB_DEVICE_ID_LOGITECH_WII_WHEEL      0xc29c
  #define USB_DEVICE_ID_LOGITECH_ELITE_KBD      0xc30a
  #define USB_DEVICE_ID_ONTRAK_ADU100   0x0064
  
  #define USB_VENDOR_ID_ORTEK           0x05a4
 +#define USB_DEVICE_ID_ORTEK_PKB1700   0x1700
  #define USB_DEVICE_ID_ORTEK_WKB2000   0x2000
  
  #define USB_VENDOR_ID_PANJIT          0x134c
  #define USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN 0x3001
  
  #define USB_VENDOR_ID_ROCCAT          0x1e7d
 +#define USB_DEVICE_ID_ROCCAT_ARVO     0x30d4
  #define USB_DEVICE_ID_ROCCAT_KONE     0x2ced
  #define USB_DEVICE_ID_ROCCAT_KONEPLUS 0x2d51
 +#define USB_DEVICE_ID_ROCCAT_KOVAPLUS 0x2d50
  #define USB_DEVICE_ID_ROCCAT_PYRA_WIRED       0x2c24
  #define USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS    0x2cf6
  
diff --combined drivers/hid/hid-input.c
index cd74203c8178950408b95cb51dd69b01ccb1ceea,ba2aeea2cbf99727bdae85acf2516e0b2fadf34e..33dde8724e02faec04fe1388103343a4cf03eda2
@@@ -290,6 -290,14 +290,6 @@@ static void hidinput_configure_usage(st
                goto ignore;
        }
  
 -      if (field->report_type == HID_FEATURE_REPORT) {
 -              if (device->driver->feature_mapping) {
 -                      device->driver->feature_mapping(device, hidinput, field,
 -                              usage);
 -              }
 -              goto ignore;
 -      }
 -
        if (device->driver->input_mapping) {
                int ret = device->driver->input_mapping(device, hidinput, field,
                                usage, &bit, &max);
@@@ -827,24 -835,6 +827,24 @@@ static void hidinput_close(struct input
        hid_hw_close(hid);
  }
  
 +static void report_features(struct hid_device *hid)
 +{
 +      struct hid_driver *drv = hid->driver;
 +      struct hid_report_enum *rep_enum;
 +      struct hid_report *rep;
 +      int i, j;
 +
 +      if (!drv->feature_mapping)
 +              return;
 +
 +      rep_enum = &hid->report_enum[HID_FEATURE_REPORT];
 +      list_for_each_entry(rep, &rep_enum->report_list, list)
 +              for (i = 0; i < rep->maxfield; i++)
 +                      for (j = 0; j < rep->field[i]->maxusage; j++)
 +                              drv->feature_mapping(hid, rep->field[i],
 +                                                   rep->field[i]->usage + j);
 +}
 +
  /*
   * Register the input device; print a message.
   * Configure the input layer interface
@@@ -873,9 -863,7 +873,9 @@@ int hidinput_connect(struct hid_device 
                        return -1;
        }
  
 -      for (k = HID_INPUT_REPORT; k <= HID_FEATURE_REPORT; k++) {
 +      report_features(hid);
 +
 +      for (k = HID_INPUT_REPORT; k <= HID_OUTPUT_REPORT; k++) {
                if (k == HID_OUTPUT_REPORT &&
                        hid->quirks & HID_QUIRK_SKIP_OUTPUT_REPORTS)
                        continue;
                                        hid->ll_driver->hidinput_input_event;
                                input_dev->open = hidinput_open;
                                input_dev->close = hidinput_close;
-                               input_dev->setkeycode_new = hidinput_setkeycode;
-                               input_dev->getkeycode_new = hidinput_getkeycode;
+                               input_dev->setkeycode = hidinput_setkeycode;
+                               input_dev->getkeycode = hidinput_getkeycode;
  
                                input_dev->name = hid->name;
                                input_dev->phys = hid->phys;
        return 0;
  
  out_cleanup:
 +      list_del(&hidinput->list);
        input_free_device(hidinput->input);
        kfree(hidinput);
  out_unwind:
index 5b4422ef4e6d4705566bc8f45a23cf6a9e9719fc,c3769283936ff3ce0f5adc436482e5873544f0d7..5ac1baf45c8e8514a2a4c12e29bb26f30bb3b0d7
@@@ -850,7 -850,7 +850,7 @@@ static ssize_t store_protocols(struct d
                        count++;
                } else {
                        for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
 -                              if (!strncasecmp(tmp, proto_names[i].name, strlen(proto_names[i].name))) {
 +                              if (!strcasecmp(tmp, proto_names[i].name)) {
                                        tmp += strlen(proto_names[i].name);
                                        mask = proto_names[i].type;
                                        break;
@@@ -966,8 -966,8 +966,8 @@@ struct rc_dev *rc_allocate_device(void
                return NULL;
        }
  
-       dev->input_dev->getkeycode_new = ir_getkeycode;
-       dev->input_dev->setkeycode_new = ir_setkeycode;
+       dev->input_dev->getkeycode = ir_getkeycode;
+       dev->input_dev->setkeycode = ir_setkeycode;
        input_set_drvdata(dev->input_dev, dev);
  
        spin_lock_init(&dev->rc_map.lock);