diff --git a/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.c b/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.c index 0500f59da76f..15bfb506e8ea 100644 --- a/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.c +++ b/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.c @@ -686,7 +686,7 @@ info_retry: ts->abs_x_max = (uint16_t)((buf[5] << 8) | buf[6]); ts->abs_y_max = (uint16_t)((buf[7] << 8) | buf[8]); ts->max_button_num = buf[11]; - + ts->fw_type = buf[14]; //---clear x_num, y_num if fw info is broken--- if ((buf[1] + buf[2]) != 0xFF) { NVT_ERR("FW info is broken! fw_ver=0x%02X, ~fw_ver=0x%02X\n", buf[1], buf[2]); @@ -696,6 +696,7 @@ info_retry: ts->abs_x_max = TOUCH_DEFAULT_MAX_WIDTH; ts->abs_y_max = TOUCH_DEFAULT_MAX_HEIGHT; ts->max_button_num = TOUCH_KEY_NUM; + ts->fw_type = 1; if(retry_count < 3) { retry_count++; @@ -1130,6 +1131,22 @@ static int32_t nvt_parse_dt(struct device *dev) } NVT_LOG("novatek,def-max-resolution=%d,%d\n", ts->abs_x_max, ts->abs_y_max); + ret = of_property_read_u32(np, "novatek,def-build-id", &ts->build_id); + if (ret) { + ts->build_id = 0; + NVT_LOG("novatek,build_id undefined.\n"); + } else { + NVT_LOG("novatek,build_id=0x%04X\n", ts->build_id); + } + + ret = of_property_read_u32(np, "novatek,def-config-id", &ts->config_id); + if (ret) { + ts->config_id = 0; + NVT_LOG("novatek,config_id undefined.\n"); + } else { + NVT_LOG("novatek,config_id=0x%04X\n", ts->config_id); + } + ret = of_property_read_u32(np, "novatek,spi-rd-fast-addr", &SPI_RD_FAST_ADDR); if (ret) { NVT_LOG("not support novatek,spi-rd-fast-addr\n"); @@ -1566,6 +1583,7 @@ static int8_t nvt_ts_check_chip_ver_trim(void) ts->mmap = trim_id_table[list].mmap; ts->carrier_system = trim_id_table[list].hwinfo->carrier_system; ts->hw_crc = trim_id_table[list].hwinfo->hw_crc; + strncpy(ts->product_id, trim_id_table[list].trim_id, 10); ret = 0; goto out; } else { @@ -1697,9 +1715,22 @@ static ssize_t vendor_show(struct device *dev, return scnprintf(buf, PAGE_SIZE, "novatek_ts"); } +static ssize_t ic_ver_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int buildid; + + buildid = ts->fw_ver << 8 | ts->fw_type; + return scnprintf(buf, PAGE_SIZE, "%s%s\n%s%04x\n%s%04x\n", + "Product ID: ", ts->product_id, + "Build ID: ", buildid ? buildid : ts->build_id, + "Config ID: ", ts->nvt_pid ? ts->nvt_pid : ts->config_id); +} + static struct device_attribute touchscreen_attributes[] = { __ATTR_RO(path), __ATTR_RO(vendor), + __ATTR_RO(ic_ver), __ATTR_NULL }; diff --git a/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.h b/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.h index 43270b19a358..5808ec93cab4 100644 --- a/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.h +++ b/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.h @@ -196,6 +196,10 @@ struct nvt_ts_data { struct mutex state_mutex; struct nvt_sensor_platform_data *sensor_pdata; #endif + char product_id[10]; + uint8_t fw_type; + uint32_t build_id; + uint32_t config_id; }; #if NVT_TOUCH_PROC diff --git a/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx_mem_map.h b/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx_mem_map.h index c74be7a94d81..95554dd2cd29 100644 --- a/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx_mem_map.h +++ b/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx_mem_map.h @@ -246,6 +246,7 @@ static struct nvt_ts_hw_info NT36676F_hw_info = { #define NVT_ID_BYTE_MAX 6 struct nvt_ts_trim_id_table { + char trim_id[10]; uint8_t id[NVT_ID_BYTE_MAX]; uint8_t mask[NVT_ID_BYTE_MAX]; const struct nvt_ts_mem_map *mmap; @@ -253,48 +254,48 @@ struct nvt_ts_trim_id_table { }; static const struct nvt_ts_trim_id_table trim_id_table[] = { - {.id = {0x0C, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, + {.trim_id = "NT36672C",.id = {0x0C, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, .mmap = &NT36675_memory_map, .hwinfo = &NT36675_hw_info}, - {.id = {0xFF, 0xFF, 0xFF, 0x26, 0x65, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, + {.trim_id = "NT36526",.id = {0xFF, 0xFF, 0xFF, 0x26, 0x65, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, .mmap = &NT36526_memory_map, .hwinfo = &NT36526_hw_info}, - {.id = {0xFF, 0xFF, 0xFF, 0x75, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, + {.trim_id = "NT36675",.id = {0xFF, 0xFF, 0xFF, 0x75, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, .mmap = &NT36675_memory_map, .hwinfo = &NT36675_hw_info}, - {.id = {0x0B, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, + {.trim_id = "NT36672A",.id = {0x0B, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, - {.id = {0x0B, 0xFF, 0xFF, 0x82, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, + {.trim_id = "NT36672A",.id = {0x0B, 0xFF, 0xFF, 0x82, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, - {.id = {0x0B, 0xFF, 0xFF, 0x25, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, + {.trim_id = "NT36525B",.id = {0x0B, 0xFF, 0xFF, 0x25, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, - {.id = {0x0A, 0xFF, 0xFF, 0x72, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, + {.trim_id = "NT36672A",.id = {0x0A, 0xFF, 0xFF, 0x72, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, - {.id = {0x0A, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, + {.trim_id = "NT36672A",.id = {0x0A, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, - {.id = {0x0A, 0xFF, 0xFF, 0x82, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, + {.trim_id = "NT36672A",.id = {0x0A, 0xFF, 0xFF, 0x82, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, - {.id = {0x0A, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, + {.trim_id = "NT36672A",.id = {0x0A, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, - {.id = {0x0B, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, + {.trim_id = "NT36672A",.id = {0x0B, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, - {.id = {0x0A, 0xFF, 0xFF, 0x72, 0x67, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, + {.trim_id = "NT36672A",.id = {0x0A, 0xFF, 0xFF, 0x72, 0x67, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, - {.id = {0x55, 0x00, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, + {.trim_id = "NT36772",.id = {0x55, 0x00, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, - {.id = {0x55, 0x72, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, + {.trim_id = "NT36772",.id = {0x55, 0x72, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, - {.id = {0xAA, 0x00, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, + {.trim_id = "NT36772",.id = {0xAA, 0x00, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, - {.id = {0xAA, 0x72, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, + {.trim_id = "NT36772",.id = {0xAA, 0x72, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, - {.id = {0xFF, 0xFF, 0xFF, 0x72, 0x67, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, + {.trim_id = "NT36772",.id = {0xFF, 0xFF, 0xFF, 0x72, 0x67, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, - {.id = {0xFF, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, + {.trim_id = "NT36772",.id = {0xFF, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, - {.id = {0xFF, 0xFF, 0xFF, 0x70, 0x67, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, + {.trim_id = "NT36772",.id = {0xFF, 0xFF, 0xFF, 0x70, 0x67, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, - {.id = {0xFF, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, + {.trim_id = "NT36772",.id = {0xFF, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, - {.id = {0xFF, 0xFF, 0xFF, 0x25, 0x65, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, + {.trim_id = "NT36525",.id = {0xFF, 0xFF, 0xFF, 0x25, 0x65, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, .mmap = &NT36525_memory_map, .hwinfo = &NT36525_hw_info}, - {.id = {0xFF, 0xFF, 0xFF, 0x76, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, + {.trim_id = "NT36676F",.id = {0xFF, 0xFF, 0xFF, 0x76, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, .mmap = &NT36676F_memory_map, .hwinfo = &NT36676F_hw_info} };