blob: 57d84b0e67aba69c5a862eeace03b203f9442afa [file] [log] [blame]
/*
* Copyright (c) 2022 Google LLC
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief Backend APIs for the BC1.2 emulators.
*/
#ifndef ZEPHYR_INCLUDE_DRIVERS_USB_EMUL_BC12_H_
#define ZEPHYR_INCLUDE_DRIVERS_USB_EMUL_BC12_H_
#include <zephyr/drivers/emul.h>
#include <zephyr/drivers/usb/usb_bc12.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief BC1.2 backend emulator APIs
* @defgroup b12_emulator_backend BC1.2 backed emulator APIs
* @ingroup io_interfaces
* @{
*/
/**
* @cond INTERNAL_HIDDEN
*
* These are for internal use only, so skip these in public documentation.
*/
__subsystem struct bc12_emul_driver_api {
int (*set_charging_partner)(const struct emul *emul, enum bc12_type partner_type);
int (*set_pd_partner)(const struct emul *emul, bool connected);
};
/**
* @endcond
*/
/**
* @brief Set the charging partner type connected to the BC1.2 device.
*
* The corresponding BC1.2 emulator updates the vendor specific registers
* to simulate connection of the specified charging partner type. The emulator
* also generates an interrupt for processing by the real driver, if supported.
*
* @param target Pointer to the emulator structure for the BC1.2 emulator instance.
* @param partner_type The simulated partner type. Set to BC12_TYPE_NONE to
* disconnect the charging partner.
*
* @retval 0 If successful.
* @retval -EINVAL if the partner type is not supported.
*/
static inline int bc12_emul_set_charging_partner(const struct emul *target,
enum bc12_type partner_type)
{
const struct bc12_emul_driver_api *backend_api =
(const struct bc12_emul_driver_api *)target->backend_api;
return backend_api->set_charging_partner(target, partner_type);
}
/**
* @brief Set the portable device partner state.
*
* The corresponding BC1.2 emulator updates the vendor specific registers
* to simulate connection or disconnection of a portable device partner.
* The emulator also generates an interrupt for processing by the real driver,
* if supported.
*
* @param target Pointer to the emulator structure for the BC1.2 emulator instance.
* @param connected If true, emulate a connection of a portable device partner. If
* false, emulate a disconnect event.
*
* @retval 0 If successful.
* @retval -EINVAL if the connection/disconnection of PD partner is not supported.
*/
static inline int bc12_emul_set_pd_partner(const struct emul *target, bool connected)
{
const struct bc12_emul_driver_api *backend_api =
(const struct bc12_emul_driver_api *)target->backend_api;
return backend_api->set_pd_partner(target, connected);
}
#ifdef __cplusplus
}
#endif
/**
* @}
*/
#endif /* ZEPHYR_INCLUDE_DRIVERS_USB_EMUL_BC12_H_ */