charger: Initial charger dedicated API
Add initial charger driver API with the most basic of native_posix driver tests. Signed-off-by: Ricardo Rivera-Matos <rriveram@opensource.cirrus.com>
This commit is contained in:
parent
2c2124de76
commit
a7adb06ff4
38
drivers/charger/charger_handlers.c
Normal file
38
drivers/charger/charger_handlers.c
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Copyright 2023 Cirrus Logic, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <zephyr/syscall_handler.h>
|
||||
#include <zephyr/drivers/charger.h>
|
||||
|
||||
static inline int z_vrfy_charger_get_prop(const struct device *dev, const charger_prop_t prop,
|
||||
union charger_propval *val)
|
||||
{
|
||||
union charger_propval k_val;
|
||||
|
||||
Z_OOPS(Z_SYSCALL_DRIVER_CHARGER(dev, get_property));
|
||||
|
||||
int ret = z_impl_charger_get_prop(dev, prop, &k_val);
|
||||
|
||||
Z_OOPS(z_user_to_copy(val, &k_val, sizeof(union charger_propval)));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#include <syscalls/charger_get_prop_mrsh.c>
|
||||
|
||||
static inline int z_vrfy_charger_set_prop(const struct device *dev, const charger_prop_t prop,
|
||||
const union charger_propval *val)
|
||||
{
|
||||
union charger_propval k_val;
|
||||
|
||||
Z_OOPS(Z_SYSCALL_DRIVER_CHARGER(dev, set_property));
|
||||
|
||||
Z_OOPS(z_user_from_copy(&k_val, val, sizeof(union charger_propval)));
|
||||
|
||||
return z_impl_charger_set_prop(dev, prop, &k_val);
|
||||
}
|
||||
|
||||
#include <syscalls/charger_set_prop_mrsh.c>
|
184
include/zephyr/drivers/charger.h
Normal file
184
include/zephyr/drivers/charger.h
Normal file
|
@ -0,0 +1,184 @@
|
|||
/*
|
||||
* Copyright 2023 Cirrus Logic, Inc.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#ifndef ZEPHYR_INCLUDE_DRIVERS_CHARGER_H_
|
||||
#define ZEPHYR_INCLUDE_DRIVERS_CHARGER_H_
|
||||
|
||||
/**
|
||||
* @brief Charger Interface
|
||||
* @defgroup charger_interface Charger Interface
|
||||
* @ingroup io_interfaces
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <zephyr/device.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/**
|
||||
* @brief Runtime Dynamic Battery Parameters
|
||||
*/
|
||||
enum charger_property {
|
||||
/** Indicates if external supply is present for the charger. */
|
||||
/** Value should be of type enum charger_online */
|
||||
CHARGER_PROP_ONLINE = 0,
|
||||
/** Reports whether or not a battery is present. */
|
||||
/** Value should be of type bool*/
|
||||
CHARGER_PROP_PRESENT,
|
||||
/** Represents the charging status of the charger. */
|
||||
/** Value should be of type enum charger_status */
|
||||
CHARGER_PROP_STATUS,
|
||||
/** Reserved to demark end of common charger properties */
|
||||
CHARGER_PROP_COMMON_COUNT,
|
||||
/**
|
||||
* Reserved to demark downstream custom properties - use this value as the actual value may
|
||||
* change over future versions of this API
|
||||
*/
|
||||
CHARGER_PROP_CUSTOM_BEGIN = CHARGER_PROP_COMMON_COUNT + 1,
|
||||
/** Reserved to demark end of valid enum properties */
|
||||
CHARGER_PROP_MAX = UINT16_MAX,
|
||||
};
|
||||
|
||||
/**
|
||||
* @typedef charger_prop_t
|
||||
* @brief A charger property's identifier
|
||||
*
|
||||
* See charger_property for a list of identifiers
|
||||
*/
|
||||
typedef uint16_t charger_prop_t;
|
||||
|
||||
/**
|
||||
* @brief External supply states
|
||||
*/
|
||||
enum charger_online {
|
||||
/** External supply not present */
|
||||
CHARGER_ONLINE_OFFLINE = 0,
|
||||
/** External supply is present and of fixed output */
|
||||
CHARGER_ONLINE_FIXED,
|
||||
/** External supply is present and of programmable output*/
|
||||
CHARGER_ONLINE_PROGRAMMABLE,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Charging states
|
||||
*/
|
||||
enum charger_status {
|
||||
/** Charging device state is unknown */
|
||||
CHARGER_STATUS_UNKNOWN = 0,
|
||||
/** Charging device is charging a battery */
|
||||
CHARGER_STATUS_CHARGING,
|
||||
/** Charging device is not able to charge a battery */
|
||||
CHARGER_STATUS_DISCHARGING,
|
||||
/** Charging device is not charging a battery */
|
||||
CHARGER_STATUS_NOT_CHARGING,
|
||||
/** The battery is full and the charging device will not attempt charging */
|
||||
CHARGER_STATUS_FULL,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief container for a charger_property value
|
||||
*
|
||||
*/
|
||||
union charger_propval {
|
||||
/* Fields have the format: */
|
||||
/* CHARGER_PROPERTY_FIELD */
|
||||
/* type property_field; */
|
||||
|
||||
/** CHARGER_PROP_ONLINE */
|
||||
enum charger_online online;
|
||||
/** CHARGER_PROP_PRESENT */
|
||||
bool present;
|
||||
/** CHARGER_PROP_STATUS */
|
||||
enum charger_status status;
|
||||
};
|
||||
|
||||
/**
|
||||
* @typedef charger_get_property_t
|
||||
* @brief Callback API for getting a charger property.
|
||||
*
|
||||
* See charger_get_property() for argument description
|
||||
*/
|
||||
typedef int (*charger_get_property_t)(const struct device *dev, const charger_prop_t prop,
|
||||
union charger_propval *val);
|
||||
|
||||
/**
|
||||
* @typedef charger_set_property_t
|
||||
* @brief Callback API for setting a charger property.
|
||||
*
|
||||
* See charger_set_property() for argument description
|
||||
*/
|
||||
typedef int (*charger_set_property_t)(const struct device *dev, const charger_prop_t prop,
|
||||
const union charger_propval *val);
|
||||
|
||||
/**
|
||||
* @brief Charging device API
|
||||
*
|
||||
* Caching is entirely on the onus of the client
|
||||
*/
|
||||
__subsystem struct charger_driver_api {
|
||||
charger_get_property_t get_property;
|
||||
charger_set_property_t set_property;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Fetch a battery charger property
|
||||
*
|
||||
* @param dev Pointer to the battery charger device
|
||||
* @param prop Charger property to get
|
||||
* @param val Pointer to charger_propval union
|
||||
*
|
||||
* @retval 0 if successful
|
||||
* @retval < 0 if getting property failed
|
||||
*/
|
||||
__syscall int charger_get_prop(const struct device *dev, const charger_prop_t prop,
|
||||
union charger_propval *val);
|
||||
|
||||
static inline int z_impl_charger_get_prop(const struct device *dev, const charger_prop_t prop,
|
||||
union charger_propval *val)
|
||||
{
|
||||
const struct charger_driver_api *api = (const struct charger_driver_api *)dev->api;
|
||||
|
||||
return api->get_property(dev, prop, val);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set a battery charger property
|
||||
*
|
||||
* @param dev Pointer to the battery charger device
|
||||
* @param prop Charger property to set
|
||||
* @param val Pointer to charger_propval union
|
||||
*
|
||||
* @retval 0 if successful
|
||||
* @retval < 0 if setting property failed
|
||||
*/
|
||||
__syscall int charger_set_prop(const struct device *dev, const charger_prop_t prop,
|
||||
const union charger_propval *val);
|
||||
|
||||
static inline int z_impl_charger_set_prop(const struct device *dev, const charger_prop_t prop,
|
||||
const union charger_propval *val)
|
||||
{
|
||||
const struct charger_driver_api *api = (const struct charger_driver_api *)dev->api;
|
||||
|
||||
return api->set_property(dev, prop, val);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include <syscalls/charger.h>
|
||||
|
||||
#endif /* ZEPHYR_INCLUDE_DRIVERS_CHARGER_H_ */
|
Loading…
Reference in a new issue