Input updates for v6.16-rc0

- support for game controllers requiring delayed initialization
   packets, such as ByoWave Proteus, in xpad driver
 
 - a change to atkbd driver to not reset the keyboard on Loongson devices
 
 - tweaks to gpio-keys and matrix_keypad drivers
 
 - fixes to documentation for Amiga joysticks
 
 - a fix to ims-pcu driver to better handle malformed firmware.
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYIAB0WIQST2eWILY88ieB2DOtAj56VGEWXnAUCaD0unwAKCRBAj56VGEWX
 nOfoAQCX4WWJumaFu9wAix2cdu+zfNNmqvtOZu0rWrs0ah8NzgD/VGLoemFf3gg3
 SjetSN3yHI5XUicvs2Jcydts7n3GMgI=
 =32Le
 -----END PGP SIGNATURE-----

Merge tag 'input-for-v6.16-rc0' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

Pull input updates from Dmitry Torokhov:

 - support for game controllers requiring delayed initialization
   packets, such as ByoWave Proteus, in xpad driver

 - a change to atkbd driver to not reset the keyboard on Loongson
   devices

 - tweaks to gpio-keys and matrix_keypad drivers

 - fixes to documentation for Amiga joysticks

 - a fix to ims-pcu driver to better handle malformed firmware

* tag 'input-for-v6.16-rc0' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: ims-pcu - check record size in ims_pcu_flash_firmware()
  Input: gpio-keys - fix possible concurrent access in gpio_keys_irq_timer()
  Input: gpio-keys - fix a sleep while atomic with PREEMPT_RT
  Input: amijoy - make headings compliant w/ guidelines in documentation
  Input: amijoy - fix grammar in documentation
  Input: amijoy - fix Amiga 4-joystick adapter pinout in documentation
  Input: amijoy - fix broken table formatting in documentation
  Input: atkbd - do not reset keyboard by default on Loongson
  Input: xpad - send LED and auth done packets to all Xbox One controllers
  Input: xpad - add the ByoWave Proteus controller
  Input: xpad - allow delaying init packets
  MAINTAINERS: update dlg,da72??.txt to yaml
  dt-bindings: input: convert dlg,da7280.txt to dt-schema
  dt-bindings: input: touchscreen: edt-ft5x06: use unevaluatedProperties
  Input: snvs_pwrkey - support power-off-time-sec
  dt-bindings: crypto: fsl,sec-v4.0-mon: Add "power-off-time-sec"
  Input: matrix_keypad - detect change during scan
  Input: matrix_keypad - add function for reading row state
This commit is contained in:
Linus Torvalds 2025-06-02 11:14:21 -07:00
commit d00a83477e
12 changed files with 425 additions and 194 deletions

View File

@ -83,6 +83,8 @@ properties:
by SNVS ONOFF, the driver can report the status of POWER key and wakeup
system if pressed after system suspend.
$ref: /schemas/input/input.yaml
properties:
compatible:
const: fsl,sec-v4.0-pwrkey
@ -111,6 +113,9 @@ properties:
maxItems: 1
default: 116
power-off-time-sec:
enum: [0, 5, 10, 15]
required:
- compatible
- interrupts

View File

