Re: [PATCH RESEND v2] HID: winwing: Enable rumble effects
From: Jiri Kosina
Date: Thu Feb 26 2026 - 10:11:17 EST
On Thu, 26 Feb 2026, Ivan Gorinov wrote:
> Enable rumble motor control on TGRIP-15E and TGRIP-15EX throttle grips
> by sending haptic feedback commands (EV_FF events) to the input device.
>
> Signed-off-by: Ivan Gorinov <linux-kernel@xxxxxxxxxxxxxx>
[ ... snip ... ]
> +static int winwing_haptic_rumble(struct winwing_drv_data *data)
> +{
> + __u8 *buf;
> + __u8 m;
> +
> + if (!data)
> + return -EINVAL;
> +
> + if (!data->hdev)
> + return -EINVAL;
> +
> + buf = data->report_rumble;
> +
> + if (!buf)
> + return -EINVAL;
> +
> + m = convert_magnitude(data->rumble.strong_magnitude);
> + if (m != data->rumble_left) {
> + int ret;
> +
> + buf[0] = 0x02;
> + buf[1] = 0x01;
> + buf[2] = 0xbf;
> + buf[3] = 0x00;
> + buf[4] = 0x00;
> + buf[5] = 0x03;
> + buf[6] = 0x49;
> + buf[7] = 0x00;
> + buf[8] = m;
> + buf[9] = 0x00;
> + buf[10] = 0;
> + buf[11] = 0;
> + buf[12] = 0;
> + buf[13] = 0;
> +
> + ret = hid_hw_output_report(data->hdev, buf, 14);
> + if (ret < 0) {
> + hid_err(data->hdev, "error %d (%*ph)\n", ret, 14, buf);
> + return ret;
> + }
> + data->rumble_left = m;
> + }
> +
> + m = convert_magnitude(data->rumble.weak_magnitude);
> + if (m != data->rumble_right) {
> + int ret;
> +
> + buf[0] = 0x02;
> + buf[1] = 0x03;
> + buf[2] = 0xbf;
> + buf[3] = 0x00;
> + buf[4] = 0x00;
> + buf[5] = 0x03;
> + buf[6] = 0x49;
> + buf[7] = 0x00;
> + buf[8] = m;
> + buf[9] = 0x00;
> + buf[10] = 0;
> + buf[11] = 0;
> + buf[12] = 0;
> + buf[13] = 0;
Do these magic numbers have any real meaning, or is it just mimicking
observed binary stream?
It'd be nice to have at least short comment explaining it.
Thanks!
--
Jiri Kosina
SUSE Labs