| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_DEVICES_POWER_DRIVERS_VS680_POWER_VS680_POWER_H_ |
| #define SRC_DEVICES_POWER_DRIVERS_VS680_POWER_VS680_POWER_H_ |
| |
| #include <fuchsia/hardware/i2c/cpp/banjo.h> |
| #include <fuchsia/hardware/powerimpl/cpp/banjo.h> |
| #include <lib/zircon-internal/thread_annotations.h> |
| |
| #include <ddktl/device.h> |
| #include <fbl/mutex.h> |
| |
| namespace power { |
| |
| class Vs680Power : public ddk::Device<Vs680Power>, |
| public ddk::PowerImplProtocol<Vs680Power, ddk::base_protocol> { |
| public: |
| static zx_status_t Create(void* ctx, zx_device_t* parent); |
| |
| Vs680Power(zx_device_t* parent, const ddk::I2cProtocolClient& pmic_i2c) |
| : ddk::Device<Vs680Power>(parent), pmic_i2c_(pmic_i2c) {} |
| ~Vs680Power() {} |
| |
| void DdkRelease() { delete this; } |
| |
| zx_status_t PowerImplGetPowerDomainStatus(uint32_t index, power_domain_status_t* out_status); |
| zx_status_t PowerImplEnablePowerDomain(uint32_t index); |
| zx_status_t PowerImplDisablePowerDomain(uint32_t index); |
| zx_status_t PowerImplGetSupportedVoltageRange(uint32_t index, uint32_t* out_min, |
| uint32_t* out_max); |
| zx_status_t PowerImplRequestVoltage(uint32_t index, uint32_t voltage, |
| uint32_t* out_actual_voltage); |
| zx_status_t PowerImplGetCurrentVoltage(uint32_t index, uint32_t* out_current_voltage); |
| zx_status_t PowerImplWritePmicCtrlReg(uint32_t index, uint32_t reg_addr, uint32_t value); |
| zx_status_t PowerImplReadPmicCtrlReg(uint32_t index, uint32_t reg_addr, uint32_t* out_value); |
| |
| private: |
| fbl::Mutex lock_; |
| ddk::I2cProtocolClient pmic_i2c_ TA_GUARDED(lock_); |
| }; |
| |
| } // namespace power |
| |
| #endif // SRC_DEVICES_POWER_DRIVERS_VS680_POWER_VS680_POWER_H_ |