From f298e1bd95a3d491f9e6369f6da7a4149a60443e Mon Sep 17 00:00:00 2001 From: Guocheng Wang Date: Tue, 10 May 2022 19:36:30 +0800 Subject: [PATCH] charging:Ignore request dpdm Add interface to set ignore sc89890h and bq25890 request dpdm in factory mode. Change-Id: Ie6dcf7990a0a258f6500a735f75d467c46d508b7 Signed-off-by: Guocheng Wang Reviewed-on: https://gerrit.mot.com/2264918 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Wei Wei Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../power/bq2589x_chg_mmi/bq2589x_charger.c | 244 ++++++++++-------- 1 file changed, 130 insertions(+), 114 deletions(-) diff --git a/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c b/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c index 098c93b84ac7..1313a665d88f 100644 --- a/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c +++ b/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c @@ -136,6 +136,7 @@ struct bq2589x { int rsoc; int chg_en_gpio; int wls_en_gpio; + bool ignore_request_dpdm; const char *chg_dev_name; @@ -197,6 +198,8 @@ struct pe_ctrl { }; static struct pe_ctrl pe; +extern bool mmi_is_factory_mode(void); + static int bq2589x_read_byte(struct bq2589x *bq, u8 *data, u8 reg) { int ret; @@ -1418,8 +1421,7 @@ static int bq2589x_parse_dt(struct device *dev, struct bq2589x *bq) /*wls outout en control*/ bq->wls_en_gpio = of_get_named_gpio(bq->dev->of_node, "mmi,wls-en-gpio", 0); - if (gpio_is_valid(bq->wls_en_gpio)) - { + if (gpio_is_valid(bq->wls_en_gpio)) { ret = gpio_request(bq->wls_en_gpio, "mmi wls en pin"); if (ret) { dev_err(bq->dev, "%s: %d gpio(wls en) request failed\n", __func__, bq->wls_en_gpio); @@ -1517,6 +1519,10 @@ static bq2589x_reuqest_dpdm(struct bq2589x *bq, bool enable) { int ret = 0; + if(mmi_is_factory_mode() && bq->ignore_request_dpdm) { + dev_err(bq->dev, "%s ignore_request_dpdm\n", __func__); + return ret; + } mutex_lock(&bq->regulator_lock); /* fetch the DPDM regulator */ if (!bq->dpdm_reg && of_get_property(bq->dev->of_node, "dpdm-supply", NULL)) { @@ -1644,136 +1650,136 @@ static void bq2589x_adjust_absolute_vindpm(struct bq2589x *bq) #ifndef CONFIG_MMI_QC3P_WT6670_DETECTED static int mmi_adjust_qc20_hvdcp_5v(struct bq2589x *bq) -{ - int ret; - int dp_val, dm_val; - - /* dp 0.6v and dm 0v out 5V */ +{ + int ret; + int dp_val, dm_val; + + /* dp 0.6v and dm 0v out 5V */ dm_val = 0x1<dev, "vbus voltage now = %d\n", vbus_voltage); - + if (vbus_voltage > MMI_HVDCP2_VOLTAGE_STANDARD) { dev_info(bq->dev, "QC20 charger detected\n"); - *charger_type = POWER_SUPPLY_TYPE_USB_HVDCP; - } else { + *charger_type = POWER_SUPPLY_TYPE_USB_HVDCP; + } else { dev_info(bq->dev, "charger type is not HVDCP\n"); - } - + } + ret = mmi_adjust_qc20_hvdcp_5v(bq); - if (ret) { + if (ret) { dev_err(bq->dev, "Cann't adjust qc20 hvdcp 5V\n"); - } - - msleep(300);//need tunning - + } + + msleep(300);//need tunning + mmi_get_usb_voltage_now(bq, &vbus_voltage); dev_info(bq->dev, "vbus voltage now = %d after qc20 detected\n", vbus_voltage); - - return ret; + + return ret; } #endif -// Must enter 3.0 mode to call ,otherwise cannot step correctly. +// Must enter 3.0 mode to call ,otherwise cannot step correctly. static int mmi_qc30_step_up_vbus(struct bq2589x *bq) -{ - int ret; - int dp_val; - - /* dm 3.3v to dm 0.6v step up 200mV when IC is QC3.0 mode*/ +{ + int ret; + int dp_val; + + /* dm 3.3v to dm 0.6v step up 200mV when IC is QC3.0 mode*/ dp_val = 0x6<dev, "%s qc30 step up vbus error\n", __func__); - } - - mdelay(100);//need tunning - + } + + mdelay(100);//need tunning + mmi_get_usb_voltage_now(bq, &vbus_voltage); dev_info(bq->dev, "%s vbus voltage now = %d in detected qc30\n", __func__,vbus_voltage); - + if (vbus_voltage > MMI_HVDCP3_VOLTAGE_STANDARD) { - *charger_type = POWER_SUPPLY_TYPE_USB_HVDCP_3; + *charger_type = POWER_SUPPLY_TYPE_USB_HVDCP_3; dev_info(bq->dev, "%s QC3.0 charger detected\n", __func__); - } - - for (i = 0; i < 16; i++) { + } + + for (i = 0; i < 16; i++) { ret = mmi_qc30_step_down_vbus(bq); - if (ret) + if (ret) dev_err(bq->dev, "%s qc30 step down vbus error\n", __func__); - } + } #ifndef CONFIG_MMI_QC3P_TURBO_CHARGER mmi_get_usb_voltage_now(bq, &vbus_voltage); dev_info(bq->dev, "%s vbus voltage now = %d after detected qc30\n", __func__,vbus_voltage); #endif - return ret; + return ret; } #ifdef CONFIG_MMI_QC3P_TURBO_CHARGER @@ -2617,6 +2623,14 @@ static int mmi_set_dp_dm(struct charger_device *chg_dev, int val) dev_dbg(bq->dev, "DP_DM_DM_PULSE rc=%d cnt=%d\n", rc, bq->pulse_cnt); break; + case MMI_POWER_SUPPLY_IGNORE_REQUEST_DPDM: + bq->ignore_request_dpdm = true; + dev_err(bq->dev, "MMI_POWER_SUPPLY_IGNORE_REQUEST_DPDM\n"); + break; + case MMI_POWER_SUPPLY_DONOT_IGNORE_REQUEST_DPDM: + bq->ignore_request_dpdm = false; + dev_err(bq->dev, "MMI_POWER_SUPPLY_DONOT_IGNORE_REQUEST_DPDM\n"); + break; default: break; } @@ -2850,17 +2864,19 @@ static int bq2589x_charger_probe(struct i2c_client *client, bq->client = client; i2c_set_clientdata(client, bq); + bq->ignore_request_dpdm = false; + ret = bq2589x_detect_device(bq); - if (!ret && bq->part_no == BQ25890) { - bq->status |= BQ2589X_STATUS_EXIST; - dev_info(dev, "%s: charger device bq25890 detected, revision:%d\n", __func__, bq->revision); - } else if (!ret && bq->part_no == SC89890H) { - bq->status |= BQ2589X_STATUS_EXIST; - dev_info(dev, "%s: charger device sc89890h detected, revision:%d\n", __func__, bq->revision); - } else { - dev_info(dev, "%s: no bq25890 charger device found:%d\n", __func__, ret); - return -ENODEV; - } + if (!ret && bq->part_no == BQ25890) { + bq->status |= BQ2589X_STATUS_EXIST; + dev_info(dev, "%s: charger device bq25890 detected, revision:%d\n", __func__, bq->revision); + } else if (!ret && bq->part_no == SC89890H) { + bq->status |= BQ2589X_STATUS_EXIST; + dev_info(dev, "%s: charger device sc89890h detected, revision:%d\n", __func__, bq->revision); + } else { + dev_info(dev, "%s: no bq25890 charger device found:%d\n", __func__, ret); + return -ENODEV; + } bq->batt_psy = power_supply_get_by_name("bms");