@ -1,108 +0,0 @@
Dialog Semiconductor DA7280 Haptics bindings
Required properties:
- compatible: Should be "dlg,da7280".
- reg: Specifies the I2C slave address.
- interrupt-parent : Specifies the phandle of the interrupt controller to
which the IRQs from DA7280 are delivered to.
- dlg,actuator-type: Set Actuator type. it should be one of:
"LRA" - Linear Resonance Actuator type.
"ERM-bar" - Bar type Eccentric Rotating Mass.
"ERM-coin" - Coin type Eccentric Rotating Mass.
- dlg,const-op-mode: Haptic operation mode for FF_CONSTANT.
Possible values:
1 - Direct register override(DRO) mode triggered by i2c(default),
2 - PWM data source mode controlled by PWM duty,
- dlg,periodic-op-mode: Haptic operation mode for FF_PERIODIC.
Possible values:
1 - Register triggered waveform memory(RTWM) mode, the pattern
assigned to the PS_SEQ_ID played as much times as PS_SEQ_LOOP,
2 - Edge triggered waveform memory(ETWM) mode, external GPI(N)
control are required to enable/disable and it needs to keep
device enabled by sending magnitude (X > 0),
the pattern is assigned to the GPI(N)_SEQUENCE_ID below.
The default value is 1 for both of the operation modes.
For more details, please see the datasheet.
- dlg,nom-microvolt: Nominal actuator voltage rating.
Valid values: 0 - 6000000.
- dlg,abs-max-microvolt: Absolute actuator maximum voltage rating.
Valid values: 0 - 6000000.
- dlg,imax-microamp: Actuator max current rating.
Valid values: 0 - 252000.
Default: 130000.
- dlg,impd-micro-ohms: the impedance of the actuator in micro ohms.
Valid values: 0 - 1500000000.
Optional properties:
- pwms : phandle to the physical PWM(Pulse Width Modulation) device.
PWM properties should be named "pwms". And number of cell is different
for each pwm device.
(See Documentation/devicetree/bindings/pwm/pwm.txt
for further information relating to pwm properties)
- dlg,ps-seq-id: the PS_SEQ_ID(pattern ID in waveform memory inside chip)
to play back when RTWM-MODE is enabled.
Valid range: 0 - 15.
- dlg,ps-seq-loop: the PS_SEQ_LOOP, Number of times the pre-stored sequence
pointed to by PS_SEQ_ID or GPI(N)_SEQUENCE_ID is repeated.
Valid range: 0 - 15.
- dlg,gpiN-seq-id: the GPI(N)_SEQUENCE_ID, pattern to play
when gpi0 is triggered, 'N' must be 0 - 2.
Valid range: 0 - 15.
- dlg,gpiN-mode: the pattern mode which can select either
"Single-pattern" or "Multi-pattern", 'N' must be 0 - 2.
- dlg,gpiN-polarity: gpiN polarity which can be chosen among
"Rising-edge", "Falling-edge" and "Both-edge",
'N' must be 0 - 2
Haptic will work by this edge option in case of ETWM mode.
- dlg,resonant-freq-hz: use in case of LRA.
the frequency range: 50 - 300.
Default: 205.
- dlg,bemf-sens-enable: Enable for internal loop computations.
- dlg,freq-track-enable: Enable for resonant frequency tracking.
- dlg,acc-enable: Enable for active acceleration.
- dlg,rapid-stop-enable: Enable for rapid stop.
- dlg,amp-pid-enable: Enable for the amplitude PID.
- dlg,mem-array: Customized waveform memory(patterns) data downloaded to
the device during initialization. This is an array of 100 values(u8).
For further information, see device datasheet.
======
Example:
haptics: da7280-haptics@4a {
compatible = "dlg,da7280";
reg = <0x4a>;
interrupt-parent = <&gpio6>;
interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
dlg,actuator-type = "LRA";
dlg,dlg,const-op-mode = <1>;
dlg,dlg,periodic-op-mode = <1>;
dlg,nom-microvolt = <2000000>;
dlg,abs-max-microvolt = <2000000>;
dlg,imax-microamp = <170000>;
dlg,resonant-freq-hz = <180>;
dlg,impd-micro-ohms = <10500000>;
dlg,freq-track-enable;
dlg,rapid-stop-enable;
dlg,mem-array = <
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
>;
};

View File

