mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
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:
commit
d00a83477e
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
>;
|
||||
};
|
||||
248
Documentation/devicetree/bindings/input/dlg,da7280.yaml
Normal file
248
Documentation/devicetree/bindings/input/dlg,da7280.yaml
Normal 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>;
|
||||
};
|
||||
};
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) |
|
||||
+-------+----------+----------------------------------------------+
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user