From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ot1-f43.google.com (mail-ot1-f43.google.com [209.85.210.43]) (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 32A1C2AE76 for ; Sat, 1 Aug 2026 07:56:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785571006; cv=none; b=idtYTvsldfdDwBaIZjTJ7lpEPHJyfuDjofRd6xNEMmdhEtG3ofj2PGZ2HtI6DcjUj5aGLDYCL020EtbuPXA6dFbVAkmRa+24fyn496262qDma4AI+OvunrQ6ddO1ViGxKv+nvqPzlx2uVdiDWJcRugmCOHBiA4Dft9gNB8HvGCs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785571006; c=relaxed/simple; bh=VD0xIociW82aBeurLRpBqUbCiPYHYICDGIcMfrmvYtE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=LCNUQ56qkRXFq8CfNBAxcok1qkPJv+yqv2/sCtka/fFSf3YH84XnQdih/3fI4AiTg5nLioUSdJuq17VVyNKKcYkcRyEUIwJ+/NrqatoPHYiihObuh2vqcxvqpJSUzAfaYxzE+OJLlMVLssJMr4N/DvwmB/Zojf1VLS01waKKuk0= 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=lUvRsH+C; arc=none smtp.client-ip=209.85.210.43 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="lUvRsH+C" Received: by mail-ot1-f43.google.com with SMTP id 46e09a7af769-7ec49608332so850694a34.3 for ; Sat, 01 Aug 2026 00:56:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785571004; x=1786175804; 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=lUvRsH+CeA57l9J1EmAUtkHMiN6PVKcXTW8Rtws/bbO17avS4v75AW8OmXhQdnLwLQ 2lObfM0n7xSjJZSewMGwXe6jqE+yB6cRXWslH3tTYkXcPPqnRU9PkU9ERevY3hUKSVXz Y5lb49MDHOkeKED0abb2tlkFKSeD3LKRC4V3MDSplg/5D804X0sRAwTMnKWcB8cPjycL OYjm6UPF8uCb/4I+xqFM/hp9FkAq2tqCurOQx0zdE1JUj+96ExT6QsOIAjOX1hqMBVjM 0/chMARAgl5IRcuftedmwtUeUsX7wNk7+MO7xhpU0JLXB0z018QmvpVh9RIZkfgko8pq MIbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785571004; x=1786175804; 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=szFTg+bSBg9PPsj8EC+aJKCj6NYpHGrj9RZQncnxphazoj2MTryIVIWgW7ARy+mYcr yZci2+s6Wgz7vG6DAfJGhFRAJGfZeZ5CxIqJhhgm4ajhS50WOd5XuLEWB2btgmlAuk1B fUM6yIXUXv3qxTFffnHt2oI8QnCObEvV+wPpaRHoC7WqCismMd7gsSn3ps3SFRtWnxfg 97cE0MssJtOZqCaAemRjP0qCRQq2PMCB91Sjkmt2jnBOcIqEl6t6mCn+vlX1B5gnn6nM 6QYUm6MORdMZ7dI0luQTKXC2H+Kijlp/6CA23ceD1zBzZqMGl81XmJBU0x9EvVWxctAc SeJQ== X-Forwarded-Encrypted: i=1; AHgh+RrPue1KvHyPtDCPl1bj8UpirEBtTWXrWjzUcmC7Y0130gNhKWNFm0Bdgc7FFCrACH3RLL6lOQu8n/c/8xw=@vger.kernel.org X-Gm-Message-State: AOJu0YzWhd7wQLobgdSwWfdC+Ib8Mo5P9ZzgK8dV6K5U5iTp80GeTmyU eoBdfRw7NvDdjIeYUBE/yTecPgOqRj72r+wQR+/W+UQd1c1pdipjs2wW X-Gm-Gg: AR+sD12F8Oh8C8oB6uuQBXvQcvnZ+jOPEF3CrVu2gcAyjM/fyPC9TKBvNXqZOAW/wzw 6cvLGZwH55+sQTp8STF1Wk/2WVAg3btBGroyBP5diHJia9BYOVTiVEA9DKMUtQMJGzH4RD/99mX IjgXFKxe9YZEyM20dXoKUryohWzV40TQALqoqe3FejBy5BHlj10UP8vopB1GJIddhd0JS4efoa1 kCeWnleIof+v4ViImOhvsOu305PTzjxLaSOS4VlRMPX8SejNvS2AaUjVSKIhfQqY1PLYORgE7iP s6xrs+Kl3+RNus7vY9Aueb4xCCS6X/f7LWQumXhmD7qUPw4aYYSDuHXgZdcrHs84TaWDvBBBgmu I5crycrYLp6WMsMF0GqRrW5Q6Bw8nFqN39h46DLHwZqbr+883p2tpAybvQJwjad1CzLt9EBSdzx KaUxzWwE0ZfnirS0thiUmzeHOWmBsffbPZ/6DGQTiMb+5NnfXZlV0huWsi70Drgx2izBTDylkDm loDqw== X-Received: by 2002:a05:6808:c191:b0:495:e92e:d797 with SMTP id 5614622812f47-4af5e1d395fmr5346690b6e.11.1785571003921; Sat, 01 Aug 2026 00:56:43 -0700 (PDT) Received: from u-ThinkPad-X1-Extreme-Gen-4i ([192.3.12.183]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4af58ce3e8esm2466717b6e.3.2026.08.01.00.56.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Aug 2026 00:56:42 -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 , Aaron Ma , Kees Cook , Zoltan Illes , Qbeliw Tanaka , Elliot Tester , Dmitriy Zharov Subject: [PATCH v2 1/2] Input: xpad - query MS OS descriptor for BTP-KP20D Date: Sat, 1 Aug 2026 15:56:22 +0800 Message-ID: <20260801075623.2769601-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