@ -0,0 +1,248 @@
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/dlg,da7280.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Dialog Semiconductor DA7280 Low Power High-Definition Haptic Driver
maintainers:
- Roy Im <roy.im.opensource@diasemi.com>
properties:
compatible:
const: dlg,da7280
reg:
maxItems: 1
description: I2C address of the device.
interrupts:
maxItems: 1
dlg,actuator-type:
enum:
- LRA # Linear Resonance Actuator type
- ERM-bar # Bar type Eccentric Rotating Mass
- ERM-coin # Coin type Eccentric Rotating Mass
dlg,const-op-mode:
$ref: /schemas/types.yaml#/definitions/uint32
enum:
- 1 # Direct register override (DRO) mode triggered by i2c (default)
- 2 # PWM data source mode controlled by PWM duty
description:
Haptic operation mode for FF_CONSTANT
dlg,periodic-op-mode:
$ref: /schemas/types.yaml#/definitions/uint32
enum:
- 1 # Register triggered waveform memory(RTWM) mode, the pattern
# assigned to the PS_SEQ_ID played as much times as PS_SEQ_LOOP
- 2 # Edge triggered waveform memory(ETWM) mode, external GPI(N)
# control are required to enable/disable and it needs to keep
# device enabled by sending magnitude (X > 0),
# the pattern is assigned to the GPI(N)_SEQUENCE_ID below
default: 1
description:
Haptic operation mode for FF_PERIODIC.
The default value is 1 for both of the operation modes.
For more details, please see the datasheet
dlg,nom-microvolt:
minimum: 0
maximum: 6000000
description:
Nominal actuator voltage rating
dlg,abs-max-microvolt:
minimum: 0
maximum: 6000000
description:
Absolute actuator maximum voltage rating
dlg,imax-microamp:
minimum: 0
maximum: 252000
default: 130000
description:
Actuator max current rating
dlg,impd-micro-ohms:
minimum: 0
maximum: 1500000000
description:
Impedance of the actuator
pwms:
maxItems: 1
dlg,ps-seq-id:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
The PS_SEQ_ID(pattern ID in waveform memory inside chip)
to play back when RTWM-MODE is enabled
dlg,ps-seq-loop:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
The PS_SEQ_LOOP, Number of times the pre-stored sequence pointed to by
PS_SEQ_ID or GPI(N)_SEQUENCE_ID is repeated
dlg,gpi0-seq-id:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
the GPI0_SEQUENCE_ID, pattern to play when gpi0 is triggered
dlg,gpi1-seq-id:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
the GPI1_SEQUENCE_ID, pattern to play when gpi1 is triggered
dlg,gpi2-seq-id:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
the GPI2_SEQUENCE_ID, pattern to play when gpi2 is triggered
dlg,gpi0-mode:
enum:
- Single-pattern
- Multi-pattern
description:
Pattern mode for gpi0
dlg,gpi1-mode:
enum:
- Single-pattern
- Multi-pattern
description:
Pattern mode for gpi1
dlg,gpi2-mode:
enum:
- Single-pattern
- Multi-pattern
description:
Pattern mode for gpi2
dlg,gpi0-polarity:
enum:
- Rising-edge
- Falling-edge
- Both-edge
description:
gpi0 polarity, Haptic will work by this edge option in case of ETWM mode
dlg,gpi1-polarity:
enum:
- Rising-edge
- Falling-edge
- Both-edge
description:
gpi1 polarity, Haptic will work by this edge option in case of ETWM mode
dlg,gpi2-polarity:
enum:
- Rising-edge
- Falling-edge
- Both-edge
description:
gpi2 polarity, Haptic will work by this edge option in case of ETWM mode
dlg,resonant-freq-hz:
minimum: 50
maximum: 300
default: 205
dlg,bemf-sens-enable:
$ref: /schemas/types.yaml#/definitions/flag
description:
Enable for internal loop computations
dlg,freq-track-enable:
$ref: /schemas/types.yaml#/definitions/flag
description:
Enable for resonant frequency tracking
dlg,acc-enable:
$ref: /schemas/types.yaml#/definitions/flag
description:
Enable for active acceleration
dlg,rapid-stop-enable:
$ref: /schemas/types.yaml#/definitions/flag
description:
Enable for rapid stop
dlg,amp-pid-enable:
$ref: /schemas/types.yaml#/definitions/flag
description:
Enable for the amplitude PID
dlg,mem-array:
$ref: /schemas/types.yaml#/definitions/uint32-array
minItems: 100
description:
Customized waveform memory (patterns) data downloaded to the device during initialization.
Each entry value must be included between 0 and 255.
required:
- compatible
- reg
- interrupts
- dlg,actuator-type
- dlg,const-op-mode
- dlg,periodic-op-mode
- dlg,nom-microvolt
- dlg,abs-max-microvolt
- dlg,imax-microamp
- dlg,impd-micro-ohms
additionalProperties: false
examples:
- |
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
i2c {
#address-cells = <1>;
#size-cells = <0>;
haptics@4a {
compatible = "dlg,da7280";
reg = <0x4a>;
interrupt-parent = <&gpio6>;
interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
dlg,actuator-type = "LRA";
dlg,const-op-mode = <1>;
dlg,periodic-op-mode = <1>;
dlg,nom-microvolt = <2000000>;
dlg,abs-max-microvolt = <2000000>;
dlg,imax-microamp = <170000>;
dlg,resonant-freq-hz = <180>;
dlg,impd-micro-ohms = <10500000>;
dlg,freq-track-enable;
dlg,rapid-stop-enable;
dlg,mem-array = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00>;
};
};

View File

@ -103,16 +103,9 @@ properties:
minimum: 0
maximum: 255
touchscreen-size-x: true
touchscreen-size-y: true
touchscreen-fuzz-x: true
touchscreen-fuzz-y: true
touchscreen-inverted-x: true
touchscreen-inverted-y: true
touchscreen-swapped-x-y: true
interrupt-controller: true
additionalProperties: false
unevaluatedProperties: false
required:
- compatible

