Linux Input/HID development
 help / color / mirror / Atom feed
* Re: [PATCH v1 3/3] dt-bindings: google,cros-ec-keyb: add fn-key and f-keymap props
From: Dmitry Torokhov @ 2025-12-17 18:05 UTC (permalink / raw)
  To: Fabio Baltieri
  Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Benson Leung,
	Guenter Roeck, Tzung-Bi Shih, Simon Glass, linux-input,
	devicetree, chrome-platform, linux-kernel
In-Reply-To: <aUFPKni-iFkxQQGu@google.com>

Hi Fabio,

On Tue, Dec 16, 2025 at 12:23:06PM +0000, Fabio Baltieri wrote:
> Hi Dmitry,
> 
> On Thu, Dec 11, 2025 at 08:44:02PM -0800, Dmitry Torokhov wrote:
> > On Wed, Dec 10, 2025 at 06:00:29PM +0000, Fabio Baltieri wrote:
> > > Hey Rob, thanks for the review.
> > > 
> > > On Tue, Dec 09, 2025 at 01:22:43PM -0600, Rob Herring wrote:
> > > > On Tue, Dec 09, 2025 at 03:47:06PM +0000, Fabio Baltieri wrote:
> > > > > +  fn-key:
> > > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > > +    description: |
> > > > > +      An u32 containing the coordinate of the Fn key, use the MATRIX_KEY(row,
> > > > > +      col, code) macro, code is ignored.
> > > > > +
> > > > > +  fn-keymap:
> > > > 
> > > > If keymap is linux,keymap, then this should perhaps be linux,fn-keymap. 
> > > > Depends if we still think linux,keymap is Linux specific?
> > > 
> > > I'm open for suggestions, trying to understand the pattern, these are
> > > specific to this binding I think if anything they should be
> > > google,fn-key and google,fn-keymap, similarly to the existing
> > > google,needs-ghost-filter -- no idea why function-row-physmap was not
> > > prefixed but I guess it slipped in and now it's not worth changing it.
> > 
> > Just double the number of rows in the regular keymap to accommodate the
> > FN modifier, no need for separate keymap. Also no need to have fn-key
> > property, use whatever key that reports KEY_FN. See how it is done in
> > drivers/input/keyboard/tegra-kbc.c
> 
> Had a look at the tegra-kbc driver as you suggested, first thing it
> seems like the fn-key functionality there is dead code since 2013,
> `use_fn_map` could only be enabled with platform data, not OF, and that
> has been removed in 3a495aeada2b, as it stands kbc->use_fn_map can only
> be false. I could send a patch to rip off that code if you want me to,
> clearly it hasn't been used in a while (unless I'm missing something).

I guess you are right, we shoudl clean that up. We have another newer
driver that uses the same approach:

drivers/input/keyboard/pinephone-keyboard.c


> About the extended fn map, I've two problems with it:
> - it seems very wasteful: the normal map is loaded in a linear array
>   so it can be access directly, which make sense as that's typically
>   very densely populated, but in the case of the fn keys that's going to
>   be mostly empty, I'd expect ~20 keys top from a 18x8 matrix. So that
>   would waste load of space, direct access is good but for ~20 keys I
>   think it's fine to scan it, especially since it only happens when Fn
>   is pressed.

I am not concerned with this, as this is a singleton device. You
probably "waste" as much space in the code segment by implementing the
custom scanning logic. Additionally with the consolidated keymap
approach you are not breaking ioctls dealing with setting and retrieving
key codes.

> - I'd end up with two values for cols kicking around the driver, the
>   real one and the one used in the map, which I feel adds confusing in
>   the code.

Not sure I follow. You still have the same row and col reported, just
when figuring out the final keycode you need to add an offset.

> - more importantly, one would have to keep the offset in mind when
>   setting the keys in dt, we rely on OEM doing this and I think having a

Do we now? I thought we retain greater control over this. Maybe we
should sync internally.

>   separate property with a meaningful name and a map with the same
>   row,col and different code is more intuitive and would make their life
>   easier, especially since we ship with keyboard of different size
>   and the offset would be different depending on the device.
> 
> As for the fn-key property, unfortunately based on past experience I'd
> expect such OEM to want to change that code, I could specify the code
> rather than the row,col but I would not plain hardcode. Even my
> (thinkpad) laptop sends KEY_WAKEUP for Fn.

Again, we need to make sure we control OEMs better. On Lenovo Fn sends
wakeup only if it is not combined with another key, so it really has
custom logic with events delivered either through the main AT keyboard
or through custom interface in thinkpad platform driver. We do not need
this in oiur designs.

Thanks.

-- 
Dmitry

^ permalink raw reply

* Re: [PATCH v2 1/4] dt-bindings: input: adc-keys: allow linux,input-type property
From: Rob Herring @ 2025-12-17 13:34 UTC (permalink / raw)
  To: Nicolas Frattaroli
  Cc: Krzysztof Kozlowski, Dmitry Torokhov, Krzysztof Kozlowski,
	Conor Dooley, Alexandre Belloni, Heiko Stuebner, kernel,
	linux-input, devicetree, linux-kernel, linux-arm-kernel,
	linux-rockchip
In-Reply-To: <6778765.lOV4Wx5bFT@workhorse>

On Wed, Dec 17, 2025 at 01:57:46PM +0100, Nicolas Frattaroli wrote:
> On Wednesday, 17 December 2025 09:31:15 Central European Standard Time Krzysztof Kozlowski wrote:
> > On Mon, Dec 15, 2025 at 01:29:29PM +0100, Nicolas Frattaroli wrote:
> > > adc-keys, unlike gpio-keys, does not allow linux,input-type as a valid
> > > property. This makes it impossible to model devices that have ADC inputs
> > > that should generate switch events.
> > 
> > The solution is to use unevaluatedProps instead, which also allows
> > dropping other properties.
> > 
> > Best regards,
> > Krzysztof
> > 
> > 
> 
> Hi Krzysztof,
> 
> to understand the motivation behind this suggestion correctly:
> are the "linux," vendor prefixed properties, especially with regards
> to key codes, generally a bit of a thorn in the side of DT bindings
> maintainers?

Not really. Most have existed for decades. New ones get extra scrutiny 
and often end up dropping the linux prefix.

> I'd imagine so since they technically tie the DT to a specific OS
> kernel (though of course, others are free to translate those key
> codes). And the whole idea of configuring which code is emitted
> from something is basically abusing DT for configuring software
> rather than describing hardware.
> 
> I'm mainly interested because this is a thought that has been in
> the back of my mind for a while now, and I'm curious if the DT
> binding maintainers happen to have arrived at the same impassé,
> where linux,input-type et al abuse the DT model for something we
> would tell any other vendor not to abuse it for, but no better
> solution exists right now to achieve the same thing.

Not sure what the BSDs do here. It's never come up that I remember. Best 
I can tell is they just make it a userspace problem. So every possible 
keyboard needs a keymap file. Though I'm not sure how that would work 
with GPIO keys as you don't really have a scan code.

Rob

^ permalink raw reply

* [syzbot] Monthly input report (Dec 2025)
From: syzbot @ 2025-12-17 13:12 UTC (permalink / raw)
  To: linux-input, linux-kernel, syzkaller-bugs

Hello input maintainers/developers,

This is a 31-day syzbot report for the input subsystem.
All related reports/information can be found at:
https://syzkaller.appspot.com/upstream/s/input

During the period, 3 new issues were detected and 0 were fixed.
In total, 22 issues are still open and 63 have already been fixed.

Some of the still happening issues:

Ref  Crashes Repro Title
<1>  3202    Yes   WARNING in cm109_urb_irq_callback/usb_submit_urb
                   https://syzkaller.appspot.com/bug?extid=2d6d691af5ab4b7e66df
<2>  1621    No    possible deadlock in evdev_pass_values (2)
                   https://syzkaller.appspot.com/bug?extid=13d3cb2a3dc61e6092f5
<3>  241     Yes   KASAN: slab-out-of-bounds Read in mcp2221_raw_event (2)
                   https://syzkaller.appspot.com/bug?extid=1018672fe70298606e5f
<4>  107     Yes   WARNING in cm109_input_open/usb_submit_urb (3)
                   https://syzkaller.appspot.com/bug?extid=ac0f9c4cc1e034160492
<5>  74      Yes   possible deadlock in uinput_request_submit
                   https://syzkaller.appspot.com/bug?extid=159077b1355b8cd72757
<6>  47      No    KASAN: slab-use-after-free Read in report_descriptor_read
                   https://syzkaller.appspot.com/bug?extid=bc537ca7a0efe33988eb
<7>  46      Yes   WARNING in cm109_urb_irq_callback
                   https://syzkaller.appspot.com/bug?extid=c708736c2ec142a386fd
<8>  13      Yes   INFO: task hung in console_callback (6)
                   https://syzkaller.appspot.com/bug?extid=6027421afa74a2ba440d
<9>  3       No    WARNING in cm109_input_open
                   https://syzkaller.appspot.com/bug?extid=fed3fab8533934671abc
<10> 2       No    possible deadlock in tasklet_action_common
                   https://syzkaller.appspot.com/bug?extid=16c5be44e508252dc97a

---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.

To disable reminders for individual bugs, reply with the following command:
#syz set <Ref> no-reminders

To change bug's subsystems, reply with:
#syz set <Ref> subsystems: new-subsystem

You may send multiple commands in a single email message.

^ permalink raw reply

* Re: [PATCH v2 1/4] dt-bindings: input: adc-keys: allow linux,input-type property
From: Nicolas Frattaroli @ 2025-12-17 12:57 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alexandre Belloni, Heiko Stuebner, kernel, linux-input,
	devicetree, linux-kernel, linux-arm-kernel, linux-rockchip
In-Reply-To: <20251217-tough-ultra-junglefowl-f1a9ae@quoll>

On Wednesday, 17 December 2025 09:31:15 Central European Standard Time Krzysztof Kozlowski wrote:
> On Mon, Dec 15, 2025 at 01:29:29PM +0100, Nicolas Frattaroli wrote:
> > adc-keys, unlike gpio-keys, does not allow linux,input-type as a valid
> > property. This makes it impossible to model devices that have ADC inputs
> > that should generate switch events.
> 
> The solution is to use unevaluatedProps instead, which also allows
> dropping other properties.
> 
> Best regards,
> Krzysztof
> 
> 

Hi Krzysztof,

to understand the motivation behind this suggestion correctly:
are the "linux," vendor prefixed properties, especially with regards
to key codes, generally a bit of a thorn in the side of DT bindings
maintainers?

I'd imagine so since they technically tie the DT to a specific OS
kernel (though of course, others are free to translate those key
codes). And the whole idea of configuring which code is emitted
from something is basically abusing DT for configuring software
rather than describing hardware.

I'm mainly interested because this is a thought that has been in
the back of my mind for a while now, and I'm curious if the DT
binding maintainers happen to have arrived at the same impassé,
where linux,input-type et al abuse the DT model for something we
would tell any other vendor not to abuse it for, but no better
solution exists right now to achieve the same thing.

Kind regards,
Nicolas Frattaroli




