diff options
| -rw-r--r-- | drivers/input/input.c | 10 | ||||
| -rw-r--r-- | drivers/input/keyboard/pxa27x_keypad.c | 11 | ||||
| -rw-r--r-- | drivers/input/misc/cm109.c | 14 | ||||
| -rw-r--r-- | drivers/input/mouse/alps.c | 1 | ||||
| -rw-r--r-- | drivers/input/serio/i8042.c | 23 | ||||
| -rw-r--r-- | drivers/input/tablet/wacom_sys.c | 4 | ||||
| -rw-r--r-- | drivers/input/tablet/wacom_wac.c | 8 |
7 files changed, 51 insertions, 20 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c index c04469928925..e75d015024a1 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c | |||
| @@ -1734,6 +1734,7 @@ EXPORT_SYMBOL_GPL(input_class); | |||
| 1734 | */ | 1734 | */ |
| 1735 | struct input_dev *input_allocate_device(void) | 1735 | struct input_dev *input_allocate_device(void) |
| 1736 | { | 1736 | { |
| 1737 | static atomic_t input_no = ATOMIC_INIT(0); | ||
| 1737 | struct input_dev *dev; | 1738 | struct input_dev *dev; |
| 1738 | 1739 | ||
| 1739 | dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL); | 1740 | dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL); |
| @@ -1743,9 +1744,13 @@ struct input_dev *input_allocate_device(void) | |||
| 1743 | device_initialize(&dev->dev); | 1744 | device_initialize(&dev->dev); |
| 1744 | mutex_init(&dev->mutex); | 1745 | mutex_init(&dev->mutex); |
| 1745 | spin_lock_init(&dev->event_lock); | 1746 | spin_lock_init(&dev->event_lock); |
| 1747 | init_timer(&dev->timer); | ||
| 1746 | INIT_LIST_HEAD(&dev->h_list); | 1748 | INIT_LIST_HEAD(&dev->h_list); |
| 1747 | INIT_LIST_HEAD(&dev->node); | 1749 | INIT_LIST_HEAD(&dev->node); |
| 1748 | 1750 | ||
| 1751 | dev_set_name(&dev->dev, "input%ld", | ||
| 1752 | (unsigned long) atomic_inc_return(&input_no) - 1); | ||
| 1753 | |||
| 1749 | __module_get(THIS_MODULE); | 1754 | __module_get(THIS_MODULE); |
| 1750 | } | 1755 | } |
| 1751 | 1756 | ||
| @@ -2019,7 +2024,6 @@ static void devm_input_device_unregister(struct device *dev, void *res) | |||
| 2019 | */ | 2024 | */ |
| 2020 | int input_register_device(struct input_dev *dev) | 2025 | int input_register_device(struct input_dev *dev) |
| 2021 | { | 2026 | { |
| 2022 | static atomic_t input_no = ATOMIC_INIT(0); | ||
| 2023 | struct input_devres *devres = NULL; | 2027 | struct input_devres *devres = NULL; |
| 2024 | struct input_handler *handler; | 2028 | struct input_handler *handler; |
| 2025 | unsigned int packet_size; | 2029 | unsigned int packet_size; |
| @@ -2059,7 +2063,6 @@ int input_register_device(struct input_dev *dev) | |||
| 2059 | * If delay and period are pre-set by the driver, then autorepeating | 2063 | * If delay and period are pre-set by the driver, then autorepeating |
| 2060 | * is handled by the driver itself and we don't do it in input.c. | 2064 | * is handled by the driver itself and we don't do it in input.c. |
| 2061 | */ | 2065 | */ |
| 2062 | init_timer(&dev->timer); | ||
| 2063 | if (!dev->rep[REP_DELAY] && !dev->rep[REP_PERIOD]) { | 2066 | if (!dev->rep[REP_DELAY] && !dev->rep[REP_PERIOD]) { |
| 2064 | dev->timer.data = (long) dev; | 2067 | dev->timer.data = (long) dev; |
| 2065 | dev->timer.function = input_repeat_key; | 2068 | dev->timer.function = input_repeat_key; |
| @@ -2073,9 +2076,6 @@ int input_register_device(struct input_dev *dev) | |||
| 2073 | if (!dev->setkeycode) | 2076 | if (!dev->setkeycode) |
| 2074 | dev->setkeycode = input_default_setkeycode; | 2077 | dev->setkeycode = input_default_setkeycode; |
| 2075 | 2078 | ||
| 2076 | dev_set_name(&dev->dev, "input%ld", | ||
| 2077 | (unsigned long) atomic_inc_return(&input_no) - 1); | ||
| 2078 | |||
| 2079 | error = device_add(&dev->dev); | 2079 | error = device_add(&dev->dev); |
| 2080 | if (error) | 2080 | if (error) |
| 2081 | goto err_free_vals; | 2081 | goto err_free_vals; |
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c index 134c3b404a54..a2e758d27584 100644 --- a/drivers/input/keyboard/pxa27x_keypad.c +++ b/drivers/input/keyboard/pxa27x_keypad.c | |||
| @@ -786,10 +786,17 @@ static int pxa27x_keypad_probe(struct platform_device *pdev) | |||
| 786 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); | 786 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
| 787 | input_set_capability(input_dev, EV_MSC, MSC_SCAN); | 787 | input_set_capability(input_dev, EV_MSC, MSC_SCAN); |
| 788 | 788 | ||
| 789 | if (pdata) | 789 | if (pdata) { |
| 790 | error = pxa27x_keypad_build_keycode(keypad); | 790 | error = pxa27x_keypad_build_keycode(keypad); |
| 791 | else | 791 | } else { |
| 792 | error = pxa27x_keypad_build_keycode_from_dt(keypad); | 792 | error = pxa27x_keypad_build_keycode_from_dt(keypad); |
| 793 | /* | ||
| 794 | * Data that we get from DT resides in dynamically | ||
| 795 | * allocated memory so we need to update our pdata | ||
| 796 | * pointer. | ||
| 797 | */ | ||
| 798 | pdata = keypad->pdata; | ||
| 799 | } | ||
| 793 | if (error) { | 800 | if (error) { |
| 794 | dev_err(&pdev->dev, "failed to build keycode\n"); | 801 | dev_err(&pdev->dev, "failed to build keycode\n"); |
| 795 | goto failed_put_clk; | 802 | goto failed_put_clk; |
diff --git a/drivers/input/misc/cm109.c b/drivers/input/misc/cm109.c index 082684e7f390..9365535ba7f1 100644 --- a/drivers/input/misc/cm109.c +++ b/drivers/input/misc/cm109.c | |||
| @@ -351,7 +351,9 @@ static void cm109_urb_irq_callback(struct urb *urb) | |||
| 351 | if (status) { | 351 | if (status) { |
| 352 | if (status == -ESHUTDOWN) | 352 | if (status == -ESHUTDOWN) |
| 353 | return; | 353 | return; |
| 354 | dev_err(&dev->intf->dev, "%s: urb status %d\n", __func__, status); | 354 | dev_err_ratelimited(&dev->intf->dev, "%s: urb status %d\n", |
| 355 | __func__, status); | ||
| 356 | goto out; | ||
| 355 | } | 357 | } |
| 356 | 358 | ||
| 357 | /* Special keys */ | 359 | /* Special keys */ |
| @@ -418,8 +420,12 @@ static void cm109_urb_ctl_callback(struct urb *urb) | |||
| 418 | dev->ctl_data->byte[2], | 420 | dev->ctl_data->byte[2], |
| 419 | dev->ctl_data->byte[3]); | 421 | dev->ctl_data->byte[3]); |
| 420 | 422 | ||
| 421 | if (status) | 423 | if (status) { |
| 422 | dev_err(&dev->intf->dev, "%s: urb status %d\n", __func__, status); | 424 | if (status == -ESHUTDOWN) |
| 425 | return; | ||
| 426 | dev_err_ratelimited(&dev->intf->dev, "%s: urb status %d\n", | ||
| 427 | __func__, status); | ||
| 428 | } | ||
| 423 | 429 | ||
| 424 | spin_lock(&dev->ctl_submit_lock); | 430 | spin_lock(&dev->ctl_submit_lock); |
| 425 | 431 | ||
| @@ -427,7 +433,7 @@ static void cm109_urb_ctl_callback(struct urb *urb) | |||
| 427 | 433 | ||
| 428 | if (likely(!dev->shutdown)) { | 434 | if (likely(!dev->shutdown)) { |
| 429 | 435 | ||
| 430 | if (dev->buzzer_pending) { | 436 | if (dev->buzzer_pending || status) { |
| 431 | dev->buzzer_pending = 0; | 437 | dev->buzzer_pending = 0; |
| 432 | dev->ctl_urb_pending = 1; | 438 | dev->ctl_urb_pending = 1; |
| 433 | cm109_submit_buzz_toggle(dev); | 439 | cm109_submit_buzz_toggle(dev); |
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c index 7c5d72a6a26a..83658472ad25 100644 --- a/drivers/input/mouse/alps.c +++ b/drivers/input/mouse/alps.c | |||
| @@ -103,6 +103,7 @@ static const struct alps_model_info alps_model_data[] = { | |||
| 103 | /* Dell Latitude E5500, E6400, E6500, Precision M4400 */ | 103 | /* Dell Latitude E5500, E6400, E6500, Precision M4400 */ |
| 104 | { { 0x62, 0x02, 0x14 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf, | 104 | { { 0x62, 0x02, 0x14 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf, |
| 105 | ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED }, | 105 | ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED }, |
| 106 | { { 0x73, 0x00, 0x14 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf, ALPS_DUALPOINT }, /* Dell XT2 */ | ||
| 106 | { { 0x73, 0x02, 0x50 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf, ALPS_FOUR_BUTTONS }, /* Dell Vostro 1400 */ | 107 | { { 0x73, 0x02, 0x50 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf, ALPS_FOUR_BUTTONS }, /* Dell Vostro 1400 */ |
| 107 | { { 0x52, 0x01, 0x14 }, 0x00, ALPS_PROTO_V2, 0xff, 0xff, | 108 | { { 0x52, 0x01, 0x14 }, 0x00, ALPS_PROTO_V2, 0xff, 0xff, |
| 108 | ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED }, /* Toshiba Tecra A11-11L */ | 109 | ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED }, /* Toshiba Tecra A11-11L */ |
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index 78e4de42efaa..52c9ebf94729 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c | |||
| @@ -223,21 +223,26 @@ static int i8042_flush(void) | |||
| 223 | { | 223 | { |
| 224 | unsigned long flags; | 224 | unsigned long flags; |
| 225 | unsigned char data, str; | 225 | unsigned char data, str; |
| 226 | int i = 0; | 226 | int count = 0; |
| 227 | int retval = 0; | ||
| 227 | 228 | ||
| 228 | spin_lock_irqsave(&i8042_lock, flags); | 229 | spin_lock_irqsave(&i8042_lock, flags); |
| 229 | 230 | ||
| 230 | while (((str = i8042_read_status()) & I8042_STR_OBF) && (i < I8042_BUFFER_SIZE)) { | 231 | while ((str = i8042_read_status()) & I8042_STR_OBF) { |
| 231 | udelay(50); | 232 | if (count++ < I8042_BUFFER_SIZE) { |
| 232 | data = i8042_read_data(); | 233 | udelay(50); |
| 233 | i++; | 234 | data = i8042_read_data(); |
| 234 | dbg("%02x <- i8042 (flush, %s)\n", | 235 | dbg("%02x <- i8042 (flush, %s)\n", |
| 235 | data, str & I8042_STR_AUXDATA ? "aux" : "kbd"); | 236 | data, str & I8042_STR_AUXDATA ? "aux" : "kbd"); |
| 237 | } else { | ||
| 238 | retval = -EIO; | ||
| 239 | break; | ||
| 240 | } | ||
| 236 | } | 241 | } |
| 237 | 242 | ||
| 238 | spin_unlock_irqrestore(&i8042_lock, flags); | 243 | spin_unlock_irqrestore(&i8042_lock, flags); |
| 239 | 244 | ||
| 240 | return i; | 245 | return retval; |
| 241 | } | 246 | } |
| 242 | 247 | ||
| 243 | /* | 248 | /* |
| @@ -849,7 +854,7 @@ static int __init i8042_check_aux(void) | |||
| 849 | 854 | ||
| 850 | static int i8042_controller_check(void) | 855 | static int i8042_controller_check(void) |
| 851 | { | 856 | { |
| 852 | if (i8042_flush() == I8042_BUFFER_SIZE) { | 857 | if (i8042_flush()) { |
| 853 | pr_err("No controller found\n"); | 858 | pr_err("No controller found\n"); |
| 854 | return -ENODEV; | 859 | return -ENODEV; |
| 855 | } | 860 | } |
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c index 79b69ea47f74..e53416a4d7f3 100644 --- a/drivers/input/tablet/wacom_sys.c +++ b/drivers/input/tablet/wacom_sys.c | |||
| @@ -1031,6 +1031,7 @@ static void wacom_destroy_leds(struct wacom *wacom) | |||
| 1031 | } | 1031 | } |
| 1032 | 1032 | ||
| 1033 | static enum power_supply_property wacom_battery_props[] = { | 1033 | static enum power_supply_property wacom_battery_props[] = { |
| 1034 | POWER_SUPPLY_PROP_SCOPE, | ||
| 1034 | POWER_SUPPLY_PROP_CAPACITY | 1035 | POWER_SUPPLY_PROP_CAPACITY |
| 1035 | }; | 1036 | }; |
| 1036 | 1037 | ||
| @@ -1042,6 +1043,9 @@ static int wacom_battery_get_property(struct power_supply *psy, | |||
| 1042 | int ret = 0; | 1043 | int ret = 0; |
| 1043 | 1044 | ||
| 1044 | switch (psp) { | 1045 | switch (psp) { |
| 1046 | case POWER_SUPPLY_PROP_SCOPE: | ||
| 1047 | val->intval = POWER_SUPPLY_SCOPE_DEVICE; | ||
| 1048 | break; | ||
| 1045 | case POWER_SUPPLY_PROP_CAPACITY: | 1049 | case POWER_SUPPLY_PROP_CAPACITY: |
| 1046 | val->intval = | 1050 | val->intval = |
| 1047 | wacom->wacom_wac.battery_capacity * 100 / 31; | 1051 | wacom->wacom_wac.battery_capacity * 100 / 31; |
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c index b2aa503c16b1..c59b797eeafa 100644 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c | |||
| @@ -2054,6 +2054,12 @@ static const struct wacom_features wacom_features_0x101 = | |||
| 2054 | static const struct wacom_features wacom_features_0x10D = | 2054 | static const struct wacom_features wacom_features_0x10D = |
| 2055 | { "Wacom ISDv4 10D", WACOM_PKGLEN_MTTPC, 26202, 16325, 255, | 2055 | { "Wacom ISDv4 10D", WACOM_PKGLEN_MTTPC, 26202, 16325, 255, |
| 2056 | 0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; | 2056 | 0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; |
| 2057 | static const struct wacom_features wacom_features_0x10E = | ||
| 2058 | { "Wacom ISDv4 10E", WACOM_PKGLEN_MTTPC, 27760, 15694, 255, | ||
| 2059 | 0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; | ||
| 2060 | static const struct wacom_features wacom_features_0x10F = | ||
| 2061 | { "Wacom ISDv4 10F", WACOM_PKGLEN_MTTPC, 27760, 15694, 255, | ||
| 2062 | 0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; | ||
| 2057 | static const struct wacom_features wacom_features_0x4001 = | 2063 | static const struct wacom_features wacom_features_0x4001 = |
| 2058 | { "Wacom ISDv4 4001", WACOM_PKGLEN_MTTPC, 26202, 16325, 255, | 2064 | { "Wacom ISDv4 4001", WACOM_PKGLEN_MTTPC, 26202, 16325, 255, |
| 2059 | 0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; | 2065 | 0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES }; |
| @@ -2248,6 +2254,8 @@ const struct usb_device_id wacom_ids[] = { | |||
| 2248 | { USB_DEVICE_WACOM(0x100) }, | 2254 | { USB_DEVICE_WACOM(0x100) }, |
| 2249 | { USB_DEVICE_WACOM(0x101) }, | 2255 | { USB_DEVICE_WACOM(0x101) }, |
| 2250 | { USB_DEVICE_WACOM(0x10D) }, | 2256 | { USB_DEVICE_WACOM(0x10D) }, |
| 2257 | { USB_DEVICE_WACOM(0x10E) }, | ||
| 2258 | { USB_DEVICE_WACOM(0x10F) }, | ||
| 2251 | { USB_DEVICE_WACOM(0x300) }, | 2259 | { USB_DEVICE_WACOM(0x300) }, |
| 2252 | { USB_DEVICE_WACOM(0x301) }, | 2260 | { USB_DEVICE_WACOM(0x301) }, |
| 2253 | { USB_DEVICE_WACOM(0x304) }, | 2261 | { USB_DEVICE_WACOM(0x304) }, |
