* [RFC] Adding device-initiated haptic feedback knobs for pressurepads
@ 2026-06-16 15:34 Rong Zhang
2026-06-16 18:56 ` Dmitry Torokhov
0 siblings, 1 reply; 3+ messages in thread
From: Rong Zhang @ 2026-06-16 15:34 UTC (permalink / raw)
To: Jiri Kosina, Benjamin Tissoires, Peter Hutterer, Dmitry Torokhov
Cc: linux-input, LKML
Hi all,
A pressurepad is a MT touchpad that simulates haptic feedback. The
haptic feedback may be either device-initiated or host-initiated. While
drivers/hid/hid-haptic.c [1] provides comprehensive support for host-
initiated ones, device-initiated ones are currently not configurable at
all.
According to Microsoft's Input Device Haptics Implementation Guide [2],
pressurepads with device-initiated haptic feedback can support
SET_FEATURE reports to allow users to customize the intensity of the
haptic feedback (usage page 0x0e Haptics, usage 0x23 Intensity) and/or
the force required to trigger a button press (usage page 0x0d
Digitizers, usage 0xb0 Button Press Threshold). Each knob should occupy
a dedicated report ID.
The first knob maps to "ClickForceSensitivity" in Windows registry and
"Touchpad feedback" => "Intensity" in Windows Settings [3]. The second
knob maps to "ClickForceSensitivity" in Windows registry.
The pressurepad on my laptop supports the first knob:
# 0x05, 0x0e, // Usage Page (Haptic) 595
# 0x09, 0x01, // Usage (Simple Haptic Controller) 597
# 0xa1, 0x02, // Collection (Logical) 599
# 0x09, 0x23, // Usage (Intensity) 601
# 0x85, 0x09, // Report ID (9) 603
# 0x15, 0x00, // Logical Minimum (0) 605
# 0x25, 0x64, // Logical Maximum (100) 607
# 0x75, 0x08, // Report Size (8) 609
# 0x95, 0x01, // Report Count (1) 611
# 0xb1, 0x02, // Feature (Data,Var,Abs) 613
# 0xc0, // End Collection 615
I hardly use Windows but the last time I booted it I did see "Touchpad
feedback" => "Intensity" in Windows Settings.
On Linux, I can tune the knob by setting the corresponding feature
report via HIDRAW. The pressurepad remembers the knob value until it
loses power. However, getting the feature report returns garbage data
(probably from the last input report in the buffer), which makes some
sense as the implementation guide only requires SET_FEATURE support.
I'd like to add device-initiated haptic feedback configurations for
Linux. For now, I only focus on the first knob, i.e., Haptics Intensity,
since it's supported on my device. If I somehow get a device with the
second knob I may work on it too.
Therefore, I am here to ask about the preferred way to expose the knob
to userspace.
The first thing I thought of was sysfs. It's easy to implement, but may
be too obscure for userspace considering the layered structure (evdev,
input, hid, ...) of the input stack.
The second thing I thought of was EV_FF FF_GAIN, but I am not sure if it
matches the semantics of EV_FF. IIUC, since there's no way to initiate a
force feedback from the host, the device is not a true FF device and may
cause confusion.
The third thing I though of was a new EV_MSC event. I've seen some
drivers using EV_MSC events to tune the device as per userspace events.
Or... Perhaps there are some other reasonable ways? Looking forward to
your feedback! :-)
[1]: https://lore.kernel.org/all/20250818-support-forcepads-v3-0-e4f9ab0add84@google.com/
[2]: https://learn.microsoft.com/en-us/windows-hardware/design/component-guidelines/input-haptics-implementation-guide
[3]: https://learn.microsoft.com/en-us/windows-hardware/design/component-guidelines/touchpad-tuning-guidelines
Thanks,
Rong
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFC] Adding device-initiated haptic feedback knobs for pressurepads
2026-06-16 15:34 [RFC] Adding device-initiated haptic feedback knobs for pressurepads Rong Zhang
@ 2026-06-16 18:56 ` Dmitry Torokhov
2026-06-16 19:05 ` Rong Zhang
0 siblings, 1 reply; 3+ messages in thread
From: Dmitry Torokhov @ 2026-06-16 18:56 UTC (permalink / raw)
To: Rong Zhang
Cc: Jiri Kosina, Benjamin Tissoires, Peter Hutterer, linux-input,
LKML
Hi Rong,
On Tue, Jun 16, 2026 at 11:34:45PM +0800, Rong Zhang wrote:
> Hi all,
>
> A pressurepad is a MT touchpad that simulates haptic feedback. The
> haptic feedback may be either device-initiated or host-initiated. While
> drivers/hid/hid-haptic.c [1] provides comprehensive support for host-
> initiated ones, device-initiated ones are currently not configurable at
> all.
>
> According to Microsoft's Input Device Haptics Implementation Guide [2],
> pressurepads with device-initiated haptic feedback can support
> SET_FEATURE reports to allow users to customize the intensity of the
> haptic feedback (usage page 0x0e Haptics, usage 0x23 Intensity) and/or
> the force required to trigger a button press (usage page 0x0d
> Digitizers, usage 0xb0 Button Press Threshold). Each knob should occupy
> a dedicated report ID.
>
> The first knob maps to "ClickForceSensitivity" in Windows registry and
> "Touchpad feedback" => "Intensity" in Windows Settings [3]. The second
> knob maps to "ClickForceSensitivity" in Windows registry.
>
> The pressurepad on my laptop supports the first knob:
>
> # 0x05, 0x0e, // Usage Page (Haptic) 595
> # 0x09, 0x01, // Usage (Simple Haptic Controller) 597
> # 0xa1, 0x02, // Collection (Logical) 599
> # 0x09, 0x23, // Usage (Intensity) 601
> # 0x85, 0x09, // Report ID (9) 603
> # 0x15, 0x00, // Logical Minimum (0) 605
> # 0x25, 0x64, // Logical Maximum (100) 607
> # 0x75, 0x08, // Report Size (8) 609
> # 0x95, 0x01, // Report Count (1) 611
> # 0xb1, 0x02, // Feature (Data,Var,Abs) 613
> # 0xc0, // End Collection 615
>
> I hardly use Windows but the last time I booted it I did see "Touchpad
> feedback" => "Intensity" in Windows Settings.
>
> On Linux, I can tune the knob by setting the corresponding feature
> report via HIDRAW. The pressurepad remembers the knob value until it
> loses power. However, getting the feature report returns garbage data
> (probably from the last input report in the buffer), which makes some
> sense as the implementation guide only requires SET_FEATURE support.
>
> I'd like to add device-initiated haptic feedback configurations for
> Linux. For now, I only focus on the first knob, i.e., Haptics Intensity,
> since it's supported on my device. If I somehow get a device with the
> second knob I may work on it too.
The question is why would we want to support device-initiated feedback
instead of enhancing userspace to fully control it. For the record on
ChromeOS we tried implementing support for device-initiated feedback but
it made the kernel code very cumbersome and left a lot of gaps/rough
edges when combining device- and host-initiated haptic effects.
I'd prefer it all being driven from userspace.
Thanks.
--
Dmitry
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFC] Adding device-initiated haptic feedback knobs for pressurepads
2026-06-16 18:56 ` Dmitry Torokhov
@ 2026-06-16 19:05 ` Rong Zhang
0 siblings, 0 replies; 3+ messages in thread
From: Rong Zhang @ 2026-06-16 19:05 UTC (permalink / raw)
To: Dmitry Torokhov
Cc: Jiri Kosina, Benjamin Tissoires, Peter Hutterer, linux-input,
LKML
Hi Dmitry,
On Tue, 2026-06-16 at 11:56 -0700, Dmitry Torokhov wrote:
> Hi Rong,
>
> On Tue, Jun 16, 2026 at 11:34:45PM +0800, Rong Zhang wrote:
> > Hi all,
> >
> > A pressurepad is a MT touchpad that simulates haptic feedback. The
> > haptic feedback may be either device-initiated or host-initiated. While
> > drivers/hid/hid-haptic.c [1] provides comprehensive support for host-
> > initiated ones, device-initiated ones are currently not configurable at
> > all.
> >
> > According to Microsoft's Input Device Haptics Implementation Guide [2],
> > pressurepads with device-initiated haptic feedback can support
> > SET_FEATURE reports to allow users to customize the intensity of the
> > haptic feedback (usage page 0x0e Haptics, usage 0x23 Intensity) and/or
> > the force required to trigger a button press (usage page 0x0d
> > Digitizers, usage 0xb0 Button Press Threshold). Each knob should occupy
> > a dedicated report ID.
> >
> > The first knob maps to "ClickForceSensitivity" in Windows registry and
> > "Touchpad feedback" => "Intensity" in Windows Settings [3]. The second
> > knob maps to "ClickForceSensitivity" in Windows registry.
> >
> > The pressurepad on my laptop supports the first knob:
> >
> > # 0x05, 0x0e, // Usage Page (Haptic) 595
> > # 0x09, 0x01, // Usage (Simple Haptic Controller) 597
> > # 0xa1, 0x02, // Collection (Logical) 599
> > # 0x09, 0x23, // Usage (Intensity) 601
> > # 0x85, 0x09, // Report ID (9) 603
> > # 0x15, 0x00, // Logical Minimum (0) 605
> > # 0x25, 0x64, // Logical Maximum (100) 607
> > # 0x75, 0x08, // Report Size (8) 609
> > # 0x95, 0x01, // Report Count (1) 611
> > # 0xb1, 0x02, // Feature (Data,Var,Abs) 613
> > # 0xc0, // End Collection 615
> >
> > I hardly use Windows but the last time I booted it I did see "Touchpad
> > feedback" => "Intensity" in Windows Settings.
> >
> > On Linux, I can tune the knob by setting the corresponding feature
> > report via HIDRAW. The pressurepad remembers the knob value until it
> > loses power. However, getting the feature report returns garbage data
> > (probably from the last input report in the buffer), which makes some
> > sense as the implementation guide only requires SET_FEATURE support.
> >
> > I'd like to add device-initiated haptic feedback configurations for
> > Linux. For now, I only focus on the first knob, i.e., Haptics Intensity,
> > since it's supported on my device. If I somehow get a device with the
> > second knob I may work on it too.
>
> The question is why would we want to support device-initiated feedback
> instead of enhancing userspace to fully control it. For the record on
> ChromeOS we tried implementing support for device-initiated feedback but
> it made the kernel code very cumbersome and left a lot of gaps/rough
> edges when combining device- and host-initiated haptic effects.
Sorry, I didn't explain it clearly enough.
Most Windows laptops shipping with a pressurepad don't support host-
initiated feedback at all. That's also the case of my device.
>
> I'd prefer it all being driven from userspace.
... so The only force feedback stuff we can control on these
pressurepads are the said one or two knobs, really :-(
Hopefully one day we will live in a host-initiated haptic world...
Thanks,
Rong
>
> Thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-06-16 19:10 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-16 15:34 [RFC] Adding device-initiated haptic feedback knobs for pressurepads Rong Zhang
2026-06-16 18:56 ` Dmitry Torokhov
2026-06-16 19:05 ` Rong Zhang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox