2020-02-27 16:09:24

by Icenowy Zheng

[permalink] [raw]
Subject: [PATCH v2 0/3] Add support for Goodix GT917S touch controller

This patchset introduces support for Goodix GT917S touch controller.

The major difference with other touch controllers from Goodix is that
the ID string is no longer number-only (it contains a 'S'), so an
additional patch is introduced for migrating the ID to a string.

Icenowy Zheng (3):
dt-bindings: input: touchscreen: add compatible string for Goodix
GT917S
Input: goodix - use string-based chip ID
Input: goodix - Add support for Goodix GT917S

.../bindings/input/touchscreen/goodix.yaml | 1 +
drivers/input/touchscreen/goodix.c | 63 +++++++++++--------
2 files changed, 38 insertions(+), 26 deletions(-)

--
2.24.1


2020-02-27 16:11:19

by Icenowy Zheng

[permalink] [raw]
Subject: [PATCH v2 1/3] dt-bindings: input: touchscreen: add compatible string for Goodix GT917S

Goodix GT917S is a new touchscreen chip from Goodix.

Add its compatible string to the device tree binding.

Signed-off-by: Icenowy Zheng <[email protected]>
Acked-by: Rob Herring <[email protected]>
---
Changes in v2:
- Adapted for the new YAML-based binding.
- Added Rob's ACK.

Documentation/devicetree/bindings/input/touchscreen/goodix.yaml | 1 +
1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/input/touchscreen/goodix.yaml b/Documentation/devicetree/bindings/input/touchscreen/goodix.yaml
index d7c3262b2494..109e5ca8d6e8 100644
--- a/Documentation/devicetree/bindings/input/touchscreen/goodix.yaml
+++ b/Documentation/devicetree/bindings/input/touchscreen/goodix.yaml
@@ -21,6 +21,7 @@ properties:
- goodix,gt911
- goodix,gt9110
- goodix,gt912
+ - goodix,gt917s
- goodix,gt927
- goodix,gt9271
- goodix,gt928
--
2.24.1

2020-02-27 16:11:26

by Icenowy Zheng

[permalink] [raw]
Subject: [PATCH v2 2/3] Input: goodix - use string-based chip ID

For Goodix GT917S chip, the chip ID string is "917S", which contains not
only numbers now.

Use string-based chip ID in the driver to support this chip and further
chips with alphanumber ID.

Signed-off-by: Icenowy Zheng <[email protected]>
---
Changes in v2:
- Used a table to save ID and chip data info.
- Use strscpy().

drivers/input/touchscreen/goodix.c | 61 +++++++++++++++++-------------
1 file changed, 35 insertions(+), 26 deletions(-)

diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c
index 0403102e807e..dde85b894ca4 100644
--- a/drivers/input/touchscreen/goodix.c
+++ b/drivers/input/touchscreen/goodix.c
@@ -37,6 +37,11 @@ struct goodix_chip_data {
int (*check_config)(struct goodix_ts_data *, const struct firmware *);
};

