summaryrefslogtreecommitdiff
path: root/goodix_ts_core.c
diff options
context:
space:
mode:
authorWendly Li <wendlyli@google.com>2022-09-06 15:50:57 +0000
committerWendly Li <wendlyli@google.com>2022-09-12 05:16:37 +0000
commit56736144d2526262a689ebdd6e4c8a4b6194bb22 (patch)
treed71ebd05fd5f8f3eb70d5249ef8ffae8e4488163 /goodix_ts_core.c
parent95b57280ad938e7916da9af53985cac9f3cb9787 (diff)
downloadgoodix_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.c84
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 */