/* * Copyright (C) 2017, Theobroma Systems. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of ARM nor the names of its contributors may be used * to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef __SUNXI_POWER_H__ #define __SUNXI_POWER_H__ #include #include int sunxi_pmic_setup(void); /* Register-level access */ int sunxi_pmic_read(uint8_t address, uint8_t *value); int sunxi_pmic_write(uint8_t address, uint8_t value); int sunxi_pmic_set_bit(uint8_t address, uint8_t bit); int sunxi_pmic_clear_bit(uint8_t address, uint8_t bit); /* Regulator-level access */ enum axp803_regulator { AXP803_DLDO1, AXP803_DLDO2, AXP803_DLDO3, AXP803_DLDO4, AXP803_ELDO1, AXP803_ELDO2, AXP803_ELDO3, AXP803_FLDO1, AXP803_FLDO2, AXP803_DCDC1, AXP803_DCDC2, AXP803_DCDC3, AXP803_DCDC4, AXP803_DCDC5, AXP803_DCDC6, AXP803_ALDO1, AXP803_ALDO2, AXP803_ALDO3, }; int sunxi_pmic_set_voltage(enum axp803_regulator r, uint32_t mvolt); int sunxi_pmic_get_voltage(enum axp803_regulator r, uint32_t *mvolt); int sunxi_pmic_set_enable(enum axp803_regulator r, uint32_t enable); int sunxi_pmic_get_enable(enum axp803_regulator r, uint32_t *enable); /* Task-level access */ enum pmic_task_type { PMIC_SET_VOLTAGE, PMIC_SET_ENABLE, }; struct pmic_task { enum pmic_task_type t; enum axp803_regulator r; uint32_t val; /* mvolt or enable */ }; int sunxi_pmic_run_tasks(struct pmic_task *tasks, size_t tasks_num); #endif /* __SUNXI_POWER_H__ */