Received: by 2002:a05:7412:5112:b0:fa:6e18:a558 with SMTP id fm18csp1461260rdb; Wed, 24 Jan 2024 16:54:48 -0800 (PST) X-Google-Smtp-Source: AGHT+IG52r1L1Nio6PGh9mzlONVwm+p+1B4nFEbEA4auuXn+OjlSJzVy2XnUDWgR/Bq+YDO8OPDD X-Received: by 2002:a05:6808:6492:b0:3bd:4361:a265 with SMTP id fh18-20020a056808649200b003bd4361a265mr111613oib.58.1706144088643; Wed, 24 Jan 2024 16:54:48 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706144088; cv=pass; d=google.com; s=arc-20160816; b=MPZ8VBnjXri0/45DUvKGPZL3s9Yivt//1TKM3T6I1QUONe3xzoEO2vFugF7l2wBY2I SUTPLzYgI3pGpUy1akqKEvJsV9a6xS2gDtGJxArAMKmYg408T6LGdMnLcZjrEcHK646p wiSqZb0SDomCT4MTHCCC880FyNKJsWasKIEE/2D+VWBMKsFpFBm0fn+rU624bDpyfFmA GgSohpWnal1/dVe0M3sY/qsGBqmbTD+9vO5QgSg8N8QpMIw2eIC7x4Gjt6CsYpvJBRu6 A8L/ldOJSrpsLhqH4cM5FqEkr5lZtSoI0MBnv/sS/bLmR+AHk5RyegZuxk4fR3sBQ90+ nB9g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:dkim-signature; bh=a3GLAs2BQsaDpmFe+ANpjbfXLSKm2rkObjJFpjMlSgg=; fh=Se21XS3j38pvTIndGgoI3BtYChId7MAnlhRUjFgi1Js=; b=GLv8T+UilJq1lunEGn9yEEWzRKwKipOVuww2Hr2lLTpHwdlrPlPGVzsbXE7EXjPorx HtdVQ9K7YAHwlmciY3Zww0MdpdwGrdtEvq7gnuo8TKWHM0NKG4aclcybY1r/Mb9caRVE ryZUPZZid3InkVNt9GffBBcxTUYXyhFArwijBaNNmyI04X8qtK+tMNcCkUEsph0QwtDa 7c2l5ljsSkEigU+IcQHURjNRG3UY3NtFgT6BDtolm5CQdj9TYzaoQ7Mk1KLmltw75gFG NiWv2JnO7zGuplW8xTsMCA4Ifzf/xs4GtMYhhFyiIviXnLxHwNmVnW6pxACeOaZng5L2 olzQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=ChTDwg+C; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-37838-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-37838-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id r7-20020a632047000000b005cf170f8b92si12512516pgm.97.2024.01.24.16.54.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 16:54:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-37838-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=ChTDwg+C; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-37838-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-37838-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 3BD072860AA for ; Thu, 25 Jan 2024 00:54:48 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id AED221388; Thu, 25 Jan 2024 00:54:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ChTDwg+C" Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (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 1A8D3EA9; Thu, 25 Jan 2024 00:54:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706144079; cv=none; b=HOWyCxBrz2DaPgtW7cU5gLTlvHfWCaFtAnXOTHZXUI8DePyVwSbcVheTgZDVmqwZY+J/kYnCcFX2SdOculVW8IArFE8jFe11wGYd7aHiPu67Bysw6/Oxu4HN8ru6GvG7C1g+1nff10BBRyPHbmT+kzb8f7J4lfVsZ9G0uPKiwLc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706144079; c=relaxed/simple; bh=FzqykWuCJoJoX4tybj34XyCUyvzGyTun6uDYiAW2pF0=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=rlheHPobVg6v3Djyxr9RXxOvTWB17JCUBDql8ha32OJ9dDXZYl162TeLay5+R7fSbY6TgormGhjd8+fgacriy8AsY/YyyiKLvhaUXhrJhGp9Es6C6uChNX9iLpXsLMFPd0KdA0QUYsnzQVtoL2tScHSwdRcrNO+LR9ds9gQXat0= 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=ChTDwg+C; arc=none smtp.client-ip=209.85.221.46 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 Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-336c8ab0b20so6001520f8f.1; Wed, 24 Jan 2024 16:54:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706144076; x=1706748876; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=a3GLAs2BQsaDpmFe+ANpjbfXLSKm2rkObjJFpjMlSgg=; b=ChTDwg+Ceb63BN8Ze8Ja4u/fnxbTEckj0wgqV3JHYL1gfQrx03SdIuN/1GvakJpaUU 71oVyISfjU95UNeQKkgJrRYbYLVgokf3kEdE5L+4JvnEOZZT1eA8vSpXYoMdq2QxSWNQ d3fHVhWvk9zqMRJpIUcXSFM045snetw7T02fM29rXWEMyQe3BEb6wQ451cuTgxvPUp2I jGtKe1M3I91FnrFgn5GtIghDmPHNLxOJE8IGKdmeMQBLTwIX/XJSiZ8viAQMyjoJWmKn FHf4HpKPKk9wHu6dRvmsGwIzz01NwxpDFKlMrf4w68bXYLPSoIvgxLn3n20oCff1Olvw 3cqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706144076; x=1706748876; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=a3GLAs2BQsaDpmFe+ANpjbfXLSKm2rkObjJFpjMlSgg=; b=VSfynBxR7BeFcaoUi3NG4ZAI5ndHFyw86qpWnNTpaDwBCIC32uZ5neo5npc43F5Z0q TbwQf5Azp2UHPsmBu76RiLibrzF3fLKOzE+Uw44bu8r1xlo4aup6XZl98b06e2icxzoH qv7LQ7mPSd7kx1p+ZqX5f3C1cflssYq3dmNqTMCTn4XTL+RsYIAMvDKZ7IZRnK4sJCN1 gLHVwwy7qJD7leGZcLrHd1MFxczn+KznoaRnaNr9B7cIqPaRT2X0FRETrkVr+9e/v1O9 bIAceONkeDhyHx/EeuqcjsvUZeJcUSpVgp8gZjoc9lbBFEDnit+8d0tF1jAAZEaWkH9p HISg== X-Gm-Message-State: AOJu0Ywy7a5/KnjgHIWCrX/RdKOaokMUUBnnKlb+i3HYOYWI2X5ZSqot Tfmhi22ynanYordpv362aJYkQ9/0QfDHWysDpttqd/CTYi2q+zveS03f9g8ClGb8QdqdGCSkmmG bmq3GPJIgk0+sFkBf/sCoNtotHv0= X-Received: by 2002:a5d:56c5:0:b0:337:9f44:a0b4 with SMTP id m5-20020a5d56c5000000b003379f44a0b4mr99803wrw.24.1706144075979; Wed, 24 Jan 2024 16:54:35 -0800 (PST) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240115144538.12018-1-max@enpas.org> <20240115144538.12018-6-max@enpas.org> In-Reply-To: <20240115144538.12018-6-max@enpas.org> From: Roderick Colenbrander Date: Wed, 24 Jan 2024 16:54:24 -0800 Message-ID: Subject: Re: [PATCH v1 5/7] HID: playstation: DS4: Parse minimal report 0x01 To: Max Staudt Cc: Roderick Colenbrander , Jiri Kosina , Benjamin Tissoires , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Max, On Mon, Jan 15, 2024 at 6:52=E2=80=AFAM Max Staudt wrote: > > Some third-party controllers never switch to the full 0x11 report. > > They keep sending the short 0x01 report, so let's parse that instead. > > Signed-off-by: Max Staudt > --- > drivers/hid/hid-playstation.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/drivers/hid/hid-playstation.c b/drivers/hid/hid-playstation.= c > index 2bf44bd3cc8a..086b0768fa51 100644 > --- a/drivers/hid/hid-playstation.c > +++ b/drivers/hid/hid-playstation.c > @@ -287,6 +287,8 @@ struct dualsense_output_report { > > #define DS4_INPUT_REPORT_USB 0x01 > #define DS4_INPUT_REPORT_USB_SIZE 64 > +#define DS4_INPUT_REPORT_BT_MINIMAL 0x01 > +#define DS4_INPUT_REPORT_BT_MINIMAL_SIZE 10 > #define DS4_INPUT_REPORT_BT 0x11 > #define DS4_INPUT_REPORT_BT_SIZE 78 > #define DS4_OUTPUT_REPORT_USB 0x05 > @@ -2198,6 +2200,7 @@ static int dualshock4_parse_report(struct ps_device= *ps_dev, struct hid_report * > int battery_status, i, j; > uint16_t sensor_timestamp; > unsigned long flags; > + bool is_minimal =3D false; > > /* > * DualShock4 in USB uses the full HID report for reportID 1, but > @@ -2225,6 +2228,18 @@ static int dualshock4_parse_report(struct ps_devic= e *ps_dev, struct hid_report * > ds4_report =3D &bt->common; > num_touch_reports =3D bt->num_touch_reports; > touch_reports =3D bt->touch_reports; > + } else if (hdev->bus =3D=3D BUS_BLUETOOTH && > + report->id =3D=3D DS4_INPUT_REPORT_BT_MINIMAL && > + size =3D=3D DS4_INPUT_REPORT_BT_MINIMAL_SIZE) { > + /* Some third-party pads never switch to the full 0x11 re= port. > + * The short 0x01 report is 10 bytes long: > + * u8 report_id =3D=3D 0x01 > + * u8 first_bytes_of_full_report[9] > + * So let's reuse the full report parser, and stop it aft= er > + * parsing the buttons. > + */ > + ds4_report =3D (struct dualshock4_input_report_common *)&= data[1]; > + is_minimal =3D true; > } else { > hid_err(hdev, "Unhandled reportID=3D%d\n", report->id); > return -1; > @@ -2258,6 +2273,9 @@ static int dualshock4_parse_report(struct ps_device= *ps_dev, struct hid_report * > input_report_key(ds4->gamepad, BTN_MODE, ds4_report->buttons[2]= & DS_BUTTONS2_PS_HOME); > input_sync(ds4->gamepad); > > + if (is_minimal) > + goto finish_minimal; > + I would say let's turn this into a 'return 0'. The goto is not useful since there is no need for any common cleanup or some other common logic later. > /* Parse and calibrate gyroscope data. */ > for (i =3D 0; i < ARRAY_SIZE(ds4_report->gyro); i++) { > int raw_data =3D (short)le16_to_cpu(ds4_report->gyro[i]); > @@ -2365,6 +2383,7 @@ static int dualshock4_parse_report(struct ps_device= *ps_dev, struct hid_report * > ps_dev->battery_status =3D battery_status; > spin_unlock_irqrestore(&ps_dev->lock, flags); > > +finish_minimal: > return 0; > } > > -- > 2.39.2 > > Thanks, Roderick