From 247b2c7d64ec7a47b075807b57b831ed006671f8 Mon Sep 17 00:00:00 2001 From: xuwei9 Date: Fri, 17 Dec 2021 22:09:56 +0800 Subject: [PATCH] discrete:add enable termination iio definition Add main charger enable termination iio definition. Change-Id: I80ba57a4c669c44561bab152a2f7d3f1a887b325 Signed-off-by: xuwei9 Reviewed-on: https://gerrit.mot.com/2148136 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key --- .../mmi_discrete_charger_class.c | 10 ++++++++++ .../mmi_discrete_charger_core.c | 15 +++++++++++++++ .../mmi_discrete_charger_core.h | 3 ++- .../mmi_discrete_charger_iio.c | 3 +++ .../mmi_discrete_charger_iio.h | 1 + include/linux/mmi_discrete_charger_class.h | 3 +++ 6 files changed, 34 insertions(+), 1 deletion(-) diff --git a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_class.c b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_class.c index 66d61a4bcad6..7c17e62d294a 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_class.c +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_class.c @@ -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_termination(struct charger_device *chg_dev, bool en) +{ + if (chg_dev != NULL && chg_dev->ops != NULL && + chg_dev->ops->enable_termination) + return chg_dev->ops->enable_termination(chg_dev, en); + + return -ENOTSUPP; +} +EXPORT_SYMBOL(charger_dev_enable_termination); + int charger_dev_is_enabled_charging(struct charger_device *chg_dev, bool *en) { if (chg_dev != NULL && chg_dev->ops != NULL && diff --git a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c index c11a22650e06..1ea61afd34c9 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c @@ -1952,6 +1952,21 @@ int mmi_discrete_config_charging_enabled(struct mmi_discrete_charger *chip, int return rc; } +int mmi_discrete_config_termination_enabled(struct mmi_discrete_charger *chip, int val) +{ + int rc = 0; + + mmi_dbg(chip, "mmi_discrete_config_termination_enabled val:%d\n",val); + + rc = charger_dev_enable_termination(chip->master_chg_dev, + val ? true:false); + if (rc) + mmi_err(chip, "Couldn't %s termination rc=%d\n", + val ? "enable":"disable", rc); + + return rc; +} + int mmi_discrete_get_charging_enabled(struct mmi_discrete_charger *chip, bool *val) { int rc = 0; diff --git a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.h b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.h index 59cb6df7c83c..7f8b4410da7f 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.h +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.h @@ -137,5 +137,6 @@ int mmi_discrete_get_hw_current_max(struct mmi_discrete_charger *chip, int *val) int mmi_discrete_config_charging_enabled(struct mmi_discrete_charger *chip, int val); int mmi_discrete_get_charging_enabled(struct mmi_discrete_charger *chip, bool *val); int mmi_discrete_config_input_current_settled(struct mmi_discrete_charger *chip, int val); +int mmi_discrete_config_termination_enabled(struct mmi_discrete_charger *chip, int val); -#endif \ No newline at end of file +#endif diff --git a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.c b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.c index 9fbdd9a6d964..d6a50fcf1644 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.c +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.c @@ -35,6 +35,9 @@ static int mmi_discrete_iio_write_raw(struct iio_dev *indio_dev, case PSY_IIO_INPUT_CURRENT_SETTLED: rc = mmi_discrete_config_input_current_settled(chip, val1); break; + case PSY_IIO_USB_TERMINATION_ENABLED: + rc = mmi_discrete_config_termination_enabled(chip, val1); + break; default: pr_err("Unsupported mmi_discrete IIO chan %d\n", chan->channel); rc = -EINVAL; diff --git a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.h b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.h index 8c45cf0afc03..cd3bbff31193 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.h +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.h @@ -47,6 +47,7 @@ static const struct mmi_discrete_iio_channels mmi_discrete_iio_psy_channels[] = MMI_DISCRETE_CHAN_INDEX("hw_current_max", PSY_IIO_HW_CURRENT_MAX) MMI_DISCRETE_CHAN_INDEX("charging_enabled", PSY_IIO_USB_CHARGING_ENABLED) MMI_DISCRETE_CHAN_INDEX("input_current_settled", PSY_IIO_INPUT_CURRENT_SETTLED) + MMI_DISCRETE_CHAN_INDEX("termination_enabled", PSY_IIO_USB_TERMINATION_ENABLED) }; int mmi_discrete_init_iio_psy(struct mmi_discrete_charger *chip, diff --git a/include/linux/mmi_discrete_charger_class.h b/include/linux/mmi_discrete_charger_class.h index 3af78a49964d..f09d3fd88261 100644 --- a/include/linux/mmi_discrete_charger_class.h +++ b/include/linux/mmi_discrete_charger_class.h @@ -80,6 +80,7 @@ struct charger_ops { int (*is_charge_halted)(struct charger_device *dev, bool *en); int (*dump_registers)(struct charger_device *dev, struct seq_file *m); + int (*enable_termination)(struct charger_device *dev, bool en); }; #define to_charger_device(obj) container_of(obj, struct charger_device, dev) @@ -106,6 +107,8 @@ extern int charger_dev_get_charging_current(struct charger_device *chg_dev, u32 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); + extern int charger_dev_is_enabled_charging(struct charger_device *chg_dev, bool *en); extern int charger_dev_dump_registers(struct charger_device *chg_dev, struct seq_file *m);