Merge "msm: mdss: enable backlight gpio after commit is done"
This commit is contained in:
commit
b22e2a0488
3 changed files with 82 additions and 42 deletions
|
@ -4364,6 +4364,9 @@ int dsi_panel_device_register(struct platform_device *ctrl_pdev,
|
|||
return rc;
|
||||
}
|
||||
|
||||
/* default state of gpio is false */
|
||||
ctrl_pdata->bklt_en_gpio_state = false;
|
||||
|
||||
pinfo->panel_max_fps = mdss_panel_get_framerate(pinfo);
|
||||
pinfo->panel_max_vtotal = mdss_panel_get_vtotal(pinfo);
|
||||
|
||||
|
|
|
@ -454,6 +454,7 @@ struct mdss_dsi_ctrl_pdata {
|
|||
int disp_en_gpio;
|
||||
int bklt_en_gpio;
|
||||
bool bklt_en_gpio_invert;
|
||||
bool bklt_en_gpio_state;
|
||||
int lcd_mode_sel_gpio;
|
||||
int bklt_ctrl; /* backlight ctrl */
|
||||
bool pwm_pmi;
|
||||
|
|
|
@ -260,16 +260,6 @@ static int mdss_dsi_request_gpios(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
|
|||
rc);
|
||||
goto rst_gpio_err;
|
||||
}
|
||||
if (gpio_is_valid(ctrl_pdata->bklt_en_gpio)) {
|
||||
rc = gpio_request(ctrl_pdata->bklt_en_gpio,
|
||||
"bklt_enable");
|
||||
if (rc) {
|
||||
pr_err("request bklt gpio failed, rc=%d\n",
|
||||
rc);
|
||||
goto bklt_en_gpio_err;
|
||||
}
|
||||
}
|
||||
|
||||
if (gpio_is_valid(ctrl_pdata->lcd_mode_sel_gpio)) {
|
||||
rc = gpio_request(ctrl_pdata->lcd_mode_sel_gpio, "mode_sel");
|
||||
if (rc) {
|
||||
|
@ -282,9 +272,6 @@ static int mdss_dsi_request_gpios(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
|
|||
return rc;
|
||||
|
||||
lcd_mode_sel_gpio_err:
|
||||
if (gpio_is_valid(ctrl_pdata->bklt_en_gpio))
|
||||
gpio_free(ctrl_pdata->bklt_en_gpio);
|
||||
bklt_en_gpio_err:
|
||||
gpio_free(ctrl_pdata->rst_gpio);
|
||||
rst_gpio_err:
|
||||
if (gpio_is_valid(ctrl_pdata->disp_en_gpio))
|
||||
|
@ -293,6 +280,81 @@ disp_en_gpio_err:
|
|||
return rc;
|
||||
}
|
||||
|
||||
int mdss_dsi_bl_gpio_ctrl(struct mdss_panel_data *pdata, int enable)
|
||||
{
|
||||
struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL;
|
||||
int rc = 0, val = 0;
|
||||
|
||||
if (pdata == NULL) {
|
||||
pr_err("%s: Invalid input data\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata,
|
||||
panel_data);
|
||||
if (ctrl_pdata == NULL) {
|
||||
pr_err("%s: Invalid ctrl data\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* if gpio is not valid */
|
||||
if (!gpio_is_valid(ctrl_pdata->bklt_en_gpio))
|
||||
return rc;
|
||||
|
||||
pr_debug("%s: enable = %d\n", __func__, enable);
|
||||
|
||||
/*
|
||||
* if gpio state is false and enable (bl level) is
|
||||
* non zero then toggle the gpio
|
||||
*/
|
||||
if (!ctrl_pdata->bklt_en_gpio_state && enable) {
|
||||
rc = gpio_request(ctrl_pdata->bklt_en_gpio, "bklt_enable");
|
||||
if (rc) {
|
||||
pr_err("request bklt gpio failed, rc=%d\n", rc);
|
||||
goto free;
|
||||
}
|
||||
|
||||
if (ctrl_pdata->bklt_en_gpio_invert)
|
||||
val = 0;
|
||||
else
|
||||
val = 1;
|
||||
|
||||
rc = gpio_direction_output(ctrl_pdata->bklt_en_gpio, val);
|
||||
if (rc) {
|
||||
pr_err("%s: unable to set dir for bklt gpio val %d\n",
|
||||
__func__, val);
|
||||
goto free;
|
||||
}
|
||||
ctrl_pdata->bklt_en_gpio_state = true;
|
||||
goto ret;
|
||||
} else if (ctrl_pdata->bklt_en_gpio_state && !enable) {
|
||||
/*
|
||||
* if gpio state is true and enable (bl level) is
|
||||
* zero then toggle the gpio
|
||||
*/
|
||||
if (ctrl_pdata->bklt_en_gpio_invert)
|
||||
val = 1;
|
||||
else
|
||||
val = 0;
|
||||
|
||||
rc = gpio_direction_output(ctrl_pdata->bklt_en_gpio, val);
|
||||
if (rc)
|
||||
pr_err("%s: unable to set dir for bklt gpio val %d\n",
|
||||
__func__, val);
|
||||
goto free;
|
||||
}
|
||||
|
||||
/* gpio state is true and bl level is non zero */
|
||||
goto ret;
|
||||
|
||||
free:
|
||||
pr_debug("%s: free bklt gpio\n", __func__);
|
||||
ctrl_pdata->bklt_en_gpio_state = false;
|
||||
gpio_free(ctrl_pdata->bklt_en_gpio);
|
||||
ret:
|
||||
return rc;
|
||||
}
|
||||
|
||||
int mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable)
|
||||
{
|
||||
struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL;
|
||||
|
@ -362,26 +424,6 @@ int mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable)
|
|||
if (pdata->panel_info.rst_seq[++i])
|
||||
usleep_range(pinfo->rst_seq[i] * 1000, pinfo->rst_seq[i] * 1000);
|
||||
}
|
||||
|
||||
if (gpio_is_valid(ctrl_pdata->bklt_en_gpio)) {
|
||||
|
||||
if (ctrl_pdata->bklt_en_gpio_invert) {
|
||||
rc = gpio_direction_output(
|
||||
ctrl_pdata->bklt_en_gpio, 0);
|
||||
gpio_set_value(
|
||||
(ctrl_pdata->bklt_en_gpio), 0);
|
||||
} else {
|
||||
rc = gpio_direction_output(
|
||||
ctrl_pdata->bklt_en_gpio, 1);
|
||||
gpio_set_value(
|
||||
(ctrl_pdata->bklt_en_gpio), 1);
|
||||
}
|
||||
if (rc) {
|
||||
pr_err("%s: unable to set dir for bklt gpio\n",
|
||||
__func__);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (gpio_is_valid(ctrl_pdata->lcd_mode_sel_gpio)) {
|
||||
|
@ -410,15 +452,6 @@ int mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable)
|
|||
pr_debug("%s: Reset panel done\n", __func__);
|
||||
}
|
||||
} else {
|
||||
if (gpio_is_valid(ctrl_pdata->bklt_en_gpio)) {
|
||||
|
||||
if (ctrl_pdata->bklt_en_gpio_invert)
|
||||
gpio_set_value((ctrl_pdata->bklt_en_gpio), 1);
|
||||
else
|
||||
gpio_set_value((ctrl_pdata->bklt_en_gpio), 0);
|
||||
|
||||
gpio_free(ctrl_pdata->bklt_en_gpio);
|
||||
}
|
||||
if (gpio_is_valid(ctrl_pdata->disp_en_gpio)) {
|
||||
gpio_set_value((ctrl_pdata->disp_en_gpio), 0);
|
||||
gpio_free(ctrl_pdata->disp_en_gpio);
|
||||
|
@ -801,6 +834,9 @@ static void mdss_dsi_panel_bl_ctrl(struct mdss_panel_data *pdata,
|
|||
if ((bl_level < pdata->panel_info.bl_min) && (bl_level != 0))
|
||||
bl_level = pdata->panel_info.bl_min;
|
||||
|
||||
/* enable the backlight gpio if present */
|
||||
mdss_dsi_bl_gpio_ctrl(pdata, bl_level);
|
||||
|
||||
switch (ctrl_pdata->bklt_ctrl) {
|
||||
case BL_WLED:
|
||||
led_trigger_event(bl_led_trigger, bl_level);
|
||||
|
|
Loading…
Add table
Reference in a new issue