^ permalink raw reply

* Re: [PATCH] dt-bindings: input: touchscreen: sitronix,st1232: Add Sitronix ST1624
From: Krzysztof Kozlowski @ 2025-12-17  8:40 UTC (permalink / raw)
  To: Rob Herring (Arm)
  Cc: Dmitry Torokhov, Krzysztof Kozlowski, Conor Dooley, Bastian Hecht,
	linux-input, devicetree, linux-kernel
In-Reply-To: <20251215212524.3318311-1-robh@kernel.org>

On Mon, Dec 15, 2025 at 03:25:24PM -0600, Rob Herring (Arm) wrote:
> Add the Sitronix ST1624 which is compatible with ST1633.
> 
> Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
> ---
>  .../bindings/input/touchscreen/sitronix,st1232.yaml    | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>

Best regards,
Krzysztof


^ permalink raw reply

* Re: [PATCH v2 1/4] dt-bindings: input: adc-keys: allow linux,input-type property
From: Krzysztof Kozlowski @ 2025-12-17  8:31 UTC (permalink / raw)
  To: Nicolas Frattaroli
  Cc: Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alexandre Belloni, Heiko Stuebner, kernel, linux-input,
	devicetree, linux-kernel, linux-arm-kernel, linux-rockchip
In-Reply-To: <20251215-rock4d-audio-v2-1-82a61de39b4c@collabora.com>

On Mon, Dec 15, 2025 at 01:29:29PM +0100, Nicolas Frattaroli wrote:
> adc-keys, unlike gpio-keys, does not allow linux,input-type as a valid
> property. This makes it impossible to model devices that have ADC inputs
> that should generate switch events.

The solution is to use unevaluatedProps instead, which also allows
dropping other properties.

Best regards,
Krzysztof


^ permalink raw reply

* [dtor-input:for-linus] BUILD SUCCESS aed3716db7fff74919cc5775ca3a80c8bb246489
From: kernel test robot @ 2025-12-17  7:01 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input

tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git for-linus
branch HEAD: aed3716db7fff74919cc5775ca3a80c8bb246489  Input: i8042 - add TUXEDO InfinityBook Max Gen10 AMD to i8042 quirk table

elapsed time: 1460m

configs tested: 292
configs skipped: 1

The following configs have been built successfully.
More configs may be tested in the coming days.

tested configs:
alpha                             allnoconfig    gcc-15.1.0
alpha                            allyesconfig    gcc-15.1.0
alpha                               defconfig    gcc-15.1.0
arc                              allmodconfig    clang-16
arc                              allmodconfig    gcc-15.1.0
arc                               allnoconfig    gcc-15.1.0
arc                              allyesconfig    clang-22
arc                              allyesconfig    gcc-15.1.0
arc                                 defconfig    gcc-15.1.0
arc                   randconfig-001-20251216    gcc-12.5.0
arc                   randconfig-001-20251217    clang-22
arc                   randconfig-002-20251216    gcc-12.5.0
arc                   randconfig-002-20251217    clang-22
arm                               allnoconfig    clang-22
arm                               allnoconfig    gcc-15.1.0
arm                              allyesconfig    clang-16
arm                              allyesconfig    gcc-15.1.0
arm                     am200epdkit_defconfig    clang-22
arm                       aspeed_g4_defconfig    clang-22
arm                         bcm2835_defconfig    clang-22
arm                                 defconfig    gcc-15.1.0
arm                          ep93xx_defconfig    clang-22
arm                          ixp4xx_defconfig    clang-22
arm                         lpc18xx_defconfig    clang-22
arm                         nhk8815_defconfig    clang-22
arm                   randconfig-001-20251216    gcc-10.5.0
arm                   randconfig-001-20251217    clang-22
arm                   randconfig-002-20251216    gcc-8.5.0
arm                   randconfig-002-20251217    clang-22
arm                   randconfig-003-20251216    gcc-11.5.0
arm                   randconfig-003-20251217    clang-22
arm                   randconfig-004-20251216    clang-19
arm                   randconfig-004-20251217    clang-22
arm                    vt8500_v6_v7_defconfig    clang-22
arm64                            allmodconfig    clang-22
arm64                             allnoconfig    gcc-15.1.0
arm64                               defconfig    gcc-15.1.0
arm64                 randconfig-001-20251217    clang-22
arm64                 randconfig-002-20251217    clang-22
arm64                 randconfig-003-20251217    clang-22
arm64                 randconfig-004-20251217    clang-22
csky                             allmodconfig    gcc-15.1.0
csky                              allnoconfig    gcc-15.1.0
csky                                defconfig    gcc-15.1.0
csky                  randconfig-001-20251217    clang-22
csky                  randconfig-002-20251217    clang-22
hexagon                          allmodconfig    clang-17
hexagon                          allmodconfig    gcc-15.1.0
hexagon                           allnoconfig    clang-22
hexagon                           allnoconfig    gcc-15.1.0
hexagon                             defconfig    gcc-15.1.0
hexagon               randconfig-001-20251216    clang-22
hexagon               randconfig-001-20251217    gcc-11.5.0
hexagon               randconfig-002-20251216    clang-19
hexagon               randconfig-002-20251217    gcc-11.5.0
i386                             allmodconfig    clang-20
i386                             allmodconfig    gcc-14
i386                              allnoconfig    gcc-14
i386                              allnoconfig    gcc-15.1.0
i386                             allyesconfig    clang-20
i386                             allyesconfig    gcc-14
i386        buildonly-randconfig-001-20251216    clang-20
i386        buildonly-randconfig-001-20251217    clang-20
i386        buildonly-randconfig-002-20251216    gcc-14
i386        buildonly-randconfig-002-20251217    clang-20
i386        buildonly-randconfig-003-20251216    gcc-14
i386        buildonly-randconfig-003-20251217    clang-20
i386        buildonly-randconfig-004-20251216    gcc-14
i386        buildonly-randconfig-004-20251217    clang-20
i386        buildonly-randconfig-005-20251216    clang-20
i386        buildonly-randconfig-005-20251217    clang-20
i386        buildonly-randconfig-006-20251216    gcc-14
i386        buildonly-randconfig-006-20251217    clang-20
i386                                defconfig    gcc-15.1.0
i386                  randconfig-001-20251217    clang-20
i386                  randconfig-001-20251217    gcc-14
i386                  randconfig-002-20251217    clang-20
i386                  randconfig-002-20251217    gcc-14
i386                  randconfig-003-20251217    clang-20
i386                  randconfig-003-20251217    gcc-14
i386                  randconfig-004-20251217    gcc-14
i386                  randconfig-005-20251217    gcc-13
i386                  randconfig-005-20251217    gcc-14
i386                  randconfig-006-20251217    clang-20
i386                  randconfig-006-20251217    gcc-14
i386                  randconfig-007-20251217    clang-20
i386                  randconfig-007-20251217    gcc-14
i386                  randconfig-011-20251216    gcc-13
i386                  randconfig-011-20251217    clang-20
i386                  randconfig-012-20251216    clang-20
i386                  randconfig-012-20251217    clang-20
i386                  randconfig-013-20251216    gcc-13
i386                  randconfig-013-20251217    clang-20
i386                  randconfig-014-20251216    gcc-13
i386                  randconfig-014-20251217    clang-20
i386                  randconfig-015-20251216    clang-20
i386                  randconfig-015-20251217    clang-20
i386                  randconfig-016-20251216    clang-20
i386                  randconfig-016-20251217    clang-20
i386                  randconfig-017-20251216    clang-20
i386                  randconfig-017-20251217    clang-20
loongarch                        allmodconfig    clang-22
loongarch                         allnoconfig    clang-22
loongarch                         allnoconfig    gcc-15.1.0
loongarch                           defconfig    clang-19
loongarch             randconfig-001-20251216    gcc-15.1.0
loongarch             randconfig-001-20251217    gcc-11.5.0
loongarch             randconfig-002-20251216    clang-22
loongarch             randconfig-002-20251217    gcc-11.5.0
m68k                             allmodconfig    gcc-15.1.0
m68k                              allnoconfig    gcc-15.1.0
m68k                             allyesconfig    clang-16
m68k                             allyesconfig    gcc-15.1.0
m68k                                defconfig    clang-19
m68k                                defconfig    gcc-15.1.0
m68k                            mac_defconfig    clang-22
m68k                           virt_defconfig    gcc-15.1.0
microblaze                        allnoconfig    gcc-15.1.0
microblaze                       allyesconfig    gcc-15.1.0
microblaze                          defconfig    clang-19
microblaze                          defconfig    gcc-15.1.0
mips                             allmodconfig    gcc-15.1.0
mips                              allnoconfig    gcc-15.1.0
mips                             allyesconfig    gcc-15.1.0
mips                        bcm63xx_defconfig    clang-22
mips                           gcw0_defconfig    clang-22
mips                      maltaaprp_defconfig    clang-22
mips                          rb532_defconfig    clang-18
mips                          rb532_defconfig    clang-22
nios2                         10m50_defconfig    gcc-11.5.0
nios2                         3c120_defconfig    gcc-15.1.0
nios2                            allmodconfig    clang-22
nios2                            allmodconfig    gcc-11.5.0
nios2                             allnoconfig    clang-22
nios2                             allnoconfig    gcc-11.5.0
nios2                               defconfig    clang-19
nios2                               defconfig    gcc-11.5.0
nios2                 randconfig-001-20251216    gcc-8.5.0
nios2                 randconfig-001-20251217    gcc-11.5.0
nios2                 randconfig-002-20251216    gcc-11.5.0
nios2                 randconfig-002-20251217    gcc-11.5.0
openrisc                         allmodconfig    clang-22
openrisc                         allmodconfig    gcc-15.1.0
openrisc                          allnoconfig    clang-22
openrisc                          allnoconfig    gcc-15.1.0
openrisc                            defconfig    gcc-15.1.0
parisc                           allmodconfig    gcc-15.1.0
parisc                            allnoconfig    clang-22
parisc                            allnoconfig    gcc-15.1.0
parisc                           allyesconfig    clang-19
parisc                           allyesconfig    gcc-15.1.0
parisc                              defconfig    gcc-15.1.0
parisc                randconfig-001-20251216    gcc-11.5.0
parisc                randconfig-001-20251217    gcc-8.5.0
parisc                randconfig-002-20251216    gcc-11.5.0
parisc                randconfig-002-20251217    gcc-8.5.0
parisc64                            defconfig    clang-19
parisc64                            defconfig    gcc-15.1.0
powerpc                          allmodconfig    gcc-15.1.0
powerpc                           allnoconfig    clang-22
powerpc                           allnoconfig    gcc-15.1.0
powerpc                      chrp32_defconfig    gcc-15.1.0
powerpc                       ebony_defconfig    gcc-15.1.0
powerpc               randconfig-001-20251216    clang-22
powerpc               randconfig-001-20251217    gcc-8.5.0
powerpc               randconfig-002-20251216    clang-19
powerpc               randconfig-002-20251217    gcc-8.5.0
powerpc                     tqm8560_defconfig    clang-22
powerpc64             randconfig-001-20251216    clang-22
powerpc64             randconfig-001-20251217    gcc-8.5.0
powerpc64             randconfig-002-20251216    clang-17
powerpc64             randconfig-002-20251217    gcc-8.5.0
riscv                            allmodconfig    clang-22
riscv                             allnoconfig    clang-22
riscv                             allnoconfig    gcc-15.1.0
riscv                            allyesconfig    clang-16
riscv                               defconfig    clang-22
riscv                               defconfig    gcc-15.1.0
riscv                    nommu_k210_defconfig    gcc-15.1.0
riscv                 randconfig-001-20251216    gcc-9.5.0
riscv                 randconfig-001-20251217    clang-18
riscv                 randconfig-002-20251216    clang-17
riscv                 randconfig-002-20251217    clang-18
s390                             allmodconfig    clang-18
s390                             allmodconfig    clang-19
s390                              allnoconfig    clang-22
s390                             allyesconfig    gcc-15.1.0
s390                                defconfig    clang-22
s390                                defconfig    gcc-15.1.0
s390                  randconfig-001-20251216    clang-22
s390                  randconfig-001-20251217    clang-18
s390                  randconfig-002-20251216    clang-20
s390                  randconfig-002-20251217    clang-18
sh                               allmodconfig    gcc-15.1.0
sh                                allnoconfig    clang-22
sh                                allnoconfig    gcc-15.1.0
sh                               allyesconfig    clang-19
sh                               allyesconfig    gcc-15.1.0
sh                         apsh4a3a_defconfig    gcc-15.1.0
sh                                  defconfig    gcc-14
sh                        dreamcast_defconfig    gcc-15.1.0
sh                    randconfig-001-20251216    gcc-13.4.0
sh                    randconfig-001-20251217    clang-18
sh                    randconfig-002-20251216    gcc-12.5.0
sh                    randconfig-002-20251217    clang-18
sh                          rsk7203_defconfig    gcc-15.1.0
sh                           se7750_defconfig    clang-22
sh                   secureedge5410_defconfig    gcc-15.1.0
sh                          urquell_defconfig    gcc-15.1.0
sparc                             allnoconfig    clang-22
sparc                             allnoconfig    gcc-15.1.0
sparc                               defconfig    gcc-15.1.0
sparc                 randconfig-001-20251217    gcc-15.1.0
sparc                 randconfig-002-20251217    gcc-15.1.0
sparc64                          alldefconfig    clang-22
sparc64                          allmodconfig    clang-22
sparc64                             defconfig    gcc-14
sparc64               randconfig-001-20251217    clang-20
sparc64               randconfig-001-20251217    gcc-15.1.0
sparc64               randconfig-002-20251217    gcc-12.5.0
sparc64               randconfig-002-20251217    gcc-15.1.0
um                               allmodconfig    clang-19
um                                allnoconfig    clang-22
um                               allyesconfig    gcc-14
um                               allyesconfig    gcc-15.1.0
um                                  defconfig    gcc-14
um                             i386_defconfig    gcc-14
um                    randconfig-001-20251217    clang-22
um                    randconfig-001-20251217    gcc-15.1.0
um                    randconfig-002-20251217    clang-22
um                    randconfig-002-20251217    gcc-15.1.0
um                           x86_64_defconfig    gcc-14
x86_64                           allmodconfig    clang-20
x86_64                            allnoconfig    clang-20
x86_64                            allnoconfig    clang-22
x86_64                           allyesconfig    clang-20
x86_64      buildonly-randconfig-001-20251217    clang-20
x86_64      buildonly-randconfig-001-20251217    gcc-14
x86_64      buildonly-randconfig-002-20251217    clang-20
x86_64      buildonly-randconfig-002-20251217    gcc-14
x86_64      buildonly-randconfig-003-20251217    gcc-13
x86_64      buildonly-randconfig-003-20251217    gcc-14
x86_64      buildonly-randconfig-004-20251217    gcc-14
x86_64      buildonly-randconfig-005-20251217    gcc-14
x86_64      buildonly-randconfig-006-20251217    gcc-14
x86_64                              defconfig    gcc-14
x86_64                                  kexec    clang-20
x86_64                randconfig-001-20251216    gcc-14
x86_64                randconfig-001-20251217    clang-20
x86_64                randconfig-002-20251216    clang-20
x86_64                randconfig-002-20251217    clang-20
x86_64                randconfig-003-20251216    clang-20
x86_64                randconfig-003-20251217    clang-20
x86_64                randconfig-004-20251216    gcc-14
x86_64                randconfig-004-20251217    clang-20
x86_64                randconfig-005-20251216    clang-20
x86_64                randconfig-005-20251217    clang-20
x86_64                randconfig-006-20251216    gcc-14
x86_64                randconfig-006-20251217    clang-20
x86_64                randconfig-011-20251216    gcc-14
x86_64                randconfig-011-20251217    gcc-14
x86_64                randconfig-012-20251216    gcc-14
x86_64                randconfig-012-20251217    gcc-14
x86_64                randconfig-013-20251216    clang-20
x86_64                randconfig-013-20251217    gcc-14
x86_64                randconfig-014-20251216    clang-20
x86_64                randconfig-014-20251217    gcc-14
x86_64                randconfig-015-20251216    clang-20
x86_64                randconfig-015-20251217    gcc-14
x86_64                randconfig-016-20251216    clang-20
x86_64                randconfig-016-20251217    gcc-14
x86_64                randconfig-071-20251217    gcc-14
x86_64                randconfig-072-20251217    gcc-14
x86_64                randconfig-073-20251217    gcc-14
x86_64                randconfig-074-20251217    gcc-14
x86_64                randconfig-075-20251217    gcc-14
x86_64                randconfig-076-20251217    gcc-14
x86_64                               rhel-9.4    clang-20
x86_64                           rhel-9.4-bpf    gcc-14
x86_64                          rhel-9.4-func    clang-20
x86_64                    rhel-9.4-kselftests    clang-20
x86_64                         rhel-9.4-kunit    gcc-14
x86_64                           rhel-9.4-ltp    gcc-14
x86_64                          rhel-9.4-rust    clang-20
xtensa                            allnoconfig    clang-22
xtensa                            allnoconfig    gcc-15.1.0
xtensa                           allyesconfig    clang-22
xtensa                           allyesconfig    gcc-15.1.0
xtensa                randconfig-001-20251217    gcc-15.1.0
xtensa                randconfig-001-20251217    gcc-8.5.0
xtensa                randconfig-002-20251217    gcc-15.1.0
xtensa                    smp_lx200_defconfig    gcc-15.1.0

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply

* [dtor-input:next] BUILD SUCCESS d79f302f2f9829d04b0ab6181c38716c5a68804d
From: kernel test robot @ 2025-12-17  7:02 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input

tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
branch HEAD: d79f302f2f9829d04b0ab6181c38716c5a68804d  dt-bindings: input: touchscreen: sitronix,st1232: Add Sitronix ST1624

elapsed time: 1460m

configs tested: 264
configs skipped: 2

The following configs have been built successfully.
More configs may be tested in the coming days.

tested configs:
alpha                             allnoconfig    gcc-15.1.0
alpha                            allyesconfig    gcc-15.1.0
alpha                               defconfig    gcc-15.1.0
arc                              allmodconfig    gcc-15.1.0
arc                               allnoconfig    gcc-15.1.0
arc                              allyesconfig    gcc-15.1.0
arc                                 defconfig    gcc-15.1.0
arc                   randconfig-001-20251216    gcc-12.5.0
arc                   randconfig-001-20251217    clang-22
arc                   randconfig-002-20251216    gcc-12.5.0
arc                   randconfig-002-20251217    clang-22
arm                               allnoconfig    clang-22
arm                               allnoconfig    gcc-15.1.0
arm                              allyesconfig    gcc-15.1.0
arm                                 defconfig    clang-22
arm                           imxrt_defconfig    clang-22
arm                   milbeaut_m10v_defconfig    clang-19
arm                            mps2_defconfig    clang-22
arm                        mvebu_v7_defconfig    clang-22
arm                   randconfig-001-20251216    gcc-10.5.0
arm                   randconfig-001-20251217    clang-22
arm                   randconfig-002-20251216    gcc-8.5.0
arm                   randconfig-002-20251217    clang-22
arm                   randconfig-003-20251216    gcc-11.5.0
arm                   randconfig-003-20251217    clang-22
arm                   randconfig-004-20251216    clang-19
arm                   randconfig-004-20251217    clang-22
arm                    vt8500_v6_v7_defconfig    gcc-15.1.0
arm64                            allmodconfig    clang-19
arm64                             allnoconfig    gcc-15.1.0
arm64                               defconfig    gcc-15.1.0
arm64                 randconfig-001-20251217    gcc-8.5.0
arm64                 randconfig-002-20251217    clang-22
arm64                 randconfig-003-20251217    clang-22
arm64                 randconfig-004-20251217    clang-20
csky                             alldefconfig    gcc-15.1.0
csky                             allmodconfig    gcc-15.1.0
csky                              allnoconfig    gcc-15.1.0
csky                                defconfig    gcc-15.1.0
csky                  randconfig-001-20251217    gcc-15.1.0
csky                  randconfig-002-20251217    gcc-9.5.0
hexagon                          allmodconfig    clang-17
hexagon                          allmodconfig    gcc-15.1.0
hexagon                           allnoconfig    clang-22
hexagon                           allnoconfig    gcc-15.1.0
hexagon                             defconfig    clang-22
hexagon               randconfig-001-20251216    clang-22
hexagon               randconfig-001-20251217    gcc-11.5.0
hexagon               randconfig-002-20251216    clang-19
hexagon               randconfig-002-20251217    gcc-11.5.0
i386                             allmodconfig    gcc-14
i386                              allnoconfig    gcc-14
i386                              allnoconfig    gcc-15.1.0
i386                             allyesconfig    gcc-14
i386        buildonly-randconfig-001-20251216    clang-20
i386        buildonly-randconfig-002-20251216    gcc-14
i386        buildonly-randconfig-003-20251216    gcc-14
i386        buildonly-randconfig-004-20251216    gcc-14
i386        buildonly-randconfig-005-20251216    clang-20
i386        buildonly-randconfig-006-20251216    gcc-14
i386                                defconfig    clang-20
i386                  randconfig-001-20251216    clang-20
i386                  randconfig-001-20251217    clang-20
i386                  randconfig-001-20251217    gcc-14
i386                  randconfig-002-20251216    clang-20
i386                  randconfig-002-20251217    clang-20
i386                  randconfig-002-20251217    gcc-14
i386                  randconfig-003-20251216    gcc-14
i386                  randconfig-003-20251217    clang-20
i386                  randconfig-003-20251217    gcc-14
i386                  randconfig-004-20251216    gcc-14
i386                  randconfig-004-20251217    gcc-14
i386                  randconfig-005-20251216    gcc-14
i386                  randconfig-005-20251217    gcc-13
i386                  randconfig-005-20251217    gcc-14
i386                  randconfig-006-20251216    gcc-14
i386                  randconfig-006-20251217    clang-20
i386                  randconfig-006-20251217    gcc-14
i386                  randconfig-007-20251216    clang-20
i386                  randconfig-007-20251217    clang-20
i386                  randconfig-007-20251217    gcc-14
i386                  randconfig-011-20251216    gcc-13
i386                  randconfig-011-20251217    clang-20
i386                  randconfig-012-20251216    clang-20
i386                  randconfig-012-20251217    clang-20
i386                  randconfig-013-20251216    gcc-13
i386                  randconfig-013-20251217    clang-20
i386                  randconfig-014-20251216    gcc-13
i386                  randconfig-014-20251217    clang-20
i386                  randconfig-015-20251216    clang-20
i386                  randconfig-015-20251217    clang-20
i386                  randconfig-016-20251216    clang-20
i386                  randconfig-016-20251217    clang-20
i386                  randconfig-017-20251216    clang-20
i386                  randconfig-017-20251217    clang-20
loongarch                        allmodconfig    clang-19
loongarch                         allnoconfig    clang-22
loongarch                         allnoconfig    gcc-15.1.0
loongarch                           defconfig    clang-19
loongarch             randconfig-001-20251216    gcc-15.1.0
loongarch             randconfig-001-20251217    gcc-11.5.0
loongarch             randconfig-002-20251216    clang-22
loongarch             randconfig-002-20251217    gcc-11.5.0
m68k                             allmodconfig    gcc-15.1.0
m68k                              allnoconfig    gcc-15.1.0
m68k                             allyesconfig    gcc-15.1.0
m68k                                defconfig    clang-19
m68k                                defconfig    gcc-15.1.0
m68k                           virt_defconfig    gcc-15.1.0
microblaze                        allnoconfig    gcc-15.1.0
microblaze                       allyesconfig    gcc-15.1.0
microblaze                          defconfig    clang-19
microblaze                          defconfig    gcc-15.1.0
mips                             allmodconfig    gcc-15.1.0
mips                              allnoconfig    gcc-15.1.0
mips                             allyesconfig    gcc-15.1.0
mips                          eyeq6_defconfig    clang-22
mips                       rbtx49xx_defconfig    gcc-15.1.0
nios2                         3c120_defconfig    gcc-15.1.0
nios2                            allmodconfig    gcc-11.5.0
nios2                             allnoconfig    clang-22
nios2                             allnoconfig    gcc-11.5.0
nios2                               defconfig    clang-19
nios2                               defconfig    gcc-11.5.0
nios2                 randconfig-001-20251216    gcc-8.5.0
nios2                 randconfig-001-20251217    gcc-11.5.0
nios2                 randconfig-002-20251216    gcc-11.5.0
nios2                 randconfig-002-20251217    gcc-11.5.0
openrisc                         allmodconfig    gcc-15.1.0
openrisc                          allnoconfig    clang-22
openrisc                          allnoconfig    gcc-15.1.0
openrisc                            defconfig    gcc-15.1.0
parisc                           allmodconfig    gcc-15.1.0
parisc                            allnoconfig    clang-22
parisc                            allnoconfig    gcc-15.1.0
parisc                           allyesconfig    gcc-15.1.0
parisc                              defconfig    gcc-15.1.0
parisc                randconfig-001-20251216    gcc-11.5.0
parisc                randconfig-001-20251217    gcc-8.5.0
parisc                randconfig-002-20251216    gcc-11.5.0
parisc                randconfig-002-20251217    gcc-8.5.0
parisc64                            defconfig    clang-19
parisc64                            defconfig    gcc-15.1.0
powerpc                          allmodconfig    gcc-15.1.0
powerpc                           allnoconfig    clang-22
powerpc                           allnoconfig    gcc-15.1.0
powerpc                      chrp32_defconfig    gcc-15.1.0
powerpc                       ebony_defconfig    gcc-15.1.0
powerpc                     ppa8548_defconfig    gcc-15.1.0
powerpc               randconfig-001-20251216    clang-22
powerpc               randconfig-001-20251217    gcc-8.5.0
powerpc               randconfig-002-20251216    clang-19
powerpc               randconfig-002-20251217    gcc-8.5.0
powerpc                     sequoia_defconfig    clang-17
powerpc                 xes_mpc85xx_defconfig    gcc-15.1.0
powerpc64             randconfig-001-20251216    clang-22
powerpc64             randconfig-001-20251217    gcc-8.5.0
powerpc64             randconfig-002-20251216    clang-17
powerpc64             randconfig-002-20251217    gcc-8.5.0
riscv                            allmodconfig    clang-22
riscv                             allnoconfig    clang-22
riscv                             allnoconfig    gcc-15.1.0
riscv                            allyesconfig    clang-16
riscv                               defconfig    clang-22
riscv                               defconfig    gcc-15.1.0
riscv                    nommu_k210_defconfig    gcc-15.1.0
riscv                 randconfig-001-20251216    gcc-9.5.0
riscv                 randconfig-002-20251216    clang-17
s390                             allmodconfig    clang-18
s390                              allnoconfig    clang-22
s390                             allyesconfig    gcc-15.1.0
s390                                defconfig    clang-22
s390                                defconfig    gcc-15.1.0
s390                  randconfig-001-20251216    clang-22
s390                  randconfig-002-20251216    clang-20
sh                               allmodconfig    gcc-15.1.0
sh                                allnoconfig    clang-22
sh                                allnoconfig    gcc-15.1.0
sh                               allyesconfig    gcc-15.1.0
sh                                  defconfig    gcc-14
sh                                  defconfig    gcc-15.1.0
sh                    randconfig-001-20251216    gcc-13.4.0
sh                    randconfig-002-20251216    gcc-12.5.0
sh                          rsk7203_defconfig    gcc-15.1.0
sh                           se7712_defconfig    gcc-15.1.0
sh                           se7724_defconfig    gcc-15.1.0
sh                           se7751_defconfig    gcc-15.1.0
sh                   secureedge5410_defconfig    gcc-15.1.0
sparc                             allnoconfig    clang-22
sparc                             allnoconfig    gcc-15.1.0
sparc                               defconfig    gcc-15.1.0
sparc                 randconfig-001-20251216    gcc-8.5.0
sparc                 randconfig-002-20251216    gcc-14.3.0
sparc64                          allmodconfig    clang-22
sparc64                             defconfig    clang-20
sparc64                             defconfig    gcc-14
sparc64               randconfig-001-20251216    clang-22
sparc64               randconfig-002-20251216    clang-22
um                               allmodconfig    clang-19
um                                allnoconfig    clang-22
um                               allyesconfig    gcc-14
um                               allyesconfig    gcc-15.1.0
um                                  defconfig    clang-22
um                                  defconfig    gcc-14
um                             i386_defconfig    gcc-14
um                    randconfig-001-20251216    gcc-12
um                    randconfig-002-20251216    gcc-14
um                           x86_64_defconfig    clang-22
um                           x86_64_defconfig    gcc-14
x86_64                           allmodconfig    clang-20
x86_64                            allnoconfig    clang-20
x86_64                            allnoconfig    clang-22
x86_64                           allyesconfig    clang-20
x86_64      buildonly-randconfig-001-20251216    clang-20
x86_64      buildonly-randconfig-002-20251216    gcc-14
x86_64      buildonly-randconfig-003-20251216    clang-20
x86_64      buildonly-randconfig-004-20251216    clang-20
x86_64      buildonly-randconfig-005-20251216    gcc-14
x86_64      buildonly-randconfig-006-20251216    clang-20
x86_64                              defconfig    gcc-14
x86_64                                  kexec    clang-20
x86_64                randconfig-001-20251216    gcc-14
x86_64                randconfig-002-20251216    clang-20
x86_64                randconfig-003-20251216    clang-20
x86_64                randconfig-004-20251216    gcc-14
x86_64                randconfig-005-20251216    clang-20
x86_64                randconfig-006-20251216    gcc-14
x86_64                randconfig-011-20251216    gcc-14
x86_64                randconfig-011-20251217    gcc-14
x86_64                randconfig-012-20251216    gcc-14
x86_64                randconfig-012-20251217    gcc-14
x86_64                randconfig-013-20251216    clang-20
x86_64                randconfig-013-20251217    gcc-14
x86_64                randconfig-014-20251216    clang-20
x86_64                randconfig-014-20251217    gcc-14
x86_64                randconfig-015-20251216    clang-20
x86_64                randconfig-015-20251217    gcc-14
x86_64                randconfig-016-20251216    clang-20
x86_64                randconfig-016-20251217    gcc-14
x86_64                randconfig-071-20251216    clang-20
x86_64                randconfig-071-20251217    clang-20
x86_64                randconfig-072-20251216    gcc-14
x86_64                randconfig-072-20251217    gcc-13
x86_64                randconfig-073-20251216    gcc-14
x86_64                randconfig-073-20251217    gcc-14
x86_64                randconfig-074-20251216    gcc-12
x86_64                randconfig-074-20251217    clang-20
x86_64                randconfig-075-20251216    clang-20
x86_64                randconfig-075-20251217    clang-20
x86_64                randconfig-076-20251216    clang-20
x86_64                randconfig-076-20251217    gcc-14
x86_64                               rhel-9.4    clang-20
x86_64                           rhel-9.4-bpf    gcc-14
x86_64                          rhel-9.4-func    clang-20
x86_64                    rhel-9.4-kselftests    clang-20
x86_64                         rhel-9.4-kunit    gcc-14
x86_64                           rhel-9.4-ltp    gcc-14
x86_64                          rhel-9.4-rust    clang-20
xtensa                            allnoconfig    clang-22
xtensa                            allnoconfig    gcc-15.1.0
xtensa                           allyesconfig    gcc-15.1.0
xtensa                randconfig-001-20251216    gcc-8.5.0
xtensa                randconfig-002-20251216    gcc-12.5.0
xtensa                    smp_lx200_defconfig    gcc-15.1.0

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply

