Input: imagis - add supports for Imagis IST3038

Imagis IST3038 is another variant of Imagis IST3038 IC, which has
a different register interface from IST3038C (possibly firmware defined).

Unlike IST3038C/IST3032C, IST3038 has different registers for commands,
which means IST3038 doesn't use protocol B.
Similar to IST3032C and maybe the other variants, IST3038 has touch keys
support, which provides KEY_APPSELECT and KEY_BACK.

Add support for IST3038 with touch keys.

Signed-off-by: Raymond Hackley <raymondhackley@protonmail.com>
Link: https://lore.kernel.org/r/20240613025631.5425-4-raymondhackley@protonmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
Raymond Hackley 2024-06-13 02:57:11 +00:00 committed by Dmitry Torokhov
parent 72d45b6658
commit 1e48ee99f6

View File

@ -12,9 +12,17 @@
#include <linux/property.h>
#include <linux/regulator/consumer.h>
#define IST3032C_WHOAMI 0x32c
#define IST30XX_REG_STATUS 0x20
#define IST30XX_REG_CHIPID (0x40000000 | IST3038C_DIRECT_ACCESS)
#define IST30XX_WHOAMI 0x30003000
#define IST30XXA_WHOAMI 0x300a300a
#define IST30XXB_WHOAMI 0x300b300b
#define IST3038_WHOAMI 0x30383038
#define IST3032C_WHOAMI 0x32c
#define IST3038C_WHOAMI 0x38c
#define IST3038B_REG_STATUS 0x20
#define IST3038B_REG_CHIPID 0x30
#define IST3038B_WHOAMI 0x30380b
@ -25,7 +33,6 @@
#define IST3038C_REG_TOUCH_STATUS (IST3038C_REG_HIB_BASE | IST3038C_HIB_ACCESS)
#define IST3038C_REG_TOUCH_COORD (IST3038C_REG_HIB_BASE | IST3038C_HIB_ACCESS | 0x8)
#define IST3038C_REG_INTR_MESSAGE (IST3038C_REG_HIB_BASE | IST3038C_HIB_ACCESS | 0x4)
#define IST3038C_WHOAMI 0x38c
#define IST3038C_CHIP_ON_DELAY_MS 60
#define IST3038C_I2C_RETRY_COUNT 3
#define IST3038C_MAX_FINGER_NUM 10
@ -397,9 +404,17 @@ static const struct imagis_properties imagis_3032c_data = {
.protocol_b = true,
};
static const struct imagis_properties imagis_3038_data = {
.interrupt_msg_cmd = IST30XX_REG_STATUS,
.touch_coord_cmd = IST30XX_REG_STATUS,
.whoami_cmd = IST30XX_REG_CHIPID,
.whoami_val = IST3038_WHOAMI,
.touch_keys_supported = true,
};
static const struct imagis_properties imagis_3038b_data = {
.interrupt_msg_cmd = IST3038B_REG_STATUS,
.touch_coord_cmd = IST3038B_REG_STATUS,
.interrupt_msg_cmd = IST30XX_REG_STATUS,
.touch_coord_cmd = IST30XX_REG_STATUS,
.whoami_cmd = IST3038B_REG_CHIPID,
.whoami_val = IST3038B_WHOAMI,
};
@ -415,6 +430,7 @@ static const struct imagis_properties imagis_3038c_data = {
#ifdef CONFIG_OF
static const struct of_device_id imagis_of_match[] = {
{ .compatible = "imagis,ist3032c", .data = &imagis_3032c_data },
{ .compatible = "imagis,ist3038", .data = &imagis_3038_data },
{ .compatible = "imagis,ist3038b", .data = &imagis_3038b_data },
{ .compatible = "imagis,ist3038c", .data = &imagis_3038c_data },
{ },