+struct goodix_chip_id {
+ const char *id;
+ const struct goodix_chip_data *data;
+};
+
struct goodix_ts_data {
struct i2c_client *client;
struct input_dev *input_dev;
@@ -48,7 +53,7 @@ struct goodix_ts_data {
struct regulator *vddio;
struct gpio_desc *gpiod_int;
struct gpio_desc *gpiod_rst;
- u16 id;
+ char id[5];
u16 version;
const char *cfg_name;
struct completion firmware_loading_complete;
@@ -115,6 +120,22 @@ static const struct goodix_chip_data gt9x_chip_data = {
.check_config = goodix_check_cfg_8,
};

+static const struct goodix_chip_id goodix_chip_ids[] = {
+ { .id = "1151", .data = &gt1x_chip_data },
+ { .id = "5663", .data = &gt1x_chip_data },
+ { .id = "5688", .data = &gt1x_chip_data },
+
+ { .id = "911", .data = &gt911_chip_data },
+ { .id = "9271", .data = &gt911_chip_data },
+ { .id = "9110", .data = &gt911_chip_data },
+ { .id = "927", .data = &gt911_chip_data },
+ { .id = "928", .data = &gt911_chip_data },
+
+ { .id = "912", .data = &gt967_chip_data },
+ { .id = "967", .data = &gt967_chip_data },
+ { }
+};
+
static const unsigned long goodix_irq_flags[] = {
IRQ_TYPE_EDGE_RISING,
IRQ_TYPE_EDGE_FALLING,
@@ -235,28 +256,16 @@ static int goodix_i2c_write_u8(struct i2c_client *client, u16 reg, u8 value)
return goodix_i2c_write(client, reg, &value, sizeof(value));
}

-static const struct goodix_chip_data *goodix_get_chip_data(u16 id)
+static const struct goodix_chip_data *goodix_get_chip_data(const char *id)
{
- switch (id) {
- case 1151:
- case 5663:
- case 5688:
- return &gt1x_chip_data;
-
- case 911:
- case 9271:
- case 9110:
- case 927:
- case 928:
- return &gt911_chip_data;
-
- case 912:
- case 967:
- return &gt967_chip_data;
-
- default:
- return &gt9x_chip_data;
+ unsigned int i;
+
+ for (i = 0; goodix_chip_ids[i].id; i++) {
+ if (!strcmp(goodix_chip_ids[i].id, id))
+ return goodix_chip_ids[i].data;
}
+
+ return &gt9x_chip_data;
}

static int goodix_ts_read_input_report(struct goodix_ts_data *ts, u8 *data)
@@ -673,12 +682,11 @@ static int goodix_read_version(struct goodix_ts_data *ts)

memcpy(id_str, buf, 4);
id_str[4] = 0;
- if (kstrtou16(id_str, 10, &ts->id))
- ts->id = 0x1001;
+ strscpy(ts->id, id_str, 5);

ts->version = get_unaligned_le16(&buf[4]);

- dev_info(&ts->client->dev, "ID %d, version: %04x\n", ts->id,
+ dev_info(&ts->client->dev, "ID %s, version: %04x\n", ts->id,
ts->version);

return 0;
@@ -736,7 +744,8 @@ static int goodix_configure_dev(struct goodix_ts_data *ts)
ts->input_dev->phys = "input/ts";
ts->input_dev->id.bustype = BUS_I2C;
ts->input_dev->id.vendor = 0x0416;
- ts->input_dev->id.product = ts->id;
+ if (kstrtou16(ts->id, 10, &ts->input_dev->id.product))
+ ts->input_dev->id.product = 0x1001;
ts->input_dev->id.version = ts->version;

/* Capacitive Windows/Home button on some devices */
@@ -915,7 +924,7 @@ static int goodix_ts_probe(struct i2c_client *client,
if (ts->gpiod_int && ts->gpiod_rst) {
/* update device config */
ts->cfg_name = devm_kasprintf(&client->dev, GFP_KERNEL,
- "goodix_%d_cfg.bin", ts->id);
+ "goodix_%s_cfg.bin", ts->id);
if (!ts->cfg_name)
return -ENOMEM;

--
2.24.1

2020-02-27 17:52:05

by Bastien Nocera

[permalink] [raw]
Subject: Re: [PATCH v2 2/3] Input: goodix - use string-based chip ID

On Fri, 2020-02-28 at 00:08 +0800, Icenowy Zheng wrote:
> For Goodix GT917S chip, the chip ID string is "917S", which contains
> not
> only numbers now.
>
> Use string-based chip ID in the driver to support this chip and
> further
> chips with alphanumber ID.
>
> Signed-off-by: Icenowy Zheng <[email protected]>
> ---
> Changes in v2:
> - Used a table to save ID and chip data info.
> - Use strscpy().
>
> drivers/input/touchscreen/goodix.c | 61 +++++++++++++++++-----------
> --
> 1 file changed, 35 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/input/touchscreen/goodix.c
> b/drivers/input/touchscreen/goodix.c
> index 0403102e807e..dde85b894ca4 100644
> --- a/drivers/input/touchscreen/goodix.c
> +++ b/drivers/input/touchscreen/goodix.c
> @@ -37,6 +37,11 @@ struct goodix_chip_data {
> int (*check_config)(struct goodix_ts_data *, const struct
> firmware *);
> };
>
> +struct goodix_chip_id {
> + const char *id;
> + const struct goodix_chip_data *data;
> +};
> +
> struct goodix_ts_data {
> struct i2c_client *client;
> struct input_dev *input_dev;
> @@ -48,7 +53,7 @@ struct goodix_ts_data {
> struct regulator *vddio;
> struct gpio_desc *gpiod_int;
> struct gpio_desc *gpiod_rst;
> - u16 id;
> + char id[5];

Could you please change this "5" into a constant (#define) to make sure
that...
<snip>
> + strscpy(ts->id, id_str, 5);

...we copy the same length here. Otherwise you can be certain it's
going to cause problems in the future.

2020-02-27 17:52:20

by Bastien Nocera

[permalink] [raw]
Subject: Re: [PATCH v2 0/3] Add support for Goodix GT917S touch controller

On Fri, 2020-02-28 at 00:07 +0800, Icenowy Zheng wrote:
> This patchset introduces support for Goodix GT917S touch controller.
>
> The major difference with other touch controllers from Goodix is that
> the ID string is no longer number-only (it contains a 'S'), so an
> additional patch is introduced for migrating the ID to a string.
>
> Icenowy Zheng (3):
> dt-bindings: input: touchscreen: add compatible string for Goodix
> GT917S
> Input: goodix - use string-based chip ID

I'd put the dt-bindings patch after this change, but I don't think it
matters much in this case.

> Input: goodix - Add support for Goodix GT917S

I didn't receive that last patch, whether on my address or the linux-
input@ list.

Cheers

2020-02-28 00:46:18

by Icenowy Zheng

[permalink] [raw]
Subject: Re: [PATCH v2 0/3] Add support for Goodix GT917S touch controller



于 2020年2月28日 GMT+08:00 上午1:51:54, Bastien Nocera <[email protected]> 写到:
>On Fri, 2020-02-28 at 00:07 +0800, Icenowy Zheng wrote:
>> This patchset introduces support for Goodix GT917S touch controller.
>>
>> The major difference with other touch controllers from Goodix is that
>> the ID string is no longer number-only (it contains a 'S'), so an
>> additional patch is introduced for migrating the ID to a string.
>>
>> Icenowy Zheng (3):
>> dt-bindings: input: touchscreen: add compatible string for Goodix
>> GT917S
>> Input: goodix - use string-based chip ID
>
>I'd put the dt-bindings patch after this change, but I don't think it
>matters much in this case.
>
>> Input: goodix - Add support for Goodix GT917S
>
>I didn't receive that last patch, whether on my address or the linux-
>input@ list.

My ISP works poorly recently and it's never sent.

I will sent v3 now including it.

>
>Cheers

--
使用 K-9 Mail 发送自我的Android设备。