* [PATCH v2 RESEND 2/2] Input: psmouse - Replace flush_workqueue() with disable_delayed_work_sync()
From: Duoming Zhou @ 2025-12-17  3:00 UTC (permalink / raw)
  To: linux-input
  Cc: linux-kernel, dmitry.torokhov, pali, kuba, alexander.deucher,
	akpm, johannes.berg, pkshih, hverkuil+cisco, andriy.shevchenko,
	tglx, mingo, Duoming Zhou
In-Reply-To: <cover.1765939397.git.duoming@zju.edu.cn>

The original code uses flush_workqueue() in psmouse_disconnect() to
ensure the completion of both resync_work and dev3_register_work.
Given that alps_disconnect() already uses disable_delayed_work_sync()
to cancel dev3_register_work, replacing flush_workqueue() with
disable_delayed_work_sync(&psmouse->resync_work) is more robust
and efficient.

Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
---
Changes in v2:
  - focus on the robustness and efficiency improvements of disable_delayed_work_sync(), not on the UAF aspect.

 drivers/input/mouse/psmouse-base.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
index 77ea7da3b1c..eb41c553e80 100644
--- a/drivers/input/mouse/psmouse-base.c
+++ b/drivers/input/mouse/psmouse-base.c
@@ -1484,7 +1484,7 @@ static void psmouse_disconnect(struct serio *serio)
 
 	/* make sure we don't have a resync in progress */
 	mutex_unlock(&psmouse_mutex);
