Loading Documentation/devicetree/bindings/fb/mdss-spi-panel.txt +4 −1 Original line number Original line Diff line number Diff line Loading @@ -150,6 +150,9 @@ Required properties: binding above. binding above. Optional properties: Optional properties: - pwms: Value type: <prop-encoded-array> Definition: The PWM device (phandle) used for controlling backlight. - qcom,platform-spi-dc-gpio: Pull down this gpio indicate current package is command, - qcom,platform-spi-dc-gpio: Pull down this gpio indicate current package is command, Pull up this gpio indicate current package is parameter or pixels. Pull up this gpio indicate current package is parameter or pixels. - qcom,platform-reset-gpio: Specifies the panel reset gpio. - qcom,platform-reset-gpio: Specifies the panel reset gpio. Loading @@ -164,7 +167,6 @@ Optional properties: -- qcom,supply-post-on-sleep: time to sleep (ms) after turning on -- qcom,supply-post-on-sleep: time to sleep (ms) after turning on -- qcom,supply-pre-off-sleep: time to sleep (ms) before turning off -- qcom,supply-pre-off-sleep: time to sleep (ms) before turning off -- qcom,supply-post-off-sleep: time to sleep (ms) after turning off -- qcom,supply-post-off-sleep: time to sleep (ms) after turning off Example: Example: mdss_spi_panel: qcom,mdss_spi_panel { mdss_spi_panel: qcom,mdss_spi_panel { compatible = "qcom,mdss-spi-panel"; compatible = "qcom,mdss-spi-panel"; Loading @@ -175,6 +177,7 @@ Example: qcom,platform-te-gpio = <&tlmm 57 0>; qcom,platform-te-gpio = <&tlmm 57 0>; qcom,platform-reset-gpio = <&tlmm 42 0>; qcom,platform-reset-gpio = <&tlmm 42 0>; qcom,platform-spi-dc-gpio = <&tlmm 39 0>; qcom,platform-spi-dc-gpio = <&tlmm 39 0>; pwms = <&pms405_l1 0 1000000>; qcom,panel-supply-entries { qcom,panel-supply-entries { #address-cells = <1>; #address-cells = <1>; Loading drivers/video/fbdev/msm/mdss_spi_panel.c +17 −32 Original line number Original line Diff line number Diff line Loading @@ -882,19 +882,6 @@ static int mdss_spi_panel_parse_dt(struct device_node *np, return 0; return 0; } } static void mdss_spi_panel_pwm_cfg(struct spi_panel_data *ctrl) { if (ctrl->pwm_pmi) return; ctrl->pwm_bl = pwm_request(ctrl->pwm_lpg_chan, "lcd-bklt"); if (IS_ERR_OR_NULL(ctrl->pwm_bl)) { pr_err("%s: Error: lpg_chan=%d pwm request failed", __func__, ctrl->pwm_lpg_chan); } ctrl->pwm_enabled = 0; } static void mdss_spi_panel_bklt_pwm(struct spi_panel_data *ctrl, int level) static void mdss_spi_panel_bklt_pwm(struct spi_panel_data *ctrl, int level) { { int ret; int ret; Loading Loading @@ -924,24 +911,13 @@ static void mdss_spi_panel_bklt_pwm(struct spi_panel_data *ctrl, int level) __func__, ctrl->bklt_ctrl, ctrl->pwm_period, __func__, ctrl->bklt_ctrl, ctrl->pwm_period, ctrl->pwm_pmic_gpio, ctrl->pwm_lpg_chan); ctrl->pwm_pmic_gpio, ctrl->pwm_lpg_chan); if (ctrl->pwm_period >= USEC_PER_SEC) { ret = pwm_config(ctrl->pwm_bl, duty, ctrl->pwm_period); if (ret) { pr_err("%s: pwm_config() failed err=%d\n", __func__, ret); return; } } else { period_ns = ctrl->pwm_period * NSEC_PER_USEC; period_ns = ctrl->pwm_period * NSEC_PER_USEC; ret = pwm_config(ctrl->pwm_bl, ret = pwm_config(ctrl->pwm_bl, level * period_ns / ctrl->bklt_max, level * period_ns / ctrl->bklt_max, period_ns); period_ns); if (ret) { if (ret) { pr_err("%s: pwm_config() failed err=%d\n", pr_err("%s: pwm_config() failed err=%d\n", __func__, ret); __func__, ret); return; return; } } } if (!ctrl->pwm_enabled) { if (!ctrl->pwm_enabled) { ret = pwm_enable(ctrl->pwm_bl); ret = pwm_enable(ctrl->pwm_bl); Loading Loading @@ -1189,8 +1165,17 @@ static int spi_panel_device_register(struct device_node *pan_node, pr_err("%s:%d, reset gpio not specified\n", pr_err("%s:%d, reset gpio not specified\n", __func__, __LINE__); __func__, __LINE__); if (ctrl_pdata->bklt_ctrl == SPI_BL_PWM) if (ctrl_pdata->bklt_ctrl == SPI_BL_PWM) { mdss_spi_panel_pwm_cfg(ctrl_pdata); if (ctrl_pdata->pwm_pmi) return -EINVAL; ctrl_pdata->pwm_bl = devm_of_pwm_get(&ctrl_pdev->dev, ctrl_pdev->dev.of_node, NULL); if (IS_ERR_OR_NULL(ctrl_pdata->pwm_bl)) pr_err("%s: Error: devm_of_pwm_get failed", __func__); ctrl_pdata->pwm_enabled = 0; } ctrl_pdata->ctrl_state = CTRL_STATE_UNKNOWN; ctrl_pdata->ctrl_state = CTRL_STATE_UNKNOWN; ctrl_pdata->panel_data.get_fb_node = mdss_spi_get_fb_node_cb; ctrl_pdata->panel_data.get_fb_node = mdss_spi_get_fb_node_cb; Loading Loading
Documentation/devicetree/bindings/fb/mdss-spi-panel.txt +4 −1 Original line number Original line Diff line number Diff line Loading @@ -150,6 +150,9 @@ Required properties: binding above. binding above. Optional properties: Optional properties: - pwms: Value type: <prop-encoded-array> Definition: The PWM device (phandle) used for controlling backlight. - qcom,platform-spi-dc-gpio: Pull down this gpio indicate current package is command, - qcom,platform-spi-dc-gpio: Pull down this gpio indicate current package is command, Pull up this gpio indicate current package is parameter or pixels. Pull up this gpio indicate current package is parameter or pixels. - qcom,platform-reset-gpio: Specifies the panel reset gpio. - qcom,platform-reset-gpio: Specifies the panel reset gpio. Loading @@ -164,7 +167,6 @@ Optional properties: -- qcom,supply-post-on-sleep: time to sleep (ms) after turning on -- qcom,supply-post-on-sleep: time to sleep (ms) after turning on -- qcom,supply-pre-off-sleep: time to sleep (ms) before turning off -- qcom,supply-pre-off-sleep: time to sleep (ms) before turning off -- qcom,supply-post-off-sleep: time to sleep (ms) after turning off -- qcom,supply-post-off-sleep: time to sleep (ms) after turning off Example: Example: mdss_spi_panel: qcom,mdss_spi_panel { mdss_spi_panel: qcom,mdss_spi_panel { compatible = "qcom,mdss-spi-panel"; compatible = "qcom,mdss-spi-panel"; Loading @@ -175,6 +177,7 @@ Example: qcom,platform-te-gpio = <&tlmm 57 0>; qcom,platform-te-gpio = <&tlmm 57 0>; qcom,platform-reset-gpio = <&tlmm 42 0>; qcom,platform-reset-gpio = <&tlmm 42 0>; qcom,platform-spi-dc-gpio = <&tlmm 39 0>; qcom,platform-spi-dc-gpio = <&tlmm 39 0>; pwms = <&pms405_l1 0 1000000>; qcom,panel-supply-entries { qcom,panel-supply-entries { #address-cells = <1>; #address-cells = <1>; Loading
drivers/video/fbdev/msm/mdss_spi_panel.c +17 −32 Original line number Original line Diff line number Diff line Loading @@ -882,19 +882,6 @@ static int mdss_spi_panel_parse_dt(struct device_node *np, return 0; return 0; } } static void mdss_spi_panel_pwm_cfg(struct spi_panel_data *ctrl) { if (ctrl->pwm_pmi) return; ctrl->pwm_bl = pwm_request(ctrl->pwm_lpg_chan, "lcd-bklt"); if (IS_ERR_OR_NULL(ctrl->pwm_bl)) { pr_err("%s: Error: lpg_chan=%d pwm request failed", __func__, ctrl->pwm_lpg_chan); } ctrl->pwm_enabled = 0; } static void mdss_spi_panel_bklt_pwm(struct spi_panel_data *ctrl, int level) static void mdss_spi_panel_bklt_pwm(struct spi_panel_data *ctrl, int level) { { int ret; int ret; Loading Loading @@ -924,24 +911,13 @@ static void mdss_spi_panel_bklt_pwm(struct spi_panel_data *ctrl, int level) __func__, ctrl->bklt_ctrl, ctrl->pwm_period, __func__, ctrl->bklt_ctrl, ctrl->pwm_period, ctrl->pwm_pmic_gpio, ctrl->pwm_lpg_chan); ctrl->pwm_pmic_gpio, ctrl->pwm_lpg_chan); if (ctrl->pwm_period >= USEC_PER_SEC) { ret = pwm_config(ctrl->pwm_bl, duty, ctrl->pwm_period); if (ret) { pr_err("%s: pwm_config() failed err=%d\n", __func__, ret); return; } } else { period_ns = ctrl->pwm_period * NSEC_PER_USEC; period_ns = ctrl->pwm_period * NSEC_PER_USEC; ret = pwm_config(ctrl->pwm_bl, ret = pwm_config(ctrl->pwm_bl, level * period_ns / ctrl->bklt_max, level * period_ns / ctrl->bklt_max, period_ns); period_ns); if (ret) { if (ret) { pr_err("%s: pwm_config() failed err=%d\n", pr_err("%s: pwm_config() failed err=%d\n", __func__, ret); __func__, ret); return; return; } } } if (!ctrl->pwm_enabled) { if (!ctrl->pwm_enabled) { ret = pwm_enable(ctrl->pwm_bl); ret = pwm_enable(ctrl->pwm_bl); Loading Loading @@ -1189,8 +1165,17 @@ static int spi_panel_device_register(struct device_node *pan_node, pr_err("%s:%d, reset gpio not specified\n", pr_err("%s:%d, reset gpio not specified\n", __func__, __LINE__); __func__, __LINE__); if (ctrl_pdata->bklt_ctrl == SPI_BL_PWM) if (ctrl_pdata->bklt_ctrl == SPI_BL_PWM) { mdss_spi_panel_pwm_cfg(ctrl_pdata); if (ctrl_pdata->pwm_pmi) return -EINVAL; ctrl_pdata->pwm_bl = devm_of_pwm_get(&ctrl_pdev->dev, ctrl_pdev->dev.of_node, NULL); if (IS_ERR_OR_NULL(ctrl_pdata->pwm_bl)) pr_err("%s: Error: devm_of_pwm_get failed", __func__); ctrl_pdata->pwm_enabled = 0; } ctrl_pdata->ctrl_state = CTRL_STATE_UNKNOWN; ctrl_pdata->ctrl_state = CTRL_STATE_UNKNOWN; ctrl_pdata->panel_data.get_fb_node = mdss_spi_get_fb_node_cb; ctrl_pdata->panel_data.get_fb_node = mdss_spi_get_fb_node_cb; Loading