mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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
					
				
					 1 changed files with 21 additions and 5 deletions
				
			
		| 
						 | 
					@ -12,9 +12,17 @@
 | 
				
			||||||
#include <linux/property.h>
 | 
					#include <linux/property.h>
 | 
				
			||||||
#include <linux/regulator/consumer.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_REG_CHIPID		0x30
 | 
				
			||||||
#define IST3038B_WHOAMI			0x30380b
 | 
					#define IST3038B_WHOAMI			0x30380b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +33,6 @@
 | 
				
			||||||
#define IST3038C_REG_TOUCH_STATUS	(IST3038C_REG_HIB_BASE | IST3038C_HIB_ACCESS)
 | 
					#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_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_REG_INTR_MESSAGE	(IST3038C_REG_HIB_BASE | IST3038C_HIB_ACCESS | 0x4)
 | 
				
			||||||
#define IST3038C_WHOAMI			0x38c
 | 
					 | 
				
			||||||
#define IST3038C_CHIP_ON_DELAY_MS	60
 | 
					#define IST3038C_CHIP_ON_DELAY_MS	60
 | 
				
			||||||
#define IST3038C_I2C_RETRY_COUNT	3
 | 
					#define IST3038C_I2C_RETRY_COUNT	3
 | 
				
			||||||
#define IST3038C_MAX_FINGER_NUM		10
 | 
					#define IST3038C_MAX_FINGER_NUM		10
 | 
				
			||||||
| 
						 | 
					@ -397,9 +404,17 @@ static const struct imagis_properties imagis_3032c_data = {
 | 
				
			||||||
	.protocol_b = true,
 | 
						.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 = {
 | 
					static const struct imagis_properties imagis_3038b_data = {
 | 
				
			||||||
	.interrupt_msg_cmd = IST3038B_REG_STATUS,
 | 
						.interrupt_msg_cmd = IST30XX_REG_STATUS,
 | 
				
			||||||
	.touch_coord_cmd = IST3038B_REG_STATUS,
 | 
						.touch_coord_cmd = IST30XX_REG_STATUS,
 | 
				
			||||||
	.whoami_cmd = IST3038B_REG_CHIPID,
 | 
						.whoami_cmd = IST3038B_REG_CHIPID,
 | 
				
			||||||
	.whoami_val = IST3038B_WHOAMI,
 | 
						.whoami_val = IST3038B_WHOAMI,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -415,6 +430,7 @@ static const struct imagis_properties imagis_3038c_data = {
 | 
				
			||||||
#ifdef CONFIG_OF
 | 
					#ifdef CONFIG_OF
 | 
				
			||||||
static const struct of_device_id imagis_of_match[] = {
 | 
					static const struct of_device_id imagis_of_match[] = {
 | 
				
			||||||
	{ .compatible = "imagis,ist3032c", .data = &imagis_3032c_data },
 | 
						{ .compatible = "imagis,ist3032c", .data = &imagis_3032c_data },
 | 
				
			||||||
 | 
						{ .compatible = "imagis,ist3038", .data = &imagis_3038_data },
 | 
				
			||||||
	{ .compatible = "imagis,ist3038b", .data = &imagis_3038b_data },
 | 
						{ .compatible = "imagis,ist3038b", .data = &imagis_3038b_data },
 | 
				
			||||||
	{ .compatible = "imagis,ist3038c", .data = &imagis_3038c_data },
 | 
						{ .compatible = "imagis,ist3038c", .data = &imagis_3038c_data },
 | 
				
			||||||
	{ },
 | 
						{ },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue