mbox series

[v5,0/6] Add spi-hid, transport for HID over SPI bus

Message ID 20220707165902.3184-1-jaschultzMS@gmail.com
Headers show
Series Add spi-hid, transport for HID over SPI bus | expand

Message

Jarrett Schultz July 7, 2022, 4:58 p.m. UTC
From: Jarrett Schultz <jaschultz@microsoft.com>

Surface Duo devices use a touch digitizer that communicates to the main
SoC via SPI and presents itself as a HID device. This patch's goal is to
add the spi-hid transport driver to drivers/hid. The driver follows the
publically available HID Over SPI Protocol Specification version 1.0.

The specification is available at
https://www.microsoft.com/en-us/download/details.aspx?id=103325.

In the initial commits there are some HID core changes to support a SPI
device, a change to HID documentation, HID over SPI Device Tree
bindings, and finally the SPI HID transport driver.

Dmitry Antipov (5):
  HID: Add BUS_SPI support when printing out device info in
    hid_connect()
  HID: define HID_SPI_DEVICE macro in hid.h
  dt-bindings: input: Document Microsoft G6 Touch Digitizer
  Documentation: Correction in HID output_report callback description.
  HID: add spi-hid, transport driver for HID over SPI bus

Jarrett Schultz (1):
  Enable building drivers/hid/spi-hid as a module

 .../input/microsoft,g6-touch-digitizer.yaml   |  135 ++
 Documentation/hid/hid-transport.rst           |    4 +-
 arch/arm64/configs/defconfig                  |    1 +
 drivers/hid/Kconfig                           |    2 +
 drivers/hid/Makefile                          |    1 +
 drivers/hid/hid-core.c                        |    3 +
 drivers/hid/spi-hid/Kconfig                   |   25 +
 drivers/hid/spi-hid/Makefile                  |   12 +
 drivers/hid/spi-hid/spi-hid-core.c            | 1326 +++++++++++++++++
 drivers/hid/spi-hid/spi-hid-core.h            |  188 +++
 drivers/hid/spi-hid/spi-hid-of.c              |  141 ++
 drivers/hid/spi-hid/spi-hid-of.h              |   30 +
 drivers/hid/spi-hid/spi-hid_trace.h           |  194 +++
 drivers/hid/spi-hid/trace.c                   |    9 +
 include/linux/hid.h                           |    2 +
 15 files changed, 2071 insertions(+), 2 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/input/microsoft,g6-touch-digitizer.yaml
 create mode 100644 drivers/hid/spi-hid/Kconfig
 create mode 100644 drivers/hid/spi-hid/Makefile
 create mode 100644 drivers/hid/spi-hid/spi-hid-core.c
 create mode 100644 drivers/hid/spi-hid/spi-hid-core.h
 create mode 100644 drivers/hid/spi-hid/spi-hid-of.c
 create mode 100644 drivers/hid/spi-hid/spi-hid-of.h
 create mode 100644 drivers/hid/spi-hid/spi-hid_trace.h
 create mode 100644 drivers/hid/spi-hid/trace.c

Comments

Randy Dunlap July 7, 2022, 8:51 p.m. UTC | #1
Hi--

On 7/7/22 09:59, Jarrett Schultz wrote:
> From: Jarrett Schultz <jaschultz@microsoft.com>
> 
> This driver follows HID Over SPI Protocol Specification 1.0 available at
> https://www.microsoft.com/en-us/download/details.aspx?id=103325. The
> initial version of the driver does not support: 1) multi-fragment input
> reports, 2) sending GET_INPUT and COMMAND output report types and
> processing their respective acknowledge input reports, and 3) device
> sleep power state.
> 
> Signed-off-by: Dmitry Antipov <dmanti@microsoft.com>

Missing your (Jarrett's) Signed-off-by: here.

More below...

> ---
>  drivers/hid/Kconfig                 |    2 +
>  drivers/hid/Makefile                |    1 +
>  drivers/hid/spi-hid/Kconfig         |   25 +
>  drivers/hid/spi-hid/Makefile        |   12 +
>  drivers/hid/spi-hid/spi-hid-core.c  | 1326 +++++++++++++++++++++++++++
>  drivers/hid/spi-hid/spi-hid-core.h  |  188 ++++
>  drivers/hid/spi-hid/spi-hid-of.c    |  141 +++
>  drivers/hid/spi-hid/spi-hid-of.h    |   30 +
>  drivers/hid/spi-hid/spi-hid_trace.h |  194 ++++
>  drivers/hid/spi-hid/trace.c         |    9 +
>  10 files changed, 1928 insertions(+)
>  create mode 100644 drivers/hid/spi-hid/Kconfig
>  create mode 100644 drivers/hid/spi-hid/Makefile
>  create mode 100644 drivers/hid/spi-hid/spi-hid-core.c
>  create mode 100644 drivers/hid/spi-hid/spi-hid-core.h
>  create mode 100644 drivers/hid/spi-hid/spi-hid-of.c
>  create mode 100644 drivers/hid/spi-hid/spi-hid-of.h
>  create mode 100644 drivers/hid/spi-hid/spi-hid_trace.h
>  create mode 100644 drivers/hid/spi-hid/trace.c
> 

> diff --git a/drivers/hid/spi-hid/Kconfig b/drivers/hid/spi-hid/Kconfig
> new file mode 100644
> index 000000000000..37302d658162
> --- /dev/null
> +++ b/drivers/hid/spi-hid/Kconfig
> @@ -0,0 +1,25 @@
> +#
> +# Copyright (c) 2021 Microsoft Corporation
> +#
> +# This program is free software; you can redistribute it and/or modify it
> +# under the terms of the GNU General Public License version 2 as published by
> +# the Free Software Foundation.
> +#

Please just use SPDX tags instead of all of that.
See other hid/Kconfig files for examples.

> +menu "SPI HID support"
> +	depends on SPI
> +
> +config SPI_HID
> +	tristate "HID over SPI transport layer"
> +	default n
> +	depends on SPI && INPUT && OF
> +	select HID
> +	help
> +	  Say Y here if you use a keyboard, a touchpad, a touchscreen, or any
> +	  other HID based devices which is connected to your computer via SPI.

	        HID-based devices which are connected
(or)
	        HID-based device which is connected

> +
> +	  If unsure, say N.
> +
> +	  This support is also available as a module.  If so, the module
> +	  will be called spi-hid.
> +
> +endmenu
Maximilian Luz Aug. 9, 2022, 12:53 a.m. UTC | #2
On 8/7/22 09:58, Jarrett Schultz <jaschultzms@gmail.com> wrote:
> Surface Duo devices use a touch digitizer that communicates to the main
> SoC via SPI and presents itself as a HID device. This patch's goal is to
> add the spi-hid transport driver to drivers/hid. The driver follows the
> publically available HID Over SPI Protocol Specification version 1.0.

As far as I can tell based on the downstream code you provide in [1],
your proposed driver (and v1.0 spec) is incompatible with the version
used on current Surface devices (Surface Duo 1 and 2, Surface Pro X, and
I assume some AMD/x86 based devices on which you also use spi-hid for the
digitizer). On those, SPI_HID_SUPPORTED_VERSION is 0x0100 whereas it is
0x0300 for the driver proposed here, along with at least some protocol
struct changes.

Do you have any plans on supporting those devices (i.e. protocol version
0x0100) at some point?

Regards,
Max

[1]: https://github.com/microsoft/surface-duo-oss-kernel.msm-5..4/tree/surfaceduo2/11/2022.108.8/drivers/hid/spi-hid