From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oi1-f181.google.com (mail-oi1-f181.google.com [209.85.167.181]) (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 8B6762E7BD6 for ; Sat, 25 Jul 2026 07:32:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.181 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784964743; cv=none; b=iPZ8F9l8JUttOKvFvOSpWTu2hVNMcErOygY5Ji7xTTqKK4B1wJPef4v6ldR1m8s/3flhjnwIByqQzjCbpD6US9DcbjWrtXmWEp8Txh8q1QaPJgxRWDdlv8x76scpsmO8Iy4BCVa309YcBqeh4BGJBacuMq4S/GUS4FXw1BlMcCI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784964743; c=relaxed/simple; bh=VD0xIociW82aBeurLRpBqUbCiPYHYICDGIcMfrmvYtE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=purDplAjSYLSIG9uZrXZaIG6XS6D8Qxeh2SFZMhBCcIIuI8XNvjp6W5phjhK0I3AdqvRDZ/b/5qWoOOsZtw/JBAkBFar21lOzcFeDulbupXuZN4Rn1tii0stdf91XtN/OnNZl2hleNS0dxuDFkZuCYu0fxrgY7djcbrI9lFuXvg= 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=YriIJm7d; arc=none smtp.client-ip=209.85.167.181 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="YriIJm7d" Received: by mail-oi1-f181.google.com with SMTP id 5614622812f47-489f3611e0cso630235b6e.1 for ; Sat, 25 Jul 2026 00:32:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784964741; x=1785569541; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=V02uRN29uXtZKMu3y18L5jDR+JLnN3WeCEmj8FgdeXY=; b=YriIJm7dO3Gbg576JU1IP5aWJ9qAwUi7G7pkDn8xfpXV6yHTzyx0q6Mm9ZlBCZn/Aj d5cKzFvjKOVWj/QQ4L1VBqOfC32pyIRfFcffgSwGYCnv1DL7+ZRrGluFmOKiEdslJAgu +5EuXuEKcgzp7z8go1DF8uWu7Qmpm/M2fRCbTLrsfC7RO3+L/Mo1e9ljk4PcFMz0jmXu b9eR/YDHNZGlWJfBEQSfabnF3foEJYczBihiWNQ6JT/sOu8mSpNTrUh0TRDtDfp/riiU knlJVtBfeUq5wgmEUqBIKyg6vDYpM8JKpYYX3Lm9LsF65W6VxglJTfkpewM7XjTTZO+c xd9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784964741; x=1785569541; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=V02uRN29uXtZKMu3y18L5jDR+JLnN3WeCEmj8FgdeXY=; b=CwXqcPx4C7N+6CUHCM84DFlYA7K/jA+qlxeyMDpZTGe2BeEp2RGv3nNe6r0/BRKVdf zNCEQzTNotPddh18xVAaxtcjySlH5asszuPC+0fTLiSL1Ac+Ie0I4BFBRjPkl39tASe4 lYJeacG8zVGdDGke/MItRvofpidrX/IqFkLn2W43Ir+uSNGffZ+zfuASNdTRZ0iW3MBv RypWyO+WsxSaCt8ZUrdOmVU8Z2udQ3tArrSo7//ovSBt1NgSUAx4oEc98HLvMEom2P1l wgum7O5yfOClWNrQ1b5EAJcAOhIquNnvzv1JkfJNhMhMGgEITs0tnUjrRW1q6c/6CGCm gyvA== X-Forwarded-Encrypted: i=1; AHgh+Ro89TcQw/PsGspnoBssDMbOdWmwFdWlaKpMuXzxzar9TWN5YqHck3+hiKEO7xeagvwzi+pt+Y8QBupj24g=@vger.kernel.org X-Gm-Message-State: AOJu0YzAt+FdJNMjQbETJokVql2aDTshCK6PkQHtJ0B189aqqsD+XwSY +f10r5vi0ZEOWnnQH3xL0R0rK9SiDblwhgjIkNdtiVkcE3YYsCUONq4q X-Gm-Gg: AR+sD10Q5dTYN5sl8IC5kTznuEKi8nyzYBbiCjdRVKkKUB1tevBelo3ZtcWlx2vOFlG o+iKgCzHeYoNEGMV+ufcybV5CuN1IoRmvkFmoTwe8/LtMP1ps5qwtzUQApyVsn7jeOjrE67tDgn FOYeH9xQIpGY5UA148ns+t3JanzAY3FHW/Ra4AtpnhlrLlAzH9mI7trd85deoIBu0RaRpbelGSv QhDFx+DBlLqoMSRyZ9ZEoD3h/rGgyzU47nnhg40T7/SHdUC8isAiPtdWiEspsGfHENVYYr3EbN8 USE/ZZCthFDQV9tm40SGUjFawItjNIYqvaUrEakEZczGVYq1z6aGMq95o2JepDn86YHW9j3xt7i y5WjZJXCiJOQiVjJVNJqSChwsLqamBGtnqf3j4WFBaKKTuAdm+L0eJXCauJpEOZgvf3vAkd/eYR 5vbPFfcndnSgf6pXRCwyQ= X-Received: by 2002:a05:6808:30a0:b0:4a4:dfff:2daa with SMTP id 5614622812f47-4ab6a246bfdmr1447852b6e.20.1784964741328; Sat, 25 Jul 2026 00:32:21 -0700 (PDT) Received: from u-ThinkPad-X1-Extreme-Gen-4i ([192.3.12.183]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4ab3b21331esm4823598b6e.14.2026.07.25.00.32.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Jul 2026 00:32:20 -0700 (PDT) From: Aaron Ma To: Dmitry Torokhov , linux-input@vger.kernel.org (open list:INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN)...), linux-kernel@vger.kernel.org Cc: Sanjay Govind , Vicki Pfau , Shengyu Qu , Aaron Ma , Qbeliw Tanaka , Elliot Tester , Kees Cook , Dmitriy Zharov Subject: [PATCH 1/2] Input: xpad - query MS OS descriptor for BTP-KP20D Date: Sat, 25 Jul 2026 15:28:12 +0800 Message-ID: <20260725072813.339112-1-mapengyu@gmail.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The Beitong BTP-KP20D dongle cycles through its operating modes and never becomes usable unless the host requests the Microsoft OS string descriptor at index 0xee. Windows makes this request while discovering the XUSB10 compatible ID, but Linux USB core does not query Microsoft OS descriptors. Add a device-specific quirk that performs the request during probe, allowing the dongle to remain in Xbox 360 mode. Signed-off-by: Aaron Ma --- drivers/input/joystick/xpad.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c index feb8f368f834e..1616047e65f5e 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c @@ -72,6 +72,7 @@ #define PKT_XBE2_FW_5_11 4 #define FLAG_DELAY_INIT BIT(0) +#define FLAG_MS_OS_DESC BIT(1) static bool dpad_to_buttons; module_param(dpad_to_buttons, bool, S_IRUGO); @@ -334,6 +335,7 @@ static const struct xpad_device { { 0x1ee9, 0x1590, "ZOTAC Gaming Zone", 0, XTYPE_XBOX360 }, { 0x20bc, 0x5134, "BETOP BTP-KP50B Xinput Dongle", 0, XTYPE_XBOX360 }, { 0x20bc, 0x514a, "BETOP BTP-KP50C Xinput Dongle", 0, XTYPE_XBOX360 }, + { 0x20bc, 0x5159, "Beitong BTP-KP20D Controller", 0, XTYPE_XBOX360, FLAG_MS_OS_DESC }, { 0x20d6, 0x2001, "BDA Xbox Series X Wired Controller", 0, XTYPE_XBOXONE }, { 0x20d6, 0x2009, "PowerA Enhanced Wired Controller for Xbox Series X|S", 0, XTYPE_XBOXONE }, { 0x20d6, 0x2064, "PowerA Wired Controller for Xbox", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, @@ -786,6 +788,24 @@ static int xpad_start_input(struct usb_xpad *xpad); static void xpadone_ack_mode_report(struct usb_xpad *xpad, u8 seq_num); static void xpad360w_poweroff_controller(struct usb_xpad *xpad); +static void xpad_query_ms_os_descriptor(struct usb_device *udev) +{ + u8 *descriptor; + int error; + + descriptor = kmalloc(18, GFP_KERNEL); + if (!descriptor) + return; + + error = usb_get_descriptor(udev, USB_DT_STRING, 0xee, + descriptor, 18); + if (error != 18) + dev_warn(&udev->dev, + "unable to query MS OS descriptor: %d\n", error); + + kfree(descriptor); +} + /* * xpad_process_packet * @@ -2055,6 +2075,9 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id break; } + if (xpad_device[i].flags & FLAG_MS_OS_DESC) + xpad_query_ms_os_descriptor(udev); + xpad = kzalloc_obj(*xpad); if (!xpad) return -ENOMEM; -- 2.53.0