Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b6d82b4 authored by Chun Zhang's avatar Chun Zhang
Browse files

input: atmel_mxt_ts: Add support for new object



Atmel vendor may release firmware with new objects. New firmware requires
a matched number of objects and object lengths from device tree. Adding in
new objects and object length check to make sure platform data will always
match firmware information.

Change-Id: I96cfdf7d5c459a75410c6f2882370539aa86ee0e
Signed-off-by: default avatarChun Zhang <chunz@codeaurora.org>
parent abedad47
Loading
Loading
Loading
Loading
+171 −48
Original line number Diff line number Diff line
@@ -497,6 +497,7 @@
		atmel,i2c-pull-up;
		atmel,no-force-update;
		atmel,no-lpm-support;
		atmel,bl-addr = <0x26>;
		atmel,cfg_1 {
			atmel,family-id = <0xa2>;
			atmel,variant-id = <0x00>;
@@ -506,27 +507,41 @@
				/* Object 6, Instance = 0 */
				00 00 00 00 00 00
				/* Object 38, Instance = 0 */
				21 01 00 19 09 0D 00 00 00 00
				21 02 00 18 0A 0D 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00
				/* Object 7, Instance = 0 */
				FF FF FF 00
				/* Object 8, Instance = 0 */
				64 00 14 00 00 00 00 00 00 00
				/* Object 9, Instance = 0 */
				83 00 00 20 34 00 A5 3C 08 07
				00 00 00 00 0A 00 00 00 A0 05
				00 0A 03 07 0A 00 08 14 1A 0D
				00 0A 00 00 0A 00
				/* Object 9, Instance = 1 */
				/* Object 71, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00
				/* Object 7, Instance = 0 */
				21 08 32 42
				/* Object 8, Instance = 0 */
				46 00 14 00 00 00 00 0A 32 19
				/* Object 9, Instance = 0 */
				83 00 00 20 34 00 AF 4B 01 07
				0A 14 07 00 0A 05 0A 00 A0 05
				00 0A 03 07 04 00 08 14 1A 0D
				05 06 00 00 01 00 00 00 00 00
				00 00 00 00 00 00 00
				/* Object 15, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00
@@ -537,65 +552,162 @@
				/* Object 24, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00
				/* Object 24, Instance = 1 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00
				/* Object 25, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00
				01 00 00 00 00 00 00 00 00 00
				00 00 00 00 C8 00 00 00 00 00
				00
				/* Object 27, Instance = 0 */
				00 00 00 00 00 00 00
				/* Object 27, Instance = 1 */
				00 00 00 00 00 00 00
				/* Object 40, Instance = 0 */
				00 00 00 00 00
				/* Object 40, Instance = 1 */
				00 00 00 00 00
				/* Object 42, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				/* Object 42, Instance = 1 */
				00 00 00 00 00 00 00 00 00 00
				21 14 26 1C 80 00 00 00 00 00
				00 04 00
				/* Object 43, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				08 00 91 00 01 01 80 00 00 00
				00 00
				/* Object 46, Instance = 0 */
				00 00 10 10 00 00 00 00 00 00
				04
				00 00 18 1C 00 00 01 00 00 1F
				05
				/* Object 47, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00
				/* Object 47, Instance = 1 */
				00 00 00 00 00 00 00 00
				/* Object 55, Instance = 0 */
				01 40 14 0A 10 00 00
				/* Object 56, Instance = 0 */
				01 00 01 19 0D 0D 0D 0D 0D 0D
				0D 0D 0E 0E 0E 0E 0E 0E 0E 0E
				0F 0F 0F 0F 0F 0F 0F 0F 0F 0F
				0F 0F 0F 0F 0F 0F 00 00 01 02
				06 04 00 00 00 00 00 00 00 00
				00
				/* Object 57, Instance = 0 */
				00 00 00
				/* Object 61, Instance = 0 */
				00 00 00 00 00
				/* Object 62, Instance = 0 */
				7D 22 40 1A 00 07 00 00 00 00
				02 03 05 07 05 00 0A 05 05 AF
				1E 1E 34 02 64 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00
				/* Object 55, Instance = 0 */
				00 00 00 00 00 00 00
				/* Object 55, Instance = 1 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00
				/* Object 63, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00
				/* Object 65, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00
				/* Object 56, Instance = 0 */
				/* Object 66, Instance = 0 */
				00 00 00
				/* Object 70, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				/* Object 73, Instance = 0 */
				00 00 00 00 00 00
				/* Object 77, Instance = 0 */
				00 00 00 00
				/* Object 79, Instance = 0 */
				00 00 00
				];
		};
		atmel,cfg_2 {
			atmel,fw-name = "atmel_8084_liquid_v2_0_AB.hex";
			atmel,bootldr-id = <0x14>;
			atmel,family-id = <0xa2>;
			atmel,variant-id = <0x00>;
			atmel,version = <0x20>;
			atmel,build = <0xaa>;
			atmel,config = [
				/* Object 6, Instance = 0 */
				00 00 00 00 00 00
				/* Object 38, Instance = 0 */
				21 02 00 18 0A 0D 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00
				/* Object 71, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00
				/* Object 7, Instance = 0 */
				21 08 32 42
				/* Object 8, Instance = 0 */
				46 00 14 00 00 00 00 0A 32 19
				/* Object 9, Instance = 0 */
				83 00 00 20 34 00 AF 4B 01 07
				0A 14 07 00 0A 05 0A 00 A0 05
				00 0A 03 07 04 00 08 14 1A 0D
				05 06 00 00 01 00 00 00 00 00
				00 00 00 00 00 00 00
				/* Object 15, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00
				/* Object 18, Instance = 0 */
				00 00
				/* Object 19, Instance = 0 */
				00 00 00 00 00 00
				/* Object 24, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00
				/* Object 25, Instance = 0 */
				01 00 00 00 00 00 00 00 00 00
				00 00 00 00 C8 00 00 00 00 00
				00
				/* Object 27, Instance = 0 */
				00 00 00 00 00 00 00
				/* Object 40, Instance = 0 */
				00 00 00 00 00
				/* Object 42, Instance = 0 */
				21 14 26 1C 80 00 00 00 00 00
				00 04 00
				/* Object 43, Instance = 0 */
				08 00 91 00 01 01 80 00 00 00
				00 00
				/* Object 46, Instance = 0 */
				00 00 18 1C 00 00 01 00 00 1F
				05
				/* Object 47, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00
				/* Object 55, Instance = 0 */
				01 40 14 0A 10 00 00
				/* Object 56, Instance = 0 */
				01 00 01 19 0D 0D 0D 0D 0D 0D
				0D 0D 0E 0E 0E 0E 0E 0E 0E 0E
				0F 0F 0F 0F 0F 0F 0F 0F 0F 0F
				0F 0F 0F 0F 0F 0F 00 00 01 02
				06 04 00 00 00 00 00 00 00 00
				00
				/* Object 57, Instance = 0 */
				00 00 00
				/* Object 57, Instance = 1 */
				00 00 00
				/* Object 61, Instance = 0 */
				00 00 00 00 00
				/* Object 61, Instance = 1 */
				00 00 00 00 00
				/* Object 61, Instance = 2 */
				00 00 00 00 00
				/* Object 61, Instance = 3 */
				00 00 00 00 00
				/* Object 62, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				7D 22 40 1A 00 07 00 00 00 00
				02 03 05 07 05 00 0A 05 05 AF
				1E 1E 34 02 64 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00 00 00 00
@@ -603,10 +715,21 @@
				00 00 00 00
				/* Object 63, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00
				/* Object 63, Instance = 1 */
				00 00 00 00 00 00 00 00 00 00
				00 00
				00 00 00 00 00
				/* Object 65, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				00 00 00 00 00 00 00
				/* Object 66, Instance = 0 */
				00 00 00
				/* Object 70, Instance = 0 */
				00 00 00 00 00 00 00 00 00 00
				/* Object 73, Instance = 0 */
				00 00 00 00 00 00
				/* Object 77, Instance = 0 */
				00 00 00 00
				/* Object 79, Instance = 0 */
				00 00 00
				];
		};
	};
