Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 11 Sep 2021 16:08:28 +0000 (09:08 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 11 Sep 2021 16:08:28 +0000 (09:08 -0700)
Pull input updates from Dmitry Torokhov:

 - several device tree bindings for input devices have been converted to
   yaml

 - dropped no longer used ixp4xx-beeper and CSR Prima2 PWRC drivers

 - analog joystick has been converted to use ktime API and no longer
   warn about low resolution timers

 - a few driver fixes

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (24 commits)
  Input: analog - always use ktime functions
  Input: mms114 - support MMS134S
  Input: elan_i2c - reduce the resume time for controller in Whitebox
  Input: edt-ft5x06 - added case for EDT EP0110M09
  Input: adc-keys - drop bogus __refdata annotation
  Input: Fix spelling mistake in Kconfig "useable" -> "usable"
  Input: Fix spelling mistake in Kconfig "Modul" -> "Module"
  Input: remove dead CSR Prima2 PWRC driver
  Input: adp5589-keys - use the right header
  Input: adp5588-keys - use the right header
  dt-bindings: input: tsc2005: Convert to YAML schema
  Input: ep93xx_keypad - prepare clock before using it
  dt-bindings: input: sun4i-lradc: Add wakeup-source
  dt-bindings: input: Convert Regulator Haptic binding to a schema
  dt-bindings: input: Convert Pixcir Touchscreen binding to a schema
  dt-bindings: input: Convert ChipOne ICN8318 binding to a schema
  Input: pm8941-pwrkey - fix comma vs semicolon issue
  dt-bindings: power: reset: qcom-pon: Convert qcom PON binding to yaml
  dt-bindings: input: pm8941-pwrkey: Convert pm8941 power key binding to yaml
  dt-bindings: power: reset: Change 'additionalProperties' to true
  ...

31 files changed:
Documentation/devicetree/bindings/input/allwinner,sun4i-a10-lradc-keys.yaml
Documentation/devicetree/bindings/input/qcom,pm8941-pwrkey.txt [deleted file]
Documentation/devicetree/bindings/input/qcom,pm8941-pwrkey.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/input/regulator-haptic.txt [deleted file]
Documentation/devicetree/bindings/input/regulator-haptic.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/input/touchscreen/chipone,icn8318.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/input/touchscreen/chipone_icn8318.txt [deleted file]
Documentation/devicetree/bindings/input/touchscreen/pixcir,pixcir_ts.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt [deleted file]
Documentation/devicetree/bindings/input/touchscreen/ti,tsc2005.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt [deleted file]
Documentation/devicetree/bindings/power/reset/qcom,pon.txt [deleted file]
Documentation/devicetree/bindings/power/reset/qcom,pon.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/power/reset/reboot-mode.yaml
drivers/input/joystick/analog.c
drivers/input/keyboard/Kconfig
drivers/input/keyboard/adc-keys.c
drivers/input/keyboard/adp5588-keys.c
drivers/input/keyboard/adp5589-keys.c
drivers/input/keyboard/ep93xx_keypad.c
drivers/input/misc/Kconfig
drivers/input/misc/Makefile
drivers/input/misc/ixp4xx-beeper.c [deleted file]
drivers/input/misc/pm8941-pwrkey.c
drivers/input/misc/sirfsoc-onkey.c [deleted file]
drivers/input/mouse/elan_i2c.h
drivers/input/mouse/elan_i2c_core.c
drivers/input/serio/parkbd.c
drivers/input/touchscreen/Kconfig
drivers/input/touchscreen/edt-ft5x06.c
drivers/input/touchscreen/mms114.c

index cffd020..d74f200 100644 (file)
@@ -29,6 +29,8 @@ properties:
     description:
       Regulator for the LRADC reference voltage
 
+  wakeup-source: true
+
 patternProperties:
   "^button-[0-9]+$":
     type: object
diff --git a/Documentation/devicetree/bindings/input/qcom,pm8941-pwrkey.txt b/Documentation/devicetree/bindings/input/qcom,pm8941-pwrkey.txt
deleted file mode 100644 (file)
index 6cd08bc..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-Qualcomm PM8941 PMIC Power Key
-
-PROPERTIES
-
-- compatible:
-       Usage: required
-       Value type: <string>
-       Definition: must be one of:
-                   "qcom,pm8941-pwrkey"
-                   "qcom,pm8941-resin"
-                   "qcom,pmk8350-pwrkey"
-                   "qcom,pmk8350-resin"
-
-- reg:
-       Usage: required
-       Value type: <prop-encoded-array>
-       Definition: base address of registers for block
-
-- interrupts:
-       Usage: required
-       Value type: <prop-encoded-array>
-       Definition: key change interrupt; The format of the specifier is
-                   defined by the binding document describing the node's
-                   interrupt parent.
-
-- debounce:
-       Usage: optional
-       Value type: <u32>
-       Definition: time in microseconds that key must be pressed or released
-                   for state change interrupt to trigger.
-
-- bias-pull-up:
-       Usage: optional
-       Value type: <empty>
-       Definition: presence of this property indicates that the KPDPWR_N pin
-                   should be configured for pull up.
-
-- linux,code:
-       Usage: optional
-       Value type: <u32>
-       Definition: The input key-code associated with the power key.
-                   Use the linux event codes defined in
-                   include/dt-bindings/input/linux-event-codes.h
-                   When property is omitted KEY_POWER is assumed.
-
-EXAMPLE
-
-       pwrkey@800 {
-               compatible = "qcom,pm8941-pwrkey";
-               reg = <0x800>;
-               interrupts = <0x0 0x8 0 IRQ_TYPE_EDGE_BOTH>;
-               debounce = <15625>;
-               bias-pull-up;
-               linux,code = <KEY_POWER>;
-       };
diff --git a/Documentation/devicetree/bindings/input/qcom,pm8941-pwrkey.yaml b/Documentation/devicetree/bindings/input/qcom,pm8941-pwrkey.yaml
new file mode 100644 (file)
index 0000000..62314a5
--- /dev/null
@@ -0,0 +1,51 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/input/qcom,pm8941-pwrkey.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm PM8941 PMIC Power Key
+
+maintainers:
+  - Courtney Cavin <courtney.cavin@sonymobile.com>
+  - Vinod Koul <vkoul@kernel.org>
+
+allOf:
+  - $ref: input.yaml#
+
+properties:
+  compatible:
+    enum:
+      - qcom,pm8941-pwrkey
+      - qcom,pm8941-resin
+      - qcom,pmk8350-pwrkey
+      - qcom,pmk8350-resin
+
+  interrupts:
+    maxItems: 1
+
+  debounce:
+    description: |
+          Time in microseconds that key must be pressed or
+          released for state change interrupt to trigger.
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+  bias-pull-up:
+    description: |
+           Presence of this property indicates that the KPDPWR_N
+           pin should be configured for pull up.
+    $ref: /schemas/types.yaml#/definitions/flag
+
+  linux,code:
+    description: |
+           The input key-code associated with the power key.
+           Use the linux event codes defined in
+           include/dt-bindings/input/linux-event-codes.h
+           When property is omitted KEY_POWER is assumed.
+
+required:
+  - compatible
+  - interrupts
+
+unevaluatedProperties: false
+...
diff --git a/Documentation/devicetree/bindings/input/regulator-haptic.txt b/Documentation/devicetree/bindings/input/regulator-haptic.txt
deleted file mode 100644 (file)
index 3ed1c7e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-* Regulator Haptic Device Tree Bindings
-
-Required Properties:
- - compatible : Should be "regulator-haptic"
- - haptic-supply : Power supply to the haptic motor.
-       [*] refer Documentation/devicetree/bindings/regulator/regulator.txt
-
- - max-microvolt : The maximum voltage value supplied to the haptic motor.
-               [The unit of the voltage is a micro]
-
- - min-microvolt : The minimum voltage value supplied to the haptic motor.
-               [The unit of the voltage is a micro]
-
-Example:
-
-       haptics {
-               compatible = "regulator-haptic";
-               haptic-supply = <&motor_regulator>;
-               max-microvolt = <2700000>;
-               min-microvolt = <1100000>;
-       };
diff --git a/Documentation/devicetree/bindings/input/regulator-haptic.yaml b/Documentation/devicetree/bindings/input/regulator-haptic.yaml
new file mode 100644 (file)
index 0000000..b1ae72f
--- /dev/null
@@ -0,0 +1,43 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: "http://devicetree.org/schemas/input/regulator-haptic.yaml#"
+$schema: "http://devicetree.org/meta-schemas/core.yaml#"
+
+title: Regulator Haptic Device Tree Bindings
+
+maintainers:
+  - Jaewon Kim <jaewon02.kim@samsung.com>
+
+properties:
+  compatible:
+    const: regulator-haptic
+
+  haptic-supply:
+    description: >
+      Power supply to the haptic motor
+
+  max-microvolt:
+    description: >
+      The maximum voltage value supplied to the haptic motor
+
+  min-microvolt:
+    description: >
+      The minimum voltage value supplied to the haptic motor
+
+required:
+  - compatible
+  - haptic-supply
+  - max-microvolt
+  - min-microvolt
+
+additionalProperties: false
+
+examples:
+  - |
+    haptics {
+        compatible = "regulator-haptic";
+        haptic-supply = <&motor_regulator>;
+        max-microvolt = <2700000>;
+        min-microvolt = <1100000>;
+    };
diff --git a/Documentation/devicetree/bindings/input/touchscreen/chipone,icn8318.yaml b/Documentation/devicetree/bindings/input/touchscreen/chipone,icn8318.yaml
new file mode 100644 (file)
index 0000000..9df685b
--- /dev/null
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/input/touchscreen/chipone,icn8318.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: ChipOne ICN8318 Touchscreen Controller Device Tree Bindings
+
+maintainers:
+  - Dmitry Torokhov <dmitry.torokhov@gmail.com>
+
+allOf:
+  - $ref: touchscreen.yaml#
+
+properties:
+  compatible:
+    const: chipone,icn8318
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  wake-gpios:
+    maxItems: 1
+
+unevaluatedProperties: false
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - wake-gpios
+  - touchscreen-size-x
+  - touchscreen-size-y
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        touchscreen@40 {
+            compatible = "chipone,icn8318";
+            reg = <0x40>;
+            interrupt-parent = <&pio>;
+            interrupts = <9 IRQ_TYPE_EDGE_FALLING>; /* EINT9 (PG9) */
+            pinctrl-names = "default";
+            pinctrl-0 = <&ts_wake_pin_p66>;
+            wake-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>; /* PB3 */
+            touchscreen-size-x = <800>;
+            touchscreen-size-y = <480>;
+            touchscreen-inverted-x;
+            touchscreen-swapped-x-y;
+        };
+    };
+
+...
diff --git a/Documentation/devicetree/bindings/input/touchscreen/chipone_icn8318.txt b/Documentation/devicetree/bindings/input/touchscreen/chipone_icn8318.txt
deleted file mode 100644 (file)
index 38b0603..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-* ChipOne icn8318 I2C touchscreen controller
-
-Required properties:
- - compatible            : "chipone,icn8318"
- - reg                   : I2C slave address of the chip (0x40)
- - interrupts            : interrupt specification for the icn8318 interrupt
- - wake-gpios            : GPIO specification for the WAKE input
- - touchscreen-size-x    : horizontal resolution of touchscreen (in pixels)
- - touchscreen-size-y    : vertical resolution of touchscreen (in pixels)
-
-Optional properties:
- - pinctrl-names         : should be "default"
- - pinctrl-0:            : a phandle pointing to the pin settings for the
-                           control gpios
- - touchscreen-fuzz-x    : horizontal noise value of the absolute input
-                           device (in pixels)
- - touchscreen-fuzz-y    : vertical noise value of the absolute input
-                           device (in pixels)
- - touchscreen-inverted-x : X axis is inverted (boolean)
- - touchscreen-inverted-y : Y axis is inverted (boolean)
- - touchscreen-swapped-x-y       : X and Y axis are swapped (boolean)
-                           Swapping is done after inverting the axis
-
-Example:
-
-i2c@00000000 {
-       /* ... */
-
-       chipone_icn8318@40 {
-               compatible = "chipone,icn8318";
-               reg = <0x40>;
-               interrupt-parent = <&pio>;
-               interrupts = <9 IRQ_TYPE_EDGE_FALLING>; /* EINT9 (PG9) */
-               pinctrl-names = "default";
-               pinctrl-0 = <&ts_wake_pin_p66>;
-               wake-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>; /* PB3 */
-               touchscreen-size-x = <800>;
-               touchscreen-size-y = <480>;
-               touchscreen-inverted-x;
-               touchscreen-swapped-x-y;
-       };
-
-       /* ... */
-};
diff --git a/Documentation/devicetree/bindings/input/touchscreen/pixcir,pixcir_ts.yaml b/Documentation/devicetree/bindings/input/touchscreen/pixcir,pixcir_ts.yaml
new file mode 100644 (file)
index 0000000..f9998ed
--- /dev/null
@@ -0,0 +1,68 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/input/touchscreen/pixcir,pixcir_ts.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Pixcir Touchscreen Controller Device Tree Bindings
+
+maintainers:
+  - Dmitry Torokhov <dmitry.torokhov@gmail.com>
+
+allOf:
+  - $ref: touchscreen.yaml#
+
+properties:
+  compatible:
+    enum:
+      - pixcir,pixcir_ts
+      - pixcir,pixcir_tangoc
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  attb-gpio:
+    maxItems: 1
+
+  reset-gpios:
+    maxItems: 1
+
+  enable-gpios:
+    maxItems: 1
+
+  wake-gpios:
+    maxItems: 1
+
+unevaluatedProperties: false
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - attb-gpio
+  - touchscreen-size-x
+  - touchscreen-size-y
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        touchscreen@5c {
+            compatible = "pixcir,pixcir_ts";
+            reg = <0x5c>;
+            interrupts = <2 0>;
+            attb-gpio = <&gpf 2 0 2>;
+            touchscreen-size-x = <800>;
+            touchscreen-size-y = <600>;
+        };
+    };
+
+...
diff --git a/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt b/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt
deleted file mode 100644 (file)
index 697a3e7..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-* Pixcir I2C touchscreen controllers
-
-Required properties:
-- compatible: must be "pixcir,pixcir_ts" or "pixcir,pixcir_tangoc"
-- reg: I2C address of the chip
-- interrupts: interrupt to which the chip is connected
-- attb-gpio: GPIO connected to the ATTB line of the chip
-- touchscreen-size-x: horizontal resolution of touchscreen (in pixels)
-- touchscreen-size-y: vertical resolution of touchscreen (in pixels)
-
-Optional properties:
-- reset-gpios: GPIO connected to the RESET line of the chip
-- enable-gpios: GPIO connected to the ENABLE line of the chip
-- wake-gpios: GPIO connected to the WAKE line of the chip
-
-Example:
-
-       i2c@00000000 {
-               /* ... */
-
-               pixcir_ts@5c {
-                       compatible = "pixcir,pixcir_ts";
-                       reg = <0x5c>;
-                       interrupts = <2 0>;
-                       attb-gpio = <&gpf 2 0 2>;
-                       touchscreen-size-x = <800>;
-                       touchscreen-size-y = <600>;
-               };
-
-               /* ... */
-       };
diff --git a/Documentation/devicetree/bindings/input/touchscreen/ti,tsc2005.yaml b/Documentation/devicetree/bindings/input/touchscreen/ti,tsc2005.yaml
new file mode 100644 (file)
index 0000000..938aab0
--- /dev/null
@@ -0,0 +1,128 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/input/touchscreen/ti,tsc2005.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Texas Instruments TSC2004 and TSC2005 touchscreen controller bindings
+
+maintainers:
+  - Marek Vasut <marex@denx.de>
+  - Michael Welling <mwelling@ieee.org>
+
+properties:
+  $nodename:
+    pattern: "^touchscreen(@.*)?$"
+
+  compatible:
+    enum:
+      - ti,tsc2004
+      - ti,tsc2005
+
+  reg:
+    maxItems: 1
+    description: |
+      I2C address when used on the I2C bus, or the SPI chip select index
+      when used on the SPI bus
+
+  interrupts:
+    maxItems: 1
+
+  reset-gpios:
+    maxItems: 1
+    description: GPIO specifier for the controller reset line
+
+  spi-max-frequency:
+    description: TSC2005 SPI bus clock frequency.
+    maximum: 25000000
+
+  ti,x-plate-ohms:
+    description: resistance of the touchscreen's X plates in ohm (defaults to 280)
+
+  ti,esd-recovery-timeout-ms:
+    description: |
+        if the touchscreen does not respond after the configured time
+        (in milli seconds), the driver will reset it. This is disabled
+        by default.
+
+  vio-supply:
+    description: Regulator specifier
+
+  touchscreen-fuzz-pressure: true
+  touchscreen-fuzz-x: true
+  touchscreen-fuzz-y: true
+  touchscreen-max-pressure: true
+  touchscreen-size-x: true
+  touchscreen-size-y: true
+
+allOf:
+  - $ref: touchscreen.yaml#
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: ti,tsc2004
+    then:
+      properties:
+        spi-max-frequency: false
+
+additionalProperties: false
+
+required:
+  - compatible
+  - reg
+  - interrupts
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+    #include <dt-bindings/gpio/gpio.h>
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+        touchscreen@48 {
+            compatible = "ti,tsc2004";
+            reg = <0x48>;
+            vio-supply = <&vio>;
+
+            reset-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>;
+            interrupts-extended = <&gpio1 27 IRQ_TYPE_EDGE_RISING>;
+
+            touchscreen-fuzz-x = <4>;
+            touchscreen-fuzz-y = <7>;
+            touchscreen-fuzz-pressure = <2>;
+            touchscreen-size-x = <4096>;
+            touchscreen-size-y = <4096>;
+            touchscreen-max-pressure = <2048>;
+
+            ti,x-plate-ohms = <280>;
+            ti,esd-recovery-timeout-ms = <8000>;
+        };
+    };
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+    #include <dt-bindings/gpio/gpio.h>
+    spi {
+        #address-cells = <1>;
+        #size-cells = <0>;
+        touchscreen@0 {
+            compatible = "ti,tsc2005";
+            spi-max-frequency = <6000000>;
+            reg = <0>;
+
+            vio-supply = <&vio>;
+
+            reset-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>; /* 104 */
+            interrupts-extended = <&gpio4 4 IRQ_TYPE_EDGE_RISING>; /* 100 */
+
+            touchscreen-fuzz-x = <4>;
+            touchscreen-fuzz-y = <7>;
+            touchscreen-fuzz-pressure = <2>;
+            touchscreen-size-x = <4096>;
+            touchscreen-size-y = <4096>;
+            touchscreen-max-pressure = <2048>;
+
+            ti,x-plate-ohms = <280>;
+            ti,esd-recovery-timeout-ms = <8000>;
+        };
+    };
diff --git a/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt b/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt
deleted file mode 100644 (file)
index b80c04b..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-* Texas Instruments tsc2004 and tsc2005 touchscreen controllers
-
-Required properties:
- - compatible                : "ti,tsc2004" or "ti,tsc2005"
- - reg                       : Device address
- - interrupts                : IRQ specifier
- - spi-max-frequency         : Maximum SPI clocking speed of the device
-                               (for tsc2005)
-
-Optional properties:
- - vio-supply                : Regulator specifier
- - reset-gpios               : GPIO specifier for the controller reset line
- - ti,x-plate-ohms           : integer, resistance of the touchscreen's X plates
-                               in ohm (defaults to 280)
- - ti,esd-recovery-timeout-ms : integer, if the touchscreen does not respond after
-                               the configured time (in milli seconds), the driver
-                               will reset it. This is disabled by default.
- - properties defined in touchscreen.txt
-
-Example:
-
-&i2c3 {
-       tsc2004@48 {
-               compatible = "ti,tsc2004";
-               reg = <0x48>;
-               vio-supply = <&vio>;
-
-               reset-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>;
-               interrupts-extended = <&gpio1 27 IRQ_TYPE_EDGE_RISING>;
-
-               touchscreen-fuzz-x = <4>;
-               touchscreen-fuzz-y = <7>;
-               touchscreen-fuzz-pressure = <2>;
-               touchscreen-size-x = <4096>;
-               touchscreen-size-y = <4096>;
-               touchscreen-max-pressure = <2048>;
-
-               ti,x-plate-ohms = <280>;
-               ti,esd-recovery-timeout-ms = <8000>;
-       };
-}
-
-&mcspi1 {
-       tsc2005@0 {
-               compatible = "ti,tsc2005";
-               spi-max-frequency = <6000000>;
-               reg = <0>;
-
-               vio-supply = <&vio>;
-
-               reset-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>; /* 104 */
-               interrupts-extended = <&gpio4 4 IRQ_TYPE_EDGE_RISING>; /* 100 */
-
-               touchscreen-fuzz-x = <4>;
-               touchscreen-fuzz-y = <7>;
-               touchscreen-fuzz-pressure = <2>;
-               touchscreen-size-x = <4096>;
-               touchscreen-size-y = <4096>;
-               touchscreen-max-pressure = <2048>;
-
-               ti,x-plate-ohms = <280>;
-               ti,esd-recovery-timeout-ms = <8000>;
-       };
-}
diff --git a/Documentation/devicetree/bindings/power/reset/qcom,pon.txt b/Documentation/devicetree/bindings/power/reset/qcom,pon.txt
deleted file mode 100644 (file)
index 0c0dc3a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-Qualcomm PON Device
-
-The Power On device for Qualcomm PM8xxx is MFD supporting pwrkey
-and resin along with the Android reboot-mode.
-
-This DT node has pwrkey and resin as sub nodes.
-
-Required Properties:
--compatible: Must be one of:
-       "qcom,pm8916-pon"
-       "qcom,pms405-pon"
-       "qcom,pm8998-pon"
-
--reg: Specifies the physical address of the pon register
-
-Optional subnode:
--pwrkey: Specifies the subnode pwrkey and should follow the
- qcom,pm8941-pwrkey.txt description.
--resin: Specifies the subnode resin and should follow the
- qcom,pm8xxx-pwrkey.txt description.
-
-The rest of the properties should follow the generic reboot-mode description
-found in reboot-mode.txt
-
-Example:
-
-       pon@800 {
-               compatible = "qcom,pm8916-pon";
-
-               reg = <0x800>;
-               mode-bootloader = <0x2>;
-               mode-recovery = <0x1>;
-
-               pwrkey {
-                       compatible = "qcom,pm8941-pwrkey";
-                       interrupts = <0x0 0x8 0 IRQ_TYPE_EDGE_BOTH>;
-                       debounce = <15625>;
-                       bias-pull-up;
-                       linux,code = <KEY_POWER>;
-               };
-
-               resin {
-                       compatible = "qcom,pm8941-resin";
-                       interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>;
-                       debounce = <15625>;
-                       bias-pull-up;
-                       linux,code = <KEY_VOLUMEDOWN>;
-               };
-       };
diff --git a/Documentation/devicetree/bindings/power/reset/qcom,pon.yaml b/Documentation/devicetree/bindings/power/reset/qcom,pon.yaml
new file mode 100644 (file)
index 0000000..353f155
--- /dev/null
@@ -0,0 +1,80 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/power/reset/qcom,pon.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm PON Device
+
+maintainers:
+  - Vinod Koul <vkoul@kernel.org>
+
+description: |
+  The Power On device for Qualcomm PM8xxx is MFD supporting pwrkey
+  and resin along with the Android reboot-mode.
+
+  This DT node has pwrkey and resin as sub nodes.
+
+allOf:
+  - $ref: reboot-mode.yaml#
+
+properties:
+  compatible:
+    enum:
+      - qcom,pm8916-pon
+      - qcom,pms405-pon
+      - qcom,pm8998-pon
+
+  reg:
+    maxItems: 1
+
+  pwrkey:
+    type: object
+    $ref: "../../input/qcom,pm8941-pwrkey.yaml#"
+
+  resin:
+    type: object
+    $ref: "../../input/qcom,pm8941-pwrkey.yaml#"
+
+required:
+  - compatible
+  - reg
+
+unevaluatedProperties: false
+
+examples:
+  - |
+   #include <dt-bindings/interrupt-controller/irq.h>
+   #include <dt-bindings/input/linux-event-codes.h>
+   #include <dt-bindings/spmi/spmi.h>
+   spmi_bus: spmi@c440000 {
+     reg = <0x0c440000 0x1100>;
+     #address-cells = <2>;
+     #size-cells = <0>;
+     pmk8350: pmic@0 {
+       reg = <0x0 SPMI_USID>;
+       #address-cells = <1>;
+       #size-cells = <0>;
+       pmk8350_pon: pon_hlos@1300 {
+         reg = <0x1300>;
+         compatible = "qcom,pm8998-pon";
+
+         pwrkey {
+            compatible = "qcom,pm8941-pwrkey";
+            interrupts = < 0x0 0x8 0 IRQ_TYPE_EDGE_BOTH >;
+            debounce = <15625>;
+            bias-pull-up;
+            linux,code = <KEY_POWER>;
+         };
+
+         resin {
+            compatible = "qcom,pm8941-resin";
+            interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>;
+            debounce = <15625>;
+            bias-pull-up;
+            linux,code = <KEY_VOLUMEDOWN>;
+         };
+       };
+     };
+   };
+...
index 9c6fda6..ad0a0b9 100644 (file)
@@ -36,7 +36,7 @@ patternProperties:
   "^mode-.*$":
     $ref: /schemas/types.yaml#/definitions/uint32
 
