diff options
author | Wendly Li <wendlyli@google.com> | 2022-09-06 15:50:57 +0000 |
---|---|---|
committer | Wendly Li <wendlyli@google.com> | 2022-09-12 05:16:37 +0000 |
commit | 56736144d2526262a689ebdd6e4c8a4b6194bb22 (patch) | |
tree | d71ebd05fd5f8f3eb70d5249ef8ffae8e4488163 /goodix_ts_core.c | |
parent | 95b57280ad938e7916da9af53985cac9f3cb9787 (diff) | |
download | goodix_touch-56736144d2526262a689ebdd6e4c8a4b6194bb22.tar.gz |
touch/goodix: Support updating different fw and cfg by display ID
Bug: 245261386
Test: Check the driver updates the correct fw and cfg
Change-Id: I04e1ad0108f4a4361f5b270eb7c5575f5dad211a
Signed-off-by: Wendly Li <wendlyli@google.com>
Diffstat (limited to 'goodix_ts_core.c')
-rw-r--r-- | goodix_ts_core.c | 84 |
1 files changed, 62 insertions, 22 deletions
diff --git a/goodix_ts_core.c b/goodix_ts_core.c index 759a981..3113018 100644 --- a/goodix_ts_core.c +++ b/goodix_ts_core.c @@ -1263,6 +1263,10 @@ static int goodix_parse_dt( { const char *name_tmp; int r; + int index; + struct of_phandle_args panelmap; + struct drm_panel *panel = NULL; + const char *name; if (!board_data) { ts_err("invalid board data"); @@ -1336,30 +1340,66 @@ static int goodix_parse_dt( sizeof(board_data->iovdd_name)); } - /* get firmware file name */ - r = of_property_read_string(node, "goodix,firmware-name", &name_tmp); - if (!r) { - ts_info("firmware name from dt: %s", name_tmp); - strncpy(board_data->fw_name, name_tmp, - sizeof(board_data->fw_name)); - } else { - ts_info("can't find firmware name, use default: %s", - TS_DEFAULT_FIRMWARE); - strncpy(board_data->fw_name, TS_DEFAULT_FIRMWARE, - sizeof(board_data->fw_name)); - } + if (of_property_read_bool(node, "goodix,panel_map")) { + for (index = 0;; index++) { + r = of_parse_phandle_with_fixed_args( + node, "goodix,panel_map", 0, index, &panelmap); + if (r) + return -EPROBE_DEFER; + panel = of_drm_find_panel(panelmap.np); + of_node_put(panelmap.np); + if (!IS_ERR_OR_NULL(panel)) { + r = of_property_read_string_index(node, + "goodix,firmware_names", panelmap.args[0], &name); + if (r < 0) + name = TS_DEFAULT_FIRMWARE; + + strncpy(board_data->fw_name, name, + sizeof(board_data->fw_name)); + ts_info("Firmware name %s", + board_data->fw_name); + + r = of_property_read_string_index(node, + "goodix,config_names", panelmap.args[0], &name); + if (r < 0) + name = TS_DEFAULT_CFG_BIN; + + strncpy(board_data->cfg_bin_name, name, + sizeof(board_data->cfg_bin_name)); + ts_info("Config name %s", + board_data->cfg_bin_name); - /* get config file name */ - r = of_property_read_string(node, "goodix,config-name", &name_tmp); - if (!r) { - ts_info("config name from dt: %s", name_tmp); - strncpy(board_data->cfg_bin_name, name_tmp, - sizeof(board_data->cfg_bin_name)); + break; + } + } } else { - ts_info("can't find config name, use default: %s", - TS_DEFAULT_CFG_BIN); - strncpy(board_data->cfg_bin_name, TS_DEFAULT_CFG_BIN, - sizeof(board_data->cfg_bin_name)); + /* get firmware file name */ + r = of_property_read_string( + node, "goodix,firmware-name", &name_tmp); + if (!r) { + ts_info("firmware name from dt: %s", name_tmp); + strncpy(board_data->fw_name, name_tmp, + sizeof(board_data->fw_name)); + } else { + ts_info("can't find firmware name, use default: %s", + TS_DEFAULT_FIRMWARE); + strncpy(board_data->fw_name, TS_DEFAULT_FIRMWARE, + sizeof(board_data->fw_name)); + } + + /* get config file name */ + r = of_property_read_string( + node, "goodix,config-name", &name_tmp); + if (!r) { + ts_info("config name from dt: %s", name_tmp); + strncpy(board_data->cfg_bin_name, name_tmp, + sizeof(board_data->cfg_bin_name)); + } else { + ts_info("can't find config name, use default: %s", + TS_DEFAULT_CFG_BIN); + strncpy(board_data->cfg_bin_name, TS_DEFAULT_CFG_BIN, + sizeof(board_data->cfg_bin_name)); + } } /* get xyz resolutions */ |