blob: 4983eca8b03af593545e7640e43d2ac70ce4b805 [file] [log] [blame]
// Copyright 2019 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.
library fuchsia.hardware.power;
using zx;
type PowerDomainStatus = strict enum : uint8 {
DISABLED = 1;
ENABLED = 2;
};
@transport("Banjo")
@banjo_layout("ddk-protocol")
protocol Power {
/// Register the callee for this power domain. The callee will be registered until
/// UnregisterPowerDomain is called. Any voltage changes to the power domain will
/// be made considering the min_needed_voltage(in uV) and max_supported_voltage(in uV) published here.
/// If voltages mentioned are out of supported voltage range of domain(obtained by calling
/// GetSupportedVoltageRange), the callee will be registered with the supported voltage range.
RegisterPowerDomain(struct {
min_needed_voltage uint32;
max_supported_voltage uint32;
}) -> (struct {
s zx.status;
});
/// Unregister the callee for this power domain. The callee will no longer be considered as
/// a dependent of this power domain.
UnregisterPowerDomain() -> (struct {
s zx.status;
});
/// Get Supported Voltage Range. min and max are in micorVolts(uV)
GetSupportedVoltageRange() -> (struct {
s zx.status;
min uint32;
max uint32;
});
/// Request a particular voltage. The actual_voltage is the voltage that the power domain
/// is transitioned to after considering supported voltage ranges of all the registered
/// dependents. "voltage" should be in uV.
RequestVoltage(struct {
voltage uint32;
}) -> (struct {
s zx.status;
actual_voltage uint32;
});
/// Get current voltage in uV.
GetCurrentVoltage(struct {
index uint32;
}) -> (struct {
s zx.status;
current_voltage uint32;
});
/// Get power domain status
GetPowerDomainStatus() -> (struct {
s zx.status;
status PowerDomainStatus;
});
/// Write to ctrl register of PMIC
WritePmicCtrlReg(struct {
reg_addr uint32;
value uint32;
}) -> (struct {
s zx.status;
});
/// Read ctrl register of PMIC
ReadPmicCtrlReg(struct {
reg_addr uint32;
}) -> (struct {
s zx.status;
value uint32;
});
};