Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * mc13xxx.h - regulators for the Freescale mc13xxx PMIC
0004  *
0005  *  Copyright (C) 2010 Yong Shen <yong.shen@linaro.org>
0006  */
0007 
0008 #ifndef __LINUX_REGULATOR_MC13XXX_H
0009 #define __LINUX_REGULATOR_MC13XXX_H
0010 
0011 #include <linux/regulator/driver.h>
0012 
0013 struct mc13xxx_regulator {
0014     struct regulator_desc desc;
0015     int reg;
0016     int enable_bit;
0017     int vsel_reg;
0018     int vsel_shift;
0019     int vsel_mask;
0020 };
0021 
0022 struct mc13xxx_regulator_priv {
0023     struct mc13xxx *mc13xxx;
0024     u32 powermisc_pwgt_state;
0025     struct mc13xxx_regulator *mc13xxx_regulators;
0026     int num_regulators;
0027     struct regulator_dev *regulators[];
0028 };
0029 
0030 extern int mc13xxx_fixed_regulator_set_voltage(struct regulator_dev *rdev,
0031         int min_uV, int max_uV, unsigned *selector);
0032 
0033 #ifdef CONFIG_OF
0034 extern int mc13xxx_get_num_regulators_dt(struct platform_device *pdev);
0035 extern struct mc13xxx_regulator_init_data *mc13xxx_parse_regulators_dt(
0036     struct platform_device *pdev, struct mc13xxx_regulator *regulators,
0037     int num_regulators);
0038 #else
0039 static inline int mc13xxx_get_num_regulators_dt(struct platform_device *pdev)
0040 {
0041     return -ENODEV;
0042 }
0043 
0044 static inline struct mc13xxx_regulator_init_data *mc13xxx_parse_regulators_dt(
0045     struct platform_device *pdev, struct mc13xxx_regulator *regulators,
0046     int num_regulators)
0047 {
0048     return NULL;
0049 }
0050 #endif
0051 
0052 extern const struct regulator_ops mc13xxx_regulator_ops;
0053 extern const struct regulator_ops mc13xxx_fixed_regulator_ops;
0054 
0055 #define MC13xxx_DEFINE(prefix, _name, _node, _reg, _vsel_reg, _voltages, _ops)  \
0056     [prefix ## _name] = {               \
0057         .desc = {                       \
0058             .name = #_node,                 \
0059             .n_voltages = ARRAY_SIZE(_voltages),        \
0060             .volt_table =  _voltages,           \
0061             .ops = &_ops,           \
0062             .type = REGULATOR_VOLTAGE,          \
0063             .id = prefix ## _name,      \
0064             .owner = THIS_MODULE,               \
0065         },                          \
0066         .reg = prefix ## _reg,              \
0067         .enable_bit = prefix ## _reg ## _ ## _name ## EN,   \
0068         .vsel_reg = prefix ## _vsel_reg,            \
0069         .vsel_shift = prefix ## _vsel_reg ## _ ## _name ## VSEL,\
0070         .vsel_mask = prefix ## _vsel_reg ## _ ## _name ## VSEL_M,\
0071     }
0072 
0073 #define MC13xxx_FIXED_DEFINE(prefix, _name, _node, _reg, _voltages, _ops)   \
0074     [prefix ## _name] = {               \
0075         .desc = {                       \
0076             .name = #_node,                 \
0077             .n_voltages = ARRAY_SIZE(_voltages),        \
0078             .volt_table =  _voltages,           \
0079             .ops = &_ops,       \
0080             .type = REGULATOR_VOLTAGE,          \
0081             .id = prefix ## _name,      \
0082             .owner = THIS_MODULE,               \
0083         },                          \
0084         .reg = prefix ## _reg,              \
0085         .enable_bit = prefix ## _reg ## _ ## _name ## EN,   \
0086     }
0087 
0088 #define MC13xxx_GPO_DEFINE(prefix, _name, _node, _reg,  _voltages, _ops)    \
0089     [prefix ## _name] = {               \
0090         .desc = {                       \
0091             .name = #_node,                 \
0092             .n_voltages = ARRAY_SIZE(_voltages),        \
0093             .volt_table =  _voltages,           \
0094             .ops = &_ops,       \
0095             .type = REGULATOR_VOLTAGE,          \
0096             .id = prefix ## _name,      \
0097             .owner = THIS_MODULE,               \
0098         },                          \
0099         .reg = prefix ## _reg,              \
0100         .enable_bit = prefix ## _reg ## _ ## _name ## EN,   \
0101     }
0102 
0103 #define MC13xxx_DEFINE_SW(_name, _node, _reg, _vsel_reg, _voltages, ops) \
0104     MC13xxx_DEFINE(SW, _name, _node, _reg, _vsel_reg, _voltages, ops)
0105 #define MC13xxx_DEFINE_REGU(_name, _node, _reg, _vsel_reg, _voltages, ops) \
0106     MC13xxx_DEFINE(REGU, _name, _node, _reg, _vsel_reg, _voltages, ops)
0107 
0108 #endif