2019-05-27 09:55:01 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2013-09-11 16:15:40 +04:00
/*
* internal . h - - Voltage / Current Regulator framework internal code
*
* Copyright 2007 , 2008 Wolfson Microelectronics PLC .
* Copyright 2008 SlimLogic Ltd .
*
* Author : Liam Girdwood < lrg @ slimlogic . co . uk >
*/
# ifndef __REGULATOR_INTERNAL_H
# define __REGULATOR_INTERNAL_H
2018-01-26 16:08:44 +03:00
# include <linux/suspend.h>
# define REGULATOR_STATES_NUM (PM_SUSPEND_MAX + 1)
2021-06-03 08:41:37 +03:00
# define rdev_crit(rdev, fmt, ...) \
pr_crit ( " %s: " fmt , rdev_get_name ( rdev ) , # # __VA_ARGS__ )
# define rdev_err(rdev, fmt, ...) \
pr_err ( " %s: " fmt , rdev_get_name ( rdev ) , # # __VA_ARGS__ )
# define rdev_warn(rdev, fmt, ...) \
pr_warn ( " %s: " fmt , rdev_get_name ( rdev ) , # # __VA_ARGS__ )
# define rdev_info(rdev, fmt, ...) \
pr_info ( " %s: " fmt , rdev_get_name ( rdev ) , # # __VA_ARGS__ )
# define rdev_dbg(rdev, fmt, ...) \
pr_debug ( " %s: " fmt , rdev_get_name ( rdev ) , # # __VA_ARGS__ )
2018-01-26 16:08:44 +03:00
struct regulator_voltage {
int min_uV ;
int max_uV ;
} ;
2013-09-11 16:15:40 +04:00
/*
* struct regulator
*
* One for each consumer device .
2018-01-26 16:08:44 +03:00
* @ voltage - a voltage array for each state of runtime , i . e . :
* PM_SUSPEND_ON
* PM_SUSPEND_TO_IDLE
* PM_SUSPEND_STANDBY
* PM_SUSPEND_MEM
* PM_SUSPEND_MAX
2013-09-11 16:15:40 +04:00
*/
struct regulator {
struct device * dev ;
struct list_head list ;
unsigned int always_on : 1 ;
unsigned int bypass : 1 ;
2019-11-15 03:04:38 +03:00
unsigned int device_link : 1 ;
2013-09-11 16:15:40 +04:00
int uA_load ;
2018-11-20 20:52:53 +03:00
unsigned int enable_count ;
unsigned int deferred_disables ;
2018-01-26 16:08:44 +03:00
struct regulator_voltage voltage [ REGULATOR_STATES_NUM ] ;
2017-03-17 04:07:14 +03:00
const char * supply_name ;
2013-09-11 16:15:40 +04:00
struct device_attribute dev_attr ;
struct regulator_dev * rdev ;
struct dentry * debugfs ;
} ;
2018-01-22 17:30:06 +03:00
extern struct class regulator_class ;
static inline struct regulator_dev * dev_to_rdev ( struct device * dev )
{
return container_of ( dev , struct regulator_dev , dev ) ;
}
2014-09-10 18:17:01 +04:00
# ifdef CONFIG_OF
2018-05-02 16:44:57 +03:00
struct regulator_dev * of_find_regulator_by_node ( struct device_node * np ) ;
2014-09-10 02:13:57 +04:00
struct regulator_init_data * regulator_of_get_init_data ( struct device * dev ,
const struct regulator_desc * desc ,
2015-01-05 14:48:42 +03:00
struct regulator_config * config ,
2014-09-10 02:13:57 +04:00
struct device_node * * node ) ;
2018-04-23 17:33:39 +03:00
struct regulator_dev * of_parse_coupled_regulator ( struct regulator_dev * rdev ,
int index ) ;
int of_get_n_coupled ( struct regulator_dev * rdev ) ;
bool of_check_coupling_data ( struct regulator_dev * rdev ) ;
2014-09-10 18:17:01 +04:00
# else
2018-05-02 16:44:57 +03:00
static inline struct regulator_dev *
of_find_regulator_by_node ( struct device_node * np )
{
return NULL ;
}
2014-09-10 18:17:01 +04:00
static inline struct regulator_init_data *
regulator_of_get_init_data ( struct device * dev ,
const struct regulator_desc * desc ,
2015-01-05 14:48:42 +03:00
struct regulator_config * config ,
2014-09-10 18:17:01 +04:00
struct device_node * * node )
{
return NULL ;
}
2014-09-10 02:13:57 +04:00
2018-04-23 17:33:39 +03:00
static inline struct regulator_dev *
of_parse_coupled_regulator ( struct regulator_dev * rdev ,
int index )
{
return NULL ;
}
static inline int of_get_n_coupled ( struct regulator_dev * rdev )
{
return 0 ;
}
static inline bool of_check_coupling_data ( struct regulator_dev * rdev )
{
return false ;
}
# endif
2017-02-04 00:56:02 +03:00
enum regulator_get_type {
NORMAL_GET ,
EXCLUSIVE_GET ,
OPTIONAL_GET ,
MAX_GET_TYPE
} ;
struct regulator * _regulator_get ( struct device * dev , const char * id ,
enum regulator_get_type get_type ) ;
2013-09-11 16:15:40 +04:00
# endif