-additionalProperties: false
+additionalProperties: true
 
 examples:
   - |
index f798922..882c3c8 100644 (file)
@@ -28,10 +28,6 @@ MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
 MODULE_DESCRIPTION(DRIVER_DESC);
 MODULE_LICENSE("GPL");
 
-static bool use_ktime = true;
-module_param(use_ktime, bool, 0400);
-MODULE_PARM_DESC(use_ktime, "Use ktime for measuring I/O speed");
-
 /*
  * Option parsing.
  */
@@ -110,7 +106,6 @@ struct analog_port {
        char cooked;
        int bads;
        int reads;
-       int speed;
        int loop;
        int fuzz;
        int axes[4];
@@ -119,66 +114,6 @@ struct analog_port {
        int axtime;
 };
 
-/*
- * Time macros.
- */
-
-#ifdef __i386__
-
-#include <linux/i8253.h>
-
-#define GET_TIME(x)    do { if (boot_cpu_has(X86_FEATURE_TSC)) x = (unsigned int)rdtsc(); else x = get_time_pit(); } while (0)
-#define DELTA(x,y)     (boot_cpu_has(X86_FEATURE_TSC) ? ((y) - (x)) : ((x) - (y) + ((x) < (y) ? PIT_TICK_RATE / HZ : 0)))
-#define TIME_NAME      (boot_cpu_has(X86_FEATURE_TSC)?"TSC":"PIT")
-static unsigned int get_time_pit(void)
-{
-        unsigned long flags;
-        unsigned int count;
-
-        raw_spin_lock_irqsave(&i8253_lock, flags);
-        outb_p(0x00, 0x43);
-        count = inb_p(0x40);
-        count |= inb_p(0x40) << 8;
-        raw_spin_unlock_irqrestore(&i8253_lock, flags);
-
-        return count;
-}
-#elif defined(__x86_64__)
-#define GET_TIME(x)    do { x = (unsigned int)rdtsc(); } while (0)
-#define DELTA(x,y)     ((y)-(x))
-#define TIME_NAME      "TSC"
-#elif defined(__alpha__) || defined(CONFIG_ARM) || defined(CONFIG_ARM64) || defined(CONFIG_PPC) || defined(CONFIG_RISCV)
-#define GET_TIME(x)    do { x = get_cycles(); } while (0)
-#define DELTA(x,y)     ((y)-(x))
-#define TIME_NAME      "get_cycles"
-#else
-#define FAKE_TIME
-static unsigned long analog_faketime = 0;
-#define GET_TIME(x)     do { x = analog_faketime++; } while(0)
-#define DELTA(x,y)     ((y)-(x))
-#define TIME_NAME      "Unreliable"
-#warning Precise timer not defined for this architecture.
-#endif
-
-static inline u64 get_time(void)
-{
-       if (use_ktime) {
-               return ktime_get_ns();
-       } else {
-               unsigned int x;
-               GET_TIME(x);
-               return x;
-       }
-}
-
-static inline unsigned int delta(u64 x, u64 y)
-{
-       if (use_ktime)
-               return y - x;
-       else
-               return DELTA((unsigned int)x, (unsigned int)y);
-}
-
 /*
  * analog_decode() decodes analog joystick data and reports input events.
  */
@@ -234,18 +169,18 @@ static void analog_decode(struct analog *analog, int *axes, int *initial, int bu
 static int analog_cooked_read(struct analog_port *port)
 {
        struct gameport *gameport = port->gameport;
-       u64 time[4], start, loop, now;
+       ktime_t time[4], start, loop, now;
        unsigned int loopout, timeout;
        unsigned char data[4], this, last;
        unsigned long flags;
        int i, j;
 
        loopout = (ANALOG_LOOP_TIME * port->loop) / 1000;
-       timeout = ANALOG_MAX_TIME * port->speed;
+       timeout = ANALOG_MAX_TIME * NSEC_PER_MSEC;
 
        local_irq_save(flags);
        gameport_trigger(gameport);
-       now = get_time();
+       now = ktime_get();
        local_irq_restore(flags);
 
        start = now;
@@ -258,16 +193,16 @@ static int analog_cooked_read(struct analog_port *port)
 
                local_irq_disable();
                this = gameport_read(gameport) & port->mask;
-               now = get_time();
+               now = ktime_get();
                local_irq_restore(flags);
 
-               if ((last ^ this) && (delta(loop, now) < loopout)) {
+               if ((last ^ this) && (ktime_sub(now, loop) < loopout)) {
                        data[i] = last ^ this;
                        time[i] = now;
                        i++;
                }
 
-       } while (this && (i < 4) && (delta(start, now) < timeout));
+       } while (this && (i < 4) && (ktime_sub(now, start) < timeout));
 
        this <<= 4;
 
@@ -275,7 +210,7 @@ static int analog_cooked_read(struct analog_port *port)
                this |= data[i];
                for (j = 0; j < 4; j++)
                        if (data[i] & (1 << j))
-                               port->axes[j] = (delta(start, time[i]) << ANALOG_FUZZ_BITS) / port->loop;
+                               port->axes[j] = ((u32)ktime_sub(time[i], start) << ANALOG_FUZZ_BITS) / port->loop;
        }
 
        return -(this != port->mask);
@@ -375,38 +310,22 @@ static void analog_calibrate_timer(struct analog_port *port)
 {
        struct gameport *gameport = port->gameport;
        unsigned int i, t, tx;
-       u64 t1, t2, t3;
+       ktime_t t1, t2, t3;
        unsigned long flags;
 
-       if (use_ktime) {
-               port->speed = 1000000;
-       } else {
-               local_irq_save(flags);
-               t1 = get_time();
-#ifdef FAKE_TIME
-               analog_faketime += 830;
-#endif
-               mdelay(1);
-               t2 = get_time();
-               t3 = get_time();
-               local_irq_restore(flags);
-
-               port->speed = delta(t1, t2) - delta(t2, t3);
-       }
-
        tx = ~0;
 
        for (i = 0; i < 50; i++) {
                local_irq_save(flags);
-               t1 = get_time();
+               t1 = ktime_get();
                for (t = 0; t < 50; t++) {
                        gameport_read(gameport);
-                       t2 = get_time();
+                       t2 = ktime_get();
                }
-               t3 = get_time();
+               t3 = ktime_get();
                local_irq_restore(flags);
                udelay(i);
-               t = delta(t1, t2) - delta(t2, t3);
+               t = ktime_sub(t2, t1) - ktime_sub(t3, t2);
                if (t < tx) tx = t;
        }
 
@@ -611,7 +530,7 @@ static int analog_init_port(struct gameport *gameport, struct gameport_driver *d
                t = gameport_read(gameport);
                msleep(ANALOG_MAX_TIME);
                port->mask = (gameport_read(gameport) ^ t) & t & 0xf;
-               port->fuzz = (port->speed * ANALOG_FUZZ_MAGIC) / port->loop / 1000 + ANALOG_FUZZ_BITS;
+               port->fuzz = (NSEC_PER_MSEC * ANALOG_FUZZ_MAGIC) / port->loop / 1000 + ANALOG_FUZZ_BITS;
 
                for (i = 0; i < ANALOG_INIT_RETRIES; i++) {
                        if (!analog_cooked_read(port))
index 40a070a..e75650e 100644 (file)
@@ -210,7 +210,7 @@ config KEYBOARD_LKKBD
        select SERIO
        help
          Say Y here if you want to use a LK201 or LK401 style serial
-         keyboard. This keyboard is also useable on PCs if you attach
+         keyboard. This keyboard is also usable on PCs if you attach
          it with the inputattach program. The connector pinout is
          described within lkkbd.c.
 
index 6d5be48..bf72ab8 100644 (file)
@@ -193,7 +193,7 @@ static const struct of_device_id adc_keys_of_match[] = {
 MODULE_DEVICE_TABLE(of, adc_keys_of_match);
 #endif
 
-static struct platform_driver __refdata adc_keys_driver = {
+static struct platform_driver adc_keys_driver = {
        .driver = {
                .name = "adc_keys",
                .of_match_table = of_match_ptr(adc_keys_of_match),
index 90a59b9..1592da4 100644 (file)
@@ -17,7 +17,7 @@
 #include <linux/platform_device.h>
 #include <linux/input.h>
 #include <linux/i2c.h>
-#include <linux/gpio.h>
+#include <linux/gpio/driver.h>
 #include <linux/slab.h>
 
 #include <linux/platform_data/adp5588.h>
index 654e047..bdd2644 100644 (file)
@@ -18,7 +18,7 @@
 #include <linux/platform_device.h>
 #include <linux/input.h>
 #include <linux/i2c.h>
-#include <linux/gpio.h>
+#include <linux/gpio/driver.h>
 #include <linux/slab.h>
 
 #include <linux/input/adp5589.h>
index c819433..e0e931e 100644 (file)
@@ -157,7 +157,7 @@ static int ep93xx_keypad_open(struct input_dev *pdev)
 
        if (!keypad->enabled) {
                ep93xx_keypad_config(keypad);
-               clk_enable(keypad->clk);
+               clk_prepare_enable(keypad->clk);
                keypad->enabled = true;
        }
 
@@ -169,7 +169,7 @@ static void ep93xx_keypad_close(struct input_dev *pdev)
        struct ep93xx_keypad *keypad = input_get_drvdata(pdev);
 
        if (keypad->enabled) {
-               clk_disable(keypad->clk);
+               clk_disable_unprepare(keypad->clk);
                keypad->enabled = false;
        }
 }
index 498cde3..dd5227c 100644 (file)
@@ -309,18 +309,6 @@ config INPUT_GPIO_VIBRA
          To compile this driver as a module, choose M here: the module will be
          called gpio-vibra.
 
-config INPUT_IXP4XX_BEEPER
-       tristate "IXP4XX Beeper support"
-       depends on ARCH_IXP4XX
-       help
-         If you say yes here, you can connect a beeper to the
-         ixp4xx gpio pins. This is used by the LinkSys NSLU2.
-
-         If unsure, say Y.
-
-         To compile this driver as a module, choose M here: the
-         module will be called ixp4xx-beeper.
-
 config INPUT_COBALT_BTNS
        tristate "Cobalt button interface"
        depends on MIPS_COBALT
@@ -811,16 +799,6 @@ config INPUT_XEN_KBDDEV_FRONTEND
          To compile this driver as a module, choose M here: the
          module will be called xen-kbdfront.
 
-config INPUT_SIRFSOC_ONKEY
-       tristate "CSR SiRFSoC power on/off/suspend key support"
-       depends on ARCH_SIRF && OF
-       default y
-       help
-         Say Y here if you want to support for the SiRFSoC power on/off/suspend key
-         in Linux, after you press the onkey, system will suspend.
-
-         If unsure, say N.
-
 config INPUT_IDEAPAD_SLIDEBAR
        tristate "IdeaPad Laptop Slidebar"
        depends on INPUT
index f593bee..b92c53a 100644 (file)
@@ -44,7 +44,6 @@ obj-$(CONFIG_HP_SDC_RTC)              += hp_sdc_rtc.o
 obj-$(CONFIG_INPUT_IMS_PCU)            += ims-pcu.o
 obj-$(CONFIG_INPUT_IQS269A)            += iqs269a.o
 obj-$(CONFIG_INPUT_IQS626A)            += iqs626a.o
-obj-$(CONFIG_INPUT_IXP4XX_BEEPER)      += ixp4xx-beeper.o
 obj-$(CONFIG_INPUT_KEYSPAN_REMOTE)     += keyspan_remote.o
 obj-$(CONFIG_INPUT_KXTJ9)              += kxtj9.o
 obj-$(CONFIG_INPUT_M68K_BEEP)          += m68kspkr.o
@@ -74,7 +73,6 @@ obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER)       += rotary_encoder.o
 obj-$(CONFIG_INPUT_RK805_PWRKEY)       += rk805-pwrkey.o
 obj-$(CONFIG_INPUT_SC27XX_VIBRA)       += sc27xx-vibra.o
 obj-$(CONFIG_INPUT_SGI_BTNS)           += sgi_btns.o
-obj-$(CONFIG_INPUT_SIRFSOC_ONKEY)      += sirfsoc-onkey.o
 obj-$(CONFIG_INPUT_SOC_BUTTON_ARRAY)   += soc_button_array.o
 obj-$(CONFIG_INPUT_SPARCSPKR)          += sparcspkr.o
 obj-$(CONFIG_INPUT_STPMIC1_ONKEY)      += stpmic1_onkey.o
diff --git a/drivers/input/misc/ixp4xx-beeper.c b/drivers/input/misc/ixp4xx-beeper.c
deleted file mode 100644 (file)
index 05018d0..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Generic IXP4xx beeper driver
- *
- * Copyright (C) 2005 Tower Technologies
- *
- * based on nslu2-io.c
- *  Copyright (C) 2004 Karen Spearel
- *
- * Author: Alessandro Zummo <a.zummo@towertech.it>
- * Maintainers: http://www.nslu2-linux.org/
- */
-
-#include <linux/module.h>
-#include <linux/input.h>
-#include <linux/delay.h>
-#include <linux/platform_device.h>
-#include <linux/interrupt.h>
-#include <linux/gpio.h>
-#include <mach/hardware.h>
-
-MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-MODULE_DESCRIPTION("ixp4xx beeper driver");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:ixp4xx-beeper");
-
-static DEFINE_SPINLOCK(beep_lock);
-
-static int ixp4xx_timer2_irq;
-
-static void ixp4xx_spkr_control(unsigned int pin, unsigned int count)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&beep_lock, flags);
-
-       if (count) {
-               gpio_direction_output(pin, 0);
-               *IXP4XX_OSRT2 = (count & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE;
-       } else {
-               gpio_direction_output(pin, 1);
-               gpio_direction_input(pin);
-               *IXP4XX_OSRT2 = 0;
-       }
-
-       spin_unlock_irqrestore(&beep_lock, flags);
-}
-
-static int ixp4xx_spkr_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
-{
-       unsigned int pin = (unsigned int) input_get_drvdata(dev);
-       unsigned int count = 0;
-
-       if (type != EV_SND)
-               return -1;
-
-       switch (code) {
-               case SND_BELL:
-                       if (value)
-                               value = 1000;
-               case SND_TONE:
-                       break;
-               default:
-                       return -1;
-       }
-
-       if (value > 20 && value < 32767)
-               count = (ixp4xx_timer_freq / (value * 4)) - 1;
-
-       ixp4xx_spkr_control(pin, count);
-
-       return 0;
-}
-
-static irqreturn_t ixp4xx_spkr_interrupt(int irq, void *dev_id)
-{
-       unsigned int pin = (unsigned int) dev_id;
-
-       /* clear interrupt */
-       *IXP4XX_OSST = IXP4XX_OSST_TIMER_2_PEND;
-
-       /* flip the beeper output */
-       gpio_set_value(pin, !gpio_get_value(pin));
-
-       return IRQ_HANDLED;
-}
-
-static int ixp4xx_spkr_probe(struct platform_device *dev)
-{
-       struct input_dev *input_dev;
-       int irq;
-       int err;
-
-       input_dev = input_allocate_device();
-       if (!input_dev)
-               return -ENOMEM;
-
-       input_set_drvdata(input_dev, (void *) dev->id);
-
-       input_dev->name = "ixp4xx beeper";
-       input_dev->phys = "ixp4xx/gpio";
-       input_dev->id.bustype = BUS_HOST;
-       input_dev->id.vendor  = 0x001f;
-       input_dev->id.product = 0x0001;
-       input_dev->id.version = 0x0100;
-       input_dev->dev.parent = &dev->dev;
-
-       input_dev->evbit[0] = BIT_MASK(EV_SND);
-       input_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE);
-       input_dev->event = ixp4xx_spkr_event;
-
-       irq = platform_get_irq(dev, 0);
-       if (irq < 0) {
-               err = irq;
-               goto err_free_device;
-       }
-
-       err = gpio_request(dev->id, "ixp4-beeper");
-       if (err)
-               goto err_free_device;
-
-       err = request_irq(irq, &ixp4xx_spkr_interrupt,
-                         IRQF_NO_SUSPEND, "ixp4xx-beeper",
-                         (void *) dev->id);
-       if (err)
-               goto err_free_gpio;
-       ixp4xx_timer2_irq = irq;
-
-       err = input_register_device(input_dev);
-       if (err)
-               goto err_free_irq;
-
-       platform_set_drvdata(dev, input_dev);
-
-       return 0;
-
- err_free_irq:
-       free_irq(irq, (void *)dev->id);
- err_free_gpio:
-       gpio_free(dev->id);
- err_free_device:
-       input_free_device(input_dev);
-
-       return err;
-}
-
-static int ixp4xx_spkr_remove(struct platform_device *dev)
-{
-       struct input_dev *input_dev = platform_get_drvdata(dev);
-       unsigned int pin = (unsigned int) input_get_drvdata(input_dev);
-
-       input_unregister_device(input_dev);
-
-       /* turn the speaker off */
-       disable_irq(ixp4xx_timer2_irq);
-       ixp4xx_spkr_control(pin, 0);
-
-       free_irq(ixp4xx_timer2_irq, (void *)dev->id);
-       gpio_free(dev->id);
-
-       return 0;
-}
-
-static void ixp4xx_spkr_shutdown(struct platform_device *dev)
-{
-       struct input_dev *input_dev = platform_get_drvdata(dev);
-       unsigned int pin = (unsigned int) input_get_drvdata(input_dev);
-
-       /* turn off the speaker */
-       disable_irq(ixp4xx_timer2_irq);
-       ixp4xx_spkr_control(pin, 0);
-}
-
-static struct platform_driver ixp4xx_spkr_platform_driver = {
-       .driver         = {
-               .name   = "ixp4xx-beeper",
-       },
-       .probe          = ixp4xx_spkr_probe,
-       .remove         = ixp4xx_spkr_remove,
-       .shutdown       = ixp4xx_spkr_shutdown,
-};
-module_platform_driver(ixp4xx_spkr_platform_driver);
-
index 10e3fc0..3360960 100644 (file)
@@ -284,7 +284,7 @@ static int pm8941_pwrkey_probe(struct platform_device *pdev)
        }
 
        if (pwrkey->data->supports_ps_hold_poff_config) {
-               pwrkey->reboot_notifier.notifier_call = pm8941_reboot_notify,
+               pwrkey->reboot_notifier.notifier_call = pm8941_reboot_notify;
                error = register_reboot_notifier(&pwrkey->reboot_notifier);
                if (error) {
                        dev_err(&pdev->dev, "failed to register reboot notifier: %d\n",
diff --git a/drivers/input/misc/sirfsoc-onkey.c b/drivers/input/misc/sirfsoc-onkey.c
deleted file mode 100644 (file)
index 7982bf8..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Power key driver for SiRF PrimaII
- *
- * Copyright (c) 2013 - 2014 Cambridge Silicon Radio Limited, a CSR plc group
- * company.
- */
-
-#include <linux/module.h>
-#include <linux/interrupt.h>
-#include <linux/delay.h>
-#include <linux/platform_device.h>
-#include <linux/input.h>
-#include <linux/rtc/sirfsoc_rtciobrg.h>
-#include <linux/of.h>
-#include <linux/workqueue.h>
-
-struct sirfsoc_pwrc_drvdata {
-       u32                     pwrc_base;
-       struct input_dev        *input;
-       struct delayed_work     work;
-};
-
-#define PWRC_ON_KEY_BIT                        (1 << 0)
-
-#define PWRC_INT_STATUS                        0xc
-#define PWRC_INT_MASK                  0x10
-#define PWRC_PIN_STATUS                        0x14
-#define PWRC_KEY_DETECT_UP_TIME                20      /* ms*/
-
-static int sirfsoc_pwrc_is_on_key_down(struct sirfsoc_pwrc_drvdata *pwrcdrv)
-{
-       u32 state = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base +
-                                                       PWRC_PIN_STATUS);
-       return !(state & PWRC_ON_KEY_BIT); /* ON_KEY is active low */
-}
-
-static void sirfsoc_pwrc_report_event(struct work_struct *work)
-{
-       struct sirfsoc_pwrc_drvdata *pwrcdrv =
-               container_of(work, struct sirfsoc_pwrc_drvdata, work.work);
-
-       if (sirfsoc_pwrc_is_on_key_down(pwrcdrv)) {
-               schedule_delayed_work(&pwrcdrv->work,
-                       msecs_to_jiffies(PWRC_KEY_DETECT_UP_TIME));
-       } else {
-               input_event(pwrcdrv->input, EV_KEY, KEY_POWER, 0);
-               input_sync(pwrcdrv->input);
-       }
-}
-
-static irqreturn_t sirfsoc_pwrc_isr(int irq, void *dev_id)
-{
-       struct sirfsoc_pwrc_drvdata *pwrcdrv = dev_id;
-       u32 int_status;
-
-       int_status = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base +
-                                                       PWRC_INT_STATUS);
-       sirfsoc_rtc_iobrg_writel(int_status & ~PWRC_ON_KEY_BIT,
-                                pwrcdrv->pwrc_base + PWRC_INT_STATUS);
-
-       input_event(pwrcdrv->input, EV_KEY, KEY_POWER, 1);
-       input_sync(pwrcdrv->input);
-       schedule_delayed_work(&pwrcdrv->work,
-                             msecs_to_jiffies(PWRC_KEY_DETECT_UP_TIME));
-
-       return IRQ_HANDLED;
-}
-
-static void sirfsoc_pwrc_toggle_interrupts(struct sirfsoc_pwrc_drvdata *pwrcdrv,
-                                          bool enable)
-{
-       u32 int_mask;
-
-       int_mask = sirfsoc_rtc_iobrg_readl(pwrcdrv->pwrc_base + PWRC_INT_MASK);
-       if (enable)
-               int_mask |= PWRC_ON_KEY_BIT;
-       else
-               int_mask &= ~PWRC_ON_KEY_BIT;
-       sirfsoc_rtc_iobrg_writel(int_mask, pwrcdrv->pwrc_base + PWRC_INT_MASK);
-}
-
-static int sirfsoc_pwrc_open(struct input_dev *input)
-{
-       struct sirfsoc_pwrc_drvdata *pwrcdrv = input_get_drvdata(input);
-
-       sirfsoc_pwrc_toggle_interrupts(pwrcdrv, true);
-
-       return 0;
-}
-
-static void sirfsoc_pwrc_close(struct input_dev *input)
-{
-       struct sirfsoc_pwrc_drvdata *pwrcdrv = input_get_drvdata(input);
-
-       sirfsoc_pwrc_toggle_interrupts(pwrcdrv, false);
-       cancel_delayed_work_sync(&pwrcdrv->work);
-}
-
-static const struct of_device_id sirfsoc_pwrc_of_match[] = {
-       { .compatible = "sirf,prima2-pwrc" },
-       {},
-};
-MODULE_DEVICE_TABLE(of, sirfsoc_pwrc_of_match);
-
-static int sirfsoc_pwrc_probe(struct platform_device *pdev)
-{
-       struct device_node *np = pdev->dev.of_node;
-       struct sirfsoc_pwrc_drvdata *pwrcdrv;
-       int irq;
-       int error;
-
-       pwrcdrv = devm_kzalloc(&pdev->dev, sizeof(struct sirfsoc_pwrc_drvdata),
-                              GFP_KERNEL);
-       if (!pwrcdrv) {
-               dev_info(&pdev->dev, "Not enough memory for the device data\n");
-               return -ENOMEM;
-       }
-
-       /*
-        * We can't use of_iomap because pwrc is not mapped in memory,
-        * the so-called base address is only offset in rtciobrg
-        */
-       error = of_property_read_u32(np, "reg", &pwrcdrv->pwrc_base);
-       if (error) {
-               dev_err(&pdev->dev,
-                       "unable to find base address of pwrc node in dtb\n");
-               return error;
-       }
-
-       pwrcdrv->input = devm_input_allocate_device(&pdev->dev);
-       if (!pwrcdrv->input)
-               return -ENOMEM;
-
-       pwrcdrv->input->name = "sirfsoc pwrckey";
-       pwrcdrv->input->phys = "pwrc/input0";
-       pwrcdrv->input->evbit[0] = BIT_MASK(EV_KEY);
-       input_set_capability(pwrcdrv->input, EV_KEY, KEY_POWER);
-
-       INIT_DELAYED_WORK(&pwrcdrv->work, sirfsoc_pwrc_report_event);
-
-       pwrcdrv->input->open = sirfsoc_pwrc_open;
-       pwrcdrv->input->close = sirfsoc_pwrc_close;
-
-       input_set_drvdata(pwrcdrv->input, pwrcdrv);
-
-       /* Make sure the device is quiesced */
-       sirfsoc_pwrc_toggle_interrupts(pwrcdrv, false);
-
-       irq = platform_get_irq(pdev, 0);
-       error = devm_request_irq(&pdev->dev, irq,
-                                sirfsoc_pwrc_isr, 0,
-                                "sirfsoc_pwrc_int", pwrcdrv);
-       if (error) {
-               dev_err(&pdev->dev, "unable to claim irq %d, error: %d\n",
-                       irq, error);
-               return error;
-       }
-
-       error = input_register_device(pwrcdrv->input);
-       if (error) {
-               dev_err(&pdev->dev,
-                       "unable to register input device, error: %d\n",
-                       error);
-               return error;
-       }
-
-       dev_set_drvdata(&pdev->dev, pwrcdrv);
-       device_init_wakeup(&pdev->dev, 1);
-
-       return 0;
-}
-
-static int __maybe_unused sirfsoc_pwrc_resume(struct device *dev)
-{
-       struct sirfsoc_pwrc_drvdata *pwrcdrv = dev_get_drvdata(dev);
-       struct input_dev *input = pwrcdrv->input;
-
-       /*
-        * Do not mask pwrc interrupt as we want pwrc work as a wakeup source
-        * if users touch X_ONKEY_B, see arch/arm/mach-prima2/pm.c
-        */
-       mutex_lock(&input->mutex);
-       if (input_device_enabled(input))
-               sirfsoc_pwrc_toggle_interrupts(pwrcdrv, true);
-       mutex_unlock(&input->mutex);
-
-       return 0;
-}
-
-static SIMPLE_DEV_PM_OPS(sirfsoc_pwrc_pm_ops, NULL, sirfsoc_pwrc_resume);
-
-static struct platform_driver sirfsoc_pwrc_driver = {
-       .probe          = sirfsoc_pwrc_probe,
-       .driver         = {
-               .name   = "sirfsoc-pwrc",
-               .pm     = &sirfsoc_pwrc_pm_ops,
-               .of_match_table = sirfsoc_pwrc_of_match,
-       }
-};
-
-module_platform_driver(sirfsoc_pwrc_driver);
-
-MODULE_LICENSE("GPL v2");
-MODULE_AUTHOR("Binghua Duan <Binghua.Duan@csr.com>, Xianglong Du <Xianglong.Du@csr.com>");
-MODULE_DESCRIPTION("CSR Prima2 PWRC Driver");
-MODULE_ALIAS("platform:sirfsoc-pwrc");
index dc4a240..3c84dee 100644 (file)
@@ -55,8 +55,9 @@
 #define ETP_FW_PAGE_SIZE_512   512
 #define ETP_FW_SIGNATURE_SIZE  6
 
-#define ETP_PRODUCT_ID_DELBIN  0x00C2
+#define ETP_PRODUCT_ID_WHITEBOX        0x00B8
 #define ETP_PRODUCT_ID_VOXEL   0x00BF
+#define ETP_PRODUCT_ID_DELBIN  0x00C2
 #define ETP_PRODUCT_ID_MAGPIE  0x0120
 #define ETP_PRODUCT_ID_BOBBA   0x0121
 
index dad22c1..47af62c 100644 (file)
@@ -105,6 +105,7 @@ static u32 elan_i2c_lookup_quirks(u16 ic_type, u16 product_id)
                u32 quirks;
        } elan_i2c_quirks[] = {
                { 0x0D, ETP_PRODUCT_ID_DELBIN, ETP_QUIRK_QUICK_WAKEUP },
+               { 0x0D, ETP_PRODUCT_ID_WHITEBOX, ETP_QUIRK_QUICK_WAKEUP },
                { 0x10, ETP_PRODUCT_ID_VOXEL, ETP_QUIRK_QUICK_WAKEUP },
                { 0x14, ETP_PRODUCT_ID_MAGPIE, ETP_QUIRK_QUICK_WAKEUP },
                { 0x14, ETP_PRODUCT_ID_BOBBA, ETP_QUIRK_QUICK_WAKEUP },
index 3ac57a9..51b6850 100644 (file)
@@ -220,16 +220,4 @@ static struct parport_driver parkbd_parport_driver = {
        .detach = parkbd_detach,
        .devmodel = true,
 };
-
-static int __init parkbd_init(void)
-{
-       return parport_register_driver(&parkbd_parport_driver);
-}
-
-static void __exit parkbd_exit(void)
-{
-       parport_unregister_driver(&parkbd_parport_driver);
-}
-
-module_init(parkbd_init);
-module_exit(parkbd_exit);
+module_parport_driver(parkbd_parport_driver);
index ad454cd..d4e7473 100644 (file)
@@ -932,7 +932,7 @@ config TOUCHSCREEN_USB_COMPOSITE
          - JASTEC USB Touch Controller/DigiTech DTR-02U
          - Zytronic controllers
          - Elo TouchSystems 2700 IntelliTouch
-         - EasyTouch USB Touch Controller from Data Modul
+         - EasyTouch USB Touch Controller from Data Module
          - e2i (Mimo monitors)
 
          Have a look at <http://linux.chapter7.ch/touchkit/> for
index 263de3b..bb2e1cb 100644 (file)
@@ -899,6 +899,7 @@ static int edt_ft5x06_ts_identify(struct i2c_client *client,
                 * the identification registers.
                 */
                switch (rdbuf[0]) {
+               case 0x11:   /* EDT EP0110M09 */
                case 0x35:   /* EDT EP0350M09 */
                case 0x43:   /* EDT EP0430M09 */
                case 0x50:   /* EDT EP0500M09 */
index 0efd1a1..9fa3b0e 100644 (file)
@@ -54,6 +54,7 @@
 
 enum mms_type {
        TYPE_MMS114     = 114,
+       TYPE_MMS134S    = 134,
        TYPE_MMS136     = 136,
        TYPE_MMS152     = 152,
        TYPE_MMS345L    = 345,
@@ -212,7 +213,7 @@ static irqreturn_t mms114_interrupt(int irq, void *dev_id)
                goto out;
 
        /* MMS136 has slightly different event size */
-       if (data->type == TYPE_MMS136)
+       if (data->type == TYPE_MMS134S || data->type == TYPE_MMS136)
                touch_size = packet_size / MMS136_EVENT_SIZE;
        else
                touch_size = packet_size / MMS114_EVENT_SIZE;
@@ -281,6 +282,7 @@ static int mms114_get_version(struct mms114_data *data)
                break;
 
        case TYPE_MMS114:
+       case TYPE_MMS134S:
        case TYPE_MMS136:
                error = __mms114_read_reg(data, MMS114_TSP_REV, 6, buf);
                if (error)
@@ -304,8 +306,9 @@ static int mms114_setup_regs(struct mms114_data *data)
        if (error < 0)
                return error;
 
-       /* Only MMS114 and MMS136 have configuration and power on registers */
-       if (data->type != TYPE_MMS114 && data->type != TYPE_MMS136)
+       /* MMS114, MMS134S and MMS136 have configuration and power on registers */
+       if (data->type != TYPE_MMS114 && data->type != TYPE_MMS134S &&
+           data->type != TYPE_MMS136)
                return 0;
 
        error = mms114_set_active(data, true);
@@ -487,7 +490,8 @@ static int mms114_probe(struct i2c_client *client,
                                     0, data->props.max_y, 0, 0);
        }
 
-       if (data->type == TYPE_MMS114 || data->type == TYPE_MMS136) {
+       if (data->type == TYPE_MMS114 || data->type == TYPE_MMS134S ||
+           data->type == TYPE_MMS136) {
                /*
                 * The firmware handles movement and pressure fuzz, so
                 * don't duplicate that in software.
@@ -611,6 +615,9 @@ static const struct of_device_id mms114_dt_match[] = {
        {
                .compatible = "melfas,mms114",
                .data = (void *)TYPE_MMS114,
+       }, {
+               .compatible = "melfas,mms134s",
+               .data = (void *)TYPE_MMS134S,
        }, {
                .compatible = "melfas,mms136",
                .data = (void *)TYPE_MMS136,