aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2016-05-16 20:25:08 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2016-05-16 20:25:08 -0400
commit23ea5967d6bd30ed59480edbc5fe21eec81682a3 (patch)
tree345bf01823cf76596bc05e83fab9bf21678fef90
parentc52c545ead97fcc2f4f8ea38f1ae3c23211e09a8 (diff)
parentd96caf8c33cad42b5eabcf1b686dd91581e306f4 (diff)
Merge branch 'next' into for-linus
Prepare first round of input updates for 4.7 merge window.
-rw-r--r--Documentation/devicetree/bindings/input/gpio-keys.txt10
-rw-r--r--Documentation/devicetree/bindings/input/touchscreen/brcm,iproc-touchscreen.txt23
-rw-r--r--arch/arm/boot/dts/bcm-cygnus.dtsi11
-rw-r--r--drivers/input/keyboard/omap-keypad.c52
-rw-r--r--drivers/input/keyboard/twl4030_keypad.c28
-rw-r--r--drivers/input/misc/cm109.c47
-rw-r--r--drivers/input/misc/rotary_encoder.c8
-rw-r--r--drivers/input/misc/twl6040-vibra.c15
-rw-r--r--drivers/input/mouse/byd.c1
-rw-r--r--drivers/input/tablet/acecad.c12
-rw-r--r--drivers/input/tablet/aiptek.c20
-rw-r--r--drivers/input/tablet/gtco.c24
-rw-r--r--drivers/input/tablet/kbtab.c8
-rw-r--r--drivers/input/touchscreen/bcm_iproc_tsc.c77
-rw-r--r--drivers/input/touchscreen/ti_am335x_tsc.c16
15 files changed, 170 insertions, 182 deletions
diff --git a/Documentation/devicetree/bindings/input/gpio-keys.txt b/Documentation/devicetree/bindings/input/gpio-keys.txt
index 21641236c095..a94940481e55 100644
--- a/Documentation/devicetree/bindings/input/gpio-keys.txt
+++ b/Documentation/devicetree/bindings/input/gpio-keys.txt
@@ -32,17 +32,17 @@ Optional subnode-properties:
32 32
33Example nodes: 33Example nodes:
34 34
35 gpio_keys { 35 gpio-keys {
36 compatible = "gpio-keys"; 36 compatible = "gpio-keys";
37 #address-cells = <1>;
38 #size-cells = <0>;
39 autorepeat; 37 autorepeat;
40 button@21 { 38
39 up {
41 label = "GPIO Key UP"; 40 label = "GPIO Key UP";
42 linux,code = <103>; 41 linux,code = <103>;
43 gpios = <&gpio1 0 1>; 42 gpios = <&gpio1 0 1>;
44 }; 43 };
45 button@22 { 44
45 down {
46 label = "GPIO Key DOWN"; 46 label = "GPIO Key DOWN";
47 linux,code = <108>; 47 linux,code = <108>;
48 interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>; 48 interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
diff --git a/Documentation/devicetree/bindings/input/touchscreen/brcm,iproc-touchscreen.txt b/Documentation/devicetree/bindings/input/touchscreen/brcm,iproc-touchscreen.txt
index 34e3382a0659..ac5dff412e25 100644
--- a/Documentation/devicetree/bindings/input/touchscreen/brcm,iproc-touchscreen.txt
+++ b/Documentation/devicetree/bindings/input/touchscreen/brcm,iproc-touchscreen.txt
@@ -2,11 +2,17 @@
2 2
3Required properties: 3Required properties:
4- compatible: must be "brcm,iproc-touchscreen" 4- compatible: must be "brcm,iproc-touchscreen"
5- reg: physical base address of the controller and length of memory mapped 5- ts_syscon: handler of syscon node defining physical base
6 region. 6 address of the controller and length of memory mapped region.
7 If this property is selected please make sure MFD_SYSCON config
8 is enabled in the defconfig file.
7- clocks: The clock provided by the SOC to driver the tsc 9- clocks: The clock provided by the SOC to driver the tsc
8- clock-name: name for the clock 10- clock-names: name for the clock
9- interrupts: The touchscreen controller's interrupt 11- interrupts: The touchscreen controller's interrupt
12- address-cells: Specify the number of u32 entries needed in child nodes.
13 Should set to 1.
14- size-cells: Specify number of u32 entries needed to specify child nodes size
15 in reg property. Should set to 1.
10 16
11Optional properties: 17Optional properties:
12- scanning_period: Time between scans. Each step is 1024 us. Valid 1-256. 18- scanning_period: Time between scans. Each step is 1024 us. Valid 1-256.
@@ -53,13 +59,18 @@ Optional properties:
53- touchscreen-inverted-x: X axis is inverted (boolean) 59- touchscreen-inverted-x: X axis is inverted (boolean)
54- touchscreen-inverted-y: Y axis is inverted (boolean) 60- touchscreen-inverted-y: Y axis is inverted (boolean)
55 61
56Example: 62Example: An example of touchscreen node
57 63
58 touchscreen: tsc@0x180A6000 { 64 ts_adc_syscon: ts_adc_syscon@180a6000 {
65 compatible = "brcm,iproc-ts-adc-syscon","syscon";
66 reg = <0x180a6000 0xc30>;
67 };
68
69 touchscreen: touchscreen@180A6000 {
59 compatible = "brcm,iproc-touchscreen"; 70 compatible = "brcm,iproc-touchscreen";
60 #address-cells = <1>; 71 #address-cells = <1>;
61 #size-cells = <1>; 72 #size-cells = <1>;
62 reg = <0x180A6000 0x40>; 73 ts_syscon = <&ts_adc_syscon>;
63 clocks = <&adc_clk>; 74 clocks = <&adc_clk>;
64 clock-names = "tsc_clk"; 75 clock-names = "tsc_clk";
65 interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>; 76 interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
diff --git a/arch/arm/boot/dts/bcm-cygnus.dtsi b/arch/arm/boot/dts/bcm-cygnus.dtsi
index 3878793364f0..b42fe5596b94 100644
--- a/arch/arm/boot/dts/bcm-cygnus.dtsi
+++ b/arch/arm/boot/dts/bcm-cygnus.dtsi
@@ -351,9 +351,16 @@
351 <&pinctrl 142 10 1>; 351 <&pinctrl 142 10 1>;
352 }; 352 };
353 353
354 touchscreen: tsc@180a6000 { 354 ts_adc_syscon: ts_adc_syscon@180a6000 {
355 compatible = "brcm,iproc-ts-adc-syscon", "syscon";
356 reg = <0x180a6000 0xc30>;
357 };
358
359 touchscreen: touchscreen@180a6000 {
355 compatible = "brcm,iproc-touchscreen"; 360 compatible = "brcm,iproc-touchscreen";
356 reg = <0x180a6000 0x40>; 361 #address-cells = <1>;
362 #size-cells = <1>;
363 ts_syscon = <&ts_adc_syscon>;
357 clocks = <&asiu_clks BCM_CYGNUS_ASIU_ADC_CLK>; 364 clocks = <&asiu_clks BCM_CYGNUS_ASIU_ADC_CLK>;
358 clock-names = "tsc_clk"; 365 clock-names = "tsc_clk";
359 interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>; 366 interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
diff --git a/drivers/input/keyboard/omap-keypad.c b/drivers/input/keyboard/omap-keypad.c
index e0d72c8c01e4..146b26f665f6 100644
--- a/drivers/input/keyboard/omap-keypad.c
+++ b/drivers/input/keyboard/omap-keypad.c
@@ -64,31 +64,6 @@ static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0);
64static unsigned int *row_gpios; 64static unsigned int *row_gpios;
65static unsigned int *col_gpios; 65static unsigned int *col_gpios;
66 66
67#ifdef CONFIG_ARCH_OMAP2
68static void set_col_gpio_val(struct omap_kp *omap_kp, u8 value)
69{
70 int col;
71
72 for (col = 0; col < omap_kp->cols; col++)
73 gpio_set_value(col_gpios[col], value & (1 << col));
74}
75
76static u8 get_row_gpio_val(struct omap_kp *omap_kp)
77{
78 int row;
79 u8 value = 0;
80
81 for (row = 0; row < omap_kp->rows; row++) {
82 if (gpio_get_value(row_gpios[row]))
83 value |= (1 << row);
84 }
85 return value;
86}
87#else
88#define set_col_gpio_val(x, y) do {} while (0)
89#define get_row_gpio_val(x) 0
90#endif
91
92static irqreturn_t omap_kp_interrupt(int irq, void *dev_id) 67static irqreturn_t omap_kp_interrupt(int irq, void *dev_id)
93{ 68{
94 /* disable keyboard interrupt and schedule for handling */ 69 /* disable keyboard interrupt and schedule for handling */
@@ -133,7 +108,6 @@ static void omap_kp_tasklet(unsigned long data)
133 unsigned int row_shift = get_count_order(omap_kp_data->cols); 108 unsigned int row_shift = get_count_order(omap_kp_data->cols);
134 unsigned char new_state[8], changed, key_down = 0; 109 unsigned char new_state[8], changed, key_down = 0;
135 int col, row; 110 int col, row;
136 int spurious = 0;
137 111
138 /* check for any changes */ 112 /* check for any changes */
139 omap_kp_scan_keypad(omap_kp_data, new_state); 113 omap_kp_scan_keypad(omap_kp_data, new_state);
@@ -170,12 +144,9 @@ static void omap_kp_tasklet(unsigned long data)
170 memcpy(keypad_state, new_state, sizeof(keypad_state)); 144 memcpy(keypad_state, new_state, sizeof(keypad_state));
171 145
172 if (key_down) { 146 if (key_down) {
173 int delay = HZ / 20;
174 /* some key is pressed - keep irq disabled and use timer 147 /* some key is pressed - keep irq disabled and use timer
175 * to poll the keypad */ 148 * to poll the keypad */
176 if (spurious) 149 mod_timer(&omap_kp_data->timer, jiffies + HZ / 20);
177 delay = 2 * HZ;
178 mod_timer(&omap_kp_data->timer, jiffies + delay);
179 } else { 150 } else {
180 /* enable interrupts */ 151 /* enable interrupts */
181 omap_writew(0, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); 152 omap_writew(0, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT);
@@ -216,25 +187,6 @@ static ssize_t omap_kp_enable_store(struct device *dev, struct device_attribute
216 187
217static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, omap_kp_enable_show, omap_kp_enable_store); 188static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, omap_kp_enable_show, omap_kp_enable_store);
218 189
219#ifdef CONFIG_PM
220static int omap_kp_suspend(struct platform_device *dev, pm_message_t state)
221{
222 /* Nothing yet */
223
224 return 0;
225}
226
227static int omap_kp_resume(struct platform_device *dev)
228{
229 /* Nothing yet */
230
231 return 0;
232}
233#else
234#define omap_kp_suspend NULL
235#define omap_kp_resume NULL
236#endif
237
238static int omap_kp_probe(struct platform_device *pdev) 190static int omap_kp_probe(struct platform_device *pdev)
239{ 191{
240 struct omap_kp *omap_kp; 192 struct omap_kp *omap_kp;
@@ -371,8 +323,6 @@ static int omap_kp_remove(struct platform_device *pdev)
371static struct platform_driver omap_kp_driver = { 323static struct platform_driver omap_kp_driver = {
372 .probe = omap_kp_probe, 324 .probe = omap_kp_probe,
373 .remove = omap_kp_remove, 325 .remove = omap_kp_remove,
374 .suspend = omap_kp_suspend,
375 .resume = omap_kp_resume,
376 .driver = { 326 .driver = {
377 .name = "omap-keypad", 327 .name = "omap-keypad",
378 }, 328 },
diff --git a/drivers/input/keyboard/twl4030_keypad.c b/drivers/input/keyboard/twl4030_keypad.c
index bbcccd67247d..323a0fb575a4 100644
--- a/drivers/input/keyboard/twl4030_keypad.c
+++ b/drivers/input/keyboard/twl4030_keypad.c
@@ -61,9 +61,9 @@ struct twl4030_keypad {
61 unsigned short keymap[TWL4030_KEYMAP_SIZE]; 61 unsigned short keymap[TWL4030_KEYMAP_SIZE];
62 u16 kp_state[TWL4030_MAX_ROWS]; 62 u16 kp_state[TWL4030_MAX_ROWS];
63 bool autorepeat; 63 bool autorepeat;
64 unsigned n_rows; 64 unsigned int n_rows;
65 unsigned n_cols; 65 unsigned int n_cols;
66 unsigned irq; 66 unsigned int irq;
67 67
68 struct device *dbg_dev; 68 struct device *dbg_dev;
69 struct input_dev *input; 69 struct input_dev *input;
@@ -110,7 +110,7 @@ struct twl4030_keypad {
110#define KEYP_CTRL_KBD_ON BIT(6) 110#define KEYP_CTRL_KBD_ON BIT(6)
111 111
112/* KEYP_DEB, KEYP_LONG_KEY, KEYP_TIMEOUT_x*/ 112/* KEYP_DEB, KEYP_LONG_KEY, KEYP_TIMEOUT_x*/
113#define KEYP_PERIOD_US(t, prescale) ((t) / (31 << (prescale + 1)) - 1) 113#define KEYP_PERIOD_US(t, prescale) ((t) / (31 << ((prescale) + 1)) - 1)
114 114
115/* KEYP_LK_PTV_REG Fields */ 115/* KEYP_LK_PTV_REG Fields */
116#define KEYP_LK_PTV_PTV_SHIFT 5 116#define KEYP_LK_PTV_PTV_SHIFT 5
@@ -162,9 +162,10 @@ static int twl4030_kpwrite_u8(struct twl4030_keypad *kp, u8 data, u32 reg)
162 162
163static inline u16 twl4030_col_xlate(struct twl4030_keypad *kp, u8 col) 163static inline u16 twl4030_col_xlate(struct twl4030_keypad *kp, u8 col)
164{ 164{
165 /* If all bits in a row are active for all coloumns then 165 /*
166 * If all bits in a row are active for all columns then
166 * we have that row line connected to gnd. Mark this 167 * we have that row line connected to gnd. Mark this
167 * key on as if it was on matrix position n_cols (ie 168 * key on as if it was on matrix position n_cols (i.e.
168 * one higher than the size of the matrix). 169 * one higher than the size of the matrix).
169 */ 170 */
170 if (col == 0xFF) 171 if (col == 0xFF)
@@ -209,9 +210,9 @@ static void twl4030_kp_scan(struct twl4030_keypad *kp, bool release_all)
209 u16 new_state[TWL4030_MAX_ROWS]; 210 u16 new_state[TWL4030_MAX_ROWS];
210 int col, row; 211 int col, row;
211 212
212 if (release_all) 213 if (release_all) {
213 memset(new_state, 0, sizeof(new_state)); 214 memset(new_state, 0, sizeof(new_state));
214 else { 215 } else {
215 /* check for any changes */ 216 /* check for any changes */
216 int ret = twl4030_read_kp_matrix_state(kp, new_state); 217 int ret = twl4030_read_kp_matrix_state(kp, new_state);
217 218
@@ -262,8 +263,10 @@ static irqreturn_t do_kp_irq(int irq, void *_kp)
262 /* Read & Clear TWL4030 pending interrupt */ 263 /* Read & Clear TWL4030 pending interrupt */
263 ret = twl4030_kpread(kp, &reg, KEYP_ISR1, 1); 264 ret = twl4030_kpread(kp, &reg, KEYP_ISR1, 1);
264 265
265 /* Release all keys if I2C has gone bad or 266 /*
266 * the KEYP has gone to idle state */ 267 * Release all keys if I2C has gone bad or
268 * the KEYP has gone to idle state.
269 */
267 if (ret >= 0 && (reg & KEYP_IMR1_KP)) 270 if (ret >= 0 && (reg & KEYP_IMR1_KP))
268 twl4030_kp_scan(kp, false); 271 twl4030_kp_scan(kp, false);
269 else 272 else
@@ -283,7 +286,8 @@ static int twl4030_kp_program(struct twl4030_keypad *kp)
283 if (twl4030_kpwrite_u8(kp, reg, KEYP_CTRL) < 0) 286 if (twl4030_kpwrite_u8(kp, reg, KEYP_CTRL) < 0)
284 return -EIO; 287 return -EIO;
285 288
286 /* NOTE: we could use sih_setup() here to package keypad 289 /*
290 * NOTE: we could use sih_setup() here to package keypad
287 * event sources as four different IRQs ... but we don't. 291 * event sources as four different IRQs ... but we don't.
288 */ 292 */
289 293
@@ -312,7 +316,7 @@ static int twl4030_kp_program(struct twl4030_keypad *kp)
312 316
313 /* 317 /*
314 * Enable Clear-on-Read; disable remembering events that fire 318 * Enable Clear-on-Read; disable remembering events that fire
315 * after the IRQ but before our handler acks (reads) them, 319 * after the IRQ but before our handler acks (reads) them.
316 */ 320 */
317 reg = TWL4030_SIH_CTRL_COR_MASK | TWL4030_SIH_CTRL_PENDDIS_MASK; 321 reg = TWL4030_SIH_CTRL_COR_MASK | TWL4030_SIH_CTRL_PENDDIS_MASK;
318 if (twl4030_kpwrite_u8(kp, reg, KEYP_SIH_CTRL) < 0) 322 if (twl4030_kpwrite_u8(kp, reg, KEYP_SIH_CTRL) < 0)
diff --git a/drivers/input/misc/cm109.c b/drivers/input/misc/cm109.c
index 9365535ba7f1..9cc6d057c302 100644
--- a/drivers/input/misc/cm109.c
+++ b/drivers/input/misc/cm109.c
@@ -76,8 +76,8 @@ enum {
76 76
77 BUZZER_ON = 1 << 5, 77 BUZZER_ON = 1 << 5,
78 78
79 /* up to 256 normal keys, up to 16 special keys */ 79 /* up to 256 normal keys, up to 15 special key combinations */
80 KEYMAP_SIZE = 256 + 16, 80 KEYMAP_SIZE = 256 + 15,
81}; 81};
82 82
83/* CM109 protocol packet */ 83/* CM109 protocol packet */
@@ -139,7 +139,7 @@ static unsigned short special_keymap(int code)
139{ 139{
140 if (code > 0xff) { 140 if (code > 0xff) {
141 switch (code - 0xff) { 141 switch (code - 0xff) {
142 case RECORD_MUTE: return KEY_MUTE; 142 case RECORD_MUTE: return KEY_MICMUTE;
143 case PLAYBACK_MUTE: return KEY_MUTE; 143 case PLAYBACK_MUTE: return KEY_MUTE;
144 case VOLUME_DOWN: return KEY_VOLUMEDOWN; 144 case VOLUME_DOWN: return KEY_VOLUMEDOWN;
145 case VOLUME_UP: return KEY_VOLUMEUP; 145 case VOLUME_UP: return KEY_VOLUMEUP;
@@ -312,6 +312,32 @@ static void report_key(struct cm109_dev *dev, int key)
312 input_sync(idev); 312 input_sync(idev);
313} 313}
314 314
315/*
316 * Converts data of special key presses (volume, mute) into events
317 * for the input subsystem, sends press-n-release for mute keys.
318 */
319static void cm109_report_special(struct cm109_dev *dev)
320{
321 static const u8 autorelease = RECORD_MUTE | PLAYBACK_MUTE;
322 struct input_dev *idev = dev->idev;
323 u8 data = dev->irq_data->byte[HID_IR0];
324 unsigned short keycode;
325 int i;
326
327 for (i = 0; i < 4; i++) {
328 keycode = dev->keymap[0xff + BIT(i)];
329 if (keycode == KEY_RESERVED)
330 continue;
331
332 input_report_key(idev, keycode, data & BIT(i));
333 if (data & autorelease & BIT(i)) {
334 input_sync(idev);
335 input_report_key(idev, keycode, 0);
336 }
337 }
338 input_sync(idev);
339}
340
315/****************************************************************************** 341/******************************************************************************
316 * CM109 usb communication interface 342 * CM109 usb communication interface
317 *****************************************************************************/ 343 *****************************************************************************/
@@ -340,6 +366,7 @@ static void cm109_urb_irq_callback(struct urb *urb)
340 struct cm109_dev *dev = urb->context; 366 struct cm109_dev *dev = urb->context;
341 const int status = urb->status; 367 const int status = urb->status;
342 int error; 368 int error;
369 unsigned long flags;
343 370
344 dev_dbg(&dev->intf->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n", 371 dev_dbg(&dev->intf->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n",
345 dev->irq_data->byte[0], 372 dev->irq_data->byte[0],
@@ -357,10 +384,7 @@ static void cm109_urb_irq_callback(struct urb *urb)
357 } 384 }
358 385
359 /* Special keys */ 386 /* Special keys */
360 if (dev->irq_data->byte[HID_IR0] & 0x0f) { 387 cm109_report_special(dev);
361 const int code = (dev->irq_data->byte[HID_IR0] & 0x0f);
362 report_key(dev, dev->keymap[0xff + code]);
363 }
364 388
365 /* Scan key column */ 389 /* Scan key column */
366 if (dev->keybit == 0xf) { 390 if (dev->keybit == 0xf) {
@@ -381,7 +405,7 @@ static void cm109_urb_irq_callback(struct urb *urb)
381 405
382 out: 406 out:
383 407
384 spin_lock(&dev->ctl_submit_lock); 408 spin_lock_irqsave(&dev->ctl_submit_lock, flags);
385 409
386 dev->irq_urb_pending = 0; 410 dev->irq_urb_pending = 0;
387 411
@@ -405,7 +429,7 @@ static void cm109_urb_irq_callback(struct urb *urb)
405 __func__, error); 429 __func__, error);
406 } 430 }
407 431
408 spin_unlock(&dev->ctl_submit_lock); 432 spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
409} 433}
410 434
411static void cm109_urb_ctl_callback(struct urb *urb) 435static void cm109_urb_ctl_callback(struct urb *urb)
@@ -413,6 +437,7 @@ static void cm109_urb_ctl_callback(struct urb *urb)
413 struct cm109_dev *dev = urb->context; 437 struct cm109_dev *dev = urb->context;
414 const int status = urb->status; 438 const int status = urb->status;
415 int error; 439 int error;
440 unsigned long flags;
416 441
417 dev_dbg(&dev->intf->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n", 442 dev_dbg(&dev->intf->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n",
418 dev->ctl_data->byte[0], 443 dev->ctl_data->byte[0],
@@ -427,7 +452,7 @@ static void cm109_urb_ctl_callback(struct urb *urb)
427 __func__, status); 452 __func__, status);
428 } 453 }
429 454
430 spin_lock(&dev->ctl_submit_lock); 455 spin_lock_irqsave(&dev->ctl_submit_lock, flags);
431 456
432 dev->ctl_urb_pending = 0; 457 dev->ctl_urb_pending = 0;
433 458
@@ -448,7 +473,7 @@ static void cm109_urb_ctl_callback(struct urb *urb)
448 } 473 }
449 } 474 }
450 475
451 spin_unlock(&dev->ctl_submit_lock); 476 spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
452} 477}
453 478
454static void cm109_toggle_buzzer_async(struct cm109_dev *dev) 479static void cm109_toggle_buzzer_async(struct cm109_dev *dev)
diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c
index 96c486de49e0..c7fc8d4fb080 100644
--- a/drivers/input/misc/rotary_encoder.c
+++ b/drivers/input/misc/rotary_encoder.c
@@ -47,13 +47,13 @@ struct rotary_encoder {
47 bool armed; 47 bool armed;
48 signed char dir; /* 1 - clockwise, -1 - CCW */ 48 signed char dir; /* 1 - clockwise, -1 - CCW */
49 49
50 unsigned last_stable; 50 unsigned int last_stable;
51}; 51};
52 52
53static unsigned rotary_encoder_get_state(struct rotary_encoder *encoder) 53static unsigned int rotary_encoder_get_state(struct rotary_encoder *encoder)
54{ 54{
55 int i; 55 int i;
56 unsigned ret = 0; 56 unsigned int ret = 0;
57 57
58 for (i = 0; i < encoder->gpios->ndescs; ++i) { 58 for (i = 0; i < encoder->gpios->ndescs; ++i) {
59 int val = gpiod_get_value_cansleep(encoder->gpios->desc[i]); 59 int val = gpiod_get_value_cansleep(encoder->gpios->desc[i]);
@@ -100,7 +100,7 @@ static void rotary_encoder_report_event(struct rotary_encoder *encoder)
100static irqreturn_t rotary_encoder_irq(int irq, void *dev_id) 100static irqreturn_t rotary_encoder_irq(int irq, void *dev_id)
101{ 101{
102 struct rotary_encoder *encoder = dev_id; 102 struct rotary_encoder *encoder = dev_id;
103 unsigned state; 103 unsigned int state;
104 104
105 mutex_lock(&encoder->access_mutex); 105 mutex_lock(&encoder->access_mutex);
106 106
diff --git a/drivers/input/misc/twl6040-vibra.c b/drivers/input/misc/twl6040-vibra.c
index 42de34b92996..5690eb7ff954 100644
--- a/drivers/input/misc/twl6040-vibra.c
+++ b/drivers/input/misc/twl6040-vibra.c
@@ -46,7 +46,7 @@ struct vibra_info {
46 struct device *dev; 46 struct device *dev;
47 struct input_dev *input_dev; 47 struct input_dev *input_dev;
48 struct work_struct play_work; 48 struct work_struct play_work;
49 struct mutex mutex; 49
50 int irq; 50 int irq;
51 51
52 bool enabled; 52 bool enabled;
@@ -190,8 +190,6 @@ static void vibra_play_work(struct work_struct *work)
190 return; 190 return;
191 } 191 }
192 192
193 mutex_lock(&info->mutex);
194
195 if (info->weak_speed || info->strong_speed) { 193 if (info->weak_speed || info->strong_speed) {
196 if (!info->enabled) 194 if (!info->enabled)
197 twl6040_vibra_enable(info); 195 twl6040_vibra_enable(info);
@@ -200,7 +198,6 @@ static void vibra_play_work(struct work_struct *work)
200 } else if (info->enabled) 198 } else if (info->enabled)
201 twl6040_vibra_disable(info); 199 twl6040_vibra_disable(info);
202 200
203 mutex_unlock(&info->mutex);
204} 201}
205 202
206static int vibra_play(struct input_dev *input, void *data, 203static int vibra_play(struct input_dev *input, void *data,
@@ -223,12 +220,8 @@ static void twl6040_vibra_close(struct input_dev *input)
223 220
224 cancel_work_sync(&info->play_work); 221 cancel_work_sync(&info->play_work);
225 222
226 mutex_lock(&info->mutex);
227
228 if (info->enabled) 223 if (info->enabled)
229 twl6040_vibra_disable(info); 224 twl6040_vibra_disable(info);
230
231 mutex_unlock(&info->mutex);
232} 225}
233 226
234static int __maybe_unused twl6040_vibra_suspend(struct device *dev) 227static int __maybe_unused twl6040_vibra_suspend(struct device *dev)
@@ -236,13 +229,11 @@ static int __maybe_unused twl6040_vibra_suspend(struct device *dev)
236 struct platform_device *pdev = to_platform_device(dev); 229 struct platform_device *pdev = to_platform_device(dev);
237 struct vibra_info *info = platform_get_drvdata(pdev); 230 struct vibra_info *info = platform_get_drvdata(pdev);
238 231
239 mutex_lock(&info->mutex); 232 cancel_work_sync(&info->play_work);
240 233
241 if (info->enabled) 234 if (info->enabled)
242 twl6040_vibra_disable(info); 235 twl6040_vibra_disable(info);
243 236
244 mutex_unlock(&info->mutex);
245
246 return 0; 237 return 0;
247} 238}
248 239
@@ -301,8 +292,6 @@ static int twl6040_vibra_probe(struct platform_device *pdev)
301 return -EINVAL; 292 return -EINVAL;
302 } 293 }
303 294
304 mutex_init(&info->mutex);
305
306 error = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, 295 error = devm_request_threaded_irq(&pdev->dev, info->irq, NULL,
307 twl6040_vib_irq_handler, 296 twl6040_vib_irq_handler,
308 IRQF_ONESHOT, 297 IRQF_ONESHOT,
diff --git a/drivers/input/mouse/byd.c b/drivers/input/mouse/byd.c
index e583f8b50454..b27aa637f877 100644
--- a/drivers/input/mouse/byd.c
+++ b/drivers/input/mouse/byd.c
@@ -478,7 +478,6 @@ int byd_init(struct psmouse *psmouse)
478 if (!priv) 478 if (!priv)
479 return -ENOMEM; 479 return -ENOMEM;
480 480
481 memset(priv, 0, sizeof(*priv));
482 setup_timer(&priv->timer, byd_clear_touch, (unsigned long) psmouse); 481 setup_timer(&priv->timer, byd_clear_touch, (unsigned long) psmouse);
483 482
484 psmouse->private = priv; 483 psmouse->private = priv;
diff --git a/drivers/input/tablet/acecad.c b/drivers/input/tablet/acecad.c
index 889f6b77e8cb..e86e377a90f5 100644
--- a/drivers/input/tablet/acecad.c
+++ b/drivers/input/tablet/acecad.c
@@ -49,7 +49,6 @@ MODULE_LICENSE(DRIVER_LICENSE);
49struct usb_acecad { 49struct usb_acecad {
50 char name[128]; 50 char name[128];
51 char phys[64]; 51 char phys[64];
52 struct usb_device *usbdev;
53 struct usb_interface *intf; 52 struct usb_interface *intf;
54 struct input_dev *input; 53 struct input_dev *input;
55 struct urb *irq; 54 struct urb *irq;
@@ -64,6 +63,7 @@ static void usb_acecad_irq(struct urb *urb)
64 unsigned char *data = acecad->data; 63 unsigned char *data = acecad->data;
65 struct input_dev *dev = acecad->input; 64 struct input_dev *dev = acecad->input;
66 struct usb_interface *intf = acecad->intf; 65 struct usb_interface *intf = acecad->intf;
66 struct usb_device *udev = interface_to_usbdev(intf);
67 int prox, status; 67 int prox, status;
68 68
69 switch (urb->status) { 69 switch (urb->status) {
@@ -110,15 +110,15 @@ resubmit:
110 if (status) 110 if (status)
111 dev_err(&intf->dev, 111 dev_err(&intf->dev,
112 "can't resubmit intr, %s-%s/input0, status %d\n", 112 "can't resubmit intr, %s-%s/input0, status %d\n",
113 acecad->usbdev->bus->bus_name, 113 udev->bus->bus_name,
114 acecad->usbdev->devpath, status); 114 udev->devpath, status);
115} 115}
116 116
117static int usb_acecad_open(struct input_dev *dev) 117static int usb_acecad_open(struct input_dev *dev)
118{ 118{
119 struct usb_acecad *acecad = input_get_drvdata(dev); 119 struct usb_acecad *acecad = input_get_drvdata(dev);
120 120
121 acecad->irq->dev = acecad->usbdev; 121 acecad->irq->dev = interface_to_usbdev(acecad->intf);
122 if (usb_submit_urb(acecad->irq, GFP_KERNEL)) 122 if (usb_submit_urb(acecad->irq, GFP_KERNEL))
123 return -EIO; 123 return -EIO;
124 124
@@ -172,7 +172,6 @@ static int usb_acecad_probe(struct usb_interface *intf, const struct usb_device_
172 goto fail2; 172 goto fail2;
173 } 173 }
174 174
175 acecad->usbdev = dev;
176 acecad->intf = intf; 175 acecad->intf = intf;
177 acecad->input = input_dev; 176 acecad->input = input_dev;
178 177
@@ -251,12 +250,13 @@ static int usb_acecad_probe(struct usb_interface *intf, const struct usb_device_
251static void usb_acecad_disconnect(struct usb_interface *intf) 250static void usb_acecad_disconnect(struct usb_interface *intf)
252{ 251{
253 struct usb_acecad *acecad = usb_get_intfdata(intf); 252 struct usb_acecad *acecad = usb_get_intfdata(intf);
253 struct usb_device *udev = interface_to_usbdev(intf);
254 254
255 usb_set_intfdata(intf, NULL); 255 usb_set_intfdata(intf, NULL);
256 256
257 input_unregister_device(acecad->input); 257 input_unregister_device(acecad->input);
258 usb_free_urb(acecad->irq); 258 usb_free_urb(acecad->irq);
259 usb_free_coherent(acecad->usbdev, 8, acecad->data, acecad->data_dma); 259 usb_free_coherent(udev, 8, acecad->data, acecad->data_dma);
260 kfree(acecad); 260 kfree(acecad);
261} 261}
262 262
diff --git a/drivers/input/tablet/aiptek.c b/drivers/input/tablet/aiptek.c
index 78ca44840d60..4613f0aefd08 100644
--- a/drivers/input/tablet/aiptek.c
+++ b/drivers/input/tablet/aiptek.c
@@ -307,7 +307,6 @@ struct aiptek_settings {
307 307
308struct aiptek { 308struct aiptek {
309 struct input_dev *inputdev; /* input device struct */ 309 struct input_dev *inputdev; /* input device struct */
310 struct usb_device *usbdev; /* usb device struct */
311 struct usb_interface *intf; /* usb interface struct */ 310 struct usb_interface *intf; /* usb interface struct */
312 struct urb *urb; /* urb for incoming reports */ 311 struct urb *urb; /* urb for incoming reports */
313 dma_addr_t data_dma; /* our dma stuffage */ 312 dma_addr_t data_dma; /* our dma stuffage */
@@ -847,7 +846,7 @@ static int aiptek_open(struct input_dev *inputdev)
847{ 846{
848 struct aiptek *aiptek = input_get_drvdata(inputdev); 847 struct aiptek *aiptek = input_get_drvdata(inputdev);
849 848
850 aiptek->urb->dev = aiptek->usbdev; 849 aiptek->urb->dev = interface_to_usbdev(aiptek->intf);
851 if (usb_submit_urb(aiptek->urb, GFP_KERNEL) != 0) 850 if (usb_submit_urb(aiptek->urb, GFP_KERNEL) != 0)
852 return -EIO; 851 return -EIO;
853 852
@@ -873,8 +872,10 @@ aiptek_set_report(struct aiptek *aiptek,
873 unsigned char report_type, 872 unsigned char report_type,
874 unsigned char report_id, void *buffer, int size) 873 unsigned char report_id, void *buffer, int size)
875{ 874{
876 return usb_control_msg(aiptek->usbdev, 875 struct usb_device *udev = interface_to_usbdev(aiptek->intf);
877 usb_sndctrlpipe(aiptek->usbdev, 0), 876
877 return usb_control_msg(udev,
878 usb_sndctrlpipe(udev, 0),
878 USB_REQ_SET_REPORT, 879 USB_REQ_SET_REPORT,
879 USB_TYPE_CLASS | USB_RECIP_INTERFACE | 880 USB_TYPE_CLASS | USB_RECIP_INTERFACE |
880 USB_DIR_OUT, (report_type << 8) + report_id, 881 USB_DIR_OUT, (report_type << 8) + report_id,
@@ -886,8 +887,10 @@ aiptek_get_report(struct aiptek *aiptek,
886 unsigned char report_type, 887 unsigned char report_type,
887 unsigned char report_id, void *buffer, int size) 888 unsigned char report_id, void *buffer, int size)
888{ 889{
889 return usb_control_msg(aiptek->usbdev, 890 struct usb_device *udev = interface_to_usbdev(aiptek->intf);
890 usb_rcvctrlpipe(aiptek->usbdev, 0), 891
892 return usb_control_msg(udev,
893 usb_rcvctrlpipe(udev, 0),
891 USB_REQ_GET_REPORT, 894 USB_REQ_GET_REPORT,
892 USB_TYPE_CLASS | USB_RECIP_INTERFACE | 895 USB_TYPE_CLASS | USB_RECIP_INTERFACE |
893 USB_DIR_IN, (report_type << 8) + report_id, 896 USB_DIR_IN, (report_type << 8) + report_id,
@@ -1729,7 +1732,6 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
1729 } 1732 }
1730 1733
1731 aiptek->inputdev = inputdev; 1734 aiptek->inputdev = inputdev;
1732 aiptek->usbdev = usbdev;
1733 aiptek->intf = intf; 1735 aiptek->intf = intf;
1734 aiptek->ifnum = intf->altsetting[0].desc.bInterfaceNumber; 1736 aiptek->ifnum = intf->altsetting[0].desc.bInterfaceNumber;
1735 aiptek->inDelay = 0; 1737 aiptek->inDelay = 0;
@@ -1833,8 +1835,8 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
1833 * input. 1835 * input.
1834 */ 1836 */
1835 usb_fill_int_urb(aiptek->urb, 1837 usb_fill_int_urb(aiptek->urb,
1836 aiptek->usbdev, 1838 usbdev,
1837 usb_rcvintpipe(aiptek->usbdev, 1839 usb_rcvintpipe(usbdev,
1838 endpoint->bEndpointAddress), 1840 endpoint->bEndpointAddress),
1839 aiptek->data, 8, aiptek_irq, aiptek, 1841 aiptek->data, 8, aiptek_irq, aiptek,
1840 endpoint->bInterval); 1842 endpoint->bInterval);
diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c
index 7c18249d6c8e..abf09ac42ce4 100644
--- a/drivers/input/tablet/gtco.c
+++ b/drivers/input/tablet/gtco.c
@@ -104,7 +104,6 @@ MODULE_DEVICE_TABLE (usb, gtco_usbid_table);
104struct gtco { 104struct gtco {
105 105
106 struct input_dev *inputdevice; /* input device struct pointer */ 106 struct input_dev *inputdevice; /* input device struct pointer */
107 struct usb_device *usbdev; /* the usb device for this device */
108 struct usb_interface *intf; /* the usb interface for this device */ 107 struct usb_interface *intf; /* the usb interface for this device */
109 struct urb *urbinfo; /* urb for incoming reports */ 108 struct urb *urbinfo; /* urb for incoming reports */
110 dma_addr_t buf_dma; /* dma addr of the data buffer*/ 109 dma_addr_t buf_dma; /* dma addr of the data buffer*/
@@ -540,7 +539,7 @@ static int gtco_input_open(struct input_dev *inputdev)
540{ 539{
541 struct gtco *device = input_get_drvdata(inputdev); 540 struct gtco *device = input_get_drvdata(inputdev);
542 541
543 device->urbinfo->dev = device->usbdev; 542 device->urbinfo->dev = interface_to_usbdev(device->intf);
544 if (usb_submit_urb(device->urbinfo, GFP_KERNEL)) 543 if (usb_submit_urb(device->urbinfo, GFP_KERNEL))
545 return -EIO; 544 return -EIO;
546 545
@@ -824,6 +823,7 @@ static int gtco_probe(struct usb_interface *usbinterface,
824 int result = 0, retry; 823 int result = 0, retry;
825 int error; 824 int error;
826 struct usb_endpoint_descriptor *endpoint; 825 struct usb_endpoint_descriptor *endpoint;
826 struct usb_device *udev = interface_to_usbdev(usbinterface);
827 827
828 /* Allocate memory for device structure */ 828 /* Allocate memory for device structure */
829 gtco = kzalloc(sizeof(struct gtco), GFP_KERNEL); 829 gtco = kzalloc(sizeof(struct gtco), GFP_KERNEL);
@@ -838,11 +838,10 @@ static int gtco_probe(struct usb_interface *usbinterface,
838 gtco->inputdevice = input_dev; 838 gtco->inputdevice = input_dev;
839 839
840 /* Save interface information */ 840 /* Save interface information */
841 gtco->usbdev = interface_to_usbdev(usbinterface);
842 gtco->intf = usbinterface; 841 gtco->intf = usbinterface;
843 842
844 /* Allocate some data for incoming reports */ 843 /* Allocate some data for incoming reports */
845 gtco->buffer = usb_alloc_coherent(gtco->usbdev, REPORT_MAX_SIZE, 844 gtco->buffer = usb_alloc_coherent(udev, REPORT_MAX_SIZE,
846 GFP_KERNEL, &gtco->buf_dma); 845 GFP_KERNEL, &gtco->buf_dma);
847 if (!gtco->buffer) { 846 if (!gtco->buffer) {
848 dev_err(&usbinterface->dev, "No more memory for us buffers\n"); 847 dev_err(&usbinterface->dev, "No more memory for us buffers\n");
@@ -907,8 +906,8 @@ static int gtco_probe(struct usb_interface *usbinterface,
907 906
908 /* Couple of tries to get reply */ 907 /* Couple of tries to get reply */
909 for (retry = 0; retry < 3; retry++) { 908 for (retry = 0; retry < 3; retry++) {
910 result = usb_control_msg(gtco->usbdev, 909 result = usb_control_msg(udev,
911 usb_rcvctrlpipe(gtco->usbdev, 0), 910 usb_rcvctrlpipe(udev, 0),
912 USB_REQ_GET_DESCRIPTOR, 911 USB_REQ_GET_DESCRIPTOR,
913 USB_RECIP_INTERFACE | USB_DIR_IN, 912 USB_RECIP_INTERFACE | USB_DIR_IN,
914 REPORT_DEVICE_TYPE << 8, 913 REPORT_DEVICE_TYPE << 8,
@@ -936,7 +935,7 @@ static int gtco_probe(struct usb_interface *usbinterface,
936 } 935 }
937 936
938 /* Create a device file node */ 937 /* Create a device file node */
939 usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath)); 938 usb_make_path(udev, gtco->usbpath, sizeof(gtco->usbpath));
940 strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath)); 939 strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath));
941 940
942 /* Set Input device functions */ 941 /* Set Input device functions */
@@ -953,15 +952,15 @@ static int gtco_probe(struct usb_interface *usbinterface,
953 gtco_setup_caps(input_dev); 952 gtco_setup_caps(input_dev);
954 953
955 /* Set input device required ID information */ 954 /* Set input device required ID information */
956 usb_to_input_id(gtco->usbdev, &input_dev->id); 955 usb_to_input_id(udev, &input_dev->id);
957 input_dev->dev.parent = &usbinterface->dev; 956 input_dev->dev.parent = &usbinterface->dev;
958 957
959 /* Setup the URB, it will be posted later on open of input device */ 958 /* Setup the URB, it will be posted later on open of input device */
960 endpoint = &usbinterface->altsetting[0].endpoint[0].desc; 959 endpoint = &usbinterface->altsetting[0].endpoint[0].desc;
961 960
962 usb_fill_int_urb(gtco->urbinfo, 961 usb_fill_int_urb(gtco->urbinfo,
963 gtco->usbdev, 962 udev,
964 usb_rcvintpipe(gtco->usbdev, 963 usb_rcvintpipe(udev,
965 endpoint->bEndpointAddress), 964 endpoint->bEndpointAddress),
966 gtco->buffer, 965 gtco->buffer,
967 REPORT_MAX_SIZE, 966 REPORT_MAX_SIZE,
@@ -985,7 +984,7 @@ static int gtco_probe(struct usb_interface *usbinterface,
985 err_free_urb: 984 err_free_urb:
986 usb_free_urb(gtco->urbinfo); 985 usb_free_urb(gtco->urbinfo);
987 err_free_buf: 986 err_free_buf:
988 usb_free_coherent(gtco->usbdev, REPORT_MAX_SIZE, 987 usb_free_coherent(udev, REPORT_MAX_SIZE,
989 gtco->buffer, gtco->buf_dma); 988 gtco->buffer, gtco->buf_dma);
990 err_free_devs: 989 err_free_devs:
991 input_free_device(input_dev); 990 input_free_device(input_dev);
@@ -1002,13 +1001,14 @@ static void gtco_disconnect(struct usb_interface *interface)
1002{ 1001{
1003 /* Grab private device ptr */ 1002 /* Grab private device ptr */
1004 struct gtco *gtco = usb_get_intfdata(interface); 1003 struct gtco *gtco = usb_get_intfdata(interface);
1004 struct usb_device *udev = interface_to_usbdev(interface);
1005 1005
1006 /* Now reverse all the registration stuff */ 1006 /* Now reverse all the registration stuff */
1007 if (gtco) { 1007 if (gtco) {
1008 input_unregister_device(gtco->inputdevice); 1008 input_unregister_device(gtco->inputdevice);
1009 usb_kill_urb(gtco->urbinfo); 1009 usb_kill_urb(gtco->urbinfo);
1010 usb_free_urb(gtco->urbinfo); 1010 usb_free_urb(gtco->urbinfo);
1011 usb_free_coherent(gtco->usbdev, REPORT_MAX_SIZE, 1011 usb_free_coherent(udev, REPORT_MAX_SIZE,
1012 gtco->buffer, gtco->buf_dma); 1012 gtco->buffer, gtco->buf_dma);
1013 kfree(gtco); 1013 kfree(gtco);
1014 } 1014 }
diff --git a/drivers/input/tablet/kbtab.c b/drivers/input/tablet/kbtab.c
index d2ac7c2b5b82..e850d7e8afbc 100644
--- a/drivers/input/tablet/kbtab.c
+++ b/drivers/input/tablet/kbtab.c
@@ -31,7 +31,6 @@ struct kbtab {
31 unsigned char *data; 31 unsigned char *data;
32 dma_addr_t data_dma; 32 dma_addr_t data_dma;
33 struct input_dev *dev; 33 struct input_dev *dev;
34 struct usb_device *usbdev;
35 struct usb_interface *intf; 34 struct usb_interface *intf;
36 struct urb *irq; 35 struct urb *irq;
37 char phys[32]; 36 char phys[32];
@@ -99,8 +98,9 @@ MODULE_DEVICE_TABLE(usb, kbtab_ids);
99static int kbtab_open(struct input_dev *dev) 98static int kbtab_open(struct input_dev *dev)
100{ 99{
101 struct kbtab *kbtab = input_get_drvdata(dev); 100 struct kbtab *kbtab = input_get_drvdata(dev);
101 struct usb_device *udev = interface_to_usbdev(kbtab->intf);
102 102
103 kbtab->irq->dev = kbtab->usbdev; 103 kbtab->irq->dev = udev;
104 if (usb_submit_urb(kbtab->irq, GFP_KERNEL)) 104 if (usb_submit_urb(kbtab->irq, GFP_KERNEL))
105 return -EIO; 105 return -EIO;
106 106
@@ -135,7 +135,6 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i
135 if (!kbtab->irq) 135 if (!kbtab->irq)
136 goto fail2; 136 goto fail2;
137 137
138 kbtab->usbdev = dev;
139 kbtab->intf = intf; 138 kbtab->intf = intf;
140 kbtab->dev = input_dev; 139 kbtab->dev = input_dev;
141 140
@@ -188,12 +187,13 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i
188static void kbtab_disconnect(struct usb_interface *intf) 187static void kbtab_disconnect(struct usb_interface *intf)
189{ 188{
190 struct kbtab *kbtab = usb_get_intfdata(intf); 189 struct kbtab *kbtab = usb_get_intfdata(intf);
190 struct usb_device *udev = interface_to_usbdev(intf);
191 191
192 usb_set_intfdata(intf, NULL); 192 usb_set_intfdata(intf, NULL);
193 193
194 input_unregister_device(kbtab->dev); 194 input_unregister_device(kbtab->dev);
195 usb_free_urb(kbtab->irq); 195 usb_free_urb(kbtab->irq);
196 usb_free_coherent(kbtab->usbdev, 8, kbtab->data, kbtab->data_dma); 196 usb_free_coherent(udev, 8, kbtab->data, kbtab->data_dma);
197 kfree(kbtab); 197 kfree(kbtab);
198} 198}
199 199
diff --git a/drivers/input/touchscreen/bcm_iproc_tsc.c b/drivers/input/touchscreen/bcm_iproc_tsc.c
index ae460a5c93d5..4d11b27c7c43 100644
--- a/drivers/input/touchscreen/bcm_iproc_tsc.c
+++ b/drivers/input/touchscreen/bcm_iproc_tsc.c
@@ -23,6 +23,8 @@
23#include <linux/io.h> 23#include <linux/io.h>
24#include <linux/clk.h> 24#include <linux/clk.h>
25#include <linux/serio.h> 25#include <linux/serio.h>
26#include <linux/mfd/syscon.h>
27#include <linux/regmap.h>
26 28
27#define IPROC_TS_NAME "iproc-ts" 29#define IPROC_TS_NAME "iproc-ts"
28 30
@@ -88,7 +90,11 @@
88#define TS_WIRE_MODE_BIT BIT(1) 90#define TS_WIRE_MODE_BIT BIT(1)
89 91
90#define dbg_reg(dev, priv, reg) \ 92#define dbg_reg(dev, priv, reg) \
91 dev_dbg(dev, "%20s= 0x%08x\n", #reg, readl((priv)->regs + reg)) 93do { \
94 u32 val; \
95 regmap_read(priv->regmap, reg, &val); \
96 dev_dbg(dev, "%20s= 0x%08x\n", #reg, val); \
97} while (0)
92 98
93struct tsc_param { 99struct tsc_param {
94 /* Each step is 1024 us. Valid 1-256 */ 100 /* Each step is 1024 us. Valid 1-256 */
@@ -141,7 +147,7 @@ struct iproc_ts_priv {
141 struct platform_device *pdev; 147 struct platform_device *pdev;
142 struct input_dev *idev; 148 struct input_dev *idev;
143 149
144 void __iomem *regs; 150 struct regmap *regmap;
145 struct clk *tsc_clk; 151 struct clk *tsc_clk;
146 152
147 int pen_status; 153 int pen_status;
@@ -196,22 +202,22 @@ static irqreturn_t iproc_touchscreen_interrupt(int irq, void *data)
196 int i; 202 int i;
197 bool needs_sync = false; 203 bool needs_sync = false;
198 204
199 intr_status = readl(priv->regs + INTERRUPT_STATUS); 205 regmap_read(priv->regmap, INTERRUPT_STATUS, &intr_status);
200 intr_status &= TS_PEN_INTR_MASK | TS_FIFO_INTR_MASK; 206 intr_status &= TS_PEN_INTR_MASK | TS_FIFO_INTR_MASK;
201 if (intr_status == 0) 207 if (intr_status == 0)
202 return IRQ_NONE; 208 return IRQ_NONE;
203 209
204 /* Clear all interrupt status bits, write-1-clear */ 210 /* Clear all interrupt status bits, write-1-clear */
205 writel(intr_status, priv->regs + INTERRUPT_STATUS); 211 regmap_write(priv->regmap, INTERRUPT_STATUS, intr_status);
206
207 /* Pen up/down */ 212 /* Pen up/down */
208 if (intr_status & TS_PEN_INTR_MASK) { 213 if (intr_status & TS_PEN_INTR_MASK) {
209 if (readl(priv->regs + CONTROLLER_STATUS) & TS_PEN_DOWN) 214 regmap_read(priv->regmap, CONTROLLER_STATUS, &priv->pen_status);
215 if (priv->pen_status & TS_PEN_DOWN)
210 priv->pen_status = PEN_DOWN_STATUS; 216 priv->pen_status = PEN_DOWN_STATUS;
211 else 217 else
212 priv->pen_status = PEN_UP_STATUS; 218 priv->pen_status = PEN_UP_STATUS;
213 219
214 input_report_key(priv->idev, BTN_TOUCH, priv->pen_status); 220 input_report_key(priv->idev, BTN_TOUCH, priv->pen_status);
215 needs_sync = true; 221 needs_sync = true;
216 222
217 dev_dbg(&priv->pdev->dev, 223 dev_dbg(&priv->pdev->dev,
@@ -221,7 +227,7 @@ static irqreturn_t iproc_touchscreen_interrupt(int irq, void *data)
221 /* coordinates in FIFO exceed the theshold */ 227 /* coordinates in FIFO exceed the theshold */
222 if (intr_status & TS_FIFO_INTR_MASK) { 228 if (intr_status & TS_FIFO_INTR_MASK) {
223 for (i = 0; i < priv->cfg_params.fifo_threshold; i++) { 229 for (i = 0; i < priv->cfg_params.fifo_threshold; i++) {
224 raw_coordinate = readl(priv->regs + FIFO_DATA); 230 regmap_read(priv->regmap, FIFO_DATA, &raw_coordinate);
225 if (raw_coordinate == INVALID_COORD) 231 if (raw_coordinate == INVALID_COORD)
226 continue; 232 continue;
227 233
@@ -239,7 +245,7 @@ static irqreturn_t iproc_touchscreen_interrupt(int irq, void *data)
239 x = (x >> 4) & 0x0FFF; 245 x = (x >> 4) & 0x0FFF;
240 y = (y >> 4) & 0x0FFF; 246 y = (y >> 4) & 0x0FFF;
241 247
242 /* adjust x y according to lcd tsc mount angle */ 248 /* Adjust x y according to LCD tsc mount angle. */
243 if (priv->cfg_params.invert_x) 249 if (priv->cfg_params.invert_x)
244 x = priv->cfg_params.max_x - x; 250 x = priv->cfg_params.max_x - x;
245 251
@@ -262,9 +268,10 @@ static irqreturn_t iproc_touchscreen_interrupt(int irq, void *data)
262 268
263static int iproc_ts_start(struct input_dev *idev) 269static int iproc_ts_start(struct input_dev *idev)
264{ 270{
265 struct iproc_ts_priv *priv = input_get_drvdata(idev);
266 u32 val; 271 u32 val;
272 u32 mask;
267 int error; 273 int error;
274 struct iproc_ts_priv *priv = input_get_drvdata(idev);
268 275
269 /* Enable clock */ 276 /* Enable clock */
270 error = clk_prepare_enable(priv->tsc_clk); 277 error = clk_prepare_enable(priv->tsc_clk);
@@ -279,9 +286,10 @@ static int iproc_ts_start(struct input_dev *idev)
279 * FIFO reaches the int_th value, and pen event(up/down) 286 * FIFO reaches the int_th value, and pen event(up/down)
280 */ 287 */
281 val = TS_PEN_INTR_MASK | TS_FIFO_INTR_MASK; 288 val = TS_PEN_INTR_MASK | TS_FIFO_INTR_MASK;
282 writel(val, priv->regs + INTERRUPT_MASK); 289 regmap_update_bits(priv->regmap, INTERRUPT_MASK, val, val);
283 290
284 writel(priv->cfg_params.fifo_threshold, priv->regs + INTERRUPT_THRES); 291 val = priv->cfg_params.fifo_threshold;
292 regmap_write(priv->regmap, INTERRUPT_THRES, val);
285 293
286 /* Initialize control reg1 */ 294 /* Initialize control reg1 */
287 val = 0; 295 val = 0;
@@ -289,26 +297,23 @@ static int iproc_ts_start(struct input_dev *idev)
289 val |= priv->cfg_params.debounce_timeout << DEBOUNCE_TIMEOUT_SHIFT; 297 val |= priv->cfg_params.debounce_timeout << DEBOUNCE_TIMEOUT_SHIFT;
290 val |= priv->cfg_params.settling_timeout << SETTLING_TIMEOUT_SHIFT; 298 val |= priv->cfg_params.settling_timeout << SETTLING_TIMEOUT_SHIFT;
291 val |= priv->cfg_params.touch_timeout << TOUCH_TIMEOUT_SHIFT; 299 val |= priv->cfg_params.touch_timeout << TOUCH_TIMEOUT_SHIFT;
292 writel(val, priv->regs + REGCTL1); 300 regmap_write(priv->regmap, REGCTL1, val);
293 301
294 /* Try to clear all interrupt status */ 302 /* Try to clear all interrupt status */
295 val = readl(priv->regs + INTERRUPT_STATUS); 303 val = TS_FIFO_INTR_MASK | TS_PEN_INTR_MASK;
296 val |= TS_FIFO_INTR_MASK | TS_PEN_INTR_MASK; 304 regmap_update_bits(priv->regmap, INTERRUPT_STATUS, val, val);
297 writel(val, priv->regs + INTERRUPT_STATUS);
298 305
299 /* Initialize control reg2 */ 306 /* Initialize control reg2 */
300 val = readl(priv->regs + REGCTL2); 307 val = TS_CONTROLLER_EN_BIT | TS_WIRE_MODE_BIT;
301 val |= TS_CONTROLLER_EN_BIT | TS_WIRE_MODE_BIT;
302
303 val &= ~TS_CONTROLLER_AVGDATA_MASK;
304 val |= priv->cfg_params.average_data << TS_CONTROLLER_AVGDATA_SHIFT; 308 val |= priv->cfg_params.average_data << TS_CONTROLLER_AVGDATA_SHIFT;
305 309
306 val &= ~(TS_CONTROLLER_PWR_LDO | /* PWR up LDO */ 310 mask = (TS_CONTROLLER_AVGDATA_MASK);
311 mask |= (TS_CONTROLLER_PWR_LDO | /* PWR up LDO */
307 TS_CONTROLLER_PWR_ADC | /* PWR up ADC */ 312 TS_CONTROLLER_PWR_ADC | /* PWR up ADC */
308 TS_CONTROLLER_PWR_BGP | /* PWR up BGP */ 313 TS_CONTROLLER_PWR_BGP | /* PWR up BGP */
309 TS_CONTROLLER_PWR_TS); /* PWR up TS */ 314 TS_CONTROLLER_PWR_TS); /* PWR up TS */
310 315 mask |= val;
311 writel(val, priv->regs + REGCTL2); 316 regmap_update_bits(priv->regmap, REGCTL2, mask, val);
312 317
313 ts_reg_dump(priv); 318 ts_reg_dump(priv);
314 319
@@ -320,12 +325,17 @@ static void iproc_ts_stop(struct input_dev *dev)
320 u32 val; 325 u32 val;
321 struct iproc_ts_priv *priv = input_get_drvdata(dev); 326 struct iproc_ts_priv *priv = input_get_drvdata(dev);
322 327
323 writel(0, priv->regs + INTERRUPT_MASK); /* Disable all interrupts */ 328 /*
329 * Disable FIFO int_th and pen event(up/down)Interrupts only
330 * as the interrupt mask register is shared between ADC, TS and
331 * flextimer.
332 */
333 val = TS_PEN_INTR_MASK | TS_FIFO_INTR_MASK;
334 regmap_update_bits(priv->regmap, INTERRUPT_MASK, val, 0);
324 335
325 /* Only power down touch screen controller */ 336 /* Only power down touch screen controller */
326 val = readl(priv->regs + REGCTL2); 337 val = TS_CONTROLLER_PWR_TS;
327 val |= TS_CONTROLLER_PWR_TS; 338 regmap_update_bits(priv->regmap, REGCTL2, val, val);
328 writel(val, priv->regs + REGCTL2);
329 339
330 clk_disable(priv->tsc_clk); 340 clk_disable(priv->tsc_clk);
331} 341}
@@ -414,7 +424,6 @@ static int iproc_ts_probe(struct platform_device *pdev)
414{ 424{
415 struct iproc_ts_priv *priv; 425 struct iproc_ts_priv *priv;
416 struct input_dev *idev; 426 struct input_dev *idev;
417 struct resource *res;
418 int irq; 427 int irq;
419 int error; 428 int error;
420 429
@@ -422,12 +431,12 @@ static int iproc_ts_probe(struct platform_device *pdev)
422 if (!priv) 431 if (!priv)
423 return -ENOMEM; 432 return -ENOMEM;
424 433
425 /* touchscreen controller memory mapped regs */ 434 /* touchscreen controller memory mapped regs via syscon*/
426 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 435 priv->regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
427 priv->regs = devm_ioremap_resource(&pdev->dev, res); 436 "ts_syscon");
428 if (IS_ERR(priv->regs)) { 437 if (IS_ERR(priv->regmap)) {
429 error = PTR_ERR(priv->regs); 438 error = PTR_ERR(priv->regmap);
430 dev_err(&pdev->dev, "unable to map I/O memory: %d\n", error); 439 dev_err(&pdev->dev, "unable to map I/O memory:%d\n", error);
431 return error; 440 return error;
432 } 441 }
433 442
diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c
index a21a07c3ab6d..8b3f15ca7725 100644
--- a/drivers/input/touchscreen/ti_am335x_tsc.c
+++ b/drivers/input/touchscreen/ti_am335x_tsc.c
@@ -487,8 +487,7 @@ static int titsc_remove(struct platform_device *pdev)
487 return 0; 487 return 0;
488} 488}
489 489
490#ifdef CONFIG_PM 490static int __maybe_unused titsc_suspend(struct device *dev)
491static int titsc_suspend(struct device *dev)
492{ 491{
493 struct titsc *ts_dev = dev_get_drvdata(dev); 492 struct titsc *ts_dev = dev_get_drvdata(dev);
494 struct ti_tscadc_dev *tscadc_dev; 493 struct ti_tscadc_dev *tscadc_dev;
@@ -504,7 +503,7 @@ static int titsc_suspend(struct device *dev)
504 return 0; 503 return 0;
505} 504}
506 505
507static int titsc_resume(struct device *dev) 506static int __maybe_unused titsc_resume(struct device *dev)
508{ 507{
509 struct titsc *ts_dev = dev_get_drvdata(dev); 508 struct titsc *ts_dev = dev_get_drvdata(dev);
510 struct ti_tscadc_dev *tscadc_dev; 509 struct ti_tscadc_dev *tscadc_dev;
@@ -521,14 +520,7 @@ static int titsc_resume(struct device *dev)
521 return 0; 520 return 0;
522} 521}
523 522
524static const struct dev_pm_ops titsc_pm_ops = { 523static SIMPLE_DEV_PM_OPS(titsc_pm_ops, titsc_suspend, titsc_resume);
525 .suspend = titsc_suspend,
526 .resume = titsc_resume,
527};
528#define TITSC_PM_OPS (&titsc_pm_ops)
529#else
530#define TITSC_PM_OPS NULL
531#endif
532 524
533static const struct of_device_id ti_tsc_dt_ids[] = { 525static const struct of_device_id ti_tsc_dt_ids[] = {
534 { .compatible = "ti,am3359-tsc", }, 526 { .compatible = "ti,am3359-tsc", },
@@ -541,7 +533,7 @@ static struct platform_driver ti_tsc_driver = {
541 .remove = titsc_remove, 533 .remove = titsc_remove,
542 .driver = { 534 .driver = {
543 .name = "TI-am335x-tsc", 535 .name = "TI-am335x-tsc",
544 .pm = TITSC_PM_OPS, 536 .pm = &titsc_pm_ops,
545 .of_match_table = ti_tsc_dt_ids, 537 .of_match_table = ti_tsc_dt_ids,
546 }, 538 },
547}; 539};