View File

@ -1,14 +1,15 @@
~~~~~~~~~~~~~~~~~~~~~~~~~
Amiga joystick extensions
~~~~~~~~~~~~~~~~~~~~~~~~~
===============
Amiga joysticks
===============
Pinouts
=======
Amiga 4-joystick parport extension
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Amiga 4-joystick parallel port extension
----------------------------------------
Parallel port pins:
===== ======== ==== ==========
Pin Meaning Pin Meaning
===== ======== ==== ==========
@ -17,11 +18,11 @@ Pin Meaning Pin Meaning
4 Left1 8 Left2
5 Right1 9 Right2
13 Fire1 11 Fire2
18 Gnd1 18 Gnd2
19 Gnd1 18 Gnd2
===== ======== ==== ==========
Amiga digital joystick pinout
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Amiga digital joystick
----------------------
=== ============
Pin Meaning
@ -37,8 +38,8 @@ Pin Meaning
9 Thumb button
=== ============
Amiga mouse pinout
~~~~~~~~~~~~~~~~~~
Amiga mouse
-----------
=== ============
Pin Meaning
@ -54,8 +55,8 @@ Pin Meaning
9 Right button
=== ============
Amiga analog joystick pinout
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Amiga analog joystick
---------------------
=== ==============
Pin Meaning
@ -71,8 +72,8 @@ Pin Meaning
9 Analog Y
=== ==============
Amiga lightpen pinout
~~~~~~~~~~~~~~~~~~~~~
Amiga lightpen
--------------
=== =============
Pin Meaning
@ -88,19 +89,23 @@ Pin Meaning
9 Stylus button
=== =============
-------------------------------------------------------------------------------
Register addresses
==================
======== === ==== ==== ====== ========================================
JOY0DAT/JOY1DAT
---------------
======== === ==== ==== ====== ===========================================
NAME rev ADDR type chip Description
======== === ==== ==== ====== ========================================
JOY0DAT 00A R Denise Joystick-mouse 0 data (left vert, horiz)
JOY1DAT 00C R Denise Joystick-mouse 1 data (right vert,horiz)
======== === ==== ==== ====== ========================================
======== === ==== ==== ====== ===========================================
JOY0DAT 00A R Denise Joystick-mouse 0 data (left vert., horiz.)
JOY1DAT 00C R Denise Joystick-mouse 1 data (right vert., horiz.)
======== === ==== ==== ====== ===========================================
These addresses each read a 16 bit register. These in turn
are loaded from the MDAT serial stream and are clocked in on
the rising edge of SCLK. MLD output is used to parallel load
the external parallel-to-serial converter.This in turn is
the external parallel-to-serial converter. This in turn is
loaded with the 4 quadrature inputs from each of two game
controller ports (8 total) plus 8 miscellaneous control bits
which are new for LISA and can be read in upper 8 bits of
@ -108,7 +113,7 @@ JOY1DAT 00C R Denise Joystick-mouse 1 data (right vert,horiz)
Register bits are as follows:
- Mouse counter usage (pins 1,3 =Yclock, pins 2,4 =Xclock)
- Mouse counter usage (pins 1,3 =Yclock, pins 2,4 =Xclock)
======== === === === === === === === === ====== === === === === === === ===
BIT# 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
@ -123,7 +128,7 @@ JOY1DAT Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0
clocked by 2 of the signals input from the mouse serial
stream. Starting with first bit received:
+-------------------+-----------------------------------------+
+--------+----------+-----------------------------------------+
| Serial | Bit Name | Description |
+========+==========+=========================================+
| 0 | M0H | JOY0DAT Horizontal Clock |
@ -160,7 +165,8 @@ JOY1DAT Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0
| Right | 4 | X1 |
+------------+------+---------------------------------+
-------------------------------------------------------------------------------
JOYTEST
-------
======== === ==== ==== ====== =================================================
NAME rev ADDR type chip Description
@ -177,14 +183,15 @@ JOYTEST 036 W Denise Write to all 4 joystick-mouse counters at once.
JOYxDAT Y7 Y6 Y5 Y4 Y3 Y2 xx xx X7 X6 X5 X4 X3 X2 xx xx
========= === === === === === === === === ====== === === === === === === ===
-------------------------------------------------------------------------------
POT0DAT/POT1DAT
---------------
======= === ==== ==== ====== ========================================
======= === ==== ==== ====== ===========================================
NAME rev ADDR type chip Description
======= === ==== ==== ====== ========================================
POT0DAT h 012 R Paula Pot counter data left pair (vert, horiz)
POT1DAT h 014 R Paula Pot counter data right pair (vert,horiz)
======= === ==== ==== ====== ========================================
======= === ==== ==== ====== ===========================================
POT0DAT h 012 R Paula Pot counter data left pair (vert., horiz.)
POT1DAT h 014 R Paula Pot counter data right pair (vert., horiz.)
======= === ==== ==== ====== ===========================================
These addresses each read a pair of 8 bit pot counters.
(4 counters total). The bit assignment for both
@ -213,12 +220,13 @@ POT1DAT h 014 R Paula Pot counter data right pair (vert,horiz)
+-------+------+-----+-----+-------+
With normal (NTSC or PAL) horiz. line rate, the pots will
give a full scale (FF) reading with about 500kohms in one
frame time. With proportionally faster horiz line times,
give a full scale (FF) reading with about 500k ohm in one
frame time. With proportionally faster horiz. line times,
the counters will count proportionally faster.
This should be noted when doing variable beam displays.
-------------------------------------------------------------------------------
POTGO
-----
====== === ==== ==== ====== ================================================
NAME rev ADDR type chip Description
@ -227,7 +235,8 @@ POTGO 034 W Paula Pot port (4 bit) bi-direction and data, and pot
counter start.
====== === ==== ==== ====== ================================================
-------------------------------------------------------------------------------
POTINP
------
====== === ==== ==== ====== ================================================
NAME rev ADDR type chip Description
@ -238,26 +247,26 @@ POTINP 016 R Paula Pot pin data read
This register controls a 4 bit bi-direction I/O port
that shares the same 4 pins as the 4 pot counters above.
+-------+----------+---------------------------------------------+
| BIT# | FUNCTION | DESCRIPTION |
+=======+==========+=============================================+
| 15 | OUTRY | Output enable for Paula pin 33 |
+-------+----------+---------------------------------------------+
| 14 | DATRY | I/O data Paula pin 33 |
+-------+----------+---------------------------------------------+
| 13 | OUTRX | Output enable for Paula pin 32 |
+-------+----------+---------------------------------------------+
| 12 | DATRX | I/O data Paula pin 32 |
+-------+----------+---------------------------------------------+
| 11 | OUTLY | Out put enable for Paula pin 36 |
+-------+----------+---------------------------------------------+
| 10 | DATLY | I/O data Paula pin 36 |
+-------+----------+---------------------------------------------+
| 09 | OUTLX | Output enable for Paula pin 35 |
+-------+----------+---------------------------------------------+
| 08 | DATLX | I/O data Paula pin 35 |
+-------+----------+---------------------------------------------+
| 07-01 | X | Not used |
+-------+----------+---------------------------------------------+
| 00 | START | Start pots (dump capacitors,start counters) |
+-------+----------+---------------------------------------------+
+-------+----------+----------------------------------------------+
| BIT# | FUNCTION | DESCRIPTION |
+=======+==========+==============================================+
| 15 | OUTRY | Output enable for Paula pin 33 |
+-------+----------+----------------------------------------------+
| 14 | DATRY | I/O data Paula pin 33 |
+-------+----------+----------------------------------------------+
| 13 | OUTRX | Output enable for Paula pin 32 |
+-------+----------+----------------------------------------------+
| 12 | DATRX | I/O data Paula pin 32 |
+-------+----------+----------------------------------------------+
| 11 | OUTLY | Out put enable for Paula pin 36 |
+-------+----------+----------------------------------------------+
| 10 | DATLY | I/O data Paula pin 36 |
+-------+----------+----------------------------------------------+
| 09 | OUTLX | Output enable for Paula pin 35 |
+-------+----------+----------------------------------------------+
| 08 | DATLX | I/O data Paula pin 35 |
+-------+----------+----------------------------------------------+
| 07-01 | X | Not used |
+-------+----------+----------------------------------------------+
| 00 | START | Start pots (dump capacitors, start counters) |
+-------+----------+----------------------------------------------+

