109 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * mc13xxx.h - regulators for the Freescale mc13xxx PMIC4 *5 * Copyright (C) 2010 Yong Shen <yong.shen@linaro.org>6 */7 8#ifndef __LINUX_REGULATOR_MC13XXX_H9#define __LINUX_REGULATOR_MC13XXX_H10 11#include <linux/regulator/driver.h>12 13struct 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 22struct 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[] __counted_by(num_regulators);28};29 30extern int mc13xxx_fixed_regulator_set_voltage(struct regulator_dev *rdev,31 int min_uV, int max_uV, unsigned *selector);32 33#ifdef CONFIG_OF34extern int mc13xxx_get_num_regulators_dt(struct platform_device *pdev);35extern struct mc13xxx_regulator_init_data *mc13xxx_parse_regulators_dt(36 struct platform_device *pdev, struct mc13xxx_regulator *regulators,37 int num_regulators);38#else39static inline int mc13xxx_get_num_regulators_dt(struct platform_device *pdev)40{41 return -ENODEV;42}43 44static 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#endif51 52extern const struct regulator_ops mc13xxx_regulator_ops;53extern 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#endif109