mbox series

[v4,0/2] dt-bindings: input: Goodix GT7986U SPI HID Touchscreen

Message ID 20241111075000.111509-1-charles.goodix@gmail.com
Headers show
Series dt-bindings: input: Goodix GT7986U SPI HID Touchscreen | expand

Message

Charles Wang Nov. 11, 2024, 7:49 a.m. UTC
The Goodix GT7986U touch controller report touch data according to the
HID protocol through the SPI bus. However, it is incompatible with
Microsoft's HID-over-SPI protocol.

The patchset introduces the following two changes:
1) Add goodix,gt7986u-spifw.yaml.
2) Modify the driver to align with the device binding file.

Signed-off-by: Charles Wang <charles.goodix@gmail.com>
---
Changes in v4:
- Fix dt build warnings.
- Modify the driver to align with the device binding file.

Changes in v3:
- Split the commit into two patches.

Changes in v2:
- Change compatible to 'goodix,gt7986u-spifw'.
- Remove 'goodix,hid-report-addr' property.
- Change additionalProperties to unevaluatedProperties.
- v1: https://lore.kernel.org/all/20241025114642.40793-2-charles.goodix@gmail.com/
---
Charles Wang (2):
  dt-bindings: input: Goodix GT7986U SPI HID Touchscreen
  HID: hid-goodix: Add OF supports

 .../bindings/input/goodix,gt7986u-spifw.yaml  | 69 +++++++++++++++++++
 drivers/hid/hid-goodix-spi.c                  | 17 +++--
 2 files changed, 80 insertions(+), 6 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/input/goodix,gt7986u-spifw.yaml

Comments

Doug Anderson Nov. 11, 2024, 5:24 p.m. UTC | #1
Hi,