-	flush_workqueue(kpsmoused_wq);
+	disable_delayed_work_sync(&psmouse->resync_work);
 	mutex_lock(&psmouse_mutex);
 
 	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
-- 
2.34.1


^ permalink raw reply related

* [PATCH v2 RESEND 0/2] Input: alps/psmouse: Fix UAF bugs and improve workqueue synchronization
From: Duoming Zhou @ 2025-12-17  3:00 UTC (permalink / raw)
  To: linux-input
  Cc: linux-kernel, dmitry.torokhov, pali, kuba, alexander.deucher,
	akpm, johannes.berg, pkshih, hverkuil+cisco, andriy.shevchenko,
	tglx, mingo, Duoming Zhou

This patch series addresses use-after-free bugs in the ALPS
touchpad driver and enhances workqueue handling efficiency
in the psmouse subsystem.

The first patch fixes a critical use-after-free race condition
in the ALPS driver where dev3_register_work could be scheduled
after the alps_data structure was already freed. This was caused
by insufficient synchronization during device disconnection,
where flush_workqueue() couldn't prevent subsequent work item
submissions.

The second patch optimizes the psmouse disconnect path by replacing
flush_workqueue() with disable_delayed_work_sync() for better
efficiency and robustness.

Duoming Zhou (2):
  Input: alps - fix use-after-free bugs caused by dev3_register_work
  Input: psmouse - Replace flush_workqueue() with
    disable_delayed_work_sync()

 drivers/input/mouse/alps.c         | 1 +
 drivers/input/mouse/psmouse-base.c | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

-- 
2.34.1


^ permalink raw reply

* [PATCH v2 RESEND 1/2] Input: alps - fix use-after-free bugs caused by dev3_register_work
From: Duoming Zhou @ 2025-12-17  3:00 UTC (permalink / raw)
  To: linux-input
  Cc: linux-kernel, dmitry.torokhov, pali, kuba, alexander.deucher,
	akpm, johannes.berg, pkshih, hverkuil+cisco, andriy.shevchenko,
	tglx, mingo, Duoming Zhou, stable
In-Reply-To: <cover.1765939397.git.duoming@zju.edu.cn>

The dev3_register_work delayed work item is initialized within
alps_reconnect() and scheduled upon receipt of the first bare
PS/2 packet from an external PS/2 device connected to the ALPS
touchpad. During device detachment, the original implementation
calls flush_workqueue() in psmouse_disconnect() to ensure
completion of dev3_register_work. However, the flush_workqueue()
in psmouse_disconnect() only blocks and waits for work items that
were already queued to the workqueue prior to its invocation. Any
work items submitted after flush_workqueue() is called are not
included in the set of tasks that the flush operation awaits.
This means that after flush_workqueue() has finished executing,
the dev3_register_work could still be scheduled. Although the
psmouse state is set to PSMOUSE_CMD_MODE in psmouse_disconnect(),
the scheduling of dev3_register_work remains unaffected.

The race condition can occur as follows:

CPU 0 (cleanup path)     | CPU 1 (delayed work)
psmouse_disconnect()     |
  psmouse_set_state()    |
  flush_workqueue()      | alps_report_bare_ps2_packet()
  alps_disconnect()      |   psmouse_queue_work()
    kfree(priv); // FREE | alps_register_bare_ps2_mouse()
                         |   priv = container_of(work...); // USE
                         |   priv->dev3 // USE

Add disable_delayed_work_sync() in alps_disconnect() to ensure
that dev3_register_work is properly canceled and prevented from
executing after the alps_data structure has been deallocated.

This bug is identified by static analysis.

Fixes: 04aae283ba6a ("Input: ALPS - do not mix trackstick and external PS/2 mouse data")
Cc: stable@kernel.org
Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
---
Changes in v2:
  - Split the original patch into two separate patches (alps and psmouse-base).

 drivers/input/mouse/alps.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index d0cb9fb9482..df8953a5196 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -2975,6 +2975,7 @@ static void alps_disconnect(struct psmouse *psmouse)
 
 	psmouse_reset(psmouse);
 	timer_shutdown_sync(&priv->timer);
+	disable_delayed_work_sync(&priv->dev3_register_work);
 	if (priv->dev2)
 		input_unregister_device(priv->dev2);
 	if (!IS_ERR_OR_NULL(priv->dev3))
-- 
2.34.1


^ permalink raw reply related

* Re: [PATCH v8 1/2] Input: add ABS_SND_PROFILE
From: David Heidelberg @ 2025-12-16 14:06 UTC (permalink / raw)
  To: Dmitry Torokhov, Jonathan Corbet, Jiri Kosina, Benjamin Tissoires,
	Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Casey Connolly, Guido Günther
  Cc: linux-input, linux-doc, linux-kernel, linux-arm-msm, devicetree,
	phone-devel, Gergo Koteles
In-Reply-To: <20251113-op6-tri-state-v8-1-54073f3874bc@ixit.cz>

On 13/11/2025 17:02, David Heidelberg via B4 Relay wrote:
> From: Gergo Koteles <soyer@irl.hu>
> 
> ABS_SND_PROFILE used to describe the state of a multi-value sound profile
> switch. This will be used for the alert-slider on OnePlus phones or other
> phones.
> 
> Profile values added as SND_PROFLE_(SILENT|VIBRATE|RING) identifiers
> to input-event-codes.h so they can be used from DTS.
> 
> Signed-off-by: Gergo Koteles <soyer@irl.hu>
> Reviewed-by: Bjorn Andersson <andersson@kernel.org>
> Tested-by: Guido Günther <agx@sigxcpu.org> # oneplus,fajita & oneplus,enchilada
> Reviewed-by: Guido Günther <agx@sigxcpu.org>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
>   Documentation/input/event-codes.rst    | 6 ++++++
>   drivers/hid/hid-debug.c                | 1 +
>   include/uapi/linux/input-event-codes.h | 9 +++++++++
>   3 files changed, 16 insertions(+)
> 

Hello Dmitry, can I count this one reaches Linux 6.20?

Thank you
David

-- 
David Heidelberg


^ permalink raw reply

* Re: (subset) [PATCH v6 0/7] mfd: macsmc: add rtc, hwmon and hid subdevices
From: Sven Peter @ 2025-12-16 12:37 UTC (permalink / raw)
  To: Janne Grunau, Alyssa Rosenzweig, Neal Gompa, Lee Jones,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Alexandre Belloni,
	Jean Delvare, Guenter Roeck, Dmitry Torokhov, Jonathan Corbet,
	James Calligeros
  Cc: Sven Peter, asahi, linux-arm-kernel, devicetree, linux-kernel,
	linux-rtc, linux-hwmon, linux-input, linux-doc, Hector Martin
In-Reply-To: <20251215-macsmc-subdevs-v6-0-0518cb5f28ae@gmail.com>

On Mon, 15 Dec 2025 19:37:44 +1000, James Calligeros wrote:
> This series adds support for the remaining SMC subdevices. These are the
> RTC, hwmon, and HID devices. They are being submitted together as the RTC
> and hwmon drivers both require changes to the SMC DT schema.
> 
> The RTC driver is responsible for getting and setting the system clock,
> and requires an NVMEM cell. This series replaces Sven's original RTC driver
> submission [1].
> 
> [...]

Applied to local tree (apple-soc/dt-6.20), thanks!

[6/7] arm64: dts: apple: t8103,t60xx,t8112: Add SMC RTC node
      https://github.com/AsahiLinux/linux/commit/faf317d4c705

Best regards,
-- 
Sven Peter <sven@kernel.org>


^ permalink raw reply

* Re: [PATCH v1 3/3] dt-bindings: google,cros-ec-keyb: add fn-key and f-keymap props
From: Fabio Baltieri @ 2025-12-16 12:23 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Benson Leung,
	Guenter Roeck, Tzung-Bi Shih, Simon Glass, linux-input,
	devicetree, chrome-platform, linux-kernel
In-Reply-To: <2gd2npolfpo5jruwraamwpn3wurm7w447jnwsbcfonmhos2owf@ejrqiz3qdxj4>

Hi Dmitry,

On Thu, Dec 11, 2025 at 08:44:02PM -0800, Dmitry Torokhov wrote:
> On Wed, Dec 10, 2025 at 06:00:29PM +0000, Fabio Baltieri wrote:
> > Hey Rob, thanks for the review.
> > 
> > On Tue, Dec 09, 2025 at 01:22:43PM -0600, Rob Herring wrote:
> > > On Tue, Dec 09, 2025 at 03:47:06PM +0000, Fabio Baltieri wrote:
> > > > +  fn-key:
> > > > +    $ref: /schemas/types.yaml#/definitions/uint32
> > > > +    description: |
> > > > +      An u32 containing the coordinate of the Fn key, use the MATRIX_KEY(row,
> > > > +      col, code) macro, code is ignored.
> > > > +
> > > > +  fn-keymap:
> > > 
> > > If keymap is linux,keymap, then this should perhaps be linux,fn-keymap. 
> > > Depends if we still think linux,keymap is Linux specific?
> > 
> > I'm open for suggestions, trying to understand the pattern, these are
> > specific to this binding I think if anything they should be
> > google,fn-key and google,fn-keymap, similarly to the existing
> > google,needs-ghost-filter -- no idea why function-row-physmap was not
> > prefixed but I guess it slipped in and now it's not worth changing it.
> 
> Just double the number of rows in the regular keymap to accommodate the
> FN modifier, no need for separate keymap. Also no need to have fn-key
> property, use whatever key that reports KEY_FN. See how it is done in
> drivers/input/keyboard/tegra-kbc.c

Had a look at the tegra-kbc driver as you suggested, first thing it
seems like the fn-key functionality there is dead code since 2013,
`use_fn_map` could only be enabled with platform data, not OF, and that
has been removed in 3a495aeada2b, as it stands kbc->use_fn_map can only
be false. I could send a patch to rip off that code if you want me to,
clearly it hasn't been used in a while (unless I'm missing something).

About the extended fn map, I've two problems with it:
- it seems very wasteful: the normal map is loaded in a linear array
  so it can be access directly, which make sense as that's typically
  very densely populated, but in the case of the fn keys that's going to
  be mostly empty, I'd expect ~20 keys top from a 18x8 matrix. So that
  would waste load of space, direct access is good but for ~20 keys I
  think it's fine to scan it, especially since it only happens when Fn
  is pressed.
- I'd end up with two values for cols kicking around the driver, the
  real one and the one used in the map, which I feel adds confusing in
  the code.
- more importantly, one would have to keep the offset in mind when
  setting the keys in dt, we rely on OEM doing this and I think having a
  separate property with a meaningful name and a map with the same
  row,col and different code is more intuitive and would make their life
  easier, especially since we ship with keyboard of different size
  and the offset would be different depending on the device.

As for the fn-key property, unfortunately based on past experience I'd
expect such OEM to want to change that code, I could specify the code
rather than the row,col but I would not plain hardcode. Even my
(thinkpad) laptop sends KEY_WAKEUP for Fn.

