1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * mc13xxx.h - regulators for the Freescale mc13xxx PMIC 4 * 5 * Copyright (C) 2010 Yong Shen <yong.shen@linaro.org> 6 */ 7 8 #ifndef __LINUX_REGULATOR_MC13XXX_H 9 #define __LINUX_REGULATOR_MC13XXX_H 10 11 #include <linux/regulator/driver.h> 12 13 struct mc13xxx_regulator { 14 struct regulator_desc desc; 15 int reg; 16 int enable_bit; 17 int vsel_reg; 18 int vsel_shift; 19 int vsel_mask; 20 }; 21 22 struct mc13xxx_regulator_priv { 23 struct mc13xxx *mc13xxx; 24 u32 powermisc_pwgt_state; 25 struct mc13xxx_regulator *mc13xxx_regulators; 26 int num_regulators; 27 struct regulator_dev *regulators[]; 28 }; 29 30 extern int mc13xxx_fixed_regulator_set_voltage(struct regulator_dev *rdev, 31 int min_uV, int max_uV, unsigned *selector); 32 33 #ifdef CONFIG_OF 34 extern int mc13xxx_get_num_regulators_dt(struct platform_device *pdev); 35 extern struct mc13xxx_regulator_init_data *mc13xxx_parse_regulators_dt( 36 struct platform_device *pdev, struct mc13xxx_regulator *regulators, 37 int num_regulators); 38 #else 39 static inline int mc13xxx_get_num_regulators_dt(struct platform_device *pdev) 40 { 41 return -ENODEV; 42 } 43 44 static inline struct mc13xxx_regulator_init_data *mc13xxx_parse_regulators_dt( 45 struct platform_device *pdev, struct mc13xxx_regulator *regulators, 46 int num_regulators) 47 { 48 return NULL; 49 } 50 #endif 51 52 extern const struct regulator_ops mc13xxx_regulator_ops; 53 extern const struct regulator_ops mc13xxx_fixed_regulator_ops; 54 55 #define MC13xxx_DEFINE(prefix, _name, _node, _reg, _vsel_reg, _voltages, _ops) \ 56 [prefix ## _name] = { \ 57 .desc = { \ 58 .name = #_node, \ 59 .n_voltages = ARRAY_SIZE(_voltages), \ 60 .volt_table = _voltages, \ 61 .ops = &_ops, \ 62 .type = REGULATOR_VOLTAGE, \ 63 .id = prefix ## _name, \ 64 .owner = THIS_MODULE, \ 65 }, \ 66 .reg = prefix ## _reg, \ 67 .enable_bit = prefix ## _reg ## _ ## _name ## EN, \ 68 .vsel_reg = prefix ## _vsel_reg, \ 69 .vsel_shift = prefix ## _vsel_reg ## _ ## _name ## VSEL,\ 70 .vsel_mask = prefix ## _vsel_reg ## _ ## _name ## VSEL_M,\ 71 } 72 73 #define MC13xxx_FIXED_DEFINE(prefix, _name, _node, _reg, _voltages, _ops) \ 74 [prefix ## _name] = { \ 75 .desc = { \ 76 .name = #_node, \ 77 .n_voltages = ARRAY_SIZE(_voltages), \ 78 .volt_table = _voltages, \ 79 .ops = &_ops, \ 80 .type = REGULATOR_VOLTAGE, \ 81 .id = prefix ## _name, \ 82 .owner = THIS_MODULE, \ 83 }, \ 84 .reg = prefix ## _reg, \ 85 .enable_bit = prefix ## _reg ## _ ## _name ## EN, \ 86 } 87 88 #define MC13xxx_GPO_DEFINE(prefix, _name, _node, _reg, _voltages, _ops) \ 89 [prefix ## _name] = { \ 90 .desc = { \ 91 .name = #_node, \ 92 .n_voltages = ARRAY_SIZE(_voltages), \ 93 .volt_table = _voltages, \ 94 .ops = &_ops, \ 95 .type = REGULATOR_VOLTAGE, \ 96 .id = prefix ## _name, \ 97 .owner = THIS_MODULE, \ 98 }, \ 99 .reg = prefix ## _reg, \ 100 .enable_bit = prefix ## _reg ## _ ## _name ## EN, \ 101 } 102 103 #define MC13xxx_DEFINE_SW(_name, _node, _reg, _vsel_reg, _voltages, ops) \ 104 MC13xxx_DEFINE(SW, _name, _node, _reg, _vsel_reg, _voltages, ops) 105 #define MC13xxx_DEFINE_REGU(_name, _node, _reg, _vsel_reg, _voltages, ops) \ 106 MC13xxx_DEFINE(REGU, _name, _node, _reg, _vsel_reg, _voltages, ops) 107 108 #endif 109