2 * AXP818 driver based on AXP221 driver
11 * SPDX-License-Identifier: GPL-2.0+
16 #include <asm/arch/gpio.h>
17 #include <asm/arch/pmic_bus.h>
20 static u8 axp818_mvolt_to_cfg(int mvolt, int min, int max, int div)
27 return (mvolt - min) / div;
30 int axp_set_dcdc1(unsigned int mvolt)
33 u8 cfg = axp818_mvolt_to_cfg(mvolt, 1600, 3400, 100);
36 return pmic_bus_clrbits(AXP818_OUTPUT_CTRL1,
37 AXP818_OUTPUT_CTRL1_DCDC1_EN);
39 ret = pmic_bus_write(AXP818_DCDC1_CTRL, cfg);
43 return pmic_bus_setbits(AXP818_OUTPUT_CTRL1,
44 AXP818_OUTPUT_CTRL1_DCDC1_EN);
47 int axp_set_dcdc2(unsigned int mvolt)
53 cfg = 70 + axp818_mvolt_to_cfg(mvolt, 1220, 1300, 20);
55 cfg = axp818_mvolt_to_cfg(mvolt, 500, 1200, 10);
58 return pmic_bus_clrbits(AXP818_OUTPUT_CTRL1,
59 AXP818_OUTPUT_CTRL1_DCDC2_EN);
61 ret = pmic_bus_write(AXP818_DCDC2_CTRL, cfg);
65 return pmic_bus_setbits(AXP818_OUTPUT_CTRL1,
66 AXP818_OUTPUT_CTRL1_DCDC2_EN);
69 int axp_set_dcdc3(unsigned int mvolt)
75 cfg = 70 + axp818_mvolt_to_cfg(mvolt, 1220, 1300, 20);
77 cfg = axp818_mvolt_to_cfg(mvolt, 500, 1200, 10);
80 return pmic_bus_clrbits(AXP818_OUTPUT_CTRL1,
81 AXP818_OUTPUT_CTRL1_DCDC3_EN);
83 ret = pmic_bus_write(AXP818_DCDC3_CTRL, cfg);
87 return pmic_bus_setbits(AXP818_OUTPUT_CTRL1,
88 AXP818_OUTPUT_CTRL1_DCDC3_EN);
91 int axp_set_dcdc5(unsigned int mvolt)
97 cfg = 32 + axp818_mvolt_to_cfg(mvolt, 1140, 1840, 20);
99 cfg = axp818_mvolt_to_cfg(mvolt, 800, 1120, 10);
102 return pmic_bus_clrbits(AXP818_OUTPUT_CTRL1,
103 AXP818_OUTPUT_CTRL1_DCDC5_EN);
105 ret = pmic_bus_write(AXP818_DCDC5_CTRL, cfg);
109 return pmic_bus_setbits(AXP818_OUTPUT_CTRL1,
110 AXP818_OUTPUT_CTRL1_DCDC5_EN);
118 ret = pmic_bus_init();
122 ret = pmic_bus_read(AXP818_CHIP_ID, &axp_chip_id);
126 if (!(axp_chip_id == 0x51))