Cheers,
Fabio

-- 
Fabio Baltieri

^ permalink raw reply

* Re: [PATCH 4/4] Input: stmfts - use client to make future code cleaner
From: David Heidelberg @ 2025-12-16  9:13 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Maxime Coquelin, Alexandre Torgue, Petr Hodina,
	Javier Martinez Canillas, Rob Herring, Andi Shyti, linux-input,
	linux-stm32, linux-arm-kernel, linux-kernel
In-Reply-To: <hpmm5fhs74swrhkneaif4s5dquqeclujdlua7ygmkvcmtf6n4t@rsahxu23xwfp>

On 16/12/2025 07:13, Dmitry Torokhov wrote:
> Hi David,
> 
> On Mon, Dec 15, 2025 at 03:30:04PM +0100, David Heidelberg via B4 Relay wrote:
>> From: Petr Hodina <petr.hodina@protonmail.com>
>>
>> Make code cleaner, compiler will optimize it away anyway.
>>
>> Preparation for FTM5 support, where more steps are needed.
>>
>> Signed-off-by: Petr Hodina <petr.hodina@protonmail.com>
>> Signed-off-by: David Heidelberg <david@ixit.cz>
>> ---
>>   drivers/input/touchscreen/stmfts.c | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen/stmfts.c
>> index 4b166b0a9a5a6..06845a00348cc 100644
>> --- a/drivers/input/touchscreen/stmfts.c
>> +++ b/drivers/input/touchscreen/stmfts.c
>> @@ -747,9 +747,10 @@ static int stmfts_runtime_suspend(struct device *dev)
>>   static int stmfts_runtime_resume(struct device *dev)
>>   {
>>   	struct stmfts_data *sdata = dev_get_drvdata(dev);
>> +	struct i2c_client *client = sdata->client;
>>   	int ret;
>>   
>> -	ret = i2c_smbus_write_byte(sdata->client, STMFTS_SLEEP_OUT);
>> +	ret = i2c_smbus_write_byte(client, STMFTS_SLEEP_OUT);
> 
> Sorry but I do not see how using a temporary cleans things up compared
> to a simple structure member access, given that it happens only once
> here.

Thank you for applying rest of patchset.

This one can be postponed together with introducing fts5 support (where 
we need do more steps here).

David

> 
>>   	if (ret)
>>   		dev_err(dev, "failed to resume device: %d\n", ret);
>>   
>>
> 
> Thanks.
> 

-- 
David Heidelberg


^ permalink raw reply

* Re: [PATCH v2 1/4] dt-bindings: input: adc-keys: allow linux,input-type property
From: Alexandre Belloni @ 2025-12-16  8:47 UTC (permalink / raw)
  To: Nicolas Frattaroli
  Cc: Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, kernel, linux-input, devicetree, linux-kernel,
	linux-arm-kernel, linux-rockchip
In-Reply-To: <20251215-rock4d-audio-v2-1-82a61de39b4c@collabora.com>

On 15/12/2025 13:29:29+0100, Nicolas Frattaroli wrote:
> adc-keys, unlike gpio-keys, does not allow linux,input-type as a valid
> property. This makes it impossible to model devices that have ADC inputs
> that should generate switch events.
> 
> Add the property to the binding with the same default as gpio-keys.
> 
> Reviewed-by: Heiko Stuebner <heiko@sntech.de>
> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

> ---
>  Documentation/devicetree/bindings/input/adc-keys.yaml | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/input/adc-keys.yaml b/Documentation/devicetree/bindings/input/adc-keys.yaml
> index 7aa078dead37..e372ebc23d16 100644
> --- a/Documentation/devicetree/bindings/input/adc-keys.yaml
> +++ b/Documentation/devicetree/bindings/input/adc-keys.yaml
> @@ -42,6 +42,9 @@ patternProperties:
>  
>        linux,code: true
>  
> +      linux,input-type:
> +        default: 1  # EV_KEY
> +
>        press-threshold-microvolt:
>          description:
>            Voltage above or equal to which this key is considered pressed. No
> 
> -- 
> 2.52.0
> 

-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply

* Re: [PATCH v2 2/4] Input: adc-keys - support EV_SW as well, not just EV_KEY.
From: Alexandre Belloni @ 2025-12-16  8:45 UTC (permalink / raw)
  To: Nicolas Frattaroli
  Cc: Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, kernel, linux-input, devicetree, linux-kernel,
	linux-arm-kernel, linux-rockchip
In-Reply-To: <20251215-rock4d-audio-v2-2-82a61de39b4c@collabora.com>

On 15/12/2025 13:29:30+0100, Nicolas Frattaroli wrote:
> Instead of doing something like what gpio-keys is doing, adc-keys
> hardcodes that all keycodes must be of type EV_KEY.
> 
> This limits the usefulness of adc-keys, and overcomplicates the code
> with manual bit-setting logic.
> 
> Instead, refactor the code to read the linux,input-type fwnode property,
> and get rid of the custom bit setting logic, replacing it with
> input_set_capability instead. input_report_key is replaced with
> input_event, which allows us to explicitly pass the type.
> 
> Only EV_KEY and EV_SW is allowed at this stage.
> 
> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>

Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

> ---
>  drivers/input/keyboard/adc-keys.c | 37 +++++++++++++++++++++++++------------
>  1 file changed, 25 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/input/keyboard/adc-keys.c b/drivers/input/keyboard/adc-keys.c
> index f1753207429d..62376f34f7d0 100644
> --- a/drivers/input/keyboard/adc-keys.c
> +++ b/drivers/input/keyboard/adc-keys.c
> @@ -18,13 +18,15 @@
>  
>  struct adc_keys_button {
>  	u32 voltage;
> -	u32 keycode;
> +	u32 code;
> +	u32 type;
>  };
>  
>  struct adc_keys_state {
>  	struct iio_channel *channel;
>  	u32 num_keys;
>  	u32 last_key;
> +	u32 last_type;
>  	u32 keyup_voltage;
>  	const struct adc_keys_button *map;
>  };
> @@ -34,7 +36,8 @@ static void adc_keys_poll(struct input_dev *input)
>  	struct adc_keys_state *st = input_get_drvdata(input);
>  	int i, value, ret;
>  	u32 diff, closest = 0xffffffff;
> -	int keycode = 0;
> +	u32 code = 0;
> +	u32 type = EV_KEY;
>  
>  	ret = iio_read_channel_processed(st->channel, &value);
>  	if (unlikely(ret < 0)) {
> @@ -45,22 +48,24 @@ static void adc_keys_poll(struct input_dev *input)
>  			diff = abs(st->map[i].voltage - value);
>  			if (diff < closest) {
>  				closest = diff;
> -				keycode = st->map[i].keycode;
> +				code = st->map[i].code;
> +				type = st->map[i].type;
>  			}
>  		}
>  	}
>  
>  	if (abs(st->keyup_voltage - value) < closest)
> -		keycode = 0;
> +		code = 0;
>  
> -	if (st->last_key && st->last_key != keycode)
> -		input_report_key(input, st->last_key, 0);
> +	if (st->last_key && st->last_key != code)
> +		input_event(input, st->last_type, st->last_key, 0);
>  
> -	if (keycode)
> -		input_report_key(input, keycode, 1);
> +	if (code)
> +		input_event(input, type, code, 1);
>  
>  	input_sync(input);
> -	st->last_key = keycode;
> +	st->last_key = code;
> +	st->last_type = type;
>  }
>  
>  static int adc_keys_load_keymap(struct device *dev, struct adc_keys_state *st)
> @@ -88,11 +93,20 @@ static int adc_keys_load_keymap(struct device *dev, struct adc_keys_state *st)
>  		map[i].voltage /= 1000;
>  
>  		if (fwnode_property_read_u32(child, "linux,code",
> -					     &map[i].keycode)) {
> +					     &map[i].code)) {
>  			dev_err(dev, "Key with invalid or missing linux,code\n");
>  			return -EINVAL;
>  		}
>  
> +		if (fwnode_property_read_u32(child, "linux,input-type",
> +					     &map[i].type))
> +			map[i].type = EV_KEY;
> +
> +		if (map[i].type != EV_KEY && map[i].type != EV_SW)
> +			return dev_err_probe(dev, -EINVAL,
> +					     "Invalid linux,input-type: 0x%x\n",
> +					     map[i].type);
> +
>  		i++;
>  	}
>  
> @@ -156,9 +170,8 @@ static int adc_keys_probe(struct platform_device *pdev)
>  	input->id.product = 0x0001;
>  	input->id.version = 0x0100;
>  
> -	__set_bit(EV_KEY, input->evbit);
>  	for (i = 0; i < st->num_keys; i++)
> -		__set_bit(st->map[i].keycode, input->keybit);
> +		input_set_capability(input, st->map[i].type, st->map[i].code);
>  
>  	if (device_property_read_bool(dev, "autorepeat"))
>  		__set_bit(EV_REP, input->evbit);
> 
> -- 
> 2.52.0
> 

-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply

* Re: [PATCH v2 3/4] Input: adc-keys - Use dev_err_probe in probe function
From: Alexandre Belloni @ 2025-12-16  8:45 UTC (permalink / raw)
  To: Nicolas Frattaroli
  Cc: Dmitry Torokhov, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Heiko Stuebner, kernel, linux-input, devicetree, linux-kernel,
	linux-arm-kernel, linux-rockchip
In-Reply-To: <20251215-rock4d-audio-v2-3-82a61de39b4c@collabora.com>

On 15/12/2025 13:29:31+0100, Nicolas Frattaroli wrote:
> Rework the probe function, and functions called by the probe function,
> to use dev_err_probe for error logging.
> 
> While at it, also do some minor style cleanups, like not error logging
> on -ENOMEM and using ! instead of == 0.
> 
> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>

Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

