kernel-fxtec-pro1x/drivers/regulator/internal.h
David Collins 1dff8619be regulator: core: add debugfs regulator monitoring and control features
Add several debugfs files for each registered regulator which
allow for monitoring of the regulator state and the requests from
each consumer.  Also configure these files as writeable so that a
debug consumer requested per-regulator can easily vote on the
regulator state.

This commit is a squash of the following msm-4.4 branch commits
with checkpatch warnings and other minor issues resolved:

commit 32c846e998a1 ("regulator: debugfs: Adding debugfs
                      functions into regulator framework")
commit db58e9bdc318 ("regulator: core: fix regulator bypass
                      logic")
commit 40456168dbe8 ("regulator: core: put debugfs consumer
                      handle when unregistering a regulator")
commit a118e09f3ce4 ("regulator: core: correct double remove
                      in rdev_deinit_debugfs")
commit 7ff3a4cc82e7 ("regulator: correct name used in debug
                      consumer regulator_get call")

Change-Id: Ia13b8f698868374499bb9be390ade4519c517e29
Signed-off-by: David Collins <collinsd@codeaurora.org>
2018-09-26 15:13:42 -07:00

117 lines
2.7 KiB
C

/*
* 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>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
*/
#ifndef __REGULATOR_INTERNAL_H
#define __REGULATOR_INTERNAL_H
#include <linux/suspend.h>
#define REGULATOR_STATES_NUM (PM_SUSPEND_MAX + 1)
struct regulator_voltage {
int min_uV;
int max_uV;
};
/*
* struct regulator
*
* One for each consumer device.
* @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
*/
struct regulator {
struct device *dev;
struct list_head list;
unsigned int always_on:1;
unsigned int bypass:1;
int uA_load;
struct regulator_voltage voltage[REGULATOR_STATES_NUM];
int enabled;
const char *supply_name;
struct device_attribute dev_attr;
struct regulator_dev *rdev;
struct dentry *debugfs;
};
extern struct class regulator_class;
static inline struct regulator_dev *dev_to_rdev(struct device *dev)
{
return container_of(dev, struct regulator_dev, dev);
}
#ifdef CONFIG_OF
struct regulator_dev *of_find_regulator_by_node(struct device_node *np);
struct regulator_init_data *regulator_of_get_init_data(struct device *dev,
const struct regulator_desc *desc,
struct regulator_config *config,
struct device_node **node);
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);
#else
static inline struct regulator_dev *
of_find_regulator_by_node(struct device_node *np)
{
return NULL;
}
static inline struct regulator_init_data *
regulator_of_get_init_data(struct device *dev,
const struct regulator_desc *desc,
struct regulator_config *config,
struct device_node **node)
{
return NULL;
}
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
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);
#endif