summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-12-20 14:04:17 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2016-12-20 14:04:17 -0800
commitf8c8237d6439fa2dee0b1a90728d660963f2c299 (patch)
treee6c09a022b854028fc721970d04dcc7611ca3e1d
parentd4a74ec80ab76ed90d96f6f6108eec1d8367ec89 (diff)
parentecc5d1b4338b562988fd68dd4acc3409b0056cd5 (diff)
Merge "ARM: dts: msm: Disable WLED staggering for pmi8998 and pm2falcon"
-rw-r--r--arch/arm/boot/dts/qcom/msm-pm2falcon.dtsi1
-rw-r--r--arch/arm/boot/dts/qcom/msm-pmi8998.dtsi1
-rw-r--r--drivers/leds/leds-qpnp-wled.c48
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;
}