> ---
>  drivers/input/keyboard/adc-keys.c | 53 ++++++++++++++++-----------------------
>  1 file changed, 21 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/input/keyboard/adc-keys.c b/drivers/input/keyboard/adc-keys.c
> index 62376f34f7d0..6f2ddcecea99 100644
> --- a/drivers/input/keyboard/adc-keys.c
> +++ b/drivers/input/keyboard/adc-keys.c
> @@ -74,10 +74,8 @@ static int adc_keys_load_keymap(struct device *dev, struct adc_keys_state *st)
>  	int i;
>  
>  	st->num_keys = device_get_child_node_count(dev);
> -	if (st->num_keys == 0) {
> -		dev_err(dev, "keymap is missing\n");
> -		return -EINVAL;
> -	}
> +	if (!st->num_keys)
> +		return dev_err_probe(dev, -EINVAL, "keymap is missing\n");
>  
>  	map = devm_kmalloc_array(dev, st->num_keys, sizeof(*map), GFP_KERNEL);
>  	if (!map)
> @@ -86,17 +84,16 @@ static int adc_keys_load_keymap(struct device *dev, struct adc_keys_state *st)
>  	i = 0;
>  	device_for_each_child_node_scoped(dev, child) {
>  		if (fwnode_property_read_u32(child, "press-threshold-microvolt",
> -					     &map[i].voltage)) {
> -			dev_err(dev, "Key with invalid or missing voltage\n");
> -			return -EINVAL;
> -		}
> +					     &map[i].voltage))
> +			return dev_err_probe(dev, -EINVAL,
> +					     "Key with invalid or missing voltage\n");
> +
>  		map[i].voltage /= 1000;
>  
>  		if (fwnode_property_read_u32(child, "linux,code",
> -					     &map[i].code)) {
> -			dev_err(dev, "Key with invalid or missing linux,code\n");
> -			return -EINVAL;
> -		}
> +					     &map[i].code))
> +			return dev_err_probe(dev, -EINVAL,
> +					     "Key with invalid or missing linux,code\n");
>  
>  		if (fwnode_property_read_u32(child, "linux,input-type",
>  					     &map[i].type))
> @@ -129,7 +126,8 @@ static int adc_keys_probe(struct platform_device *pdev)
>  
>  	st->channel = devm_iio_channel_get(dev, "buttons");
>  	if (IS_ERR(st->channel))
> -		return PTR_ERR(st->channel);
> +		return dev_err_probe(dev, PTR_ERR(st->channel),
> +				     "Could not get iio channel\n");
>  
>  	if (!st->channel->indio_dev)
>  		return -ENXIO;
> @@ -138,16 +136,13 @@ static int adc_keys_probe(struct platform_device *pdev)
>  	if (error < 0)
>  		return error;
>  
> -	if (type != IIO_VOLTAGE) {
> -		dev_err(dev, "Incompatible channel type %d\n", type);
> -		return -EINVAL;
> -	}
> +	if (type != IIO_VOLTAGE)
> +		return dev_err_probe(dev, -EINVAL, "Incompatible channel type %d\n", type);
>  
>  	if (device_property_read_u32(dev, "keyup-threshold-microvolt",
> -				     &st->keyup_voltage)) {
> -		dev_err(dev, "Invalid or missing keyup voltage\n");
> -		return -EINVAL;
> -	}
> +				     &st->keyup_voltage))
> +		return dev_err_probe(dev, -EINVAL, "Invalid or missing keyup voltage\n");
> +
>  	st->keyup_voltage /= 1000;
>  
>  	error = adc_keys_load_keymap(dev, st);
> @@ -155,10 +150,8 @@ static int adc_keys_probe(struct platform_device *pdev)
>  		return error;
>  
>  	input = devm_input_allocate_device(dev);
> -	if (!input) {
> -		dev_err(dev, "failed to allocate input device\n");
> +	if (!input)
>  		return -ENOMEM;
> -	}
>  
>  	input_set_drvdata(input, st);
>  
> @@ -178,19 +171,15 @@ static int adc_keys_probe(struct platform_device *pdev)
>  
>  
>  	error = input_setup_polling(input, adc_keys_poll);
> -	if (error) {
> -		dev_err(dev, "Unable to set up polling: %d\n", error);
> -		return error;
> -	}
> +	if (error)
> +		return dev_err_probe(dev, error, "Unable to set up polling\n");
>  
>  	if (!device_property_read_u32(dev, "poll-interval", &value))
>  		input_set_poll_interval(input, value);
>  
>  	error = input_register_device(input);
> -	if (error) {
> -		dev_err(dev, "Unable to register input device: %d\n", error);
> -		return error;
> -	}
> +	if (error)
> +		return dev_err_probe(dev, error, "Unable to register input device\n");
>  
>  	return 0;
>  }
> 
> -- 
> 2.52.0
> 

-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply

* Re: [PATCH 4/4] Input: stmfts - use client to make future code cleaner
From: Dmitry Torokhov @ 2025-12-16  6:13 UTC (permalink / raw)
  To: david
  Cc: Maxime Coquelin, Alexandre Torgue, Petr Hodina,
	Javier Martinez Canillas, Rob Herring, Andi Shyti, linux-input,
	linux-stm32, linux-arm-kernel, linux-kernel
In-Reply-To: <20251215-fts-fixes-v1-4-8c1e3a63ebf1@ixit.cz>

Hi David,

