Loading drivers/regulator/qpnp-labibb-regulator.c +53 −3 Original line number Diff line number Diff line Loading @@ -139,6 +139,8 @@ #define REG_IBB_CURRENT_LIMIT 0x4B #define REG_IBB_PS_CTL 0x50 #define REG_IBB_RDSON_MNGMNT 0x53 #define REG_IBB_NONOVERLAP_TIME_1 0x56 #define REG_IBB_NONOVERLAP_TIME_2 0x57 #define REG_IBB_PWRUP_PWRDN_CTL_1 0x58 #define REG_IBB_PWRUP_PWRDN_CTL_2 0x59 #define REG_IBB_SOFT_START_CTL 0x5F Loading Loading @@ -197,11 +199,22 @@ #define IBB_PFET_SW_SIZE_MASK ((1 << PFET_SW_SIZE_BITS) - 1) #define IBB_NFET_SW_SIZE_SHIFT 3 /* REG_IBB_NONOVERLAP_TIME_1 */ #define IBB_OVERRIDE_NONOVERLAP BIT(6) #define IBB_NONOVERLAP_NFET_BITS 3 #define IBB_NONOVERLAP_NFET_MASK ((1 << IBB_NONOVERLAP_NFET_BITS) - 1) #define IBB_NFET_GATE_DELAY_2 0x3 /* REG_IBB_NONOVERLAP_TIME_2 */ #define IBB_N2P_MUX_SEL BIT(0) /* REG_IBB_SOFT_START_CTL */ #define IBB_SOFT_START_CHARGING_RESISTOR_16K 0x3 /* REG_IBB_SPARE_CTL */ #define IBB_BYPASS_PWRDN_DLY2_BIT BIT(5) #define IBB_POFF_CTL_MASK BIT(4) #define IBB_FASTER_PFET_OFF BIT(4) #define IBB_FAST_STARTUP BIT(3) /* REG_IBB_SWIRE_CTL */ Loading Loading @@ -1218,12 +1231,12 @@ static int qpnp_labibb_regulator_ttw_mode_enter(struct qpnp_labibb *labibb) return 0; } static int qpnp_labibb_ttw_exit_ibb_pmi8996(struct qpnp_labibb *labibb) static int qpnp_labibb_ttw_exit_ibb_common(struct qpnp_labibb *labibb) { int rc; u8 val; val = 0; val = IBB_FASTER_PFET_OFF; rc = qpnp_labibb_write(labibb, labibb->ibb_base + REG_IBB_SPARE_CTL, &val, 1); if (rc) Loading Loading @@ -1281,7 +1294,9 @@ static int qpnp_labibb_regulator_ttw_mode_exit(struct qpnp_labibb *labibb) switch (labibb->pmic_rev_id->pmic_subtype) { case PMI8996: rc = qpnp_labibb_ttw_exit_ibb_pmi8996(labibb); case PMI8994: case PMI8950: rc = qpnp_labibb_ttw_exit_ibb_common(labibb); break; } if (rc) { Loading Loading @@ -2550,6 +2565,41 @@ static int register_qpnp_ibb_regulator(struct qpnp_labibb *labibb, return rc; } } if (labibb->mode == QPNP_LABIBB_AMOLED_MODE) { val = IBB_OVERRIDE_NONOVERLAP | IBB_NFET_GATE_DELAY_2; rc = qpnp_labibb_sec_masked_write(labibb, labibb->ibb_base, REG_IBB_NONOVERLAP_TIME_1, IBB_OVERRIDE_NONOVERLAP | IBB_NONOVERLAP_NFET_MASK, val); if (rc) { pr_err("qpnp_labibb_sec_masked_write register %x failed rc = %d\n", REG_IBB_NONOVERLAP_TIME_1, rc); return rc; } val = IBB_N2P_MUX_SEL; rc = qpnp_labibb_sec_write(labibb, labibb->ibb_base, REG_IBB_NONOVERLAP_TIME_2, &val, 1); if (rc) { pr_err("qpnp_labibb_sec_write register %x failed rc = %d\n", REG_IBB_NONOVERLAP_TIME_2, rc); return rc; } val = IBB_FASTER_PFET_OFF; rc = qpnp_labibb_masked_write(labibb, labibb->ibb_base + REG_IBB_SPARE_CTL, IBB_POFF_CTL_MASK, val); if (rc) { pr_err("qpnp_labibb_masked_write %x failed rc = %d\n", REG_IBB_SPARE_CTL, rc); return rc; } } rc = qpnp_labibb_read(labibb, &val, labibb->ibb_base + REG_IBB_MODULE_RDY, 1); if (rc) { Loading Loading
drivers/regulator/qpnp-labibb-regulator.c +53 −3 Original line number Diff line number Diff line Loading @@ -139,6 +139,8 @@ #define REG_IBB_CURRENT_LIMIT 0x4B #define REG_IBB_PS_CTL 0x50 #define REG_IBB_RDSON_MNGMNT 0x53 #define REG_IBB_NONOVERLAP_TIME_1 0x56 #define REG_IBB_NONOVERLAP_TIME_2 0x57 #define REG_IBB_PWRUP_PWRDN_CTL_1 0x58 #define REG_IBB_PWRUP_PWRDN_CTL_2 0x59 #define REG_IBB_SOFT_START_CTL 0x5F Loading Loading @@ -197,11 +199,22 @@ #define IBB_PFET_SW_SIZE_MASK ((1 << PFET_SW_SIZE_BITS) - 1) #define IBB_NFET_SW_SIZE_SHIFT 3 /* REG_IBB_NONOVERLAP_TIME_1 */ #define IBB_OVERRIDE_NONOVERLAP BIT(6) #define IBB_NONOVERLAP_NFET_BITS 3 #define IBB_NONOVERLAP_NFET_MASK ((1 << IBB_NONOVERLAP_NFET_BITS) - 1) #define IBB_NFET_GATE_DELAY_2 0x3 /* REG_IBB_NONOVERLAP_TIME_2 */ #define IBB_N2P_MUX_SEL BIT(0) /* REG_IBB_SOFT_START_CTL */ #define IBB_SOFT_START_CHARGING_RESISTOR_16K 0x3 /* REG_IBB_SPARE_CTL */ #define IBB_BYPASS_PWRDN_DLY2_BIT BIT(5) #define IBB_POFF_CTL_MASK BIT(4) #define IBB_FASTER_PFET_OFF BIT(4) #define IBB_FAST_STARTUP BIT(3) /* REG_IBB_SWIRE_CTL */ Loading Loading @@ -1218,12 +1231,12 @@ static int qpnp_labibb_regulator_ttw_mode_enter(struct qpnp_labibb *labibb) return 0; } static int qpnp_labibb_ttw_exit_ibb_pmi8996(struct qpnp_labibb *labibb) static int qpnp_labibb_ttw_exit_ibb_common(struct qpnp_labibb *labibb) { int rc; u8 val; val = 0; val = IBB_FASTER_PFET_OFF; rc = qpnp_labibb_write(labibb, labibb->ibb_base + REG_IBB_SPARE_CTL, &val, 1); if (rc) Loading Loading @@ -1281,7 +1294,9 @@ static int qpnp_labibb_regulator_ttw_mode_exit(struct qpnp_labibb *labibb) switch (labibb->pmic_rev_id->pmic_subtype) { case PMI8996: rc = qpnp_labibb_ttw_exit_ibb_pmi8996(labibb); case PMI8994: case PMI8950: rc = qpnp_labibb_ttw_exit_ibb_common(labibb); break; } if (rc) { Loading Loading @@ -2550,6 +2565,41 @@ static int register_qpnp_ibb_regulator(struct qpnp_labibb *labibb, return rc; } } if (labibb->mode == QPNP_LABIBB_AMOLED_MODE) { val = IBB_OVERRIDE_NONOVERLAP | IBB_NFET_GATE_DELAY_2; rc = qpnp_labibb_sec_masked_write(labibb, labibb->ibb_base, REG_IBB_NONOVERLAP_TIME_1, IBB_OVERRIDE_NONOVERLAP | IBB_NONOVERLAP_NFET_MASK, val); if (rc) { pr_err("qpnp_labibb_sec_masked_write register %x failed rc = %d\n", REG_IBB_NONOVERLAP_TIME_1, rc); return rc; } val = IBB_N2P_MUX_SEL; rc = qpnp_labibb_sec_write(labibb, labibb->ibb_base, REG_IBB_NONOVERLAP_TIME_2, &val, 1); if (rc) { pr_err("qpnp_labibb_sec_write register %x failed rc = %d\n", REG_IBB_NONOVERLAP_TIME_2, rc); return rc; } val = IBB_FASTER_PFET_OFF; rc = qpnp_labibb_masked_write(labibb, labibb->ibb_base + REG_IBB_SPARE_CTL, IBB_POFF_CTL_MASK, val); if (rc) { pr_err("qpnp_labibb_masked_write %x failed rc = %d\n", REG_IBB_SPARE_CTL, rc); return rc; } } rc = qpnp_labibb_read(labibb, &val, labibb->ibb_base + REG_IBB_MODULE_RDY, 1); if (rc) { Loading