Commit 1e48ee99 authored by Raymond Hackley's avatar Raymond Hackley Committed by Dmitry Torokhov
Browse files

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: default avatarRaymond Hackley <raymondhackley@protonmail.com>
Link: https://lore.kernel.org/r/20240613025631.5425-4-raymondhackley@protonmail.com


Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 72d45b66
Loading
Loading
Loading
Loading
+20 −4
Original line number Diff line number Diff line
@@ -12,9 +12,17 @@
#include <linux/property.h>
#include <linux/regulator/consumer.h>

#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 },
	{ },