modules:sc89890h:bringup second master charger otg

Add second master charger patch from FAE

1.fix the otg current - Iboost
000:0.5A 001:0.75A 010:1.2A 011:1.4A
100:1.65A 101:1.875A 110:2.15A 111:2.45A
2.add disable charging and enable charging when enable otg and disable otg
3.Diable ILIM Pin HW current limit .

Change-Id: I77a25f550819f383d0ccc806bc5e5c3090ae689b
Signed-off-by: huaqin85 <huaqin85@motorola.com>
Reviewed-on: https://gerrit.mot.com/2190530
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
wutao 2022-02-16 11:15:08 +08:00 • committed by huaqin89
commit d33a40988a
2 changed files with 68 additions and 19 deletions

View file

@ -287,22 +287,44 @@ static int bq2589x_set_otg_current(struct bq2589x *bq, int curr)
{
u8 temp;
if (curr >= 2400)
temp = BQ2589X_BOOST_LIM_2400MA;
else if (curr >= 2100)
temp = BQ2589X_BOOST_LIM_2100MA;
else if (curr >= 1800)
temp = BQ2589X_BOOST_LIM_1800MA;
else if (curr >= 1600)
temp = BQ2589X_BOOST_LIM_1600MA;
else if (curr >= 1300)
temp = BQ2589X_BOOST_LIM_1300MA;
else if (curr >= 1100)
temp = BQ2589X_BOOST_LIM_1100MA;
else if (curr >= 700)
temp = BQ2589X_BOOST_LIM_700MA;
else
temp = BQ2589X_BOOST_LIM_500MA;
if (bq->part_no == SC89890H) {
if (curr < 600)
temp = SC89890H_BOOST_LIM_500MA;
else if (curr < 900)
temp = SC89890H_BOOST_LIM_750MA;
else if (curr < 1300)
temp = SC89890H_BOOST_LIM_1200MA;
else if (curr < 1500)
temp = SC89890H_BOOST_LIM_1400MA;
else if (curr < 1700)
temp = SC89890H_BOOST_LIM_1650MA;
else if (curr < 1900)
temp = SC89890H_BOOST_LIM_1875MA;
else if (curr < 2200)
temp = SC89890H_BOOST_LIM_2150MA;
else if (curr < 2500)
temp = SC89890H_BOOST_LIM_2450MA;
else
temp = SC89890H_BOOST_LIM_1400MA;
} else {
if (curr >= 2400)
temp = BQ2589X_BOOST_LIM_2400MA;
else if (curr >= 2100)
temp = BQ2589X_BOOST_LIM_2100MA;
else if (curr >= 1800)
temp = BQ2589X_BOOST_LIM_1800MA;
else if (curr >= 1600)
temp = BQ2589X_BOOST_LIM_1600MA;
else if (curr >= 1300)
temp = BQ2589X_BOOST_LIM_1300MA;
else if (curr >= 1100)
temp = BQ2589X_BOOST_LIM_1100MA;
else if (curr >= 700)
temp = BQ2589X_BOOST_LIM_700MA;
else
temp = BQ2589X_BOOST_LIM_500MA;
}
return bq2589x_update_bits(bq, BQ2589X_REG_0A, BQ2589X_BOOST_LIM_MASK, temp << BQ2589X_BOOST_LIM_SHIFT);
}
@ -995,6 +1017,11 @@ static int bq2589x_init_device(struct bq2589x *bq)
int ret;
/*common initialization*/
if (bq->part_no == SC89890H) {
bq2589x_update_bits(bq, BQ2589X_REG_00, BQ2589X_ENILIM_MASK,
BQ2589X_ENILIM_DISABLE << BQ2589X_ENILIM_SHIFT);
}
bq2589x_disable_watchdog_timer(bq);
/*disable maxcharge en to allow qc2.0 detection*/
@ -2486,12 +2513,20 @@ static int bq2589x_set_otg_enable(struct charger_device *chg_dev, bool enable)
{
struct bq2589x *bq = dev_get_drvdata(&chg_dev->dev);
u8 val;
int ret = 0;
if (enable)
if (enable) {
if (bq->part_no == SC89890H) {
ret = bq2589x_disable_charger(bq);
}
val = BQ2589X_OTG_ENABLE << BQ2589X_OTG_CONFIG_SHIFT;
else
}
else {
val = BQ2589X_OTG_DISABLE << BQ2589X_OTG_CONFIG_SHIFT;
if (bq->part_no == SC89890H) {
ret = bq2589x_enable_charger(bq);
}
}
dev_info(bq->dev, "%s: %s otg\n", __func__, enable ? "enable" : "disable");
return bq2589x_update_bits(bq, BQ2589X_REG_03, BQ2589X_OTG_CONFIG_MASK, val);

View file

@ -224,6 +224,8 @@
#define BQ2589X_BOOSTV_SHIFT 4
#define BQ2589X_BOOSTV_BASE 4550
#define BQ2589X_BOOSTV_LSB 64
#define SC89890H_BOOSTV_BASE 3900
#define SC89890H_BOOSTV_LSB 100
#define BQ2589X_BOOST_LIM_MASK 0x07
@ -236,6 +238,14 @@
#define BQ2589X_BOOST_LIM_1800MA 0x05
#define BQ2589X_BOOST_LIM_2100MA 0x06
#define BQ2589X_BOOST_LIM_2400MA 0x07
#define SC89890H_BOOST_LIM_500MA 0x00
#define SC89890H_BOOST_LIM_750MA 0x01
#define SC89890H_BOOST_LIM_1200MA 0x02
#define SC89890H_BOOST_LIM_1400MA 0x03
#define SC89890H_BOOST_LIM_1650MA 0x04
#define SC89890H_BOOST_LIM_1875MA 0x05
#define SC89890H_BOOST_LIM_2150MA 0x06
#define SC89890H_BOOST_LIM_2450MA 0x07
/* Register 0x0B*/
@ -295,6 +305,10 @@
#define BQ2589X_VINDPM_BASE 2600
#define BQ2589X_VINDPM_LSB 100
#define SC89890H_VINDPMOS_MASK 0x03
#define SC89890H_VINDPMOS_SHIFT 0
#define SC89890H_VINDPMOS_400MV 0
#define SC89890H_VINDPMOS_600MV 1
/* Register 0x0E*/
#define BQ2589X_REG_0E 0x0E