Optimize time sequence of usb_therm mos control

Details:
Optimize time sequence of usb_therm mos control

Change-Id: Ib55002ae5a968bd87675230436533d1a708d66e3
Reviewed-on: https://gerrit.mot.com/2447403
Reviewed-by: <hq114@motorola.com>
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Lei Chen <chenl18@motorola.com>
Reviewed-by: Xiangpo Zhao <zhaoxp3@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
[A authored and hq114 committed 2022-12-01 03:17:22 -06:00
1 parent 2393e1a657
commit a1d1c632e4
5 files changed
+66 -2

No files matched your search

@@ -2986,6 +2986,21 @@ static int bq2589x_set_boost_current_limit(struct charger_device *chg_dev, u32 u
return ret;
}
static int bq2589x_enable_hz(struct charger_device *chg_dev, bool enable)
{
struct bq2589x *bq = dev_get_drvdata(&chg_dev->dev);
int ret;
if (enable)
ret = bq2589x_enter_hiz_mode(bq);
else
ret = bq2589x_exit_hiz_mode(bq);
dev_info(bq->dev,"%s, %s input hz %s\n", __func__, enable ? "enable" : "disable", ret == 0 ? "success":"failed");
return ret;
}
static int bq2589x_enable_charging(struct charger_device *chg_dev, bool enable)
{
struct bq2589x *bq = dev_get_drvdata(&chg_dev->dev);
@@ -3107,6 +3122,7 @@ static struct charger_ops bq2589x_chg_ops = {
.enable_otg = bq2589x_set_otg_enable,
.set_boost_current_limit = bq2589x_set_boost_current_limit,
.enable_charging = bq2589x_enable_charging,
.enable_hz = bq2589x_enable_hz,
.set_charging_current = bq2589x_set_charging_current,
.set_constant_voltage = bq2589x_set_charging_voltage,
.is_charge_halted = bq2589x_is_charging_halted,
@@ -71,6 +71,16 @@ int charger_dev_enable_charging(struct charger_device *chg_dev, bool en)
}
EXPORT_SYMBOL(charger_dev_enable_charging);
int charger_dev_enable_hz(struct charger_device *chg_dev, bool en)
{
if (chg_dev != NULL && chg_dev->ops != NULL &&
chg_dev->ops->enable_hz)
return chg_dev->ops->enable_hz(chg_dev, en);
return -ENOTSUPP;
}
EXPORT_SYMBOL(charger_dev_enable_hz);
int charger_dev_enable_termination(struct charger_device *chg_dev, bool en)
{
if (chg_dev != NULL && chg_dev->ops != NULL &&
@@ -1830,8 +1830,21 @@ static int usb_therm_set_mosfet(struct mmi_discrete_charger *chip,bool enable)
/*set typec mosfet output*/
if (gpio_is_valid(chip->mos_en_gpio)) {
mmi_err(chip, "%s,set mos en.",__func__);
mmi_err(chip, "%s,set mos en: %d.",__func__,enable);
if(enable){
ret = charger_dev_enable_charging(chip->master_chg_dev,false);
ret = charger_dev_enable_hz(chip->master_chg_dev,true);
udelay(300);
gpio_direction_output(chip->mos_en_gpio, enable);
mmi_err(chip, "%s,open mos en: %d %d",__func__,enable,ret);
}
else{
gpio_direction_output(chip->mos_en_gpio, enable);
udelay(300);
ret = charger_dev_enable_charging(chip->master_chg_dev,true);
ret = charger_dev_enable_hz(chip->master_chg_dev,false);
mmi_err(chip, "%s,close mos en: %d %d",__func__,enable,ret);
}
}
return ret;
@@ -1843,7 +1856,7 @@ static int usb_therm_get_mosfet(struct mmi_discrete_charger *chip)
/*get typec mosfet output*/
if (gpio_is_valid(chip->mos_en_gpio)) {
mmi_err(chip, "%s,get mos en.",__func__);
// mmi_err(chip, "%s,get mos en.",__func__);
return gpio_get_value(chip->mos_en_gpio);
}
@@ -3291,6 +3304,10 @@ static int mmi_discrete_remove(struct platform_device *pdev)
cancel_delayed_work(&chip->charger_work);
mmi_discrete_charger_deinit(chip);
/*for usb thermal*/
if(chip->mosfet_supported)
gpio_free(chip->mos_en_gpio);
if (chip->mmi_psy)
power_supply_put(chip->mmi_psy);
if (chip->bms_psy)
@@ -3050,6 +3050,21 @@ static int sgm4154x_enable_charging(struct charger_device *chg_dev, bool enable)
return rc;
}
static int sgm4154x_enable_hz(struct charger_device *chg_dev, bool enable)
{
struct sgm4154x_device *sgm = dev_get_drvdata(&chg_dev->dev);
int rc = 0;
rc = mmi_regmap_update_bits(sgm, SGM4154x_CHRG_CTRL_0, SGM4154x_HIZ_EN,
enable ? SGM4154x_HIZ_EN : 0);
pr_info("%s, %s hz %s\n", __func__,
enable ? "enable" : "disable",
rc ? "failed" : "success");
return rc;
}
static int sgm4154x_set_charging_current(struct charger_device *chg_dev, u32 uA)
{
struct sgm4154x_device *sgm = dev_get_drvdata(&chg_dev->dev);
@@ -3229,6 +3244,7 @@ static struct charger_ops sgm4154x_chg_ops = {
.enable_otg = sgm4154x_enable_otg,
.set_boost_current_limit = sgm4154x_set_boost_current_limit,
.enable_charging = sgm4154x_enable_charging,
.enable_hz = sgm4154x_enable_hz,
.set_charging_current = sgm4154x_set_charging_current,
.set_constant_voltage = sgm4154x_set_charging_voltage,
.is_charge_halted = sgm4154x_is_charging_halted,
@@ -50,6 +50,9 @@ struct charger_ops {
int (*get_qc3p_power)(struct charger_device *dev, int *qc3p_power);
int (*config_pd_active)(struct charger_device *dev, int val);
/* enable/disable hz */
int (*enable_hz)(struct charger_device *dev, bool en);
/* enable/disable charger */
int (*enable_charging)(struct charger_device *dev, bool en);
int (*is_enabled_charging)(struct charger_device *dev, bool *en);
@@ -107,6 +110,8 @@ extern int charger_dev_set_charging_current(struct charger_device *chg_dev, u32
extern int charger_dev_get_charging_current(struct charger_device *chg_dev, u32 *uA);
extern int charger_dev_enable_hz(struct charger_device *chg_dev, bool en);
extern int charger_dev_enable_charging(struct charger_device *chg_dev, bool en);
extern int charger_dev_enable_termination(struct charger_device *chg_dev, bool en);