+36 −7
Original line number Diff line number Diff line
@@ -110,7 +110,6 @@ enum mxt_device_state { INIT, APPMODE, BOOTLOADER };
#define MXT_TOUCH_PROXKEY_T52		52
#define MXT_PROCI_GRIPFACE_T20		20
#define MXT_PROCG_NOISE_T22		22
#define MXT_PROCG_NOISE_T62		62
#define MXT_PROCI_ONETOUCH_T24		24
#define MXT_PROCI_TWOTOUCH_T27		27
#define MXT_PROCI_GRIP_T40		40
@@ -121,6 +120,10 @@ enum mxt_device_state { INIT, APPMODE, BOOTLOADER };
#define MXT_PROCI_SHIELDLESS_T56	56
#define MXT_PROCI_EXTRATSDATA_T57	57
#define MXT_PROCG_NOISESUPPRESSION_T48	48
#define MXT_PROCG_NOISE_T62		62
#define MXT_PROCI_ACTIVESTYLUS_T63	63
#define MXT_PROCI_LENSBENDING_T65	65
#define MXT_PROCI_ZONEINDICATION_T73	73
#define MXT_SPT_COMMSCONFIG_T18		18
#define MXT_SPT_GPIOPWM_T19		19
#define MXT_SPT_SELFTEST_T25		25
@@ -131,6 +134,11 @@ enum mxt_device_state { INIT, APPMODE, BOOTLOADER };
#define MXT_SPT_CTECONFIG_T46		46
#define MXT_SPT_EXTRANOISESUPCTRLS_T58	58
#define MXT_SPT_TIMER_T61		61
#define MXT_SPT_GOLDENREFERENCES_T66	66
#define MXT_SPT_DYNAMICCONFIGURATIONCONTROLLER_T70	70
#define MXT_SPT_DYNAMICCONFIGURATIONCONTAINER_T71	71
#define MXT_SPT_CTESCANCONFIG_T77	77
#define MXT_SPT_TOUCHEVENTTRIGGER_T79	79

