diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2016-12-20 14:04:17 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-12-20 14:04:17 -0800 |
commit | f8c8237d6439fa2dee0b1a90728d660963f2c299 (patch) | |
tree | e6c09a022b854028fc721970d04dcc7611ca3e1d | |
parent | d4a74ec80ab76ed90d96f6f6108eec1d8367ec89 (diff) | |
parent | ecc5d1b4338b562988fd68dd4acc3409b0056cd5 (diff) |
Merge "ARM: dts: msm: Disable WLED staggering for pmi8998 and pm2falcon"
-rw-r--r-- | arch/arm/boot/dts/qcom/msm-pm2falcon.dtsi | 1 | ||||
-rw-r--r-- | arch/arm/boot/dts/qcom/msm-pmi8998.dtsi | 1 | ||||
-rw-r--r-- | drivers/leds/leds-qpnp-wled.c | 48 |
3 files changed, 39 insertions, 11 deletions
diff --git a/arch/arm/boot/dts/qcom/msm-pm2falcon.dtsi b/arch/arm/boot/dts/qcom/msm-pm2falcon.dtsi index 087a7c765da8..6c403f56b1ac 100644 --- a/arch/arm/boot/dts/qcom/msm-pm2falcon.dtsi +++ b/arch/arm/boot/dts/qcom/msm-pm2falcon.dtsi @@ -249,7 +249,6 @@ qcom,sync-dly-us = <800>; qcom,fs-curr-ua = <25000>; qcom,cons-sync-write-delay-us = <1000>; - qcom,en-phase-stag; qcom,led-strings-list = [00 01 02]; qcom,en-ext-pfet-sc-pro; qcom,loop-auto-gm-en; diff --git a/arch/arm/boot/dts/qcom/msm-pmi8998.dtsi b/arch/arm/boot/dts/qcom/msm-pmi8998.dtsi index 9d67af4e7d57..99f3f58cc20e 100644 --- a/arch/arm/boot/dts/qcom/msm-pmi8998.dtsi +++ b/arch/arm/boot/dts/qcom/msm-pmi8998.dtsi @@ -607,7 +607,6 @@ qcom,sync-dly-us = <800>; qcom,fs-curr-ua = <25000>; qcom,cons-sync-write-delay-us = <1000>; - qcom,en-phase-stag; qcom,led-strings-list = [00 01 02 03]; qcom,en-ext-pfet-sc-pro; qcom,pmic-revid = <&pmi8998_revid>; diff --git a/drivers/leds/leds-qpnp-wled.c b/drivers/leds/leds-qpnp-wled.c index 85b1133df4f5..77014f93927c 100644 --- a/drivers/leds/leds-qpnp-wled.c +++ b/drivers/leds/leds-qpnp-wled.c @@ -465,6 +465,24 @@ out: return rc; } +static int qpnp_wled_swire_avdd_config(struct qpnp_wled *wled) +{ + int rc; + u8 val; + + if (wled->pmic_rev_id->pmic_subtype != PMI8998_SUBTYPE && + wled->pmic_rev_id->pmic_subtype != PM2FALCON_SUBTYPE) + return 0; + + if (!wled->disp_type_amoled || wled->avdd_mode_spmi) + return 0; + + val = QPNP_WLED_AVDD_MV_TO_REG(wled->avdd_target_voltage_mv); + rc = qpnp_wled_write_reg(wled, + QPNP_WLED_SWIRE_AVDD_REG(wled->ctrl_base), val); + return rc; +} + static int qpnp_wled_sync_reg_toggle(struct qpnp_wled *wled) { int rc; @@ -884,8 +902,20 @@ static void qpnp_wled_work(struct work_struct *work) } if (!!level != wled->prev_state) { - rc = qpnp_wled_module_en(wled, wled->ctrl_base, !!level); + if (!!level) { + /* + * For AMOLED display in pmi8998, SWIRE_AVDD_DEFAULT has + * to be reconfigured every time the module is enabled. + */ + rc = qpnp_wled_swire_avdd_config(wled); + if (rc < 0) { + pr_err("Write to SWIRE_AVDD_DEFAULT register failed rc:%d\n", + rc); + goto unlock_mutex; + } + } + rc = qpnp_wled_module_en(wled, wled->ctrl_base, !!level); if (rc) { dev_err(&wled->pdev->dev, "wled %sable failed\n", level ? "en" : "dis"); @@ -1246,22 +1276,22 @@ static int qpnp_wled_avdd_mode_config(struct qpnp_wled *wled) wled->avdd_target_voltage_mv = QPNP_WLED_AVDD_MIN_MV; } - reg = QPNP_WLED_AVDD_MV_TO_REG(wled->avdd_target_voltage_mv); - if (wled->avdd_mode_spmi) { + reg = QPNP_WLED_AVDD_MV_TO_REG(wled->avdd_target_voltage_mv); reg |= QPNP_WLED_AVDD_SEL_SPMI_BIT; rc = qpnp_wled_write_reg(wled, QPNP_WLED_AMOLED_VOUT_REG(wled->ctrl_base), reg); + if (rc < 0) + pr_err("Write to AMOLED_VOUT register failed, rc=%d\n", + rc); } else { - rc = qpnp_wled_write_reg(wled, - QPNP_WLED_SWIRE_AVDD_REG(wled->ctrl_base), - reg); + rc = qpnp_wled_swire_avdd_config(wled); + if (rc < 0) + pr_err("Write to SWIRE_AVDD_DEFAULT register failed rc:%d\n", + rc); } - if (rc < 0) - dev_err(&wled->pdev->dev, "Write to VOUT/AVDD register failed, rc=%d\n", - rc); return rc; } |