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:
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);
|
||||
|
||||
Reference in new issue
Block a user