From d4ed6bacf03b0905a30fd7979ab2d1092551cef0 Mon Sep 17 00:00:00 2001 From: Ricardo Rivera-Matos Date: Mon, 4 Dec 2023 16:55:29 -0600 Subject: [PATCH] drivers: charger: Adds charge_enable handler Adds a charge_enable handler to facilitate enabling and disabling a charge cycle. This deprecates enabling and disable the charge cycle via the CHARGER_PROP_STATUS property. Signed-off-by: Ricardo Rivera-Matos --- doc/hardware/peripherals/charger.rst | 5 +++++ drivers/charger/charger_handlers.c | 9 +++++++++ include/zephyr/drivers/charger.h | 28 ++++++++++++++++++++++++++++ samples/charger/src/main.c | 2 +- 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/doc/hardware/peripherals/charger.rst b/doc/hardware/peripherals/charger.rst index b88876058b8..0198fe11f65 100644 --- a/doc/hardware/peripherals/charger.rst +++ b/doc/hardware/peripherals/charger.rst @@ -8,6 +8,11 @@ The charger subsystem exposes an API to uniformly access battery charger devices Basic Operation *************** +Initiating a Charge Cycle +========================= + +A charge cycle is initiated or terminated using :c:func:`charger_charge_enable`. + Properties ========== diff --git a/drivers/charger/charger_handlers.c b/drivers/charger/charger_handlers.c index 417991f9f5f..4fdf6ca7140 100644 --- a/drivers/charger/charger_handlers.c +++ b/drivers/charger/charger_handlers.c @@ -36,3 +36,12 @@ static inline int z_vrfy_charger_set_prop(const struct device *dev, const charge } #include + +static inline int z_vrfy_charger_charge_enable(const struct device *dev, const bool enable) +{ + K_OOPS(K_SYSCALL_DRIVER_CHARGER(dev, charge_enable)); + + return z_impl_charger_charge_enable(dev, enable); +} + +#include diff --git a/include/zephyr/drivers/charger.h b/include/zephyr/drivers/charger.h index 6159f41dcc0..ec40b299d10 100644 --- a/include/zephyr/drivers/charger.h +++ b/include/zephyr/drivers/charger.h @@ -220,6 +220,14 @@ typedef int (*charger_get_property_t)(const struct device *dev, const charger_pr typedef int (*charger_set_property_t)(const struct device *dev, const charger_prop_t prop, const union charger_propval *val); +/** + * @typedef charger_charge_enable_t + * @brief Callback API enabling or disabling a charge cycle. + * + * See charger_charge_enable() for argument description + */ +typedef int (*charger_charge_enable_t)(const struct device *dev, const bool enable); + /** * @brief Charging device API * @@ -228,6 +236,7 @@ typedef int (*charger_set_property_t)(const struct device *dev, const charger_pr __subsystem struct charger_driver_api { charger_get_property_t get_property; charger_set_property_t set_property; + charger_charge_enable_t charge_enable; }; /** @@ -272,6 +281,25 @@ static inline int z_impl_charger_set_prop(const struct device *dev, const charge return api->set_property(dev, prop, val); } +/** + * @brief Enable or disable a charge cycle + * + * @param dev Pointer to the battery charger device + * @param enable true enables a charge cycle, false disables a charge cycle + * + * @retval 0 if successful + * @retval -EIO if communication with the charger failed + * @retval -EINVAL if the conditions for initiating charging are invalid + */ +__syscall int charger_charge_enable(const struct device *dev, const bool enable); + +static inline int z_impl_charger_charge_enable(const struct device *dev, const bool enable) +{ + const struct charger_driver_api *api = (const struct charger_driver_api *)dev->api; + + return api->charge_enable(dev, enable); +} + /** * @} */ diff --git a/samples/charger/src/main.c b/samples/charger/src/main.c index 4f24e1932d9..91961fe15b1 100644 --- a/samples/charger/src/main.c +++ b/samples/charger/src/main.c @@ -45,7 +45,7 @@ int main(void) val.status = CHARGER_STATUS_CHARGING; - ret = charger_set_prop(chgdev, CHARGER_PROP_STATUS, &val); + ret = charger_charge_enable(chgdev, true); if (ret == -ENOTSUP) { printk("Enabling charge not supported, assuming auto charge enable\n"); continue;