133 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * internal.h -- Voltage/Current Regulator framework internal code4 *5 * Copyright 2007, 2008 Wolfson Microelectronics PLC.6 * Copyright 2008 SlimLogic Ltd.7 *8 * Author: Liam Girdwood <lrg@slimlogic.co.uk>9 */10 11#ifndef __REGULATOR_INTERNAL_H12#define __REGULATOR_INTERNAL_H13 14#include <linux/suspend.h>15 16#define REGULATOR_STATES_NUM (PM_SUSPEND_MAX + 1)17 18#define rdev_crit(rdev, fmt, ...) \19 pr_crit("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__)20#define rdev_err(rdev, fmt, ...) \21 pr_err("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__)22#define rdev_warn(rdev, fmt, ...) \23 pr_warn("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__)24#define rdev_info(rdev, fmt, ...) \25 pr_info("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__)26#define rdev_dbg(rdev, fmt, ...) \27 pr_debug("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__)28 29struct regulator_voltage {30 int min_uV;31 int max_uV;32};33 34/*35 * struct regulator36 *37 * One for each consumer device.38 * @voltage - a voltage array for each state of runtime, i.e.:39 * PM_SUSPEND_ON40 * PM_SUSPEND_TO_IDLE41 * PM_SUSPEND_STANDBY42 * PM_SUSPEND_MEM43 * PM_SUSPEND_MAX44 */45struct regulator {46 struct device *dev;47 struct list_head list;48 unsigned int always_on:1;49 unsigned int bypass:1;50 unsigned int device_link:1;51 int uA_load;52 unsigned int enable_count;53 unsigned int deferred_disables;54 struct regulator_voltage voltage[REGULATOR_STATES_NUM];55 const char *supply_name;56 struct device_attribute dev_attr;57 struct regulator_dev *rdev;58 struct dentry *debugfs;59};60 61extern const struct class regulator_class;62 63static inline struct regulator_dev *dev_to_rdev(struct device *dev)64{65 return container_of(dev, struct regulator_dev, dev);66}67 68#ifdef CONFIG_OF69struct regulator_dev *of_regulator_dev_lookup(struct device *dev,70 const char *supply);71struct regulator_init_data *regulator_of_get_init_data(struct device *dev,72 const struct regulator_desc *desc,73 struct regulator_config *config,74 struct device_node **node);75 76struct regulator_dev *of_parse_coupled_regulator(struct regulator_dev *rdev,77 int index);78 79int of_get_n_coupled(struct regulator_dev *rdev);80 81bool of_check_coupling_data(struct regulator_dev *rdev);82 83#else84static inline struct regulator_dev *of_regulator_dev_lookup(struct device *dev,85 const char *supply)86{87 return ERR_PTR(-ENODEV);88}89 90static inline struct regulator_init_data *91regulator_of_get_init_data(struct device *dev,92 const struct regulator_desc *desc,93 struct regulator_config *config,94 struct device_node **node)95{96 return NULL;97}98 99static inline struct regulator_dev *100of_parse_coupled_regulator(struct regulator_dev *rdev,101 int index)102{103 return NULL;104}105 106static inline int of_get_n_coupled(struct regulator_dev *rdev)107{108 return 0;109}110 111static inline bool of_check_coupling_data(struct regulator_dev *rdev)112{113 return false;114}115 116#endif117enum regulator_get_type {118 NORMAL_GET,119 EXCLUSIVE_GET,120 OPTIONAL_GET,121 MAX_GET_TYPE122};123 124int _regulator_get_common_check(struct device *dev, const char *id,125 enum regulator_get_type get_type);126struct regulator *_regulator_get_common(struct regulator_dev *rdev, struct device *dev,127 const char *id, enum regulator_get_type get_type);128struct regulator *_regulator_get(struct device *dev, const char *id,129 enum regulator_get_type get_type);130int _regulator_bulk_get(struct device *dev, int num_consumers,131 struct regulator_bulk_data *consumers, enum regulator_get_type get_type);132#endif133