13d0407baSopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 23d0407baSopenharmony_ci/* 33d0407baSopenharmony_ci * internal.h -- Voltage/Current Regulator framework internal code 43d0407baSopenharmony_ci * 53d0407baSopenharmony_ci * Copyright 2007, 2008 Wolfson Microelectronics PLC. 63d0407baSopenharmony_ci * Copyright 2008 SlimLogic Ltd. 73d0407baSopenharmony_ci * 83d0407baSopenharmony_ci * Author: Liam Girdwood <lrg@slimlogic.co.uk> 93d0407baSopenharmony_ci */ 103d0407baSopenharmony_ci 113d0407baSopenharmony_ci#ifndef __REGULATOR_INTERNAL_H 123d0407baSopenharmony_ci#define __REGULATOR_INTERNAL_H 133d0407baSopenharmony_ci 143d0407baSopenharmony_ci#include <linux/suspend.h> 153d0407baSopenharmony_ci 163d0407baSopenharmony_ci#define REGULATOR_STATES_NUM (PM_SUSPEND_MAX + 1) 173d0407baSopenharmony_ci 183d0407baSopenharmony_cistruct regulator_voltage { 193d0407baSopenharmony_ci int min_uV; 203d0407baSopenharmony_ci int max_uV; 213d0407baSopenharmony_ci}; 223d0407baSopenharmony_ci 233d0407baSopenharmony_ci/* 243d0407baSopenharmony_ci * struct regulator 253d0407baSopenharmony_ci * 263d0407baSopenharmony_ci * One for each consumer device. 273d0407baSopenharmony_ci * @voltage - a voltage array for each state of runtime, i.e.: 283d0407baSopenharmony_ci * PM_SUSPEND_ON 293d0407baSopenharmony_ci * PM_SUSPEND_TO_IDLE 303d0407baSopenharmony_ci * PM_SUSPEND_STANDBY 313d0407baSopenharmony_ci * PM_SUSPEND_MEM 323d0407baSopenharmony_ci * PM_SUSPEND_MAX 333d0407baSopenharmony_ci */ 343d0407baSopenharmony_cistruct regulator { 353d0407baSopenharmony_ci struct device *dev; 363d0407baSopenharmony_ci struct list_head list; 373d0407baSopenharmony_ci unsigned int always_on:1; 383d0407baSopenharmony_ci unsigned int bypass:1; 393d0407baSopenharmony_ci unsigned int device_link:1; 403d0407baSopenharmony_ci int uA_load; 413d0407baSopenharmony_ci unsigned int enable_count; 423d0407baSopenharmony_ci unsigned int deferred_disables; 433d0407baSopenharmony_ci struct regulator_voltage voltage[REGULATOR_STATES_NUM]; 443d0407baSopenharmony_ci const char *supply_name; 453d0407baSopenharmony_ci struct device_attribute dev_attr; 463d0407baSopenharmony_ci struct regulator_dev *rdev; 473d0407baSopenharmony_ci struct dentry *debugfs; 483d0407baSopenharmony_ci}; 493d0407baSopenharmony_ci 503d0407baSopenharmony_ciextern struct class regulator_class; 513d0407baSopenharmony_ci 523d0407baSopenharmony_cistatic inline struct regulator_dev *dev_to_rdev(struct device *dev) 533d0407baSopenharmony_ci{ 543d0407baSopenharmony_ci return container_of(dev, struct regulator_dev, dev); 553d0407baSopenharmony_ci} 563d0407baSopenharmony_ci 573d0407baSopenharmony_ci#ifdef CONFIG_OF 583d0407baSopenharmony_cistruct regulator_dev *of_find_regulator_by_node(struct device_node *np); 593d0407baSopenharmony_cistruct regulator_init_data *regulator_of_get_init_data(struct device *dev, 603d0407baSopenharmony_ci const struct regulator_desc *desc, 613d0407baSopenharmony_ci struct regulator_config *config, 623d0407baSopenharmony_ci struct device_node **node); 633d0407baSopenharmony_ci 643d0407baSopenharmony_cistruct regulator_dev *of_parse_coupled_regulator(struct regulator_dev *rdev, 653d0407baSopenharmony_ci int index); 663d0407baSopenharmony_ci 673d0407baSopenharmony_ciint of_get_n_coupled(struct regulator_dev *rdev); 683d0407baSopenharmony_ci 693d0407baSopenharmony_cibool of_check_coupling_data(struct regulator_dev *rdev); 703d0407baSopenharmony_ci 713d0407baSopenharmony_ci#else 723d0407baSopenharmony_cistatic inline struct regulator_dev * 733d0407baSopenharmony_ciof_find_regulator_by_node(struct device_node *np) 743d0407baSopenharmony_ci{ 753d0407baSopenharmony_ci return NULL; 763d0407baSopenharmony_ci} 773d0407baSopenharmony_ci 783d0407baSopenharmony_cistatic inline struct regulator_init_data * 793d0407baSopenharmony_ciregulator_of_get_init_data(struct device *dev, 803d0407baSopenharmony_ci const struct regulator_desc *desc, 813d0407baSopenharmony_ci struct regulator_config *config, 823d0407baSopenharmony_ci struct device_node **node) 833d0407baSopenharmony_ci{ 843d0407baSopenharmony_ci return NULL; 853d0407baSopenharmony_ci} 863d0407baSopenharmony_ci 873d0407baSopenharmony_cistatic inline struct regulator_dev * 883d0407baSopenharmony_ciof_parse_coupled_regulator(struct regulator_dev *rdev, 893d0407baSopenharmony_ci int index) 903d0407baSopenharmony_ci{ 913d0407baSopenharmony_ci return NULL; 923d0407baSopenharmony_ci} 933d0407baSopenharmony_ci 943d0407baSopenharmony_cistatic inline int of_get_n_coupled(struct regulator_dev *rdev) 953d0407baSopenharmony_ci{ 963d0407baSopenharmony_ci return 0; 973d0407baSopenharmony_ci} 983d0407baSopenharmony_ci 993d0407baSopenharmony_cistatic inline bool of_check_coupling_data(struct regulator_dev *rdev) 1003d0407baSopenharmony_ci{ 1013d0407baSopenharmony_ci return false; 1023d0407baSopenharmony_ci} 1033d0407baSopenharmony_ci 1043d0407baSopenharmony_ci#endif 1053d0407baSopenharmony_cienum regulator_get_type { 1063d0407baSopenharmony_ci NORMAL_GET, 1073d0407baSopenharmony_ci EXCLUSIVE_GET, 1083d0407baSopenharmony_ci OPTIONAL_GET, 1093d0407baSopenharmony_ci MAX_GET_TYPE 1103d0407baSopenharmony_ci}; 1113d0407baSopenharmony_ci 1123d0407baSopenharmony_cistruct regulator *_regulator_get(struct device *dev, const char *id, 1133d0407baSopenharmony_ci enum regulator_get_type get_type); 1143d0407baSopenharmony_ci#endif 115