Merge branch 'next' into for-linus
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 11 Jul 2019 06:24:10 +0000 (23:24 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 11 Jul 2019 06:24:10 +0000 (23:24 -0700)
Prepare input updates for 5.3 merge window.

drivers/input/keyboard/imx_keypad.c
drivers/input/mouse/synaptics.c
drivers/input/touchscreen/atmel_mxt_ts.c
drivers/input/touchscreen/iqs5xx.c

index cf08f4acb19122ac39fc0cc58e8ecedbad3a3dc9..97500a2de2d5123a7f1c7a9dd40abdcc54ba4e3a 100644 (file)
@@ -524,11 +524,12 @@ static int imx_keypad_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int __maybe_unused imx_kbd_suspend(struct device *dev)
+static int __maybe_unused imx_kbd_noirq_suspend(struct device *dev)
 {
        struct platform_device *pdev = to_platform_device(dev);
        struct imx_keypad *kbd = platform_get_drvdata(pdev);
        struct input_dev *input_dev = kbd->input_dev;
+       unsigned short reg_val = readw(kbd->mmio_base + KPSR);
 
        /* imx kbd can wake up system even clock is disabled */
        mutex_lock(&input_dev->mutex);
@@ -538,13 +539,20 @@ static int __maybe_unused imx_kbd_suspend(struct device *dev)
 
        mutex_unlock(&input_dev->mutex);
 
-       if (device_may_wakeup(&pdev->dev))
+       if (device_may_wakeup(&pdev->dev)) {
+               if (reg_val & KBD_STAT_KPKD)
+                       reg_val |= KBD_STAT_KRIE;
+               if (reg_val & KBD_STAT_KPKR)
+                       reg_val |= KBD_STAT_KDIE;
+               writew(reg_val, kbd->mmio_base + KPSR);
+
                enable_irq_wake(kbd->irq);
+       }
 
        return 0;
 }
 
-static int __maybe_unused imx_kbd_resume(struct device *dev)
+static int __maybe_unused imx_kbd_noirq_resume(struct device *dev)
 {
        struct platform_device *pdev = to_platform_device(dev);
        struct imx_keypad *kbd = platform_get_drvdata(pdev);
@@ -568,7 +576,9 @@ err_clk:
        return ret;
 }
 
-static SIMPLE_DEV_PM_OPS(imx_kbd_pm_ops, imx_kbd_suspend, imx_kbd_resume);
+static const struct dev_pm_ops imx_kbd_pm_ops = {
+       SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(imx_kbd_noirq_suspend, imx_kbd_noirq_resume)
+};
 
 static struct platform_driver imx_keypad_driver = {
        .driver         = {
index b6da0c1267e36e96cdc3b808e1fae122bec7add4..68fd8232d44cf9387e19589fb5152969b9bca1ff 100644 (file)
@@ -176,9 +176,12 @@ static const char * const smbus_pnp_ids[] = {
        "LEN0072", /* X1 Carbon Gen 5 (2017) - Elan/ALPS trackpoint */
        "LEN0073", /* X1 Carbon G5 (Elantech) */
        "LEN0092", /* X1 Carbon 6 */
+       "LEN0093", /* T480 */
        "LEN0096", /* X280 */
        "LEN0097", /* X280 -> ALPS trackpoint */
        "LEN200f", /* T450s */
+       "LEN2054", /* E480 */
+       "LEN2055", /* E580 */
        "SYN3052", /* HP EliteBook 840 G4 */
        "SYN3221", /* HP 15-ay000 */
        NULL
index d530aade0103368e7d99122632bb19efbde53375..6f4f9da0515cc7b601fb8355db7be2bc44add676 100644 (file)
@@ -1516,7 +1516,8 @@ static int mxt_update_cfg(struct mxt_data *data, const struct firmware *fw)
                } else if (config_crc == data->config_crc) {
                        dev_dbg(dev, "Config CRC 0x%06X: OK\n",
                                 data->config_crc);
-                       return 0;
+                       ret = 0;
+                       goto release_raw;
                } else {
                        dev_info(dev, "Config CRC 0x%06X: does not match file 0x%06X\n",
                                 data->config_crc, config_crc);
index 158707897c2dd8ba10020dc8ffbc83643db3e174..5875bb1099a84e1741e0a70ce6cae78662577aa6 100644 (file)
@@ -502,14 +502,6 @@ static int iqs5xx_axis_init(struct i2c_client *client)
                input_set_capability(input, EV_ABS, ABS_MT_POSITION_Y);
                input_set_capability(input, EV_ABS, ABS_MT_PRESSURE);
 
-               error = input_mt_init_slots(input,
-                               IQS5XX_NUM_CONTACTS, INPUT_MT_DIRECT);
-               if (error) {
-                       dev_err(&client->dev,
-                               "Failed to initialize slots: %d\n", error);
-                       return error;
-               }
-
                input_set_drvdata(input, iqs5xx);
                iqs5xx->input = input;
        }
@@ -591,9 +583,19 @@ static int iqs5xx_axis_init(struct i2c_client *client)
        if (error)
                return error;
 
-       return iqs5xx_write_word(client,
-                                prop.swap_x_y ? IQS5XX_X_RES : IQS5XX_Y_RES,
-                                max_y);
+       error = iqs5xx_write_word(client,
+                                 prop.swap_x_y ? IQS5XX_X_RES : IQS5XX_Y_RES,
+                                 max_y);
+       if (error)
+               return error;
+
+       error = input_mt_init_slots(iqs5xx->input, IQS5XX_NUM_CONTACTS,
+                                   INPUT_MT_DIRECT);
+       if (error)
+               dev_err(&client->dev, "Failed to initialize slots: %d\n",
+                       error);
+
+       return error;
 }
 
 static int iqs5xx_dev_init(struct i2c_client *client)