From acd105f3471f69faff91b8b75f5f8336d8dd1971 Mon Sep 17 00:00:00 2001 From: houdz1 Date: Fri, 2 Jul 2021 21:25:18 +0800 Subject: [PATCH] dsi_panel: add gpio to enable vsn/vsp Use avdd_enable_gpio to enable avdd. and Use avee_enable_gpio to enable avee. Change-Id: I8b00588d6559e618fb4056957778d39448687b5c Signed-off-by: houdz1 Reviewed-on: https://gerrit.mot.com/2001001 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yeqing Wang Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- msm/dsi/dsi_panel.c | 55 +++++++++++++++++++++++++++++++++++++++++++++ msm/dsi/dsi_panel.h | 3 +++ 2 files changed, 58 insertions(+) diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c index d2e132e36148..6f4a4aa9925e 100644 --- a/msm/dsi/dsi_panel.c +++ b/msm/dsi/dsi_panel.c @@ -215,10 +215,39 @@ static int dsi_panel_gpio_request(struct dsi_panel *panel) rc); panel->panel_test_gpio = -1; rc = 0; + goto error_release_panel_test; } } + if (gpio_is_valid(panel->avee_enable_gpio)) { + rc = gpio_request(panel->avee_enable_gpio, "avee_enable_gpio"); + if (rc) { + DSI_WARN("request for avee_enable_gpio failed, rc=%d\n", + rc); + panel->avee_enable_gpio = -1; + rc = 0; + goto error_release_avee_enable; + } + } + + if (gpio_is_valid(panel->avdd_enable_gpio)) { + rc = gpio_request(panel->avdd_enable_gpio, "avdd_enable_gpio"); + if (rc) { + DSI_WARN("request for avdd_enable_gpio failed, rc=%d\n", + rc); + panel->avdd_enable_gpio = -1; + rc = 0; + } + } + + goto error; +error_release_avee_enable: + if (gpio_is_valid(panel->avee_enable_gpio)) + gpio_free(panel->avee_enable_gpio); +error_release_panel_test: + if (gpio_is_valid(panel->panel_test_gpio)) + gpio_free(panel->panel_test_gpio); error_release_mode_sel: if (gpio_is_valid(panel->bl_config.en_gpio)) gpio_free(panel->bl_config.en_gpio); @@ -448,6 +477,18 @@ static int dsi_panel_power_on(struct dsi_panel *panel) DSI_INFO("(%s)+\n", panel->name); + if (gpio_is_valid(panel->avdd_enable_gpio)) { + rc = gpio_direction_output(panel->avdd_enable_gpio, 1); + if (rc) + DSI_ERR("unable to set AVDD Enable gpio rc=%d\n", rc); + } + + if (gpio_is_valid(panel->avee_enable_gpio)) { + rc = gpio_direction_output(panel->avee_enable_gpio, 1); + if (rc) + DSI_ERR("unable to set AVEE Enable gpio rc=%d\n", rc); + } + if ((panel->tp_state_check_enable) && (panel->tp_state)) { pr_info("%s: (%s)+power is alway on \n", __func__, panel->name); goto exit; @@ -2721,6 +2762,20 @@ static int dsi_panel_parse_gpios(struct dsi_panel *panel) DSI_DEBUG("%s:%d panel test gpio not specified\n", __func__, __LINE__); + panel->avee_enable_gpio = utils->get_named_gpio(utils->data, + "qcom,avee-enable-gpio", + 0); + if (!gpio_is_valid(panel->avee_enable_gpio)) + DSI_DEBUG("%s:%d qcom,avee-enable-gpio not specified\n", __func__, + __LINE__); + + panel->avdd_enable_gpio = utils->get_named_gpio(utils->data, + "qcom,avdd-enable-gpio", + 0); + if (!gpio_is_valid(panel->avdd_enable_gpio)) + DSI_DEBUG("%s:%d qcom,add-enable-gpio not specified\n", __func__, + __LINE__); + error: return rc; } diff --git a/msm/dsi/dsi_panel.h b/msm/dsi/dsi_panel.h index d61e117bc6c5..bdeadbcec94e 100644 --- a/msm/dsi/dsi_panel.h +++ b/msm/dsi/dsi_panel.h @@ -372,6 +372,9 @@ struct dsi_panel { int panel_recovery_retry; bool is_panel_dead; + + int avee_enable_gpio; + int avdd_enable_gpio; }; bool dsi_display_all_displays_dead(void);