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:
parent
72d45b6658
commit
1e48ee99f6
@ -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 },
|
||||
{ },
|
||||
|
Loading…
Reference in New Issue
Block a user