View File

@ -6942,7 +6942,7 @@ DIALOG SEMICONDUCTOR DRIVERS
M: Support Opensource <support.opensource@diasemi.com>
S: Supported
W: http://www.dialog-semiconductor.com/products
F: Documentation/devicetree/bindings/input/dlg,da72??.txt
F: Documentation/devicetree/bindings/input/dlg,da72??.yaml
F: Documentation/devicetree/bindings/input/dlg,da9062-onkey.yaml
F: Documentation/devicetree/bindings/mfd/da90*.txt
F: Documentation/devicetree/bindings/mfd/dlg,da90*.yaml

View File

@ -105,6 +105,8 @@
#define PKT_XBE2_FW_5_EARLY 3
#define PKT_XBE2_FW_5_11 4
#define FLAG_DELAY_INIT BIT(0)
static bool dpad_to_buttons;
module_param(dpad_to_buttons, bool, S_IRUGO);
MODULE_PARM_DESC(dpad_to_buttons, "Map D-PAD to buttons rather than axes for unknown pads");
@ -127,6 +129,7 @@ static const struct xpad_device {
char *name;
u8 mapping;
u8 xtype;
u8 flags;
} xpad_device[] = {
/* Please keep this list sorted by vendor and product ID. */
{ 0x0079, 0x18d4, "GPD Win 2 X-Box Controller", 0, XTYPE_XBOX360 },
@ -416,6 +419,7 @@ static const struct xpad_device {
{ 0x3285, 0x0663, "Nacon Evol-X", 0, XTYPE_XBOXONE },
{ 0x3537, 0x1004, "GameSir T4 Kaleid", 0, XTYPE_XBOX360 },
{ 0x3537, 0x1010, "GameSir G7 SE", 0, XTYPE_XBOXONE },
{ 0x366c, 0x0005, "ByoWave Proteus Controller", MAP_SHARE_BUTTON, XTYPE_XBOXONE, FLAG_DELAY_INIT },
{ 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX },
{ 0x413d, 0x2104, "Black Shark Green Ghost Gamepad", 0, XTYPE_XBOX360 },
{ 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
@ -571,6 +575,7 @@ static const struct usb_device_id xpad_table[] = {
XPAD_XBOXONE_VENDOR(0x3285), /* Nacon Evol-X */
XPAD_XBOX360_VENDOR(0x3537), /* GameSir Controllers */
XPAD_XBOXONE_VENDOR(0x3537), /* GameSir Controllers */
XPAD_XBOXONE_VENDOR(0x366c), /* ByoWave controllers */
XPAD_XBOX360_VENDOR(0x413d), /* Black Shark Green Ghost Controller */
{ }
};
@ -599,6 +604,7 @@ struct xboxone_init_packet {
* - https://github.com/medusalix/xone/blob/master/bus/protocol.c
*/
#define GIP_CMD_ACK 0x01
#define GIP_CMD_ANNOUNCE 0x02
#define GIP_CMD_IDENTIFY 0x04
#define GIP_CMD_POWER 0x05
#define GIP_CMD_AUTHENTICATE 0x06
@ -673,20 +679,19 @@ static const u8 xboxone_hori_ack_id[] = {
};
/*
* This packet is required for most (all?) of the PDP pads to start
* sending input reports. These pads include: (0x0e6f:0x02ab),
* (0x0e6f:0x02a4), (0x0e6f:0x02a6).
* This packet is sent by default on Windows, and is required for some pads to
* start sending input reports, including most (all?) of the PDP. These pads
* include: (0x0e6f:0x02ab), (0x0e6f:0x02a4), (0x0e6f:0x02a6).
*/
static const u8 xboxone_pdp_led_on[] = {
GIP_CMD_LED, GIP_OPT_INTERNAL, GIP_SEQ0, GIP_PL_LEN(3), 0x00, GIP_LED_ON, 0x14
};
static const u8 xboxone_led_on[] = { GIP_CMD_LED, GIP_OPT_INTERNAL, GIP_SEQ0,
GIP_PL_LEN(3), 0x00, GIP_LED_ON, 0x14 };
/*
* This packet is required for most (all?) of the PDP pads to start
* sending input reports. These pads include: (0x0e6f:0x02ab),
* (0x0e6f:0x02a4), (0x0e6f:0x02a6).
*/
static const u8 xboxone_pdp_auth[] = {
static const u8 xboxone_auth_done[] = {
GIP_CMD_AUTHENTICATE, GIP_OPT_INTERNAL, GIP_SEQ0, GIP_PL_LEN(2), 0x01, 0x00
};
@ -723,12 +728,8 @@ static const struct xboxone_init_packet xboxone_init_packets[] = {
XBOXONE_INIT_PKT(0x045e, 0x02ea, xboxone_s_init),
XBOXONE_INIT_PKT(0x045e, 0x0b00, xboxone_s_init),
XBOXONE_INIT_PKT(0x045e, 0x0b00, extra_input_packet_init),
XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_led_on),
XBOXONE_INIT_PKT(0x0f0d, 0x01b2, xboxone_pdp_led_on),
XBOXONE_INIT_PKT(0x20d6, 0xa01a, xboxone_pdp_led_on),
XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_auth),
XBOXONE_INIT_PKT(0x0f0d, 0x01b2, xboxone_pdp_auth),
XBOXONE_INIT_PKT(0x20d6, 0xa01a, xboxone_pdp_auth),
XBOXONE_INIT_PKT(0x0000, 0x0000, xboxone_led_on),
XBOXONE_INIT_PKT(0x0000, 0x0000, xboxone_auth_done),
XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init),
XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init),
XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init),
@ -788,10 +789,13 @@ struct usb_xpad {
const char *name; /* name of the device */
struct work_struct work; /* init/remove device from callback */
time64_t mode_btn_down_ts;
bool delay_init; /* init packets should be delayed */
bool delayed_init_done;
};
static int xpad_init_input(struct usb_xpad *xpad);
static void xpad_deinit_input(struct usb_xpad *xpad);
static int xpad_start_input(struct usb_xpad *xpad);
static void xpadone_ack_mode_report(struct usb_xpad *xpad, u8 seq_num);
static void xpad360w_poweroff_controller(struct usb_xpad *xpad);
@ -1076,6 +1080,17 @@ static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char
do_sync = true;
}
} else if (data[0] == GIP_CMD_ANNOUNCE) {
int error;
if (xpad->delay_init && !xpad->delayed_init_done) {
xpad->delayed_init_done = true;
error = xpad_start_input(xpad);
if (error)
dev_warn(&xpad->dev->dev,
"unable to start delayed input: %d\n",
error);
}
} else if (data[0] == GIP_CMD_INPUT) { /* The main valid packet type for inputs */
/* menu/view buttons */
input_report_key(dev, BTN_START, data[4] & BIT(2));
@ -1254,6 +1269,14 @@ static bool xpad_prepare_next_init_packet(struct usb_xpad *xpad)
if (xpad->xtype != XTYPE_XBOXONE)
return false;
/*
* Some dongles will discard init packets if they're sent before the
* controller connects. In these cases, we need to wait until we get
* an announce packet from them to send the init packet sequence.
*/
if (xpad->delay_init && !xpad->delayed_init_done)
return false;
/* Perform initialization sequence for Xbox One pads that require it */
while (xpad->init_seq < ARRAY_SIZE(xboxone_init_packets)) {
init_packet = &xboxone_init_packets[xpad->init_seq++];
@ -2069,6 +2092,9 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
xpad->mapping = xpad_device[i].mapping;
xpad->xtype = xpad_device[i].xtype;
xpad->name = xpad_device[i].name;
if (xpad_device[i].flags & FLAG_DELAY_INIT)
xpad->delay_init = true;
xpad->packet_type = PKT_XB;
INIT_WORK(&xpad->work, xpad_presence_work);
@ -2268,6 +2294,7 @@ static int xpad_resume(struct usb_interface *intf)
struct usb_xpad *xpad = usb_get_intfdata(intf);
struct input_dev *input = xpad->dev;
xpad->delayed_init_done = false;
if (xpad->xtype == XTYPE_XBOX360W)
return xpad360w_start_input(xpad);

View File

@ -37,7 +37,7 @@ static int atkbd_set = 2;
module_param_named(set, atkbd_set, int, 0);
MODULE_PARM_DESC(set, "Select keyboard code set (2 = default, 3 = PS/2 native)");
#if defined(__i386__) || defined(__x86_64__) || defined(__hppa__)
#if defined(__i386__) || defined(__x86_64__) || defined(__hppa__) || defined(__loongarch__)
static bool atkbd_reset;
#else
static bool atkbd_reset = true;

View File

@ -449,6 +449,8 @@ static enum hrtimer_restart gpio_keys_irq_timer(struct hrtimer *t)
release_timer);
struct input_dev *input = bdata->input;
guard(spinlock_irqsave)(&bdata->lock);
if (bdata->key_pressed) {
input_report_key(input, *bdata->code, 0);
input_sync(input);
@ -486,7 +488,7 @@ static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id)
if (bdata->release_delay)
hrtimer_start(&bdata->release_timer,
ms_to_ktime(bdata->release_delay),
HRTIMER_MODE_REL_HARD);
HRTIMER_MODE_REL);
out:
return IRQ_HANDLED;
}
@ -628,7 +630,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
bdata->release_delay = button->debounce_interval;
hrtimer_setup(&bdata->release_timer, gpio_keys_irq_timer,
CLOCK_REALTIME, HRTIMER_MODE_REL_HARD);
CLOCK_REALTIME, HRTIMER_MODE_REL);
isr = gpio_keys_irq_isr;
irqflags = 0;

