From nobody Mon Feb 9 22:18:47 2026 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15D751D5ABA for ; Tue, 3 Feb 2026 17:45:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770140741; cv=none; b=SI0lLXlsmdr4MiKALGdH5LHJuoyyZsm0EQuavV0dJyJFJcR8jL1fVSpv7gwpWF/0GpFXVWR7Atcv5/MD8VUB5xWgRkSSitfYWsj+iL56NjRYd3rUpA1RPG6U4sNoBY4Rz7q4FHkmLgoloGQMRFCRI39zpqZXQFvS2jfEkcBGv4M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770140741; c=relaxed/simple; bh=5aoSMvKznFVnaihLMmeqnPjS5F/JOZrkmo6E3ohwZPk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NFpu0zOzHVK54oXISsiioZPndkvLuM31401i5o36JUXnLuRhEDLBYi2SUcb+x5clB7PrEXfO+9rLI/t+r5Lqoi14IE5JOfcZaAQUr1PJrtl/DBYHIIEQif2/Wb+5WGcuFkrV5xLMtmdxaG0HX/1QP/Eiy6wmPxU0hXfHsoTSDXQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KlMx3PJJ; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KlMx3PJJ" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-b8ea0a386cdso96766b.2 for ; Tue, 03 Feb 2026 09:45:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770140738; x=1770745538; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iP2EYq6wOV8jA1cEPaHzJUJnuDiRfLgK32jRdcwRTOw=; b=KlMx3PJJMg65Pj/8S3MnWzoC3CqwNHjpDH+aJWITqEcBhEZkz9leBkKrKIgxXO5bD/ 4wxxXuEYEGzlmIDn2I0GIIkz59m8e6OIB6OKBB5zifQ1Yb8PZYqPXjx67sMyTaC8RhgD ezY78eNQCOflCWxhmydo9FN2BDodHwJLCyDoapGSaCh8ipnISlnFfrbWFN3ce5KDzDZz YfkPVnjuZDLv88MYp3/HLL2EnknzAuD88l1YnEpvnA4xnLrd00UdJu0/OSBVPDIcqRNs yXqh44jT842/iy5y009KB2VvGx/Bqf9fiSonuBrNLSUtEOBfn3qbAd6Ll/8FzcvOBEj0 rdlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770140738; x=1770745538; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=iP2EYq6wOV8jA1cEPaHzJUJnuDiRfLgK32jRdcwRTOw=; b=mvKmfNlZAKDH2G3hrcZTZ+ddCmvWG0LktFUs/la88trbcPuNanpzvShNJ8zWsk6K+F 21Gym4NlgqM4lZORk2962bvauXMg8KakwdZdwLv6zBwg+quJUF8To8fbQOgVp8oamvDy oWheKSDA3pAtYN2Sz203jkdktXPN+KvolBNgLQvqw9hpKI/7z8cWY9IdA5qwKm6zSv1c 9v3kJqgPKQGLVsaP8LGnk6cUIy5o69oWb6TpN1v2Wh6joKdr+jWX9xUnZ9DNMKqHlZeh jMSKAEwetSwqSVah4WK3cK8EMrJym5J4YzdxFzESbex251hf4H4IXA1XIlYQ0W82GKGk ztaA== X-Forwarded-Encrypted: i=1; AJvYcCWA71W6zbbhuRN1WJ45lGZdIrpxEE0Zy+qsu5/ab5jf7e32lx1vg4tkGhMoVt8EdYkjgWhKtQJbEvrnzLo=@vger.kernel.org X-Gm-Message-State: AOJu0YyKMnJnXQDSMc8ArRmPjk+tJR4MIN4bIV7N0EKFLsFCZWZEOZTO JOfX+tz18VI1OFfahOOD4Lbv0AyAxwbGgk8UkvnUMB0qTRFfmGwHO23a X-Gm-Gg: AZuq6aIMF3mlgTEw7LtMeFLNpcOnHcFMBKoOISta3vppXBmyEx59Ko/PwW7C86B34C7 u6TX9sUcAaCFSDhrJuYxY92EUpEDXehMtVl9XMxYC93YXiicVnhrIvSdca7Kw2INOiHKJeWOLc0 t3AaUy9CP1WY1JV73fEZuP+mbkWldqGPdDdmeHRmOorHBZyO40sAinPcEL5nfoy1v468eUaFfbK Jlgjx0vtPMwUlWBQW9WJFdkgsSk5FuAVv1uxsb5LRxw2Y9EtPflpxdXI977AMAhrH1S0kIqsUxO nZTe65hLxKkkG/nSvP8+30x2YEcD3RJZ5pispH3z5ir8OOiqHwI40Zdj1HNh56hkP8U6kwCZYyt pLf2E88Gad5wZrOYHmWonV6PvuImX7KqVPyiwfb3aFTMAiCiRLMbVyb5q04tgcBtqtCO1H49aoV DrE9YsgbVluqHbHtq2gbmJnhxJLnnYSDaG3aucOJ9JonQFJ7j3fsuvrAiB11q1JT7n774qYQJNj A8= X-Received: by 2002:a17:907:d78b:b0:b8d:e6d2:6440 with SMTP id a640c23a62f3a-b8e9f176cb7mr14986366b.2.1770140738159; Tue, 03 Feb 2026 09:45:38 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8e9fef001csm5078866b.44.2026.02.03.09.45.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 09:45:37 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: jikos@kernel.org, bentiss@kernel.org Cc: oleg@makarenk.ooo, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com Subject: [PATCH 2/5] HID: pidff: Add MISSING_NEG_COEFFICIENT quirk Date: Tue, 3 Feb 2026 18:45:28 +0100 Message-ID: <20260203174531.2866644-3-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203174531.2866644-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203174531.2866644-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Windows/Directinput allows devices with missing negative coefficient for conditional effects. Negative coefficient is ignored in such cases. Donot fail set_condition usage search if negative coefficient is missing. Fixes conditional effect playback on Asetek wheelbases. https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ee41660= 1(v=3Dvs.85) Co-developed-by: Oleg Makarenko Signed-off-by: Oleg Makarenko Signed-off-by: Tomasz Paku=C5=82a --- drivers/hid/usbhid/hid-pidff.c | 11 +++++++++-- drivers/hid/usbhid/hid-pidff.h | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/hid/usbhid/hid-pidff.c b/drivers/hid/usbhid/hid-pidff.c index 68049d5d76b3..aebf6c89643f 100644 --- a/drivers/hid/usbhid/hid-pidff.c +++ b/drivers/hid/usbhid/hid-pidff.c @@ -619,8 +619,12 @@ static void pidff_set_condition_report(struct pidff_de= vice *pidff, effect->u.condition[i].center); pidff_set_signed(&pidff->set_condition[PID_POS_COEFFICIENT], effect->u.condition[i].right_coeff); - pidff_set_signed(&pidff->set_condition[PID_NEG_COEFFICIENT], - effect->u.condition[i].left_coeff); + + /* Omit Negative Coefficient if missing */ + if (!(pidff->quirks & HID_PIDFF_QUIRK_MISSING_NEG_COEFFICIENT)) + pidff_set_signed(&pidff->set_condition[PID_NEG_COEFFICIENT], + effect->u.condition[i].left_coeff); + pidff_set(&pidff->set_condition[PID_POS_SATURATION], effect->u.condition[i].right_saturation); pidff_set(&pidff->set_condition[PID_NEG_SATURATION], @@ -1090,6 +1094,9 @@ static int pidff_find_fields(struct pidff_usage *usag= e, const u8 *table, else if (table[i] =3D=3D pidff_set_condition[PID_PARAM_BLOCK_OFFSET]) PIDFF_MISSING_FIELD(PBO, quirks); =20 + else if (table[i] =3D=3D pidff_set_condition[PID_NEG_COEFFICIENT]) + PIDFF_MISSING_FIELD(NEG_COEFFICIENT, quirks); + else if (strict) { pr_debug("failed to locate %d\n", i); return -1; diff --git a/drivers/hid/usbhid/hid-pidff.h b/drivers/hid/usbhid/hid-pidff.h index f321f675e131..5bf54e981543 100644 --- a/drivers/hid/usbhid/hid-pidff.h +++ b/drivers/hid/usbhid/hid-pidff.h @@ -21,6 +21,9 @@ /* Force all periodic effects to be uploaded as SINE */ #define HID_PIDFF_QUIRK_PERIODIC_SINE_ONLY BIT(4) =20 +/* Allow devices with missing negative coefficient in the set condition us= age */ +#define HID_PIDFF_QUIRK_MISSING_NEG_COEFFICIENT BIT(5) + #ifdef CONFIG_HID_PID int hid_pidff_init(struct hid_device *hid); int hid_pidff_init_with_quirks(struct hid_device *hid, u32 initial_quirks); --=20 2.52.0