/* MXT_GEN_COMMAND_T6 field */
#define MXT_COMMAND_RESET	0
@@ -421,16 +429,20 @@ static bool mxt_object_readable(unsigned int type)
	case MXT_TOUCH_PROXKEY_T52:
	case MXT_PROCI_GRIPFACE_T20:
	case MXT_PROCG_NOISE_T22:
	case MXT_PROCG_NOISE_T62:
	case MXT_PROCI_ONETOUCH_T24:
	case MXT_PROCI_TWOTOUCH_T27:
	case MXT_PROCI_GRIP_T40:
	case MXT_PROCI_PALM_T41:
	case MXT_PROCI_TOUCHSUPPRESSION_T42:
	case MXT_PROCI_STYLUS_T47:
	case MXT_PROCG_NOISESUPPRESSION_T48:
	case MXT_PROCI_ADAPTIVETHRESHOLD_T55:
	case MXT_PROCI_SHIELDLESS_T56:
	case MXT_PROCI_EXTRATSDATA_T57:
	case MXT_PROCG_NOISESUPPRESSION_T48:
	case MXT_PROCG_NOISE_T62:
	case MXT_PROCI_ACTIVESTYLUS_T63:
	case MXT_PROCI_LENSBENDING_T65:
	case MXT_PROCI_ZONEINDICATION_T73:
	case MXT_SPT_COMMSCONFIG_T18:
	case MXT_SPT_GPIOPWM_T19:
	case MXT_SPT_SELFTEST_T25:
@@ -440,7 +452,11 @@ static bool mxt_object_readable(unsigned int type)
	case MXT_SPT_CTECONFIG_T46:
	case MXT_SPT_EXTRANOISESUPCTRLS_T58:
	case MXT_SPT_TIMER_T61:
	case MXT_PROCI_ADAPTIVETHRESHOLD_T55:
	case MXT_SPT_GOLDENREFERENCES_T66:
	case MXT_SPT_DYNAMICCONFIGURATIONCONTROLLER_T70:
	case MXT_SPT_DYNAMICCONFIGURATIONCONTAINER_T71:
	case MXT_SPT_CTESCANCONFIG_T77:
	case MXT_SPT_TOUCHEVENTTRIGGER_T79:
		return true;
	default:
		return false;
@@ -459,16 +475,20 @@ static bool mxt_object_writable(unsigned int type)
	case MXT_TOUCH_PROXKEY_T52:
	case MXT_PROCI_GRIPFACE_T20:
	case MXT_PROCG_NOISE_T22:
	case MXT_PROCG_NOISE_T62:
	case MXT_PROCI_ONETOUCH_T24:
	case MXT_PROCI_TWOTOUCH_T27:
	case MXT_PROCI_GRIP_T40:
	case MXT_PROCI_PALM_T41:
	case MXT_PROCI_TOUCHSUPPRESSION_T42:
	case MXT_PROCI_STYLUS_T47:
	case MXT_PROCG_NOISESUPPRESSION_T48:
	case MXT_PROCI_ADAPTIVETHRESHOLD_T55:
	case MXT_PROCI_SHIELDLESS_T56:
	case MXT_PROCI_EXTRATSDATA_T57:
	case MXT_PROCG_NOISESUPPRESSION_T48:
	case MXT_PROCG_NOISE_T62:
	case MXT_PROCI_ACTIVESTYLUS_T63:
	case MXT_PROCI_LENSBENDING_T65:
	case MXT_PROCI_ZONEINDICATION_T73:
	case MXT_SPT_COMMSCONFIG_T18:
	case MXT_SPT_GPIOPWM_T19:
	case MXT_SPT_SELFTEST_T25:
@@ -478,7 +498,11 @@ static bool mxt_object_writable(unsigned int type)
	case MXT_SPT_CTECONFIG_T46:
	case MXT_SPT_EXTRANOISESUPCTRLS_T58:
	case MXT_SPT_TIMER_T61:
	case MXT_PROCI_ADAPTIVETHRESHOLD_T55:
	case MXT_SPT_GOLDENREFERENCES_T66:
	case MXT_SPT_DYNAMICCONFIGURATIONCONTROLLER_T70:
	case MXT_SPT_DYNAMICCONFIGURATIONCONTAINER_T71:
	case MXT_SPT_CTESCANCONFIG_T77:
	case MXT_SPT_TOUCHEVENTTRIGGER_T79:
		return true;
	default:
		return false;
@@ -1104,6 +1128,11 @@ static int mxt_check_reg_init(struct mxt_data *data)
		index += object->size + 1;
	}

	if (index != config_info->config_length) {
		dev_err(dev, "Config length does not match fw\n");
		return -EINVAL;
	}

	return 0;
}