View File

@ -104,6 +104,16 @@ static void disable_row_irqs(struct matrix_keypad *keypad)
disable_irq_nosync(keypad->row_irqs[i]);
}
static uint32_t read_row_state(struct matrix_keypad *keypad)
{
int row;
u32 row_state = 0;
for (row = 0; row < keypad->num_row_gpios; row++)
row_state |= row_asserted(keypad, row) ? BIT(row) : 0;
return row_state;
}
/*
* This gets the keys from keyboard and reports it to input subsystem
*/
@ -115,6 +125,10 @@ static void matrix_keypad_scan(struct work_struct *work)
const unsigned short *keycodes = input_dev->keycode;
uint32_t new_state[MATRIX_MAX_COLS];
int row, col, code;
u32 init_row_state, new_row_state;
/* read initial row state to detect changes between scan */
init_row_state = read_row_state(keypad);
/* de-activate all columns for scanning */
activate_all_cols(keypad, false);
@ -129,9 +143,7 @@ static void matrix_keypad_scan(struct work_struct *work)
activate_col(keypad, col, true);
for (row = 0; row < keypad->num_row_gpios; row++)
new_state[col] |=
row_asserted(keypad, row) ? BIT(row) : 0;
new_state[col] = read_row_state(keypad);
activate_col(keypad, col, false);
}
@ -165,6 +177,18 @@ static void matrix_keypad_scan(struct work_struct *work)
keypad->scan_pending = false;
enable_row_irqs(keypad);
}
/* read new row state and detect if value has changed */
new_row_state = read_row_state(keypad);
if (init_row_state != new_row_state) {
guard(spinlock_irq)(&keypad->lock);
if (unlikely(keypad->scan_pending || keypad->stopped))
return;
disable_row_irqs(keypad);
keypad->scan_pending = true;
schedule_delayed_work(&keypad->work,
msecs_to_jiffies(keypad->debounce_ms));
}
}
static irqreturn_t matrix_keypad_interrupt(int irq, void *id)