On Sun, Nov 10, 2024 at 11:50 PM Charles Wang <charles.goodix@gmail.com> wrote:
>
> This patch introduces the following changes:
> - Adds OF match table.
> - Hardcodes hid-report-addr in the driver rather than fetching it
>   from the device property.
>
> Signed-off-by: Charles Wang <charles.goodix@gmail.com>
> ---
>  drivers/hid/hid-goodix-spi.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/hid/hid-goodix-spi.c b/drivers/hid/hid-goodix-spi.c
> index 6ae2300a6..80c0288a3 100644
> --- a/drivers/hid/hid-goodix-spi.c
> +++ b/drivers/hid/hid-goodix-spi.c
> @@ -20,6 +20,7 @@
>  #define GOODIX_HID_REPORT_DESC_ADDR    0x105AA
>  #define GOODIX_HID_SIGN_ADDR           0x10D32
>  #define GOODIX_HID_CMD_ADDR            0x10364
> +#define GOODIX_HID_REPORT_ADDR         0x22C8C
>
>  #define GOODIX_HID_GET_REPORT_CMD      0x02
>  #define GOODIX_HID_SET_REPORT_CMD      0x03
> @@ -701,12 +702,7 @@ static int goodix_spi_probe(struct spi_device *spi)
>                 return dev_err_probe(dev, PTR_ERR(ts->reset_gpio),
>                                      "failed to request reset gpio\n");
>
> -       error = device_property_read_u32(dev, "goodix,hid-report-addr",
> -                                        &ts->hid_report_addr);
> -       if (error)
> -               return dev_err_probe(dev, error,
> -                                    "failed get hid report addr\n");
> -
> +       ts->hid_report_addr = GOODIX_HID_REPORT_ADDR;
>         error = goodix_dev_confirm(ts);
>         if (error)
>                 return error;
> @@ -790,6 +786,14 @@ static const struct acpi_device_id goodix_spi_acpi_match[] = {
>  MODULE_DEVICE_TABLE(acpi, goodix_spi_acpi_match);
>  #endif
>
> +#ifdef CONFIG_OF
> +static const struct of_device_id goodix_spi_of_match[] = {
> +       { .compatible = "goodix,gt7986u-spifw", },
> +       { }
> +};
> +MODULE_DEVICE_TABLE(of, goodix_spi_of_match);
> +#endif
> +
>  static const struct spi_device_id goodix_spi_ids[] = {
>         { "gt7986u" },
>         { },
> @@ -800,6 +804,7 @@ static struct spi_driver goodix_spi_driver = {
>         .driver = {
>                 .name = "goodix-spi-hid",
>                 .acpi_match_table = ACPI_PTR(goodix_spi_acpi_match),
> +               .of_match_table = of_match_ptr(goodix_spi_of_match),

I can never quite remember what the current preference is in regards
to "OF" tables (whether to use #ifdef like you've done or mark them
`__maybe_unused`), so maybe someone will request you change it. ...but
IMO what you have is fine and looks to be properly guarded with
of_match_ptr(). As far as I'm concerned, this patch looks OK.

Oh, I guess the one "nit" is that I would have put "spi" in the
subject, making it "HID: hid-goodix-spi: Add OF supports". It might be
worth sending a v5 for that (after waiting a day or two) unless a
maintainer tells you not to.

In any case:

Reviewed-by: Douglas Anderson <dianders@chromium.org>
Charles Wang Nov. 12, 2024, 11:53 a.m. UTC | #2
Hi Doug,

On Mon, Nov 11, 2024 at 09:24:39AM -0800, Doug Anderson wrote:
> Hi,
> 
> On Sun, Nov 10, 2024 at 11:50 PM Charles Wang <charles.goodix@gmail.com> wrote:
> >
> > This patch introduces the following changes:
> > - Adds OF match table.
> > - Hardcodes hid-report-addr in the driver rather than fetching it
> >   from the device property.
> >
> > Signed-off-by: Charles Wang <charles.goodix@gmail.com>
> > ---
> >  drivers/hid/hid-goodix-spi.c | 17 +++++++++++------
> >  1 file changed, 11 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/hid/hid-goodix-spi.c b/drivers/hid/hid-goodix-spi.c
> > index 6ae2300a6..80c0288a3 100644
> > --- a/drivers/hid/hid-goodix-spi.c
> > +++ b/drivers/hid/hid-goodix-spi.c
> > @@ -20,6 +20,7 @@
> >  #define GOODIX_HID_REPORT_DESC_ADDR    0x105AA
> >  #define GOODIX_HID_SIGN_ADDR           0x10D32
> >  #define GOODIX_HID_CMD_ADDR            0x10364
> > +#define GOODIX_HID_REPORT_ADDR         0x22C8C
> >
> >  #define GOODIX_HID_GET_REPORT_CMD      0x02
> >  #define GOODIX_HID_SET_REPORT_CMD      0x03
> > @@ -701,12 +702,7 @@ static int goodix_spi_probe(struct spi_device *spi)
> >                 return dev_err_probe(dev, PTR_ERR(ts->reset_gpio),
> >                                      "failed to request reset gpio\n");
> >
> > -       error = device_property_read_u32(dev, "goodix,hid-report-addr",
> > -                                        &ts->hid_report_addr);
> > -       if (error)
> > -               return dev_err_probe(dev, error,
> > -                                    "failed get hid report addr\n");
> > -
> > +       ts->hid_report_addr = GOODIX_HID_REPORT_ADDR;
> >         error = goodix_dev_confirm(ts);
> >         if (error)
> >                 return error;
> > @@ -790,6 +786,14 @@ static const struct acpi_device_id goodix_spi_acpi_match[] = {
> >  MODULE_DEVICE_TABLE(acpi, goodix_spi_acpi_match);
> >  #endif
> >
> > +#ifdef CONFIG_OF
> > +static const struct of_device_id goodix_spi_of_match[] = {
> > +       { .compatible = "goodix,gt7986u-spifw", },
> > +       { }
> > +};
> > +MODULE_DEVICE_TABLE(of, goodix_spi_of_match);
> > +#endif
> > +
> >  static const struct spi_device_id goodix_spi_ids[] = {
> >         { "gt7986u" },
> >         { },
> > @@ -800,6 +804,7 @@ static struct spi_driver goodix_spi_driver = {
> >         .driver = {
> >                 .name = "goodix-spi-hid",
> >                 .acpi_match_table = ACPI_PTR(goodix_spi_acpi_match),
> > +               .of_match_table = of_match_ptr(goodix_spi_of_match),
> 
> I can never quite remember what the current preference is in regards
> to "OF" tables (whether to use #ifdef like you've done or mark them
> `__maybe_unused`), so maybe someone will request you change it. ...but
> IMO what you have is fine and looks to be properly guarded with
> of_match_ptr(). As far as I'm concerned, this patch looks OK.
> 
> Oh, I guess the one "nit" is that I would have put "spi" in the
> subject, making it "HID: hid-goodix-spi: Add OF supports". It might be
> worth sending a v5 for that (after waiting a day or two) unless a
> maintainer tells you not to.
>

Ack,

> In any case:
> 
> Reviewed-by: Douglas Anderson <dianders@chromium.org>

Thanks,
Charles
Jiri Kosina Nov. 13, 2024, 9:56 a.m. UTC | #3
On Mon, 11 Nov 2024, Doug Anderson wrote:

> Oh, I guess the one "nit" is that I would have put "spi" in the
> subject, making it "HID: hid-goodix-spi: Add OF supports". It might be
> worth sending a v5 for that (after waiting a day or two) unless a
> maintainer tells you not to.

No need to resend v5 just for this, I'll adjust manually while applying.

Thanks,
Jiri Kosina Nov. 13, 2024, 9:57 a.m. UTC | #4
On Mon, 11 Nov 2024, Charles Wang wrote:

> The Goodix GT7986U touch controller report touch data according to the
> HID protocol through the SPI bus. However, it is incompatible with
> Microsoft's HID-over-SPI protocol.
> 
> The patchset introduces the following two changes:
> 1) Add goodix,gt7986u-spifw.yaml.
> 2) Modify the driver to align with the device binding file.
> 
> Signed-off-by: Charles Wang <charles.goodix@gmail.com>
> ---
> Changes in v4:
> - Fix dt build warnings.
> - Modify the driver to align with the device binding file.
> 
> Changes in v3:
> - Split the commit into two patches.
> 
> Changes in v2:
> - Change compatible to 'goodix,gt7986u-spifw'.
> - Remove 'goodix,hid-report-addr' property.
> - Change additionalProperties to unevaluatedProperties.
> - v1: https://lore.kernel.org/all/20241025114642.40793-2-charles.goodix@gmail.com/

Now queued in hid.git#for-6.13/goodix. Thanks,