Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b22e2a04 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: mdss: enable backlight gpio after commit is done"

parents 5a2c0c09 0bb0cad9
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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);

+1 −0
Original line number Diff line number Diff line
@@ -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;
+78 −42
Original line number Diff line number Diff line
@@ -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);