View File

@ -27,6 +27,8 @@
#define SNVS_HPSR_BTN BIT(6)
#define SNVS_LPSR_SPO BIT(18)
#define SNVS_LPCR_DEP_EN BIT(5)
#define SNVS_LPCR_BPT_SHIFT 16
#define SNVS_LPCR_BPT_MASK (3 << SNVS_LPCR_BPT_SHIFT)
#define DEBOUNCE_TIME 30
#define REPEAT_INTERVAL 60
@ -114,6 +116,8 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev)
struct device_node *np;
struct clk *clk;
int error;
unsigned int val;
unsigned int bpt;
u32 vid;
/* Get SNVS register Page */
@ -148,6 +152,27 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev)
if (pdata->irq < 0)
return -EINVAL;
error = of_property_read_u32(np, "power-off-time-sec", &val);
if (!error) {
switch (val) {
case 0:
bpt = 0x3;
break;
case 5:
case 10:
case 15:
bpt = (val / 5) - 1;
break;
default:
dev_err(&pdev->dev,
"power-off-time-sec %d out of range\n", val);
return -EINVAL;
}
regmap_update_bits(pdata->snvs, SNVS_LPCR_REG, SNVS_LPCR_BPT_MASK,
bpt << SNVS_LPCR_BPT_SHIFT);
}
regmap_read(pdata->snvs, SNVS_HPVIDR1_REG, &vid);
pdata->minor_rev = vid & 0xff;

View File

@ -844,6 +844,12 @@ static int ims_pcu_flash_firmware(struct ims_pcu *pcu,
addr = be32_to_cpu(rec->addr) / 2;
len = be16_to_cpu(rec->len);
if (len > sizeof(pcu->cmd_buf) - 1 - sizeof(*fragment)) {
dev_err(pcu->dev,
"Invalid record length in firmware: %d\n", len);
return -EINVAL;
}
fragment = (void *)&pcu->cmd_buf[1];
put_unaligned_le32(addr, &fragment->addr);
fragment->len = len;