On Mon, Dec 15, 2025 at 03:30:04PM +0100, David Heidelberg via B4 Relay wrote:
> From: Petr Hodina <petr.hodina@protonmail.com>
> 
> Make code cleaner, compiler will optimize it away anyway.
> 
> Preparation for FTM5 support, where more steps are needed.
> 
> Signed-off-by: Petr Hodina <petr.hodina@protonmail.com>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
>  drivers/input/touchscreen/stmfts.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen/stmfts.c
> index 4b166b0a9a5a6..06845a00348cc 100644
> --- a/drivers/input/touchscreen/stmfts.c
> +++ b/drivers/input/touchscreen/stmfts.c
> @@ -747,9 +747,10 @@ static int stmfts_runtime_suspend(struct device *dev)
>  static int stmfts_runtime_resume(struct device *dev)
>  {
>  	struct stmfts_data *sdata = dev_get_drvdata(dev);
> +	struct i2c_client *client = sdata->client;
>  	int ret;
>  
> -	ret = i2c_smbus_write_byte(sdata->client, STMFTS_SLEEP_OUT);
> +	ret = i2c_smbus_write_byte(client, STMFTS_SLEEP_OUT);

Sorry but I do not see how using a temporary cleans things up compared
to a simple structure member access, given that it happens only once
here.

>  	if (ret)
>  		dev_err(dev, "failed to resume device: %d\n", ret);
>  
> 

Thanks.

-- 
Dmitry

^ permalink raw reply

* Re: [PATCH 3/4] Input: stmfts - use sysfs_emit() instead of sprintf()
From: Dmitry Torokhov @ 2025-12-16  6:11 UTC (permalink / raw)
  To: david
  Cc: Maxime Coquelin, Alexandre Torgue, Petr Hodina,
	Javier Martinez Canillas, Rob Herring, Andi Shyti, linux-input,
	linux-stm32, linux-arm-kernel, linux-kernel
In-Reply-To: <20251215-fts-fixes-v1-3-8c1e3a63ebf1@ixit.cz>

On Mon, Dec 15, 2025 at 03:30:03PM +0100, David Heidelberg via B4 Relay wrote:
> From: Petr Hodina <petr.hodina@protonmail.com>
> 
> Follow the advice in Documentation/filesystems/sysfs.rst:
> show() should only use sysfs_emit() or sysfs_emit_at() when formatting
> the value to be returned to user space.
> 
> Signed-off-by: Petr Hodina <petr.hodina@protonmail.com>
> Signed-off-by: David Heidelberg <david@ixit.cz>

Applied, thank you.

-- 
Dmitry

^ permalink raw reply

* Re: [PATCH 2/4] Input: stmfts - Make comments correct
From: Dmitry Torokhov @ 2025-12-16  6:11 UTC (permalink / raw)
  To: david
  Cc: Maxime Coquelin, Alexandre Torgue, Petr Hodina,
	Javier Martinez Canillas, Rob Herring, Andi Shyti, linux-input,
	linux-stm32, linux-arm-kernel, linux-kernel
In-Reply-To: <20251215-fts-fixes-v1-2-8c1e3a63ebf1@ixit.cz>

On Mon, Dec 15, 2025 at 03:30:02PM +0100, David Heidelberg via B4 Relay wrote:
> From: Petr Hodina <petr.hodina@protonmail.com>
> 
> No functional change.
> 
> Fixes: 78bcac7b2ae1 ("Input: add support for the STMicroelectronics FingerTip touchscreen")
> Signed-off-by: Petr Hodina <petr.hodina@protonmail.com>
> Signed-off-by: David Heidelberg <david@ixit.cz>

Applied, thank you.

-- 
Dmitry

^ permalink raw reply

* Re: [PATCH 1/4] Input: stmfts - correct wording for the warning message
From: Dmitry Torokhov @ 2025-12-16  6:10 UTC (permalink / raw)
  To: david
  Cc: Maxime Coquelin, Alexandre Torgue, Petr Hodina,
	Javier Martinez Canillas, Rob Herring, Andi Shyti, linux-input,
	linux-stm32, linux-arm-kernel, linux-kernel
In-Reply-To: <20251215-fts-fixes-v1-1-8c1e3a63ebf1@ixit.cz>

On Mon, Dec 15, 2025 at 03:30:01PM +0100, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
> 
> We're trying to enable regulator, not disable it.
> 
> Fixes: 78bcac7b2ae1 ("Input: add support for the STMicroelectronics FingerTip touchscreen")
> Suggested-by: Petr Hodina <petr.hodina@protonmail.com>
> Signed-off-by: David Heidelberg <david@ixit.cz>

Applied, thank you.

-- 
Dmitry

^ permalink raw reply

* [BUG] lockdep: circular locking dependency in uinput/input_ff under Wine (ELDEN RING, gamepad)
From: Mikhail Gavrilov @ 2025-12-15 21:40 UTC (permalink / raw)
  To: linux-input, Linux List Kernel Mailing

[-- Attachment #1: Type: text/plain, Size: 7898 bytes --]

Hello,

I would like to report a reproducible lockdep warning in the input subsystem,
involving uinput and force-feedback handling.

After connecting a gamepad (Flydigi Vader 5) and playing ELDEN RING under Wine,
the kernel consistently reports a possible circular locking dependency
within approximately 5 minutes of gameplay.

This issue reproduces 100% of the time on my system.

Steps to reproduce:
- Boot a kernel with CONFIG_LOCKDEP enabled
- Connect a USB gamepad
- Start Wine
- Launch ELDEN RING
- Play for approximately 5 minutes

The kernel emits the following warning:
[ 4151.300019] ======================================================
[ 4151.300023] WARNING: possible circular locking dependency detected
[ 4151.300027] 6.19.0-rc1-dirty #31 Tainted: G     U
[ 4151.300031] ------------------------------------------------------
[ 4151.300034] winedevice.exe/50772 is trying to acquire lock:
[ 4151.300038] ffff8888da59b878 (&newdev->mutex){+.+.}-{4:4}, at:
uinput_request_submit.part.0+0x25/0x2a0 [uinput]
[ 4151.300057]
               but task is already holding lock:
[ 4151.300060] ffff8888c46040b8 (&ff->mutex){+.+.}-{4:4}, at:
input_ff_upload+0x160/0xd70
[ 4151.300075]
               which lock already depends on the new lock.

[ 4151.300078]
               the existing dependency chain (in reverse order) is:
[ 4151.300081]
               -> #2 (&ff->mutex){+.+.}-{4:4}:
[ 4151.300091]        __lock_acquire+0x56a/0xbd0
[ 4151.300099]        lock_acquire.part.0+0xc7/0x270
[ 4151.300105]        __mutex_lock+0x1b0/0x2290
[ 4151.300111]        input_ff_flush+0x56/0x150
[ 4151.300116]        input_flush_device+0x91/0xf0
[ 4151.300122]        evdev_release+0x2cb/0x3a0
[ 4151.300126]        __fput+0x36e/0xac0
[ 4151.300132]        fput_close_sync+0xde/0x1b0
[ 4151.300137]        __x64_sys_close+0x7d/0xd0
[ 4151.300142]        do_syscall_64+0x9c/0x4e0
[ 4151.300148]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
[ 4151.300153]
               -> #1 (&dev->mutex#2){+.+.}-{4:4}:
[ 4151.300164]        __lock_acquire+0x56a/0xbd0
[ 4151.300170]        lock_acquire.part.0+0xc7/0x270
[ 4151.300175]        __mutex_lock+0x1b0/0x2290
[ 4151.300179]        __input_unregister_device+0x20/0x480
[ 4151.300183]        input_unregister_device+0x88/0xc0
[ 4151.300188]        uinput_destroy_device+0x19e/0x210 [uinput]
[ 4151.300193]        uinput_ioctl_handler.isra.0+0x2b5/0x1170 [uinput]
[ 4151.300198]        __x64_sys_ioctl+0x13c/0x1c0
[ 4151.300204]        do_syscall_64+0x9c/0x4e0
[ 4151.300210]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
[ 4151.300215]
               -> #0 (&newdev->mutex){+.+.}-{4:4}:
[ 4151.300221]        check_prev_add+0xe1/0xca0
[ 4151.300225]        validate_chain+0x4cb/0x730
[ 4151.300228]        __lock_acquire+0x56a/0xbd0
[ 4151.300231]        lock_acquire.part.0+0xc7/0x270
[ 4151.300235]        __mutex_lock+0x1b0/0x2290
[ 4151.300237]        uinput_request_submit.part.0+0x25/0x2a0 [uinput]
[ 4151.300241]        uinput_dev_upload_effect+0x123/0x1c1 [uinput]
[ 4151.300244]        input_ff_upload+0x269/0xd70
[ 4151.300247]        evdev_do_ioctl+0xce6/0x14f0
[ 4151.300249]        evdev_ioctl+0x12a/0x160
[ 4151.300252]        __x64_sys_ioctl+0x13c/0x1c0
[ 4151.300255]        do_syscall_64+0x9c/0x4e0
[ 4151.300258]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
[ 4151.300261]
               other info that might help us debug this:

[ 4151.300262] Chain exists of:
                 &newdev->mutex --> &dev->mutex#2 --> &ff->mutex

[ 4151.300270]  Possible unsafe locking scenario:

[ 4151.300272]        CPU0                    CPU1
[ 4151.300274]        ----                    ----
[ 4151.300275]   lock(&ff->mutex);
[ 4151.300279]                                lock(&dev->mutex#2);
[ 4151.300283]                                lock(&ff->mutex);
[ 4151.300286]   lock(&newdev->mutex);
[ 4151.300289]
                *** DEADLOCK ***

[ 4151.300291] 2 locks held by winedevice.exe/50772:
[ 4151.300294]  #0: ffff888153d93128 (&evdev->mutex){+.+.}-{4:4}, at:
evdev_ioctl+0x76/0x160
[ 4151.300301]  #1: ffff8888c46040b8 (&ff->mutex){+.+.}-{4:4}, at:
input_ff_upload+0x160/0xd70
[ 4151.300309]
               stack backtrace:
[ 4151.300312] CPU: 14 UID: 1000 PID: 50772 Comm: winedevice.exe
Tainted: G     U              6.19.0-rc1-dirty #31 PREEMPT(lazy)
[ 4151.300316] Tainted: [U]=USER
[ 4151.300317] Hardware name: ASUS System Product Name/ROG STRIX
B650E-I GAMING WIFI, BIOS 3263 06/09/2025
[ 4151.300319] Call Trace:
[ 4151.300320]  <TASK>
[ 4151.300323]  dump_stack_lvl+0x84/0xd0
[ 4151.300328]  print_circular_bug.cold+0x38/0x46
[ 4151.300332]  check_noncircular+0x148/0x170
[ 4151.300336]  check_prev_add+0xe1/0xca0
[ 4151.300340]  validate_chain+0x4cb/0x730
[ 4151.300343]  __lock_acquire+0x56a/0xbd0
[ 4151.300347]  lock_acquire.part.0+0xc7/0x270
[ 4151.300349]  ? uinput_request_submit.part.0+0x25/0x2a0 [uinput]
[ 4151.300352]  ? rcu_is_watching+0x15/0xe0
[ 4151.300356]  ? __pfx___might_resched+0x10/0x10
[ 4151.300359]  ? uinput_request_submit.part.0+0x25/0x2a0 [uinput]
[ 4151.300361]  ? lock_acquire+0xf6/0x130
[ 4151.300364]  __mutex_lock+0x1b0/0x2290
[ 4151.300366]  ? uinput_request_submit.part.0+0x25/0x2a0 [uinput]
[ 4151.300371]  ? find_held_lock+0x2b/0x80
[ 4151.300375]  ? uinput_request_submit.part.0+0x25/0x2a0 [uinput]
[ 4151.300378]  ? __lock_release.isra.0+0x1c9/0x340
[ 4151.300381]  ? __pfx___mutex_lock+0x10/0x10
[ 4151.300384]  ? do_raw_spin_unlock+0x59/0x230
[ 4151.300386]  ? uinput_request_reserve_slot+0x342/0x4c0 [uinput]
[ 4151.300388]  ? uinput_request_reserve_slot+0x342/0x4c0 [uinput]
[ 4151.300391]  ? __pfx_uinput_request_reserve_slot+0x10/0x10 [uinput]
[ 4151.300394]  ? rcu_is_watching+0x15/0xe0
[ 4151.300397]  ? uinput_request_submit.part.0+0x25/0x2a0 [uinput]
[ 4151.300399]  uinput_request_submit.part.0+0x25/0x2a0 [uinput]
[ 4151.300402]  uinput_dev_upload_effect+0x123/0x1c1 [uinput]
[ 4151.300407]  ? __pfx_uinput_dev_upload_effect+0x10/0x10 [uinput]
[ 4151.300411]  ? __lock_release.isra.0+0x1c9/0x340
[ 4151.300414]  input_ff_upload+0x269/0xd70
[ 4151.300418]  evdev_do_ioctl+0xce6/0x14f0
[ 4151.300420]  ? evdev_ioctl+0x76/0x160
[ 4151.300422]  ? __pfx_evdev_do_ioctl+0x10/0x10
[ 4151.300425]  ? __pfx_ioctl_has_perm.constprop.0.isra.0+0x10/0x10
[ 4151.300429]  ? __lock_release.isra.0+0x1c9/0x340
[ 4151.300433]  evdev_ioctl+0x12a/0x160
[ 4151.300436]  __x64_sys_ioctl+0x13c/0x1c0
[ 4151.300438]  ? syscall_trace_enter+0x8e/0x2b0
[ 4151.300441]  do_syscall_64+0x9c/0x4e0
[ 4151.300444]  ? lockdep_hardirqs_on_prepare.part.0+0x92/0x170
[ 4151.300447]  ? irqentry_exit+0x8c/0x5b0
[ 4151.300451]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[ 4151.300453] RIP: 0033:0x7f5dd4bfb46d
[ 4151.300474] Code: 04 25 28 00 00 00 48 89 45 c8 31 c0 48 8d 45 10
c7 45 b0 10 00 00 00 48 89 45 b8 48 8d 45 d0 48 89 45 c0 b8 10 00 00
00 0f 05 <89> c2 3d 00 f0 ff ff 77 1a 48 8b 45 c8 64 48 2b 04 25 28 00
00 00
[ 4151.300476] RSP: 002b:00007f5daf8fd580 EFLAGS: 00000246 ORIG_RAX:
0000000000000010
[ 4151.300479] RAX: ffffffffffffffda RBX: 00007f5db40d03b0 RCX: 00007f5dd4bfb46d
[ 4151.300480] RDX: 00007f5daf8fd600 RSI: 0000000040304580 RDI: 0000000000000033
[ 4151.300482] RBP: 00007f5daf8fd5d0 R08: 0000000000000000 R09: 00000000ffffffff
[ 4151.300483] R10: 0000000000000000 R11: 0000000000000246 R12: 00007f5dd3124f60
[ 4151.300484] R13: 00007f5daf8fd5e0 R14: 00007f5db40c7360 R15: 00007f5daf8fd600
[ 4151.300488]  </TASK>
[ 4368.245690] eldenring.exe (50876) used greatest stack depth: 18136 bytes left

Kernel: 6.19.0-rc1
Hardware probe: https://linux-hardware.org/?probe=2eeb9df547

Userspace:
Wine (winedevice.exe)
ELDEN RING

Could someone from the input/uinput maintainers please take a look
at the locking order between ff->mutex, dev->mutex and newdev->mutex?

This appears to be a genuine circular dependency reachable from
normal userspace activity.

--
Best Regards,
Mike Gavrilov.

[-- Attachment #2: .config.zip --]
[-- Type: application/zip, Size: 71202 bytes --]

[-- Attachment #3: dmesg-6.19.0-rc1-dirty-2.zip --]
[-- Type: application/zip, Size: 47794 bytes --]

^ permalink raw reply

* [PATCH] dt-bindings: input: touchscreen: sitronix,st1232: Add Sitronix ST1624
From: Rob Herring (Arm) @ 2025-12-15 21:25 UTC (permalink / raw)
  To: Dmitry Torokhov, Krzysztof Kozlowski, Conor Dooley, Bastian Hecht
  Cc: linux-input, devicetree, linux-kernel

Add the Sitronix ST1624 which is compatible with ST1633.

Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
---
 .../bindings/input/touchscreen/sitronix,st1232.yaml    | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/input/touchscreen/sitronix,st1232.yaml b/Documentation/devicetree/bindings/input/touchscreen/sitronix,st1232.yaml
index e7ee7a0d74c4..978afaa4fcef 100644
--- a/Documentation/devicetree/bindings/input/touchscreen/sitronix,st1232.yaml
+++ b/Documentation/devicetree/bindings/input/touchscreen/sitronix,st1232.yaml
@@ -14,9 +14,13 @@ allOf:
 
 properties:
   compatible:
-    enum:
-      - sitronix,st1232
-      - sitronix,st1633
+    oneOf:
+      - enum:
+          - sitronix,st1232
+          - sitronix,st1633
+      - items:
+          - const: sitronix,st1624
+          - const: sitronix,st1633
 
   reg:
     maxItems: 1
-- 
2.51.0


^ permalink raw reply related

* Re: [PATCH] Input: i8042 - add TUXEDO InfinityBook Max Gen10 AMD to i8042 quirk table
From: Dmitry Torokhov @ 2025-12-15 18:15 UTC (permalink / raw)
  To: Werner Sembach; +Cc: Christoffer Sandberg, linux-input, linux-kernel
In-Reply-To: <20251124203336.64072-1-wse@tuxedocomputers.com>

On Mon, Nov 24, 2025 at 09:31:34PM +0100, Werner Sembach wrote:
> From: Christoffer Sandberg <cs@tuxedo.de>
> 
> The device occasionally wakes up from suspend with missing input on the
> internal keyboard and the following suspend attempt results in an instant
> wake-up. The quirks fix both issues for this device.
> 
> Signed-off-by: Christoffer Sandberg <cs@tuxedo.de>
> Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
> Cc: stable@vger.kernel.org

Applied, thank you.

-- 
Dmitry

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox