restore lost packages from 0.2.3 + fix overwritten 0.2.4 files

- Restore 29 recipe symlinks (libdrm, qtbase, dbus, sddm, pipewire, etc.)
- Restore 33 patches (KDE, libdrm, mesa, pipewire, sddm, wireplumber)
- Restore 20+ local/scripts (audit, lint, test, build helpers)
- Restore src/cook/scheduler.rs, status.rs, gnu-config/
- Restore scripts/patch-inclusion-gate.sh, run_mini1.sh, validate-collision-log.sh
- Recover TLC source from HEAD (was overwritten by 0.2.3 checkout)
- Recover 11 local/docs plans from HEAD (were overwritten)
- Recover qt6-wayland-smoke symlink from HEAD
- Fix MOTD: remove garbled ASCII art, use clean text
- Update version: 0.2.0 -> 0.2.4 in os-release, motd, config
- Reduce filesystem_size: 1536 -> 512 MiB
- Add ABSOLUTE RULE to AGENTS.md: never delete/ignore packages
- Reduce pcid scheme log verbosity: info -> debug
This commit is contained in:
2026-06-19 12:39:14 +03:00
parent ffbe098ef8
commit dc68054305
6418 changed files with 7066233 additions and 8670 deletions
@@ -0,0 +1,82 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* act8865.h -- Voltage regulation for active-semi act88xx PMUs
*
* Copyright (C) 2013 Atmel Corporation.
*/
#ifndef __LINUX_REGULATOR_ACT8865_H
#define __LINUX_REGULATOR_ACT8865_H
#include <linux/regulator/machine.h>
enum {
ACT8600_ID_DCDC1,
ACT8600_ID_DCDC2,
ACT8600_ID_DCDC3,
ACT8600_ID_SUDCDC4,
ACT8600_ID_LDO5,
ACT8600_ID_LDO6,
ACT8600_ID_LDO7,
ACT8600_ID_LDO8,
ACT8600_ID_LDO9,
ACT8600_ID_LDO10,
};
enum {
ACT8865_ID_DCDC1,
ACT8865_ID_DCDC2,
ACT8865_ID_DCDC3,
ACT8865_ID_LDO1,
ACT8865_ID_LDO2,
ACT8865_ID_LDO3,
ACT8865_ID_LDO4,
ACT8865_REG_NUM,
};
enum {
ACT8846_ID_REG1,
ACT8846_ID_REG2,
ACT8846_ID_REG3,
ACT8846_ID_REG4,
ACT8846_ID_REG5,
ACT8846_ID_REG6,
ACT8846_ID_REG7,
ACT8846_ID_REG8,
ACT8846_ID_REG9,
ACT8846_ID_REG10,
ACT8846_ID_REG11,
ACT8846_ID_REG12,
ACT8846_REG_NUM,
};
enum {
ACT8600,
ACT8865,
ACT8846,
};
/**
* act8865_regulator_data - regulator data
* @id: regulator id
* @name: regulator name
* @init_data: regulator init data
* @of_node: device tree node (optional)
*/
struct act8865_regulator_data {
int id;
const char *name;
struct regulator_init_data *init_data;
struct device_node *of_node;
};
/**
* act8865_platform_data - platform data for act8865
* @num_regulators: number of regulators used
* @regulators: pointer to regulators used
*/
struct act8865_platform_data {
int num_regulators;
struct act8865_regulator_data *regulators;
};
#endif
@@ -0,0 +1,18 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Platform data for Arizona LDO1 regulator
*
* Copyright 2017 Cirrus Logic
*/
#ifndef ARIZONA_LDO1_H
#define ARIZONA_LDO1_H
struct regulator_init_data;
struct arizona_ldo1_pdata {
/** Regulator configuration for LDO1 */
const struct regulator_init_data *init_data;
};
#endif
@@ -0,0 +1,18 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Platform data for Arizona micsupp regulator
*
* Copyright 2017 Cirrus Logic
*/
#ifndef ARIZONA_MICSUPP_H
#define ARIZONA_MICSUPP_H
struct regulator_init_data;
struct arizona_micsupp_pdata {
/** Regulator configuration for micsupp */
const struct regulator_init_data *init_data;
};
#endif
@@ -0,0 +1,745 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* consumer.h -- SoC Regulator consumer support.
*
* Copyright (C) 2007, 2008 Wolfson Microelectronics PLC.
*
* Author: Liam Girdwood <lrg@slimlogic.co.uk>
*
* Regulator Consumer Interface.
*
* A Power Management Regulator framework for SoC based devices.
* Features:-
* o Voltage and current level control.
* o Operating mode control.
* o Regulator status.
* o sysfs entries for showing client devices and status
*
* EXPERIMENTAL FEATURES:
* Dynamic Regulator operating Mode Switching (DRMS) - allows regulators
* to use most efficient operating mode depending upon voltage and load and
* is transparent to client drivers.
*
* e.g. Devices x,y,z share regulator r. Device x and y draw 20mA each during
* IO and 1mA at idle. Device z draws 100mA when under load and 5mA when
* idling. Regulator r has > 90% efficiency in NORMAL mode at loads > 100mA
* but this drops rapidly to 60% when below 100mA. Regulator r has > 90%
* efficiency in IDLE mode at loads < 10mA. Thus regulator r will operate
* in normal mode for loads > 10mA and in IDLE mode for load <= 10mA.
*/
#ifndef __LINUX_REGULATOR_CONSUMER_H_
#define __LINUX_REGULATOR_CONSUMER_H_
#include <linux/err.h>
#include <linux/suspend.h>
#include <regulator/regulator.h>
struct device;
struct notifier_block;
struct regmap;
struct regulator_dev;
/*
* Regulator operating modes.
*
* Regulators can run in a variety of different operating modes depending on
* output load. This allows further system power savings by selecting the
* best (and most efficient) regulator mode for a desired load.
*
* Most drivers will only care about NORMAL. The modes below are generic and
* will probably not match the naming convention of your regulator data sheet
* but should match the use cases in the datasheet.
*
* In order of power efficiency (least efficient at top).
*
* Mode Description
* FAST Regulator can handle fast changes in it's load.
* e.g. useful in CPU voltage & frequency scaling where
* load can quickly increase with CPU frequency increases.
*
* NORMAL Normal regulator power supply mode. Most drivers will
* use this mode.
*
* IDLE Regulator runs in a more efficient mode for light
* loads. Can be used for devices that have a low power
* requirement during periods of inactivity. This mode
* may be more noisy than NORMAL and may not be able
* to handle fast load switching.
*
* STANDBY Regulator runs in the most efficient mode for very
* light loads. Can be used by devices when they are
* in a sleep/standby state. This mode is likely to be
* the most noisy and may not be able to handle fast load
* switching.
*
* NOTE: Most regulators will only support a subset of these modes. Some
* will only just support NORMAL.
*
* These modes can be OR'ed together to make up a mask of valid register modes.
*/
#define REGULATOR_MODE_INVALID 0x0
#define REGULATOR_MODE_FAST 0x1
#define REGULATOR_MODE_NORMAL 0x2
#define REGULATOR_MODE_IDLE 0x4
#define REGULATOR_MODE_STANDBY 0x8
/*
* Regulator errors that can be queried using regulator_get_error_flags
*
* UNDER_VOLTAGE Regulator output is under voltage.
* OVER_CURRENT Regulator output current is too high.
* REGULATION_OUT Regulator output is out of regulation.
* FAIL Regulator output has failed.
* OVER_TEMP Regulator over temp.
*
* NOTE: These errors can be OR'ed together.
*/
#define REGULATOR_ERROR_UNDER_VOLTAGE BIT(1)
#define REGULATOR_ERROR_OVER_CURRENT BIT(2)
#define REGULATOR_ERROR_REGULATION_OUT BIT(3)
#define REGULATOR_ERROR_FAIL BIT(4)
#define REGULATOR_ERROR_OVER_TEMP BIT(5)
#define REGULATOR_ERROR_UNDER_VOLTAGE_WARN BIT(6)
#define REGULATOR_ERROR_OVER_CURRENT_WARN BIT(7)
#define REGULATOR_ERROR_OVER_VOLTAGE_WARN BIT(8)
#define REGULATOR_ERROR_OVER_TEMP_WARN BIT(9)
/**
* struct pre_voltage_change_data - Data sent with PRE_VOLTAGE_CHANGE event
*
* @old_uV: Current voltage before change.
* @min_uV: Min voltage we'll change to.
* @max_uV: Max voltage we'll change to.
*/
struct pre_voltage_change_data {
unsigned long old_uV;
unsigned long min_uV;
unsigned long max_uV;
};
struct regulator;
/**
* struct regulator_bulk_data - Data used for bulk regulator operations.
*
* @supply: The name of the supply. Initialised by the user before
* using the bulk regulator APIs.
* @consumer: The regulator consumer for the supply. This will be managed
* by the bulk API.
* @init_load_uA: After getting the regulator, regulator_set_load() will be
* called with this load. Initialised by the user before
* using the bulk regulator APIs.
*
* The regulator APIs provide a series of regulator_bulk_() API calls as
* a convenience to consumers which require multiple supplies. This
* structure is used to manage data for these calls.
*/
struct regulator_bulk_data {
const char *supply;
struct regulator *consumer;
int init_load_uA;
/* private: Internal use */
int ret;
};
#if defined(CONFIG_REGULATOR)
/* regulator get and put */
struct regulator *__must_check regulator_get(struct device *dev,
const char *id);
struct regulator *__must_check devm_regulator_get(struct device *dev,
const char *id);
struct regulator *__must_check regulator_get_exclusive(struct device *dev,
const char *id);
struct regulator *__must_check devm_regulator_get_exclusive(struct device *dev,
const char *id);
struct regulator *__must_check regulator_get_optional(struct device *dev,
const char *id);
struct regulator *__must_check devm_regulator_get_optional(struct device *dev,
const char *id);
int devm_regulator_get_enable(struct device *dev, const char *id);
int devm_regulator_get_enable_optional(struct device *dev, const char *id);
int devm_regulator_get_enable_read_voltage(struct device *dev, const char *id);
void regulator_put(struct regulator *regulator);
void devm_regulator_put(struct regulator *regulator);
int regulator_register_supply_alias(struct device *dev, const char *id,
struct device *alias_dev,
const char *alias_id);
void regulator_unregister_supply_alias(struct device *dev, const char *id);
int regulator_bulk_register_supply_alias(struct device *dev,
const char *const *id,
struct device *alias_dev,
const char *const *alias_id,
int num_id);
void regulator_bulk_unregister_supply_alias(struct device *dev,
const char * const *id, int num_id);
int devm_regulator_register_supply_alias(struct device *dev, const char *id,
struct device *alias_dev,
const char *alias_id);
int devm_regulator_bulk_register_supply_alias(struct device *dev,
const char *const *id,
struct device *alias_dev,
const char *const *alias_id,
int num_id);
/* regulator output control and status */
int __must_check regulator_enable(struct regulator *regulator);
int regulator_disable(struct regulator *regulator);
int regulator_force_disable(struct regulator *regulator);
int regulator_is_enabled(struct regulator *regulator);
int regulator_disable_deferred(struct regulator *regulator, int ms);
int __must_check regulator_bulk_get(struct device *dev, int num_consumers,
struct regulator_bulk_data *consumers);
int __must_check devm_regulator_bulk_get(struct device *dev, int num_consumers,
struct regulator_bulk_data *consumers);
void devm_regulator_bulk_put(struct regulator_bulk_data *consumers);
int __must_check devm_regulator_bulk_get_exclusive(struct device *dev, int num_consumers,
struct regulator_bulk_data *consumers);
int __must_check devm_regulator_bulk_get_const(
struct device *dev, int num_consumers,
const struct regulator_bulk_data *in_consumers,
struct regulator_bulk_data **out_consumers);
int __must_check regulator_bulk_enable(int num_consumers,
struct regulator_bulk_data *consumers);
int devm_regulator_bulk_get_enable(struct device *dev, int num_consumers,
const char * const *id);
int regulator_bulk_disable(int num_consumers,
struct regulator_bulk_data *consumers);
int regulator_bulk_force_disable(int num_consumers,
struct regulator_bulk_data *consumers);
void regulator_bulk_free(int num_consumers,
struct regulator_bulk_data *consumers);
int regulator_count_voltages(struct regulator *regulator);
int regulator_list_voltage(struct regulator *regulator, unsigned selector);
int regulator_is_supported_voltage(struct regulator *regulator,
int min_uV, int max_uV);
unsigned int regulator_get_linear_step(struct regulator *regulator);
int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV);
int regulator_set_voltage_time(struct regulator *regulator,
int old_uV, int new_uV);
int regulator_get_voltage(struct regulator *regulator);
int regulator_sync_voltage(struct regulator *regulator);
int regulator_set_current_limit(struct regulator *regulator,
int min_uA, int max_uA);
int regulator_get_current_limit(struct regulator *regulator);
int regulator_get_unclaimed_power_budget(struct regulator *regulator);
int regulator_request_power_budget(struct regulator *regulator,
unsigned int pw_req);
void regulator_free_power_budget(struct regulator *regulator,
unsigned int pw);
int regulator_set_mode(struct regulator *regulator, unsigned int mode);
unsigned int regulator_get_mode(struct regulator *regulator);
int regulator_get_error_flags(struct regulator *regulator,
unsigned int *flags);
int regulator_set_load(struct regulator *regulator, int load_uA);
int regulator_allow_bypass(struct regulator *regulator, bool allow);
struct regmap *regulator_get_regmap(struct regulator *regulator);
int regulator_get_hardware_vsel_register(struct regulator *regulator,
unsigned *vsel_reg,
unsigned *vsel_mask);
int regulator_list_hardware_vsel(struct regulator *regulator,
unsigned selector);
int regulator_hardware_enable(struct regulator *regulator, bool enable);
/* regulator notifier block */
int regulator_register_notifier(struct regulator *regulator,
struct notifier_block *nb);
int devm_regulator_register_notifier(struct regulator *regulator,
struct notifier_block *nb);
int regulator_unregister_notifier(struct regulator *regulator,
struct notifier_block *nb);
void devm_regulator_unregister_notifier(struct regulator *regulator,
struct notifier_block *nb);
/* regulator suspend */
int regulator_suspend_enable(struct regulator_dev *rdev,
suspend_state_t state);
int regulator_suspend_disable(struct regulator_dev *rdev,
suspend_state_t state);
int regulator_set_suspend_voltage(struct regulator *regulator, int min_uV,
int max_uV, suspend_state_t state);
/* driver data - core doesn't touch */
void *regulator_get_drvdata(struct regulator *regulator);
void regulator_set_drvdata(struct regulator *regulator, void *data);
/* misc helpers */
void regulator_bulk_set_supply_names(struct regulator_bulk_data *consumers,
const char *const *supply_names,
unsigned int num_supplies);
bool regulator_is_equal(struct regulator *reg1, struct regulator *reg2);
#else
/*
* Make sure client drivers will still build on systems with no software
* controllable voltage or current regulators.
*/
static inline struct regulator *__must_check regulator_get(struct device *dev,
const char *id)
{
/* Nothing except the stubbed out regulator API should be
* looking at the value except to check if it is an error
* value. Drivers are free to handle NULL specifically by
* skipping all regulator API calls, but they don't have to.
* Drivers which don't, should make sure they properly handle
* corner cases of the API, such as regulator_get_voltage()
* returning 0.
*/
return NULL;
}
static inline struct regulator *__must_check
devm_regulator_get(struct device *dev, const char *id)
{
return NULL;
}
static inline struct regulator *__must_check
regulator_get_exclusive(struct device *dev, const char *id)
{
return ERR_PTR(-ENODEV);
}
static inline struct regulator *__must_check
devm_regulator_get_exclusive(struct device *dev, const char *id)
{
return ERR_PTR(-ENODEV);
}
static inline int devm_regulator_get_enable(struct device *dev, const char *id)
{
return 0;
}
static inline int devm_regulator_get_enable_optional(struct device *dev,
const char *id)
{
return 0;
}
static inline int devm_regulator_get_enable_read_voltage(struct device *dev,
const char *id)
{
return -ENODEV;
}
static inline struct regulator *__must_check
regulator_get_optional(struct device *dev, const char *id)
{
return ERR_PTR(-ENODEV);
}
static inline struct regulator *__must_check
devm_regulator_get_optional(struct device *dev, const char *id)
{
return ERR_PTR(-ENODEV);
}
static inline void regulator_put(struct regulator *regulator)
{
}
static inline void devm_regulator_put(struct regulator *regulator)
{
}
static inline void devm_regulator_bulk_put(struct regulator_bulk_data *consumers)
{
}
static inline int regulator_register_supply_alias(struct device *dev,
const char *id,
struct device *alias_dev,
const char *alias_id)
{
return 0;
}
static inline void regulator_unregister_supply_alias(struct device *dev,
const char *id)
{
}
static inline int regulator_bulk_register_supply_alias(struct device *dev,
const char *const *id,
struct device *alias_dev,
const char * const *alias_id,
int num_id)
{
return 0;
}
static inline void regulator_bulk_unregister_supply_alias(struct device *dev,
const char * const *id,
int num_id)
{
}
static inline int devm_regulator_register_supply_alias(struct device *dev,
const char *id,
struct device *alias_dev,
const char *alias_id)
{
return 0;
}
static inline int devm_regulator_bulk_register_supply_alias(struct device *dev,
const char *const *id,
struct device *alias_dev,
const char *const *alias_id,
int num_id)
{
return 0;
}
static inline int regulator_enable(struct regulator *regulator)
{
return 0;
}
static inline int regulator_disable(struct regulator *regulator)
{
return 0;
}
static inline int regulator_force_disable(struct regulator *regulator)
{
return 0;
}
static inline int regulator_disable_deferred(struct regulator *regulator,
int ms)
{
return 0;
}
static inline int regulator_is_enabled(struct regulator *regulator)
{
return 1;
}
static inline int regulator_bulk_get(struct device *dev,
int num_consumers,
struct regulator_bulk_data *consumers)
{
return 0;
}
static inline int devm_regulator_bulk_get(struct device *dev, int num_consumers,
struct regulator_bulk_data *consumers)
{
return 0;
}
static inline int devm_regulator_bulk_get_const(
struct device *dev, int num_consumers,
const struct regulator_bulk_data *in_consumers,
struct regulator_bulk_data **out_consumers)
{
return 0;
}
static inline int regulator_bulk_enable(int num_consumers,
struct regulator_bulk_data *consumers)
{
return 0;
}
static inline int devm_regulator_bulk_get_enable(struct device *dev,
int num_consumers,
const char * const *id)
{
return 0;
}
static inline int regulator_bulk_disable(int num_consumers,
struct regulator_bulk_data *consumers)
{
return 0;
}
static inline int regulator_bulk_force_disable(int num_consumers,
struct regulator_bulk_data *consumers)
{
return 0;
}
static inline void regulator_bulk_free(int num_consumers,
struct regulator_bulk_data *consumers)
{
}
static inline int regulator_set_voltage(struct regulator *regulator,
int min_uV, int max_uV)
{
return 0;
}
static inline int regulator_set_voltage_time(struct regulator *regulator,
int old_uV, int new_uV)
{
return 0;
}
static inline int regulator_get_voltage(struct regulator *regulator)
{
return -EINVAL;
}
static inline int regulator_sync_voltage(struct regulator *regulator)
{
return -EINVAL;
}
static inline int regulator_is_supported_voltage(struct regulator *regulator,
int min_uV, int max_uV)
{
return 0;
}
static inline unsigned int regulator_get_linear_step(struct regulator *regulator)
{
return 0;
}
static inline int regulator_set_current_limit(struct regulator *regulator,
int min_uA, int max_uA)
{
return 0;
}
static inline int regulator_get_current_limit(struct regulator *regulator)
{
return 0;
}
static inline int regulator_get_unclaimed_power_budget(struct regulator *regulator)
{
return INT_MAX;
}
static inline int regulator_request_power_budget(struct regulator *regulator,
unsigned int pw_req)
{
return -EOPNOTSUPP;
}
static inline void regulator_free_power_budget(struct regulator *regulator,
unsigned int pw)
{
}
static inline int regulator_set_mode(struct regulator *regulator,
unsigned int mode)
{
return 0;
}
static inline unsigned int regulator_get_mode(struct regulator *regulator)
{
return REGULATOR_MODE_NORMAL;
}
static inline int regulator_get_error_flags(struct regulator *regulator,
unsigned int *flags)
{
return -EINVAL;
}
static inline int regulator_set_load(struct regulator *regulator, int load_uA)
{
return 0;
}
static inline int regulator_allow_bypass(struct regulator *regulator,
bool allow)
{
return 0;
}
static inline struct regmap *regulator_get_regmap(struct regulator *regulator)
{
return ERR_PTR(-EOPNOTSUPP);
}
static inline int regulator_get_hardware_vsel_register(struct regulator *regulator,
unsigned *vsel_reg,
unsigned *vsel_mask)
{
return -EOPNOTSUPP;
}
static inline int regulator_list_hardware_vsel(struct regulator *regulator,
unsigned selector)
{
return -EOPNOTSUPP;
}
static inline int regulator_hardware_enable(struct regulator *regulator,
bool enable)
{
return -EOPNOTSUPP;
}
static inline int regulator_register_notifier(struct regulator *regulator,
struct notifier_block *nb)
{
return 0;
}
static inline int devm_regulator_register_notifier(struct regulator *regulator,
struct notifier_block *nb)
{
return 0;
}
static inline int regulator_unregister_notifier(struct regulator *regulator,
struct notifier_block *nb)
{
return 0;
}
static inline int devm_regulator_unregister_notifier(struct regulator *regulator,
struct notifier_block *nb)
{
return 0;
}
static inline int regulator_suspend_enable(struct regulator_dev *rdev,
suspend_state_t state)
{
return -EINVAL;
}
static inline int regulator_suspend_disable(struct regulator_dev *rdev,
suspend_state_t state)
{
return -EINVAL;
}
static inline int regulator_set_suspend_voltage(struct regulator *regulator,
int min_uV, int max_uV,
suspend_state_t state)
{
return -EINVAL;
}
static inline void *regulator_get_drvdata(struct regulator *regulator)
{
return NULL;
}
static inline void regulator_set_drvdata(struct regulator *regulator,
void *data)
{
}
static inline int regulator_count_voltages(struct regulator *regulator)
{
return 0;
}
static inline int regulator_list_voltage(struct regulator *regulator, unsigned selector)
{
return -EINVAL;
}
static inline void
regulator_bulk_set_supply_names(struct regulator_bulk_data *consumers,
const char *const *supply_names,
unsigned int num_supplies)
{
}
static inline bool
regulator_is_equal(struct regulator *reg1, struct regulator *reg2)
{
return false;
}
#endif
#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_REGULATOR)
struct regulator *__must_check of_regulator_get(struct device *dev,
struct device_node *node,
const char *id);
struct regulator *__must_check devm_of_regulator_get(struct device *dev,
struct device_node *node,
const char *id);
struct regulator *__must_check of_regulator_get_optional(struct device *dev,
struct device_node *node,
const char *id);
struct regulator *__must_check devm_of_regulator_get_optional(struct device *dev,
struct device_node *node,
const char *id);
int __must_check of_regulator_bulk_get_all(struct device *dev, struct device_node *np,
struct regulator_bulk_data **consumers);
#else
static inline struct regulator *__must_check of_regulator_get_optional(struct device *dev,
struct device_node *node,
const char *id)
{
return ERR_PTR(-ENODEV);
}
static inline struct regulator *__must_check devm_of_regulator_get_optional(struct device *dev,
struct device_node *node,
const char *id)
{
return ERR_PTR(-ENODEV);
}
static inline int of_regulator_bulk_get_all(struct device *dev, struct device_node *np,
struct regulator_bulk_data **consumers)
{
return 0;
}
#endif
static inline int regulator_set_voltage_triplet(struct regulator *regulator,
int min_uV, int target_uV,
int max_uV)
{
if (regulator_set_voltage(regulator, target_uV, max_uV) == 0)
return 0;
return regulator_set_voltage(regulator, min_uV, max_uV);
}
static inline int regulator_set_voltage_tol(struct regulator *regulator,
int new_uV, int tol_uV)
{
if (regulator_set_voltage(regulator, new_uV, new_uV + tol_uV) == 0)
return 0;
else
return regulator_set_voltage(regulator,
new_uV - tol_uV, new_uV + tol_uV);
}
static inline int regulator_is_supported_voltage_tol(struct regulator *regulator,
int target_uV, int tol_uV)
{
return regulator_is_supported_voltage(regulator,
target_uV - tol_uV,
target_uV + tol_uV);
}
#endif
@@ -0,0 +1,101 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* coupler.h -- SoC Regulator support, coupler API.
*
* Regulator Coupler Interface.
*/
#ifndef __LINUX_REGULATOR_COUPLER_H_
#define __LINUX_REGULATOR_COUPLER_H_
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/suspend.h>
struct regulator_coupler;
struct regulator_dev;
/**
* struct regulator_coupler - customized regulator's coupler
*
* Regulator's coupler allows to customize coupling algorithm.
*
* @list: couplers list entry
* @attach_regulator: Callback invoked on creation of a coupled regulator,
* couples are unresolved at this point. The callee should
* check that it could handle the regulator and return 0 on
* success, -errno on failure and 1 if given regulator is
* not suitable for this coupler (case of having multiple
* regulators in a system). Callback shall be implemented.
* @detach_regulator: Callback invoked on destruction of a coupled regulator.
* This callback is optional and could be NULL.
* @balance_voltage: Callback invoked when voltage of a coupled regulator is
* changing. Called with all of the coupled rdev's being held
* under "consumer lock". The callee should perform voltage
* balancing, changing voltage of the coupled regulators as
* needed. It's up to the coupler to verify the voltage
* before changing it in hardware, i.e. coupler should
* check consumer's min/max and etc. This callback is
* optional and could be NULL, in which case a generic
* voltage balancer will be used.
*/
struct regulator_coupler {
struct list_head list;
int (*attach_regulator)(struct regulator_coupler *coupler,
struct regulator_dev *rdev);
int (*detach_regulator)(struct regulator_coupler *coupler,
struct regulator_dev *rdev);
int (*balance_voltage)(struct regulator_coupler *coupler,
struct regulator_dev *rdev,
suspend_state_t state);
};
#ifdef CONFIG_REGULATOR
int regulator_coupler_register(struct regulator_coupler *coupler);
int regulator_check_consumers(struct regulator_dev *rdev,
int *min_uV, int *max_uV,
suspend_state_t state);
int regulator_check_voltage(struct regulator_dev *rdev,
int *min_uV, int *max_uV);
int regulator_get_voltage_rdev(struct regulator_dev *rdev);
int regulator_set_voltage_rdev(struct regulator_dev *rdev,
int min_uV, int max_uV,
suspend_state_t state);
int regulator_do_balance_voltage(struct regulator_dev *rdev,
suspend_state_t state, bool skip_coupled);
#else
static inline int regulator_coupler_register(struct regulator_coupler *coupler)
{
return 0;
}
static inline int regulator_check_consumers(struct regulator_dev *rdev,
int *min_uV, int *max_uV,
suspend_state_t state)
{
return -EINVAL;
}
static inline int regulator_check_voltage(struct regulator_dev *rdev,
int *min_uV, int *max_uV)
{
return -EINVAL;
}
static inline int regulator_get_voltage_rdev(struct regulator_dev *rdev)
{
return -EINVAL;
}
static inline int regulator_set_voltage_rdev(struct regulator_dev *rdev,
int min_uV, int max_uV,
suspend_state_t state)
{
return -EINVAL;
}
static inline int regulator_do_balance_voltage(struct regulator_dev *rdev,
suspend_state_t state,
bool skip_coupled)
{
return -EINVAL;
}
#endif
#endif
@@ -0,0 +1,36 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* DA9121 Single-channel dual-phase 10A buck converter
* DA9130 Single-channel dual-phase 10A buck converter (Automotive)
* DA9217 Single-channel dual-phase 6A buck converter
* DA9122 Dual-channel single-phase 5A buck converter
* DA9131 Dual-channel single-phase 5A buck converter (Automotive)
* DA9220 Dual-channel single-phase 3A buck converter
* DA9132 Dual-channel single-phase 3A buck converter (Automotive)
*
* Copyright (C) 2020 Dialog Semiconductor
*
* Authors: Adam Ward, Dialog Semiconductor
*/
#ifndef __LINUX_REGULATOR_DA9121_H
#define __LINUX_REGULATOR_DA9121_H
#include <linux/regulator/machine.h>
struct gpio_desc;
enum {
DA9121_IDX_BUCK1,
DA9121_IDX_BUCK2,
DA9121_IDX_MAX
};
struct da9121_pdata {
int num_buck;
struct gpio_desc *gpiod_ren[DA9121_IDX_MAX];
struct device_node *reg_node[DA9121_IDX_MAX];
struct regulator_init_data *init_data[DA9121_IDX_MAX];
};
#endif
@@ -0,0 +1,39 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* da9211.h - Regulator device driver for DA9211/DA9212
* /DA9213/DA9223/DA9214/DA9224/DA9215/DA9225
* Copyright (C) 2015 Dialog Semiconductor Ltd.
*/
#ifndef __LINUX_REGULATOR_DA9211_H
#define __LINUX_REGULATOR_DA9211_H
#include <linux/regulator/machine.h>
#define DA9211_MAX_REGULATORS 2
struct gpio_desc;
enum da9211_chip_id {
DA9211,
DA9212,
DA9213,
DA9223,
DA9214,
DA9224,
DA9215,
DA9225,
};
struct da9211_pdata {
/*
* Number of buck
* 1 : 4 phase 1 buck
* 2 : 2 phase 2 buck
*/
int num_buck;
struct gpio_desc *gpiod_ren[DA9211_MAX_REGULATORS];
struct device_node *reg_node[DA9211_MAX_REGULATORS];
struct regulator_init_data *init_data[DA9211_MAX_REGULATORS];
};
#endif
@@ -0,0 +1,38 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (C) ST-Ericsson SA 2010
*
* Author: Bengt Jonsson <bengt.g.jonsson@stericsson.com> for ST-Ericsson
*
* Interface to power domain regulators on DB8500
*/
#ifndef __REGULATOR_H__
#define __REGULATOR_H__
/* Number of DB8500 regulators and regulator enumeration */
enum db8500_regulator_id {
DB8500_REGULATOR_VAPE,
DB8500_REGULATOR_VARM,
DB8500_REGULATOR_VMODEM,
DB8500_REGULATOR_VPLL,
DB8500_REGULATOR_VSMPS1,
DB8500_REGULATOR_VSMPS2,
DB8500_REGULATOR_VSMPS3,
DB8500_REGULATOR_VRF1,
DB8500_REGULATOR_SWITCH_SVAMMDSP,
DB8500_REGULATOR_SWITCH_SVAMMDSPRET,
DB8500_REGULATOR_SWITCH_SVAPIPE,
DB8500_REGULATOR_SWITCH_SIAMMDSP,
DB8500_REGULATOR_SWITCH_SIAMMDSPRET,
DB8500_REGULATOR_SWITCH_SIAPIPE,
DB8500_REGULATOR_SWITCH_SGA,
DB8500_REGULATOR_SWITCH_B2R2_MCDE,
DB8500_REGULATOR_SWITCH_ESRAM12,
DB8500_REGULATOR_SWITCH_ESRAM12RET,
DB8500_REGULATOR_SWITCH_ESRAM34,
DB8500_REGULATOR_SWITCH_ESRAM34RET,
DB8500_NUM_REGULATORS
};
#endif
@@ -0,0 +1,803 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* driver.h -- SoC Regulator driver support.
*
* Copyright (C) 2007, 2008 Wolfson Microelectronics PLC.
*
* Author: Liam Girdwood <lrg@slimlogic.co.uk>
*
* Regulator Driver Interface.
*/
#ifndef __LINUX_REGULATOR_DRIVER_H_
#define __LINUX_REGULATOR_DRIVER_H_
#include <linux/device.h>
#include <linux/linear_range.h>
#include <linux/notifier.h>
#include <linux/regulator/consumer.h>
#include <linux/ww_mutex.h>
struct gpio_desc;
struct regmap;
struct regulator_dev;
struct regulator_config;
struct regulator_init_data;
struct regulator_enable_gpio;
enum regulator_status {
REGULATOR_STATUS_OFF,
REGULATOR_STATUS_ON,
REGULATOR_STATUS_ERROR,
/* fast/normal/idle/standby are flavors of "on" */
REGULATOR_STATUS_FAST,
REGULATOR_STATUS_NORMAL,
REGULATOR_STATUS_IDLE,
REGULATOR_STATUS_STANDBY,
/* The regulator is enabled but not regulating */
REGULATOR_STATUS_BYPASS,
/* in case that any other status doesn't apply */
REGULATOR_STATUS_UNDEFINED,
};
enum regulator_detection_severity {
/* Hardware shut down voltage outputs if condition is detected */
REGULATOR_SEVERITY_PROT,
/* Hardware is probably damaged/inoperable */
REGULATOR_SEVERITY_ERR,
/* Hardware is still recoverable but recovery action must be taken */
REGULATOR_SEVERITY_WARN,
};
/* Initialize struct linear_range for regulators */
#define REGULATOR_LINEAR_RANGE(_min_uV, _min_sel, _max_sel, _step_uV) \
LINEAR_RANGE(_min_uV, _min_sel, _max_sel, _step_uV)
/* Initialize struct linear_range using voltages, not selectors */
#define REGULATOR_LINEAR_VRANGE(_offs_uV, _min_uV, _max_uV, _step_uV) \
LINEAR_RANGE(_min_uV, ((_min_uV) - (_offs_uV)) / (_step_uV), \
((_max_uV) - (_offs_uV)) / (_step_uV), _step_uV)
/**
* struct regulator_ops - regulator operations.
*
* @enable: Configure the regulator as enabled.
* @disable: Configure the regulator as disabled.
* @is_enabled: Return 1 if the regulator is enabled, 0 if not.
* May also return negative errno.
*
* @set_voltage: Set the voltage for the regulator within the range specified.
* The driver should select the voltage closest to min_uV.
* @set_voltage_sel: Set the voltage for the regulator using the specified
* selector.
* @map_voltage: Convert a voltage into a selector
* @get_voltage: Return the currently configured voltage for the regulator;
* return -ENOTRECOVERABLE if regulator can't be read at
* bootup and hasn't been set yet.
* @get_voltage_sel: Return the currently configured voltage selector for the
* regulator; return -ENOTRECOVERABLE if regulator can't
* be read at bootup and hasn't been set yet.
* @list_voltage: Return one of the supported voltages, in microvolts; zero
* if the selector indicates a voltage that is unusable on this system;
* or negative errno. Selectors range from zero to one less than
* regulator_desc.n_voltages. Voltages may be reported in any order.
*
* @set_current_limit: Configure a limit for a current-limited regulator.
* The driver should select the current closest to max_uA.
* @get_current_limit: Get the configured limit for a current-limited regulator.
* @set_input_current_limit: Configure an input limit.
*
* @set_over_current_protection: Support enabling of and setting limits for over
* current situation detection. Detection can be configured for three
* levels of severity.
*
* - REGULATOR_SEVERITY_PROT should automatically shut down the regulator(s).
*
* - REGULATOR_SEVERITY_ERR should indicate that over-current situation is
* caused by an unrecoverable error but HW does not perform
* automatic shut down.
*
* - REGULATOR_SEVERITY_WARN should indicate situation where hardware is
* still believed to not be damaged but that a board sepcific
* recovery action is needed. If lim_uA is 0 the limit should not
* be changed but the detection should just be enabled/disabled as
* is requested.
*
* @set_over_voltage_protection: Support enabling of and setting limits for over
* voltage situation detection. Detection can be configured for same
* severities as over current protection. Units of uV.
* @set_under_voltage_protection: Support enabling of and setting limits for
* under voltage situation detection. Detection can be configured for same
* severities as over current protection. Units of uV.
* @set_thermal_protection: Support enabling of and setting limits for over
* temperature situation detection.Detection can be configured for same
* severities as over current protection. Units of degree Kelvin.
*
* @set_active_discharge: Set active discharge enable/disable of regulators.
*
* @set_mode: Set the configured operating mode for the regulator.
* @get_mode: Get the configured operating mode for the regulator.
* @get_error_flags: Get the current error(s) for the regulator.
* @get_status: Return actual (not as-configured) status of regulator, as a
* REGULATOR_STATUS value (or negative errno)
* @get_optimum_mode: Get the most efficient operating mode for the regulator
* when running with the specified parameters.
* @set_load: Set the load for the regulator.
*
* @set_bypass: Set the regulator in bypass mode.
* @get_bypass: Get the regulator bypass mode state.
*
* @enable_time: Time taken for the regulator voltage output voltage to
* stabilise after being enabled, in microseconds.
* @set_ramp_delay: Set the ramp delay for the regulator. The driver should
* select ramp delay equal to or less than(closest) ramp_delay.
* @set_voltage_time: Time taken for the regulator voltage output voltage
* to stabilise after being set to a new value, in microseconds.
* The function receives the from and to voltage as input, it
* should return the worst case.
* @set_voltage_time_sel: Time taken for the regulator voltage output voltage
* to stabilise after being set to a new value, in microseconds.
* The function receives the from and to voltage selector as
* input, it should return the worst case.
* @set_soft_start: Enable soft start for the regulator.
*
* @set_suspend_voltage: Set the voltage for the regulator when the system
* is suspended.
* @set_suspend_enable: Mark the regulator as enabled when the system is
* suspended.
* @set_suspend_disable: Mark the regulator as disabled when the system is
* suspended.
* @set_suspend_mode: Set the operating mode for the regulator when the
* system is suspended.
* @resume: Resume operation of suspended regulator.
* @set_pull_down: Configure the regulator to pull down when the regulator
* is disabled.
*
* This struct describes regulator operations which can be implemented by
* regulator chip drivers.
*/
struct regulator_ops {
/* enumerate supported voltages */
int (*list_voltage) (struct regulator_dev *, unsigned selector);
/* get/set regulator voltage */
int (*set_voltage) (struct regulator_dev *, int min_uV, int max_uV,
unsigned *selector);
int (*map_voltage)(struct regulator_dev *, int min_uV, int max_uV);
int (*set_voltage_sel) (struct regulator_dev *, unsigned selector);
int (*get_voltage) (struct regulator_dev *);
int (*get_voltage_sel) (struct regulator_dev *);
/* get/set regulator current */
int (*set_current_limit) (struct regulator_dev *,
int min_uA, int max_uA);
int (*get_current_limit) (struct regulator_dev *);
int (*set_input_current_limit) (struct regulator_dev *, int lim_uA);
int (*set_over_current_protection)(struct regulator_dev *, int lim_uA,
int severity, bool enable);
int (*set_over_voltage_protection)(struct regulator_dev *, int lim_uV,
int severity, bool enable);
int (*set_under_voltage_protection)(struct regulator_dev *, int lim_uV,
int severity, bool enable);
int (*set_thermal_protection)(struct regulator_dev *, int lim,
int severity, bool enable);
int (*set_active_discharge)(struct regulator_dev *, bool enable);
/* enable/disable regulator */
int (*enable) (struct regulator_dev *);
int (*disable) (struct regulator_dev *);
int (*is_enabled) (struct regulator_dev *);
/* get/set regulator operating mode (defined in consumer.h) */
int (*set_mode) (struct regulator_dev *, unsigned int mode);
unsigned int (*get_mode) (struct regulator_dev *);
/* retrieve current error flags on the regulator */
int (*get_error_flags)(struct regulator_dev *, unsigned int *flags);
/* Time taken to enable or set voltage on the regulator */
int (*enable_time) (struct regulator_dev *);
int (*set_ramp_delay) (struct regulator_dev *, int ramp_delay);
int (*set_voltage_time) (struct regulator_dev *, int old_uV,
int new_uV);
int (*set_voltage_time_sel) (struct regulator_dev *,
unsigned int old_selector,
unsigned int new_selector);
int (*set_soft_start) (struct regulator_dev *);
/* report regulator status ... most other accessors report
* control inputs, this reports results of combining inputs
* from Linux (and other sources) with the actual load.
* returns REGULATOR_STATUS_* or negative errno.
*/
int (*get_status)(struct regulator_dev *);
/* get most efficient regulator operating mode for load */
unsigned int (*get_optimum_mode) (struct regulator_dev *, int input_uV,
int output_uV, int load_uA);
/* set the load on the regulator */
int (*set_load)(struct regulator_dev *, int load_uA);
/* control and report on bypass mode */
int (*set_bypass)(struct regulator_dev *dev, bool enable);
int (*get_bypass)(struct regulator_dev *dev, bool *enable);
/* the operations below are for configuration of regulator state when
* its parent PMIC enters a global STANDBY/HIBERNATE state */
/* set regulator suspend voltage */
int (*set_suspend_voltage) (struct regulator_dev *, int uV);
/* enable/disable regulator in suspend state */
int (*set_suspend_enable) (struct regulator_dev *);
int (*set_suspend_disable) (struct regulator_dev *);
/* set regulator suspend operating mode (defined in consumer.h) */
int (*set_suspend_mode) (struct regulator_dev *, unsigned int mode);
int (*resume)(struct regulator_dev *rdev);
int (*set_pull_down) (struct regulator_dev *);
};
/*
* Regulators can either control voltage or current.
*/
enum regulator_type {
REGULATOR_VOLTAGE,
REGULATOR_CURRENT,
};
/**
* struct regulator_desc - Static regulator descriptor
*
* Each regulator registered with the core is described with a
* structure of this type and a struct regulator_config. This
* structure contains the non-varying parts of the regulator
* description.
*
* @name: Identifying name for the regulator.
* @supply_name: Identifying the regulator supply
* @of_match: Name used to identify regulator in DT.
* @of_match_full_name: A flag to indicate that the of_match string, if
* present, should be matched against the node full_name.
* @regulators_node: Name of node containing regulator definitions in DT.
* @of_parse_cb: Optional callback called only if of_match is present.
* Will be called for each regulator parsed from DT, during
* init_data parsing.
* The regulator_config passed as argument to the callback will
* be a copy of config passed to regulator_register, valid only
* for this particular call. Callback may freely change the
* config but it cannot store it for later usage.
* Callback should return 0 on success or negative ERRNO
* indicating failure.
* @init_cb: Optional callback called after the parsing of init_data.
* Allows the regulator to perform runtime init if necessary,
* such as synching the regulator and the parsed constraints.
* Callback should return 0 on success or negative ERRNO
* indicating failure.
* @id: Numerical identifier for the regulator.
* @ops: Regulator operations table.
* @irq: Interrupt number for the regulator.
* @type: Indicates if the regulator is a voltage or current regulator.
* @owner: Module providing the regulator, used for refcounting.
*
* @continuous_voltage_range: Indicates if the regulator can set any
* voltage within constrains range.
* @n_voltages: Number of selectors available for ops.list_voltage().
* @n_current_limits: Number of selectors available for current limits
*
* @min_uV: Voltage given by the lowest selector (if linear mapping)
* @uV_step: Voltage increase with each selector (if linear mapping)
* @linear_min_sel: Minimal selector for starting linear mapping
* @fixed_uV: Fixed voltage of rails.
* @ramp_delay: Time to settle down after voltage change (unit: uV/us)
* @min_dropout_uV: The minimum dropout voltage this regulator can handle
* @linear_ranges: A constant table of possible voltage ranges.
* @linear_range_selectors_bitfield: A constant table of voltage range
* selectors as bitfield values. If
* pickable ranges are used each range
* must have corresponding selector here.
* @n_linear_ranges: Number of entries in the @linear_ranges (and in
* linear_range_selectors_bitfield if used) table(s).
* @volt_table: Voltage mapping table (if table based mapping)
* @curr_table: Current limit mapping table (if table based mapping)
*
* @vsel_range_reg: Register for range selector when using pickable ranges
* and ``regulator_map_*_voltage_*_pickable`` functions.
* @vsel_range_mask: Mask for register bitfield used for range selector
* @range_applied_by_vsel: A flag to indicate that changes to vsel_range_reg
* are only effective after vsel_reg is written
* @vsel_reg: Register for selector when using ``regulator_map_*_voltage_*``
* @vsel_mask: Mask for register bitfield used for selector
* @vsel_step: Specify the resolution of selector stepping when setting
* voltage. If 0, then no stepping is done (requested selector is
* set directly), if >0 then the regulator API will ramp the
* voltage up/down gradually each time increasing/decreasing the
* selector by the specified step value.
* @csel_reg: Register for current limit selector using regmap set_current_limit
* @csel_mask: Mask for register bitfield used for current limit selector
* @apply_reg: Register for initiate voltage change on the output when
* using regulator_set_voltage_sel_regmap
* @apply_bit: Register bitfield used for initiate voltage change on the
* output when using regulator_set_voltage_sel_regmap
* @enable_reg: Register for control when using regmap enable/disable ops
* @enable_mask: Mask for control when using regmap enable/disable ops
* @enable_val: Enabling value for control when using regmap enable/disable ops
* @disable_val: Disabling value for control when using regmap enable/disable ops
* @enable_is_inverted: A flag to indicate set enable_mask bits to disable
* when using regulator_enable_regmap and friends APIs.
* @bypass_reg: Register for control when using regmap set_bypass
* @bypass_mask: Mask for control when using regmap set_bypass
* @bypass_val_on: Enabling value for control when using regmap set_bypass
* @bypass_val_off: Disabling value for control when using regmap set_bypass
* @active_discharge_off: Enabling value for control when using regmap
* set_active_discharge
* @active_discharge_on: Disabling value for control when using regmap
* set_active_discharge
* @active_discharge_mask: Mask for control when using regmap
* set_active_discharge
* @active_discharge_reg: Register for control when using regmap
* set_active_discharge
* @soft_start_reg: Register for control when using regmap set_soft_start
* @soft_start_mask: Mask for control when using regmap set_soft_start
* @soft_start_val_on: Enabling value for control when using regmap
* set_soft_start
* @pull_down_reg: Register for control when using regmap set_pull_down
* @pull_down_mask: Mask for control when using regmap set_pull_down
* @pull_down_val_on: Enabling value for control when using regmap
* set_pull_down
*
* @ramp_reg: Register for controlling the regulator ramp-rate.
* @ramp_mask: Bitmask for the ramp-rate control register.
* @ramp_delay_table: Table for mapping the regulator ramp-rate values. Values
* should be given in units of V/S (uV/uS). See the
* regulator_set_ramp_delay_regmap().
* @n_ramp_values: number of elements at @ramp_delay_table.
*
* @enable_time: Time taken for initial enable of regulator (in uS).
* @off_on_delay: guard time (in uS), before re-enabling a regulator
*
* @poll_enabled_time: The polling interval (in uS) to use while checking that
* the regulator was actually enabled. Max upto enable_time.
*
* @of_map_mode: Maps a hardware mode defined in a DeviceTree to a standard mode
*/
struct regulator_desc {
const char *name;
const char *supply_name;
const char *of_match;
bool of_match_full_name;
const char *regulators_node;
int (*of_parse_cb)(struct device_node *,
const struct regulator_desc *,
struct regulator_config *);
int (*init_cb)(struct regulator_dev *,
struct regulator_config *);
int id;
unsigned int continuous_voltage_range:1;
unsigned n_voltages;
unsigned int n_current_limits;
const struct regulator_ops *ops;
int irq;
enum regulator_type type;
struct module *owner;
unsigned int min_uV;
unsigned int uV_step;
unsigned int linear_min_sel;
int fixed_uV;
unsigned int ramp_delay;
int min_dropout_uV;
const struct linear_range *linear_ranges;
const unsigned int *linear_range_selectors_bitfield;
int n_linear_ranges;
const unsigned int *volt_table;
const unsigned int *curr_table;
unsigned int vsel_range_reg;
unsigned int vsel_range_mask;
bool range_applied_by_vsel;
unsigned int vsel_reg;
unsigned int vsel_mask;
unsigned int vsel_step;
unsigned int csel_reg;
unsigned int csel_mask;
unsigned int apply_reg;
unsigned int apply_bit;
unsigned int enable_reg;
unsigned int enable_mask;
unsigned int enable_val;
unsigned int disable_val;
bool enable_is_inverted;
unsigned int bypass_reg;
unsigned int bypass_mask;
unsigned int bypass_val_on;
unsigned int bypass_val_off;
unsigned int active_discharge_on;
unsigned int active_discharge_off;
unsigned int active_discharge_mask;
unsigned int active_discharge_reg;
unsigned int soft_start_reg;
unsigned int soft_start_mask;
unsigned int soft_start_val_on;
unsigned int pull_down_reg;
unsigned int pull_down_mask;
unsigned int pull_down_val_on;
unsigned int ramp_reg;
unsigned int ramp_mask;
const unsigned int *ramp_delay_table;
unsigned int n_ramp_values;
unsigned int enable_time;
unsigned int off_on_delay;
unsigned int poll_enabled_time;
unsigned int (*of_map_mode)(unsigned int mode);
};
/**
* struct regulator_config - Dynamic regulator descriptor
*
* Each regulator registered with the core is described with a
* structure of this type and a struct regulator_desc. This structure
* contains the runtime variable parts of the regulator description.
*
* @dev: struct device for the regulator
* @init_data: platform provided init data, passed through by driver
* @driver_data: private regulator data
* @of_node: OpenFirmware node to parse for device tree bindings (may be
* NULL).
* @regmap: regmap to use for core regmap helpers if dev_get_regmap() is
* insufficient.
* @ena_gpiod: GPIO controlling regulator enable.
*/
struct regulator_config {
struct device *dev;
const struct regulator_init_data *init_data;
void *driver_data;
struct device_node *of_node;
struct regmap *regmap;
struct gpio_desc *ena_gpiod;
};
/**
* struct regulator_err_state - regulator error/notification status
*
* @rdev: Regulator which status the struct indicates.
* @notifs: Events which have occurred on the regulator.
* @errors: Errors which are active on the regulator.
* @possible_errs: Errors which can be signaled (by given IRQ).
*/
struct regulator_err_state {
struct regulator_dev *rdev;
unsigned long notifs;
unsigned long errors;
int possible_errs;
};
/**
* struct regulator_irq_data - regulator error/notification status data
*
* @states: Status structs for each of the associated regulators.
* @num_states: Amount of associated regulators.
* @data: Driver data pointer given at regulator_irq_desc.
* @opaque: Value storage for IC driver. Core does not update this. ICs
* may want to store status register value here at map_event and
* compare contents at 'renable' callback to see if new problems
* have been added to status. If that is the case it may be
* desirable to return REGULATOR_ERROR_CLEARED and not
* REGULATOR_ERROR_ON to allow IRQ fire again and to generate
* notifications also for the new issues.
*
* This structure is passed to 'map_event' and 'renable' callbacks for
* reporting regulator status to core.
*/
struct regulator_irq_data {
struct regulator_err_state *states;
int num_states;
void *data;
long opaque;
};
/**
* struct regulator_irq_desc - notification sender for IRQ based events.
*
* @name: The visible name for the IRQ
* @fatal_cnt: If this IRQ is used to signal HW damaging condition it may be
* best to shut-down regulator(s) or reboot the SOC if error
* handling is repeatedly failing. If fatal_cnt is given the IRQ
* handling is aborted if it fails for fatal_cnt times and die()
* callback (if populated) is called. If die() is not populated
* poweroff for the system is attempted in order to prevent any
* further damage.
* @reread_ms: The time which is waited before attempting to re-read status
* at the worker if IC reading fails. Immediate re-read is done
* if time is not specified.
* @irq_off_ms: The time which IRQ is kept disabled before re-evaluating the
* status for devices which keep IRQ disabled for duration of the
* error. If this is not given the IRQ is left enabled and renable
* is not called.
* @skip_off: If set to true the IRQ handler will attempt to check if any of
* the associated regulators are enabled prior to taking other
* actions. If no regulators are enabled and this is set to true
* a spurious IRQ is assumed and IRQ_NONE is returned.
* @high_prio: Boolean to indicate that high priority WQ should be used.
* @data: Driver private data pointer which will be passed as such to
* the renable, map_event and die callbacks in regulator_irq_data.
* @die: Protection callback. If IC status reading or recovery actions
* fail fatal_cnt times this callback is called or system is
* powered off. This callback should implement a final protection
* attempt like disabling the regulator. If protection succeeded
* die() may return 0. If anything else is returned the core
* assumes final protection failed and attempts to perform a
* poweroff as a last resort.
* @map_event: Driver callback to map IRQ status into regulator devices with
* events / errors. NOTE: callback MUST initialize both the
* errors and notifs for all rdevs which it signals having
* active events as core does not clean the map data.
* REGULATOR_FAILED_RETRY can be returned to indicate that the
* status reading from IC failed. If this is repeated for
* fatal_cnt times the core will call die() callback or power-off
* the system as a last resort to protect the HW.
* @renable: Optional callback to check status (if HW supports that) before
* re-enabling IRQ. If implemented this should clear the error
* flags so that errors fetched by regulator_get_error_flags()
* are updated. If callback is not implemented then errors are
* assumed to be cleared and IRQ is re-enabled.
* REGULATOR_FAILED_RETRY can be returned to
* indicate that the status reading from IC failed. If this is
* repeated for 'fatal_cnt' times the core will call die()
* callback or if die() is not populated then attempt to power-off
* the system as a last resort to protect the HW.
* Returning zero indicates that the problem in HW has been solved
* and IRQ will be re-enabled. Returning REGULATOR_ERROR_ON
* indicates the error condition is still active and keeps IRQ
* disabled. Please note that returning REGULATOR_ERROR_ON does
* not retrigger evaluating what events are active or resending
* notifications. If this is needed you probably want to return
* zero and allow IRQ to retrigger causing events to be
* re-evaluated and re-sent.
*
* This structure is used for registering regulator IRQ notification helper.
*/
struct regulator_irq_desc {
const char *name;
int fatal_cnt;
int reread_ms;
int irq_off_ms;
bool skip_off;
bool high_prio;
void *data;
int (*die)(struct regulator_irq_data *rid);
int (*map_event)(int irq, struct regulator_irq_data *rid,
unsigned long *dev_mask);
int (*renable)(struct regulator_irq_data *rid);
};
/*
* Return values for regulator IRQ helpers.
*/
enum {
REGULATOR_ERROR_CLEARED,
REGULATOR_FAILED_RETRY,
REGULATOR_ERROR_ON,
};
/*
* struct coupling_desc
*
* Describes coupling of regulators. Each regulator should have
* at least a pointer to itself in coupled_rdevs array.
* When a new coupled regulator is resolved, n_resolved is
* incremented.
*/
struct coupling_desc {
struct regulator_dev **coupled_rdevs;
struct regulator_coupler *coupler;
int n_resolved;
int n_coupled;
};
/*
* struct regulator_dev
*
* Voltage / Current regulator class device. One for each
* regulator.
*
* This should *not* be used directly by anything except the regulator
* core and notification injection (which should take the mutex and do
* no other direct access).
*/
struct regulator_dev {
const struct regulator_desc *desc;
int exclusive;
u32 use_count;
u32 open_count;
u32 bypass_count;
/* lists we belong to */
struct list_head list; /* list of all regulators */
/* lists we own */
struct list_head consumer_list; /* consumers we supply */
struct coupling_desc coupling_desc;
struct blocking_notifier_head notifier;
struct ww_mutex mutex; /* consumer lock */
struct task_struct *mutex_owner;
int ref_cnt;
struct module *owner;
struct device dev;
struct device bdev;
struct regulation_constraints *constraints;
struct regulator *supply; /* for tree */
const char *supply_name;
struct regmap *regmap;
struct delayed_work disable_work;
void *reg_data; /* regulator_dev data */
struct dentry *debugfs;
struct regulator_enable_gpio *ena_pin;
unsigned int ena_gpio_state:1;
unsigned int constraints_pending:1;
unsigned int is_switch:1;
/* time when this regulator was disabled last time */
ktime_t last_off;
int cached_err;
bool use_cached_err;
spinlock_t err_lock;
int pw_requested_mW;
/* regulator notification forwarding */
struct notifier_block supply_fwd_nb;
};
/*
* Convert error flags to corresponding notifications.
*
* Can be used by drivers which use the notification helpers to
* find out correct notification flags based on the error flags. Drivers
* can avoid storing both supported notification and error flags which
* may save few bytes.
*/
static inline int regulator_err2notif(int err)
{
switch (err) {
case REGULATOR_ERROR_UNDER_VOLTAGE:
return REGULATOR_EVENT_UNDER_VOLTAGE;
case REGULATOR_ERROR_OVER_CURRENT:
return REGULATOR_EVENT_OVER_CURRENT;
case REGULATOR_ERROR_REGULATION_OUT:
return REGULATOR_EVENT_REGULATION_OUT;
case REGULATOR_ERROR_FAIL:
return REGULATOR_EVENT_FAIL;
case REGULATOR_ERROR_OVER_TEMP:
return REGULATOR_EVENT_OVER_TEMP;
case REGULATOR_ERROR_UNDER_VOLTAGE_WARN:
return REGULATOR_EVENT_UNDER_VOLTAGE_WARN;
case REGULATOR_ERROR_OVER_CURRENT_WARN:
return REGULATOR_EVENT_OVER_CURRENT_WARN;
case REGULATOR_ERROR_OVER_VOLTAGE_WARN:
return REGULATOR_EVENT_OVER_VOLTAGE_WARN;
case REGULATOR_ERROR_OVER_TEMP_WARN:
return REGULATOR_EVENT_OVER_TEMP_WARN;
}
return 0;
}
struct regulator_dev *
regulator_register(struct device *dev,
const struct regulator_desc *regulator_desc,
const struct regulator_config *config);
struct regulator_dev *
devm_regulator_register(struct device *dev,
const struct regulator_desc *regulator_desc,
const struct regulator_config *config);
void regulator_unregister(struct regulator_dev *rdev);
int regulator_notifier_call_chain(struct regulator_dev *rdev,
unsigned long event, void *data);
void *devm_regulator_irq_helper(struct device *dev,
const struct regulator_irq_desc *d, int irq,
int irq_flags, int common_errs,
int *per_rdev_errs, struct regulator_dev **rdev,
int rdev_amount);
void *regulator_irq_helper(struct device *dev,
const struct regulator_irq_desc *d, int irq,
int irq_flags, int common_errs, int *per_rdev_errs,
struct regulator_dev **rdev, int rdev_amount);
void regulator_irq_helper_cancel(void **handle);
int regulator_irq_map_event_simple(int irq, struct regulator_irq_data *rid,
unsigned long *dev_mask);
void *rdev_get_drvdata(struct regulator_dev *rdev);
struct device *rdev_get_dev(struct regulator_dev *rdev);
struct regmap *rdev_get_regmap(struct regulator_dev *rdev);
int rdev_get_id(struct regulator_dev *rdev);
int regulator_mode_to_status(unsigned int);
int regulator_list_voltage_linear(struct regulator_dev *rdev,
unsigned int selector);
int regulator_list_voltage_pickable_linear_range(struct regulator_dev *rdev,
unsigned int selector);
int regulator_list_voltage_linear_range(struct regulator_dev *rdev,
unsigned int selector);
int regulator_list_voltage_table(struct regulator_dev *rdev,
unsigned int selector);
int regulator_map_voltage_linear(struct regulator_dev *rdev,
int min_uV, int max_uV);
int regulator_map_voltage_pickable_linear_range(struct regulator_dev *rdev,
int min_uV, int max_uV);
int regulator_map_voltage_linear_range(struct regulator_dev *rdev,
int min_uV, int max_uV);
int regulator_map_voltage_iterate(struct regulator_dev *rdev,
int min_uV, int max_uV);
int regulator_map_voltage_ascend(struct regulator_dev *rdev,
int min_uV, int max_uV);
int regulator_get_voltage_sel_pickable_regmap(struct regulator_dev *rdev);
int regulator_set_voltage_sel_pickable_regmap(struct regulator_dev *rdev,
unsigned int sel);
int regulator_get_voltage_sel_regmap(struct regulator_dev *rdev);
int regulator_set_voltage_sel_regmap(struct regulator_dev *rdev, unsigned sel);
int regulator_is_enabled_regmap(struct regulator_dev *rdev);
int regulator_enable_regmap(struct regulator_dev *rdev);
int regulator_disable_regmap(struct regulator_dev *rdev);
int regulator_set_voltage_time_sel(struct regulator_dev *rdev,
unsigned int old_selector,
unsigned int new_selector);
int regulator_set_bypass_regmap(struct regulator_dev *rdev, bool enable);
int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable);
int regulator_set_soft_start_regmap(struct regulator_dev *rdev);
int regulator_set_pull_down_regmap(struct regulator_dev *rdev);
int regulator_set_active_discharge_regmap(struct regulator_dev *rdev,
bool enable);
int regulator_set_current_limit_regmap(struct regulator_dev *rdev,
int min_uA, int max_uA);
int regulator_get_current_limit_regmap(struct regulator_dev *rdev);
void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data);
int regulator_find_closest_bigger(unsigned int target, const unsigned int *table,
unsigned int num_sel, unsigned int *sel);
int regulator_set_ramp_delay_regmap(struct regulator_dev *rdev, int ramp_delay);
int regulator_sync_voltage_rdev(struct regulator_dev *rdev);
/*
* Helper functions intended to be used by regulator drivers prior registering
* their regulators.
*/
int regulator_desc_list_voltage_linear_range(const struct regulator_desc *desc,
unsigned int selector);
int regulator_desc_list_voltage_linear(const struct regulator_desc *desc,
unsigned int selector);
#ifdef CONFIG_REGULATOR
const char *rdev_get_name(struct regulator_dev *rdev);
#else
static inline const char *rdev_get_name(struct regulator_dev *rdev)
{
return NULL;
}
#endif
#endif
@@ -0,0 +1,57 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* fan53555.h - Fairchild Regulator FAN53555 Driver
*
* Copyright (C) 2012 Marvell Technology Ltd.
* Yunfan Zhang <yfzhang@marvell.com>
*/
#ifndef __FAN53555_H__
#define __FAN53555_H__
/* VSEL ID */
enum {
FAN53555_VSEL_ID_0 = 0,
FAN53555_VSEL_ID_1,
};
/* Transition slew rate limiting from a low to high voltage.
* -----------------------
* Bin |Slew Rate(mV/uS)
* ------|----------------
* 000 | 64.00
* ------|----------------
* 001 | 32.00
* ------|----------------
* 010 | 16.00
* ------|----------------
* 011 | 8.00
* ------|----------------
* 100 | 4.00
* ------|----------------
* 101 | 2.00
* ------|----------------
* 110 | 1.00
* ------|----------------
* 111 | 0.50
* -----------------------
*/
enum {
FAN53555_SLEW_RATE_64MV = 0,
FAN53555_SLEW_RATE_32MV,
FAN53555_SLEW_RATE_16MV,
FAN53555_SLEW_RATE_8MV,
FAN53555_SLEW_RATE_4MV,
FAN53555_SLEW_RATE_2MV,
FAN53555_SLEW_RATE_1MV,
FAN53555_SLEW_RATE_0_5MV,
};
struct fan53555_platform_data {
struct regulator_init_data *regulator;
unsigned int slew_rate;
/* Sleep VSEL ID */
unsigned int sleep_vsel_id;
};
#endif /* __FAN53555_H__ */
@@ -0,0 +1,60 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* fixed.h
*
* Copyright 2008 Wolfson Microelectronics PLC.
*
* Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
*
* Copyright (c) 2009 Nokia Corporation
* Roger Quadros <ext-roger.quadros@nokia.com>
*/
#ifndef __REGULATOR_FIXED_H
#define __REGULATOR_FIXED_H
struct regulator_init_data;
/**
* struct fixed_voltage_config - fixed_voltage_config structure
* @supply_name: Name of the regulator supply
* @input_supply: Name of the input regulator supply
* @microvolts: Output voltage of regulator
* @startup_delay: Start-up time in microseconds
* @enabled_at_boot: Whether regulator has been enabled at
* boot or not. 1 = Yes, 0 = No
* This is used to keep the regulator at
* the default state
* @init_data: regulator_init_data
*
* This structure contains fixed voltage regulator configuration
* information that must be passed by platform code to the fixed
* voltage regulator driver.
*/
struct fixed_voltage_config {
const char *supply_name;
const char *input_supply;
int microvolts;
unsigned startup_delay;
unsigned int off_on_delay;
unsigned enabled_at_boot:1;
struct regulator_init_data *init_data;
};
struct regulator_consumer_supply;
#if IS_ENABLED(CONFIG_REGULATOR)
struct platform_device *regulator_register_always_on(int id, const char *name,
struct regulator_consumer_supply *supplies, int num_supplies, int uv);
#else
static inline struct platform_device *regulator_register_always_on(int id, const char *name,
struct regulator_consumer_supply *supplies, int num_supplies, int uv)
{
return NULL;
}
#endif
#define regulator_register_fixed(id, s, ns) regulator_register_always_on(id, \
"fixed-dummy", s, ns, 0)
#endif
@@ -0,0 +1,81 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* gpio-regulator.h
*
* Copyright 2011 Heiko Stuebner <heiko@sntech.de>
*
* based on fixed.h
*
* Copyright 2008 Wolfson Microelectronics PLC.
*
* Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
*
* Copyright (c) 2009 Nokia Corporation
* Roger Quadros <ext-roger.quadros@nokia.com>
*/
#ifndef __REGULATOR_GPIO_H
#define __REGULATOR_GPIO_H
#include <linux/gpio/consumer.h>
struct regulator_init_data;
enum regulator_type;
/**
* struct gpio_regulator_state - state description
* @value: microvolts or microamps
* @gpios: bitfield of gpio target-states for the value
*
* This structure describes a supported setting of the regulator
* and the necessary gpio-state to achieve it.
*
* The n-th bit in the bitfield describes the state of the n-th GPIO
* from the gpios-array defined in gpio_regulator_config below.
*/
struct gpio_regulator_state {
int value;
int gpios;
};
/**
* struct gpio_regulator_config - config structure
* @supply_name: Name of the regulator supply
* @input_supply: Name of the input regulator supply
* @enabled_at_boot: Whether regulator has been enabled at
* boot or not. 1 = Yes, 0 = No
* This is used to keep the regulator at
* the default state
* @startup_delay: Start-up time in microseconds
* @gflags: Array of GPIO configuration flags for initial
* states
* @ngpios: Number of GPIOs and configurations available
* @states: Array of gpio_regulator_state entries describing
* the gpio state for specific voltages
* @nr_states: Number of states available
* @regulator_type: either REGULATOR_CURRENT or REGULATOR_VOLTAGE
* @init_data: regulator_init_data
*
* This structure contains gpio-voltage regulator configuration
* information that must be passed by platform code to the
* gpio-voltage regulator driver.
*/
struct gpio_regulator_config {
const char *supply_name;
const char *input_supply;
unsigned enabled_at_boot:1;
unsigned startup_delay;
enum gpiod_flags *gflags;
int ngpios;
struct gpio_regulator_state *states;
int nr_states;
enum regulator_type type;
struct regulator_init_data *init_data;
};
#endif
@@ -0,0 +1,38 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* National Semiconductors LP3971 PMIC chip client interface
*
* Copyright (C) 2009 Samsung Electronics
* Author: Marek Szyprowski <m.szyprowski@samsung.com>
*
* Based on wm8400.h
*/
#ifndef __LINUX_REGULATOR_LP3971_H
#define __LINUX_REGULATOR_LP3971_H
#include <linux/regulator/machine.h>
#define LP3971_LDO1 0
#define LP3971_LDO2 1
#define LP3971_LDO3 2
#define LP3971_LDO4 3
#define LP3971_LDO5 4
#define LP3971_DCDC1 5
#define LP3971_DCDC2 6
#define LP3971_DCDC3 7
#define LP3971_NUM_REGULATORS 8
struct lp3971_regulator_subdev {
int id;
struct regulator_init_data *initdata;
};
struct lp3971_platform_data {
int num_regulators;
struct lp3971_regulator_subdev *regulators;
};
#endif
@@ -0,0 +1,35 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* National Semiconductors LP3972 PMIC chip client interface
*
* Based on lp3971.h
*/
#ifndef __LINUX_REGULATOR_LP3972_H
#define __LINUX_REGULATOR_LP3972_H
#include <linux/regulator/machine.h>
#define LP3972_LDO1 0
#define LP3972_LDO2 1
#define LP3972_LDO3 2
#define LP3972_LDO4 3
#define LP3972_LDO5 4
#define LP3972_DCDC1 5
#define LP3972_DCDC2 6
#define LP3972_DCDC3 7
#define LP3972_NUM_REGULATORS 8
struct lp3972_regulator_subdev {
int id;
struct regulator_init_data *initdata;
};
struct lp3972_platform_data {
int num_regulators;
struct lp3972_regulator_subdev *regulators;
};
#endif
@@ -0,0 +1,86 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright 2012 Texas Instruments
*
* Author: Milo(Woogyom) Kim <milo.kim@ti.com>
*/
#ifndef __LP872X_REGULATOR_H__
#define __LP872X_REGULATOR_H__
#include <linux/regulator/machine.h>
#include <linux/platform_device.h>
#include <linux/gpio/consumer.h>
#define LP872X_MAX_REGULATORS 9
#define LP8720_ENABLE_DELAY 200
#define LP8725_ENABLE_DELAY 30000
enum lp872x_regulator_id {
LP8720_ID_BASE,
LP8720_ID_LDO1 = LP8720_ID_BASE,
LP8720_ID_LDO2,
LP8720_ID_LDO3,
LP8720_ID_LDO4,
LP8720_ID_LDO5,
LP8720_ID_BUCK,
LP8725_ID_BASE,
LP8725_ID_LDO1 = LP8725_ID_BASE,
LP8725_ID_LDO2,
LP8725_ID_LDO3,
LP8725_ID_LDO4,
LP8725_ID_LDO5,
LP8725_ID_LILO1,
LP8725_ID_LILO2,
LP8725_ID_BUCK1,
LP8725_ID_BUCK2,
LP872X_ID_MAX,
};
enum lp872x_dvs_sel {
SEL_V1,
SEL_V2,
};
/**
* lp872x_dvs
* @gpio : gpio descriptor for dvs control
* @vsel : dvs selector for buck v1 or buck v2 register
* @init_state : initial dvs pin state
*/
struct lp872x_dvs {
struct gpio_desc *gpio;
enum lp872x_dvs_sel vsel;
enum gpiod_flags init_state;
};
/**
* lp872x_regdata
* @id : regulator id
* @init_data : init data for each regulator
*/
struct lp872x_regulator_data {
enum lp872x_regulator_id id;
struct regulator_init_data *init_data;
};
/**
* lp872x_platform_data
* @general_config : the value of LP872X_GENERAL_CFG register
* @update_config : if LP872X_GENERAL_CFG register is updated, set true
* @regulator_data : platform regulator id and init data
* @dvs : dvs data for buck voltage control
* @enable_gpio : gpio descriptor for enable control
*/
struct lp872x_platform_data {
u8 general_config;
bool update_config;
struct lp872x_regulator_data regulator_data[LP872X_MAX_REGULATORS];
struct lp872x_dvs *dvs;
struct gpio_desc *enable_gpio;
};
#endif
@@ -0,0 +1,309 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* machine.h -- SoC Regulator support, machine/board driver API.
*
* Copyright (C) 2007, 2008 Wolfson Microelectronics PLC.
*
* Author: Liam Girdwood <lrg@slimlogic.co.uk>
*
* Regulator Machine/Board Interface.
*/
#ifndef __LINUX_REGULATOR_MACHINE_H_
#define __LINUX_REGULATOR_MACHINE_H_
#include <linux/regulator/consumer.h>
#include <linux/suspend.h>
struct regulator;
/*
* Regulator operation constraint flags. These flags are used to enable
* certain regulator operations and can be OR'ed together.
*
* VOLTAGE: Regulator output voltage can be changed by software on this
* board/machine.
* CURRENT: Regulator output current can be changed by software on this
* board/machine.
* MODE: Regulator operating mode can be changed by software on this
* board/machine.
* STATUS: Regulator can be enabled and disabled.
* DRMS: Dynamic Regulator Mode Switching is enabled for this regulator.
* BYPASS: Regulator can be put into bypass mode
*/
#define REGULATOR_CHANGE_VOLTAGE 0x1
#define REGULATOR_CHANGE_CURRENT 0x2
#define REGULATOR_CHANGE_MODE 0x4
#define REGULATOR_CHANGE_STATUS 0x8
#define REGULATOR_CHANGE_DRMS 0x10
#define REGULATOR_CHANGE_BYPASS 0x20
/*
* operations in suspend mode
* DO_NOTHING_IN_SUSPEND - the default value
* DISABLE_IN_SUSPEND - turn off regulator in suspend states
* ENABLE_IN_SUSPEND - keep regulator on in suspend states
*/
#define DO_NOTHING_IN_SUSPEND 0
#define DISABLE_IN_SUSPEND 1
#define ENABLE_IN_SUSPEND 2
/*
* Default time window (in milliseconds) following a critical under-voltage
* event during which less critical actions can be safely carried out by the
* system.
*/
#define REGULATOR_DEF_UV_LESS_CRITICAL_WINDOW_MS 10
/* Regulator active discharge flags */
enum regulator_active_discharge {
REGULATOR_ACTIVE_DISCHARGE_DEFAULT,
REGULATOR_ACTIVE_DISCHARGE_DISABLE,
REGULATOR_ACTIVE_DISCHARGE_ENABLE,
};
/**
* struct regulator_state - regulator state during low power system states
*
* This describes a regulators state during a system wide low power
* state. One of enabled or disabled must be set for the
* configuration to be applied.
*
* @uV: Default operating voltage during suspend, it can be adjusted
* among <min_uV, max_uV>.
* @min_uV: Minimum suspend voltage may be set.
* @max_uV: Maximum suspend voltage may be set.
* @mode: Operating mode during suspend.
* @enabled: operations during suspend.
* - DO_NOTHING_IN_SUSPEND
* - DISABLE_IN_SUSPEND
* - ENABLE_IN_SUSPEND
* @changeable: Is this state can be switched between enabled/disabled,
*/
struct regulator_state {
int uV;
int min_uV;
int max_uV;
unsigned int mode;
int enabled;
bool changeable;
};
#define REGULATOR_NOTIF_LIMIT_DISABLE -1
#define REGULATOR_NOTIF_LIMIT_ENABLE -2
struct notification_limit {
int prot;
int err;
int warn;
};
/**
* struct regulation_constraints - regulator operating constraints.
*
* This struct describes regulator and board/machine specific constraints.
*
* @name: Descriptive name for the constraints, used for display purposes.
*
* @min_uV: Smallest voltage consumers may set.
* @max_uV: Largest voltage consumers may set.
* @uV_offset: Offset applied to voltages from consumer to compensate for
* voltage drops.
*
* @min_uA: Smallest current consumers may set.
* @max_uA: Largest current consumers may set.
* @ilim_uA: Maximum input current.
* @pw_budget_mW: Power budget for the regulator in mW.
* @system_load: Load that isn't captured by any consumer requests.
*
* @over_curr_limits: Limits for acting on over current.
* @over_voltage_limits: Limits for acting on over voltage.
* @under_voltage_limits: Limits for acting on under voltage.
* @temp_limits: Limits for acting on over temperature.
*
* @max_spread: Max possible spread between coupled regulators
* @max_uV_step: Max possible step change in voltage
* @valid_modes_mask: Mask of modes which may be configured by consumers.
* @valid_ops_mask: Operations which may be performed by consumers.
*
* @always_on: Set if the regulator should never be disabled.
* @boot_on: Set if the regulator is enabled when the system is initially
* started. If the regulator is not enabled by the hardware or
* bootloader then it will be enabled when the constraints are
* applied.
* @apply_uV: Apply the voltage constraint when initialising.
* @ramp_disable: Disable ramp delay when initialising or when setting voltage.
* @soft_start: Enable soft start so that voltage ramps slowly.
* @pull_down: Enable pull down when regulator is disabled.
* @system_critical: Set if the regulator is critical to system stability or
* functionality.
* @over_current_protection: Auto disable on over current event.
*
* @over_current_detection: Configure over current limits.
* @over_voltage_detection: Configure over voltage limits.
* @under_voltage_detection: Configure under voltage limits.
* @over_temp_detection: Configure over temperature limits.
*
* @input_uV: Input voltage for regulator when supplied by another regulator.
*
* @state_disk: State for regulator when system is suspended in disk mode.
* @state_mem: State for regulator when system is suspended in mem mode.
* @state_standby: State for regulator when system is suspended in standby
* mode.
* @initial_state: Suspend state to set by default.
* @initial_mode: Mode to set at startup.
* @ramp_delay: Time to settle down after voltage change (unit: uV/us)
* @settling_time: Time to settle down after voltage change when voltage
* change is non-linear (unit: microseconds).
* @settling_time_up: Time to settle down after voltage increase when voltage
* change is non-linear (unit: microseconds).
* @settling_time_down : Time to settle down after voltage decrease when
* voltage change is non-linear (unit: microseconds).
* @active_discharge: Enable/disable active discharge. The enum
* regulator_active_discharge values are used for
* initialisation.
* @enable_time: Turn-on time of the rails (unit: microseconds)
* @uv_less_critical_window_ms: Specifies the time window (in milliseconds)
* following a critical under-voltage (UV) event
* during which less critical actions can be
* safely carried out by the system (for example
* logging). After this time window more critical
* actions should be done (for example prevent
* HW damage).
*/
struct regulation_constraints {
const char *name;
/* voltage output range (inclusive) - for voltage control */
int min_uV;
int max_uV;
int uV_offset;
/* current output range (inclusive) - for current control */
int min_uA;
int max_uA;
int ilim_uA;
int pw_budget_mW;
int system_load;
/* used for coupled regulators */
u32 *max_spread;
/* used for changing voltage in steps */
int max_uV_step;
/* valid regulator operating modes for this machine */
unsigned int valid_modes_mask;
/* valid operations for regulator on this machine */
unsigned int valid_ops_mask;
/* regulator input voltage - only if supply is another regulator */
int input_uV;
/* regulator suspend states for global PMIC STANDBY/HIBERNATE */
struct regulator_state state_disk;
struct regulator_state state_mem;
struct regulator_state state_standby;
struct notification_limit over_curr_limits;
struct notification_limit over_voltage_limits;
struct notification_limit under_voltage_limits;
struct notification_limit temp_limits;
suspend_state_t initial_state; /* suspend state to set at init */
/* mode to set on startup */
unsigned int initial_mode;
unsigned int ramp_delay;
unsigned int settling_time;
unsigned int settling_time_up;
unsigned int settling_time_down;
unsigned int enable_time;
unsigned int uv_less_critical_window_ms;
unsigned int active_discharge;
/* constraint flags */
unsigned always_on:1; /* regulator never off when system is on */
unsigned boot_on:1; /* bootloader/firmware enabled regulator */
unsigned apply_uV:1; /* apply uV constraint if min == max */
unsigned ramp_disable:1; /* disable ramp delay */
unsigned soft_start:1; /* ramp voltage slowly */
unsigned pull_down:1; /* pull down resistor when regulator off */
unsigned system_critical:1; /* critical to system stability */
unsigned over_current_protection:1; /* auto disable on over current */
unsigned over_current_detection:1; /* notify on over current */
unsigned over_voltage_detection:1; /* notify on over voltage */
unsigned under_voltage_detection:1; /* notify on under voltage */
unsigned over_temp_detection:1; /* notify on over temperature */
};
/**
* struct regulator_consumer_supply - supply -> device mapping
*
* This maps a supply name to a device. Use of dev_name allows support for
* buses which make struct device available late such as I2C.
*
* @dev_name: Result of dev_name() for the consumer.
* @supply: Name for the supply.
*/
struct regulator_consumer_supply {
const char *dev_name; /* dev_name() for consumer */
const char *supply; /* consumer supply - e.g. "vcc" */
};
/* Initialize struct regulator_consumer_supply */
#define REGULATOR_SUPPLY(_name, _dev_name) \
{ \
.supply = _name, \
.dev_name = _dev_name, \
}
/**
* struct regulator_init_data - regulator platform initialisation data.
*
* Initialisation constraints, our supply and consumers supplies.
*
* @supply_regulator: Parent regulator. Specified using the regulator name
* as it appears in the name field in sysfs, which can
* be explicitly set using the constraints field 'name'.
*
* @constraints: Constraints. These must be specified for the regulator to
* be usable.
* @num_consumer_supplies: Number of consumer device supplies.
* @consumer_supplies: Consumer device supply configuration.
* @driver_data: Data passed to regulator_init.
*/
struct regulator_init_data {
const char *supply_regulator; /* or NULL for system supply */
struct regulation_constraints constraints;
int num_consumer_supplies;
struct regulator_consumer_supply *consumer_supplies;
/* optional regulator machine specific data */
void *driver_data; /* core does not touch this */
};
#ifdef CONFIG_REGULATOR
void regulator_has_full_constraints(void);
#else
static inline void regulator_has_full_constraints(void)
{
}
#endif
static inline int regulator_suspend_prepare(suspend_state_t state)
{
return 0;
}
static inline int regulator_suspend_finish(void)
{
return 0;
}
#endif
@@ -0,0 +1,50 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* max1586.h -- Voltage regulation for the Maxim 1586
*
* Copyright (C) 2008 Robert Jarzmik
*/
#ifndef REGULATOR_MAX1586
#define REGULATOR_MAX1586
#include <linux/regulator/machine.h>
#define MAX1586_V3 0
#define MAX1586_V6 1
/* precalculated values for v3_gain */
#define MAX1586_GAIN_NO_R24 1000000 /* 700000 .. 1475000 mV */
#define MAX1586_GAIN_R24_3k32 1051098 /* 735768 .. 1550369 mV */
#define MAX1586_GAIN_R24_5k11 1078648 /* 755053 .. 1591005 mV */
#define MAX1586_GAIN_R24_7k5 1115432 /* 780802 .. 1645262 mV */
/**
* max1586_subdev_data - regulator data
* @id: regulator Id (either MAX1586_V3 or MAX1586_V6)
* @name: regulator cute name (example for V3: "vcc_core")
* @platform_data: regulator init data (constraints, supplies, ...)
*/
struct max1586_subdev_data {
int id;
const char *name;
struct regulator_init_data *platform_data;
};
/**
* max1586_platform_data - platform data for max1586
* @num_subdevs: number of regulators used (may be 1 or 2)
* @subdevs: regulator used
* At most, there will be a regulator for V3 and one for V6 voltages.
* @v3_gain: gain on the V3 voltage output multiplied by 1e6.
* This can be calculated as ((1 + R24/R25 + R24/185.5kOhm) * 1e6)
* for an external resistor configuration as described in the
* data sheet (R25=100kOhm).
*/
struct max1586_platform_data {
int num_subdevs;
struct max1586_subdev_data *subdevs;
int v3_gain;
};
#endif
@@ -0,0 +1,41 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Interface of Maxim max8649
*
* Copyright (C) 2009-2010 Marvell International Ltd.
* Haojian Zhuang <haojian.zhuang@marvell.com>
*/
#ifndef __LINUX_REGULATOR_MAX8649_H
#define __LINUX_REGULATOR_MAX8649_H
#include <linux/regulator/machine.h>
enum {
MAX8649_EXTCLK_26MHZ = 0,
MAX8649_EXTCLK_13MHZ,
MAX8649_EXTCLK_19MHZ, /* 19.2MHz */
};
enum {
MAX8649_RAMP_32MV = 0,
MAX8649_RAMP_16MV,
MAX8649_RAMP_8MV,
MAX8649_RAMP_4MV,
MAX8649_RAMP_2MV,
MAX8649_RAMP_1MV,
MAX8649_RAMP_0_5MV,
MAX8649_RAMP_0_25MV,
};
struct max8649_platform_data {
struct regulator_init_data *regulator;
unsigned mode:2; /* bit[1:0] = VID1,VID0 */
unsigned extclk_freq:2;
unsigned extclk:1;
unsigned ramp_timing:3;
unsigned ramp_down:1;
};
#endif /* __LINUX_REGULATOR_MAX8649_H */
@@ -0,0 +1,45 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* max8660.h -- Voltage regulation for the Maxim 8660/8661
*
* Copyright (C) 2009 Wolfram Sang, Pengutronix e.K.
*/
#ifndef __LINUX_REGULATOR_MAX8660_H
#define __LINUX_REGULATOR_MAX8660_H
#include <linux/regulator/machine.h>
enum {
MAX8660_V3,
MAX8660_V4,
MAX8660_V5,
MAX8660_V6,
MAX8660_V7,
MAX8660_V_END,
};
/**
* max8660_subdev_data - regulator subdev data
* @id: regulator id
* @name: regulator name
* @platform_data: regulator init data
*/
struct max8660_subdev_data {
int id;
const char *name;
struct regulator_init_data *platform_data;
};
/**
* max8660_platform_data - platform data for max8660
* @num_subdevs: number of regulators used
* @subdevs: pointer to regulators used
* @en34_is_high: if EN34 is driven high, regulators cannot be en-/disabled.
*/
struct max8660_platform_data {
int num_subdevs;
struct max8660_subdev_data *subdevs;
unsigned en34_is_high:1;
};
#endif
@@ -0,0 +1,118 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* max8952.h - Voltage regulation for the Maxim 8952
*
* Copyright (C) 2010 Samsung Electronics
* MyungJoo Ham <myungjoo.ham@samsung.com>
*/
#ifndef REGULATOR_MAX8952
#define REGULATOR_MAX8952
#include <linux/regulator/machine.h>
enum {
MAX8952_DVS_MODE0,
MAX8952_DVS_MODE1,
MAX8952_DVS_MODE2,
MAX8952_DVS_MODE3,
};
enum {
MAX8952_DVS_770mV = 0,
MAX8952_DVS_780mV,
MAX8952_DVS_790mV,
MAX8952_DVS_800mV,
MAX8952_DVS_810mV,
MAX8952_DVS_820mV,
MAX8952_DVS_830mV,
MAX8952_DVS_840mV,
MAX8952_DVS_850mV,
MAX8952_DVS_860mV,
MAX8952_DVS_870mV,
MAX8952_DVS_880mV,
MAX8952_DVS_890mV,
MAX8952_DVS_900mV,
MAX8952_DVS_910mV,
MAX8952_DVS_920mV,
MAX8952_DVS_930mV,
MAX8952_DVS_940mV,
MAX8952_DVS_950mV,
MAX8952_DVS_960mV,
MAX8952_DVS_970mV,
MAX8952_DVS_980mV,
MAX8952_DVS_990mV,
MAX8952_DVS_1000mV,
MAX8952_DVS_1010mV,
MAX8952_DVS_1020mV,
MAX8952_DVS_1030mV,
MAX8952_DVS_1040mV,
MAX8952_DVS_1050mV,
MAX8952_DVS_1060mV,
MAX8952_DVS_1070mV,
MAX8952_DVS_1080mV,
MAX8952_DVS_1090mV,
MAX8952_DVS_1100mV,
MAX8952_DVS_1110mV,
MAX8952_DVS_1120mV,
MAX8952_DVS_1130mV,
MAX8952_DVS_1140mV,
MAX8952_DVS_1150mV,
MAX8952_DVS_1160mV,
MAX8952_DVS_1170mV,
MAX8952_DVS_1180mV,
MAX8952_DVS_1190mV,
MAX8952_DVS_1200mV,
MAX8952_DVS_1210mV,
MAX8952_DVS_1220mV,
MAX8952_DVS_1230mV,
MAX8952_DVS_1240mV,
MAX8952_DVS_1250mV,
MAX8952_DVS_1260mV,
MAX8952_DVS_1270mV,
MAX8952_DVS_1280mV,
MAX8952_DVS_1290mV,
MAX8952_DVS_1300mV,
MAX8952_DVS_1310mV,
MAX8952_DVS_1320mV,
MAX8952_DVS_1330mV,
MAX8952_DVS_1340mV,
MAX8952_DVS_1350mV,
MAX8952_DVS_1360mV,
MAX8952_DVS_1370mV,
MAX8952_DVS_1380mV,
MAX8952_DVS_1390mV,
MAX8952_DVS_1400mV,
};
enum {
MAX8952_SYNC_FREQ_26MHZ, /* Default */
MAX8952_SYNC_FREQ_13MHZ,
MAX8952_SYNC_FREQ_19_2MHZ,
};
enum {
MAX8952_RAMP_32mV_us = 0, /* Default */
MAX8952_RAMP_16mV_us,
MAX8952_RAMP_8mV_us,
MAX8952_RAMP_4mV_us,
MAX8952_RAMP_2mV_us,
MAX8952_RAMP_1mV_us,
MAX8952_RAMP_0_5mV_us,
MAX8952_RAMP_0_25mV_us,
};
#define MAX8952_NUM_DVS_MODE 4
struct max8952_platform_data {
u32 default_mode;
u32 dvs_mode[MAX8952_NUM_DVS_MODE]; /* MAX8952_DVS_MODEx_XXXXmV */
u32 sync_freq;
u32 ramp_speed;
struct regulator_init_data *reg_data;
};
#endif /* REGULATOR_MAX8952 */
@@ -0,0 +1,61 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* max8973-regulator.h -- MAXIM 8973 regulator
*
* Interface for regulator driver for MAXIM 8973 DC-DC step-down
* switching regulator.
*
* Copyright (C) 2012 NVIDIA Corporation
* Author: Laxman Dewangan <ldewangan@nvidia.com>
*/
#ifndef __LINUX_REGULATOR_MAX8973_H
#define __LINUX_REGULATOR_MAX8973_H
/*
* Control flags for configuration of the device.
* Client need to pass this information with ORed
*/
#define MAX8973_CONTROL_REMOTE_SENSE_ENABLE 0x00000001
#define MAX8973_CONTROL_FALLING_SLEW_RATE_ENABLE 0x00000002
#define MAX8973_CONTROL_OUTPUT_ACTIVE_DISCH_ENABLE 0x00000004
#define MAX8973_CONTROL_BIAS_ENABLE 0x00000008
#define MAX8973_CONTROL_PULL_DOWN_ENABLE 0x00000010
#define MAX8973_CONTROL_FREQ_SHIFT_9PER_ENABLE 0x00000020
#define MAX8973_CONTROL_CLKADV_TRIP_DISABLED 0x00000000
#define MAX8973_CONTROL_CLKADV_TRIP_75mV_PER_US 0x00010000
#define MAX8973_CONTROL_CLKADV_TRIP_150mV_PER_US 0x00020000
#define MAX8973_CONTROL_CLKADV_TRIP_75mV_PER_US_HIST_DIS 0x00030000
#define MAX8973_CONTROL_INDUCTOR_VALUE_NOMINAL 0x00000000
#define MAX8973_CONTROL_INDUCTOR_VALUE_MINUS_30_PER 0x00100000
#define MAX8973_CONTROL_INDUCTOR_VALUE_PLUS_30_PER 0x00200000
#define MAX8973_CONTROL_INDUCTOR_VALUE_PLUS_60_PER 0x00300000
/*
* struct max8973_regulator_platform_data - max8973 regulator platform data.
*
* @reg_init_data: The regulator init data.
* @control_flags: Control flags which are ORed value of above flags to
* configure device.
* @junction_temp_warning: Junction temp in millicelcius on which warning need
* to be set. Thermal functionality is only supported on
* MAX77621. The threshold warning supported by MAX77621
* are 120C and 140C.
* @enable_ext_control: Enable the voltage enable/disable through external
* control signal from EN input pin. If it is false then
* voltage output will be enabled/disabled through EN bit of
* device register.
* @dvs_def_state: Default state of dvs. 1 if it is high else 0.
*/
struct max8973_regulator_platform_data {
struct regulator_init_data *reg_init_data;
unsigned long control_flags;
unsigned long junction_temp_warning;
bool enable_ext_control;
unsigned dvs_def_state:1;
};
#endif /* __LINUX_REGULATOR_MAX8973_H */
@@ -0,0 +1,21 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2015 MediaTek Inc.
* Author: Henry Chen <henryc.chen@mediatek.com>
*/
#ifndef __LINUX_REGULATOR_MT6311_H
#define __LINUX_REGULATOR_MT6311_H
#define MT6311_MAX_REGULATORS 2
enum {
MT6311_ID_VDVFS = 0,
MT6311_ID_VBIASN,
};
#define MT6311_E1_CID_CODE 0x10
#define MT6311_E2_CID_CODE 0x20
#define MT6311_E3_CID_CODE 0x30
#endif /* __LINUX_REGULATOR_MT6311_H */
@@ -0,0 +1,44 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2021 MediaTek Inc.
*/
#ifndef __LINUX_REGULATOR_MT6315_H
#define __LINUX_REGULATOR_MT6315_H
#define MT6315_RP 3
#define MT6315_PP 6
#define MT6315_SP 7
enum {
MT6315_VBUCK1 = 0,
MT6315_VBUCK2,
MT6315_VBUCK3,
MT6315_VBUCK4,
MT6315_VBUCK_MAX,
};
/* Register */
#define MT6315_TOP2_ELR7 0x139
#define MT6315_TOP_TMA_KEY 0x39F
#define MT6315_TOP_TMA_KEY_H 0x3A0
#define MT6315_BUCK_TOP_CON0 0x1440
#define MT6315_BUCK_TOP_CON1 0x1443
#define MT6315_BUCK_TOP_ELR0 0x1449
#define MT6315_BUCK_TOP_ELR2 0x144B
#define MT6315_BUCK_TOP_ELR4 0x144D
#define MT6315_BUCK_TOP_ELR6 0x144F
#define MT6315_VBUCK1_DBG0 0x1499
#define MT6315_VBUCK1_DBG4 0x149D
#define MT6315_VBUCK2_DBG0 0x1519
#define MT6315_VBUCK2_DBG4 0x151D
#define MT6315_VBUCK3_DBG0 0x1599
#define MT6315_VBUCK3_DBG4 0x159D
#define MT6315_VBUCK4_DBG0 0x1619
#define MT6315_VBUCK4_DBG4 0x161D
#define MT6315_BUCK_TOP_4PHASE_ANA_CON42 0x16B1
#define PROTECTION_KEY_H 0x9C
#define PROTECTION_KEY 0xEA
#endif /* __LINUX_REGULATOR_MT6315_H */
@@ -0,0 +1,44 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2016 MediaTek Inc.
* Author: Chen Zhong <chen.zhong@mediatek.com>
*/
#ifndef __LINUX_REGULATOR_MT6323_H
#define __LINUX_REGULATOR_MT6323_H
enum {
MT6323_ID_VPROC = 0,
MT6323_ID_VSYS,
MT6323_ID_VPA,
MT6323_ID_VTCXO,
MT6323_ID_VCN28,
MT6323_ID_VCN33_BT,
MT6323_ID_VCN33_WIFI,
MT6323_ID_VA,
MT6323_ID_VCAMA,
MT6323_ID_VIO28 = 9,
MT6323_ID_VUSB,
MT6323_ID_VMC,
MT6323_ID_VMCH,
MT6323_ID_VEMC3V3,
MT6323_ID_VGP1,
MT6323_ID_VGP2,
MT6323_ID_VGP3,
MT6323_ID_VCN18,
MT6323_ID_VSIM1,
MT6323_ID_VSIM2,
MT6323_ID_VRTC,
MT6323_ID_VCAMAF,
MT6323_ID_VIBR,
MT6323_ID_VRF18,
MT6323_ID_VM,
MT6323_ID_VIO18,
MT6323_ID_VCAMD,
MT6323_ID_VCAMIO,
MT6323_ID_RG_MAX,
};
#define MT6323_MAX_REGULATOR MT6323_ID_RG_MAX
#endif /* __LINUX_REGULATOR_MT6323_H */
@@ -0,0 +1,46 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2022 Collabora Ltd.
* Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
*/
#ifndef __LINUX_REGULATOR_MT6331_H
#define __LINUX_REGULATOR_MT6331_H
enum {
/* BUCK */
MT6331_ID_VDVFS11 = 0,
MT6331_ID_VDVFS12,
MT6331_ID_VDVFS13,
MT6331_ID_VDVFS14,
MT6331_ID_VCORE2,
MT6331_ID_VIO18,
/* LDO */
MT6331_ID_VTCXO1,
MT6331_ID_VTCXO2,
MT6331_ID_AVDD32_AUD,
MT6331_ID_VAUXA32,
MT6331_ID_VCAMA,
MT6331_ID_VIO28,
MT6331_ID_VCAM_AF,
MT6331_ID_VMC,
MT6331_ID_VMCH,
MT6331_ID_VEMC33,
MT6331_ID_VGP1,
MT6331_ID_VSIM1,
MT6331_ID_VSIM2,
MT6331_ID_VMIPI,
MT6331_ID_VIBR,
MT6331_ID_VGP4,
MT6331_ID_VCAMD,
MT6331_ID_VUSB10,
MT6331_ID_VCAM_IO,
MT6331_ID_VSRAM_DVFS1,
MT6331_ID_VGP2,
MT6331_ID_VGP3,
MT6331_ID_VRTC,
MT6331_ID_VDIG18,
MT6331_ID_VREG_MAX
};
#endif /* __LINUX_REGULATOR_MT6331_H */
@@ -0,0 +1,27 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2022 Collabora Ltd.
* Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
*/
#ifndef __LINUX_REGULATOR_MT6332_H
#define __LINUX_REGULATOR_MT6332_H
enum {
/* BUCK */
MT6332_ID_VDRAM = 0,
MT6332_ID_VDVFS2,
MT6332_ID_VPA,
MT6332_ID_VRF1,
MT6332_ID_VRF2,
MT6332_ID_VSBST,
/* LDO */
MT6332_ID_VAUXB32,
MT6332_ID_VBIF28,
MT6332_ID_VDIG18,
MT6332_ID_VSRAM_DVFS2,
MT6332_ID_VUSB33,
MT6332_ID_VREG_MAX
};
#endif /* __LINUX_REGULATOR_MT6332_H */
@@ -0,0 +1,51 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2022 MediaTek Inc.
*/
#ifndef __LINUX_REGULATOR_MT6357_H
#define __LINUX_REGULATOR_MT6357_H
enum {
/* Bucks */
MT6357_ID_VCORE,
MT6357_ID_VMODEM,
MT6357_ID_VPA,
MT6357_ID_VPROC,
MT6357_ID_VS1,
/* LDOs */
MT6357_ID_VAUX18,
MT6357_ID_VAUD28,
MT6357_ID_VCAMA,
MT6357_ID_VCAMD,
MT6357_ID_VCAMIO,
MT6357_ID_VCN18,
MT6357_ID_VCN28,
MT6357_ID_VCN33_BT,
MT6357_ID_VCN33_WIFI,
MT6357_ID_VDRAM,
MT6357_ID_VEFUSE,
MT6357_ID_VEMC,
MT6357_ID_VFE28,
MT6357_ID_VIBR,
MT6357_ID_VIO18,
MT6357_ID_VIO28,
MT6357_ID_VLDO28,
MT6357_ID_VMC,
MT6357_ID_VMCH,
MT6357_ID_VRF12,
MT6357_ID_VRF18,
MT6357_ID_VSIM1,
MT6357_ID_VSIM2,
MT6357_ID_VSRAM_OTHERS,
MT6357_ID_VSRAM_PROC,
MT6357_ID_VUSB33,
MT6357_ID_VXO22,
MT6357_ID_RG_MAX,
};
#define MT6357_MAX_REGULATOR MT6357_ID_RG_MAX
#endif /* __LINUX_REGULATOR_MT6357_H */
@@ -0,0 +1,98 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2019 MediaTek Inc.
*/
#ifndef __LINUX_REGULATOR_MT6358_H
#define __LINUX_REGULATOR_MT6358_H
enum {
MT6358_ID_VDRAM1 = 0,
MT6358_ID_VCORE,
MT6358_ID_VPA,
MT6358_ID_VPROC11,
MT6358_ID_VPROC12,
MT6358_ID_VGPU,
MT6358_ID_VS2,
MT6358_ID_VMODEM,
MT6358_ID_VS1,
MT6358_ID_VDRAM2 = 9,
MT6358_ID_VSIM1,
MT6358_ID_VIBR,
MT6358_ID_VRF12,
MT6358_ID_VIO18,
MT6358_ID_VUSB,
MT6358_ID_VCAMIO,
MT6358_ID_VCAMD,
MT6358_ID_VCN18,
MT6358_ID_VFE28,
MT6358_ID_VSRAM_PROC11,
MT6358_ID_VCN28,
MT6358_ID_VSRAM_OTHERS,
MT6358_ID_VSRAM_GPU,
MT6358_ID_VXO22,
MT6358_ID_VEFUSE,
MT6358_ID_VAUX18,
MT6358_ID_VMCH,
MT6358_ID_VBIF28,
MT6358_ID_VSRAM_PROC12,
MT6358_ID_VCAMA1,
MT6358_ID_VEMC,
MT6358_ID_VIO28,
MT6358_ID_VA12,
MT6358_ID_VRF18,
MT6358_ID_VCN33,
MT6358_ID_VCAMA2,
MT6358_ID_VMC,
MT6358_ID_VLDO28,
MT6358_ID_VAUD28,
MT6358_ID_VSIM2,
MT6358_ID_RG_MAX,
};
enum {
MT6366_ID_VDRAM1 = 0,
MT6366_ID_VCORE,
MT6366_ID_VPA,
MT6366_ID_VPROC11,
MT6366_ID_VPROC12,
MT6366_ID_VGPU,
MT6366_ID_VS2,
MT6366_ID_VMODEM,
MT6366_ID_VS1,
MT6366_ID_VDRAM2,
MT6366_ID_VSIM1,
MT6366_ID_VIBR,
MT6366_ID_VRF12,
MT6366_ID_VIO18,
MT6366_ID_VUSB,
MT6366_ID_VCN18,
MT6366_ID_VFE28,
MT6366_ID_VSRAM_PROC11,
MT6366_ID_VCN28,
MT6366_ID_VSRAM_OTHERS,
MT6366_ID_VSRAM_GPU,
MT6366_ID_VXO22,
MT6366_ID_VEFUSE,
MT6366_ID_VAUX18,
MT6366_ID_VMCH,
MT6366_ID_VBIF28,
MT6366_ID_VSRAM_PROC12,
MT6366_ID_VEMC,
MT6366_ID_VIO28,
MT6366_ID_VA12,
MT6366_ID_VRF18,
MT6366_ID_VCN33,
MT6366_ID_VMC,
MT6366_ID_VAUD28,
MT6366_ID_VSIM2,
MT6366_ID_VM18,
MT6366_ID_VMDDR,
MT6366_ID_VSRAM_CORE,
MT6366_ID_RG_MAX,
};
#define MT6358_MAX_REGULATOR MT6358_ID_RG_MAX
#define MT6366_MAX_REGULATOR MT6366_ID_RG_MAX
#endif /* __LINUX_REGULATOR_MT6358_H */
@@ -0,0 +1,59 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2021 MediaTek Inc.
*/
#ifndef __LINUX_REGULATOR_MT6359_H
#define __LINUX_REGULATOR_MT6359_H
enum {
MT6359_ID_VS1 = 0,
MT6359_ID_VGPU11,
MT6359_ID_VMODEM,
MT6359_ID_VPU,
MT6359_ID_VCORE,
MT6359_ID_VS2,
MT6359_ID_VPA,
MT6359_ID_VPROC2,
MT6359_ID_VPROC1,
MT6359_ID_VCORE_SSHUB,
MT6359_ID_VGPU11_SSHUB = MT6359_ID_VCORE_SSHUB,
MT6359_ID_VAUD18 = 10,
MT6359_ID_VSIM1,
MT6359_ID_VIBR,
MT6359_ID_VRF12,
MT6359_ID_VUSB,
MT6359_ID_VSRAM_PROC2,
MT6359_ID_VIO18,
MT6359_ID_VCAMIO,
MT6359_ID_VCN18,
MT6359_ID_VFE28,
MT6359_ID_VCN13,
MT6359_ID_VCN33_1_BT,
MT6359_ID_VCN33_1_WIFI,
MT6359_ID_VAUX18,
MT6359_ID_VSRAM_OTHERS,
MT6359_ID_VEFUSE,
MT6359_ID_VXO22,
MT6359_ID_VRFCK,
MT6359_ID_VBIF28,
MT6359_ID_VIO28,
MT6359_ID_VEMC,
MT6359_ID_VCN33_2_BT,
MT6359_ID_VCN33_2_WIFI,
MT6359_ID_VA12,
MT6359_ID_VA09,
MT6359_ID_VRF18,
MT6359_ID_VSRAM_MD,
MT6359_ID_VUFS,
MT6359_ID_VM18,
MT6359_ID_VBBCK,
MT6359_ID_VSRAM_PROC1,
MT6359_ID_VSIM2,
MT6359_ID_VSRAM_OTHERS_SSHUB,
MT6359_ID_RG_MAX,
};
#define MT6359_MAX_REGULATOR MT6359_ID_RG_MAX
#endif /* __LINUX_REGULATOR_MT6359_H */
@@ -0,0 +1,330 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2024 MediaTek Inc.
* Copyright (c) 2025 Collabora Ltd
*/
#include <linux/bits.h>
#ifndef __LINUX_REGULATOR_MT6363_H
#define __LINUX_REGULATOR_MT6363_H
/* Register */
#define MT6363_TOP_TRAP 0x6
#define MT6363_TOP_TMA_KEY_L 0x36e
#define MT6363_RG_BUCK0_EN_ADDR 0x210
#define MT6363_RG_BUCK_VS2_EN_BIT 0
#define MT6363_RG_BUCK_VBUCK1_EN_BIT 1
#define MT6363_RG_BUCK_VBUCK2_EN_BIT 2
#define MT6363_RG_BUCK_VBUCK3_EN_BIT 3
#define MT6363_RG_BUCK_VBUCK4_EN_BIT 4
#define MT6363_RG_BUCK_VBUCK5_EN_BIT 5
#define MT6363_RG_BUCK_VBUCK6_EN_BIT 6
#define MT6363_RG_BUCK_VBUCK7_EN_BIT 7
#define MT6363_RG_BUCK1_EN_ADDR 0x213
#define MT6363_RG_BUCK_VS1_EN_BIT 0
#define MT6363_RG_BUCK_VS3_EN_BIT 1
#define MT6363_RG_LDO_VSRAM_DIGRF_EN_BIT 4
#define MT6363_RG_LDO_VSRAM_MDFE_EN_BIT 5
#define MT6363_RG_LDO_VSRAM_MODEM_EN_BIT 6
#define MT6363_RG_BUCK0_LP_ADDR 0x216
#define MT6363_RG_BUCK_VS2_LP_BIT 0
#define MT6363_RG_BUCK_VBUCK1_LP_BIT 1
#define MT6363_RG_BUCK_VBUCK2_LP_BIT 2
#define MT6363_RG_BUCK_VBUCK3_LP_BIT 3
#define MT6363_RG_BUCK_VBUCK4_LP_BIT 4
#define MT6363_RG_BUCK_VBUCK5_LP_BIT 5
#define MT6363_RG_BUCK_VBUCK6_LP_BIT 6
#define MT6363_RG_BUCK_VBUCK7_LP_BIT 7
#define MT6363_RG_BUCK1_LP_ADDR 0x219
#define MT6363_RG_BUCK_VS1_LP_BIT 0
#define MT6363_RG_BUCK_VS3_LP_BIT 1
#define MT6363_RG_LDO_VSRAM_DIGRF_LP_BIT 4
#define MT6363_RG_LDO_VSRAM_MDFE_LP_BIT 5
#define MT6363_RG_LDO_VSRAM_MODEM_LP_BIT 6
#define MT6363_RG_BUCK_VS2_VOSEL_ADDR 0x21c
#define MT6363_RG_BUCK_VS2_VOSEL_MASK GENMASK(7, 0)
#define MT6363_RG_BUCK_VBUCK1_VOSEL_ADDR 0x21d
#define MT6363_RG_BUCK_VBUCK1_VOSEL_MASK GENMASK(7, 0)
#define MT6363_RG_BUCK_VBUCK2_VOSEL_ADDR 0x21e
#define MT6363_RG_BUCK_VBUCK2_VOSEL_MASK GENMASK(7, 0)
#define MT6363_RG_BUCK_VBUCK3_VOSEL_ADDR 0x21f
#define MT6363_RG_BUCK_VBUCK3_VOSEL_MASK GENMASK(7, 0)
#define MT6363_RG_BUCK_VBUCK4_VOSEL_ADDR 0x220
#define MT6363_RG_BUCK_VBUCK4_VOSEL_MASK GENMASK(7, 0)
#define MT6363_RG_BUCK_VBUCK5_VOSEL_ADDR 0x221
#define MT6363_RG_BUCK_VBUCK5_VOSEL_MASK GENMASK(7, 0)
#define MT6363_RG_BUCK_VBUCK6_VOSEL_ADDR 0x222
#define MT6363_RG_BUCK_VBUCK6_VOSEL_MASK GENMASK(7, 0)
#define MT6363_RG_BUCK_VBUCK7_VOSEL_ADDR 0x223
#define MT6363_RG_BUCK_VBUCK7_VOSEL_MASK GENMASK(7, 0)
#define MT6363_RG_BUCK_VS1_VOSEL_ADDR 0x224
#define MT6363_RG_BUCK_VS1_VOSEL_MASK GENMASK(7, 0)
#define MT6363_RG_BUCK_VS3_VOSEL_ADDR 0x225
#define MT6363_RG_BUCK_VS3_VOSEL_MASK GENMASK(7, 0)
#define MT6363_RG_LDO_VSRAM_DIGRF_VOSEL_ADDR 0x228
#define MT6363_RG_LDO_VSRAM_DIGRF_VOSEL_MASK GENMASK(6, 0)
#define MT6363_RG_LDO_VSRAM_MDFE_VOSEL_ADDR 0x229
#define MT6363_RG_LDO_VSRAM_MDFE_VOSEL_MASK GENMASK(6, 0)
#define MT6363_RG_LDO_VSRAM_MODEM_VOSEL_ADDR 0x22a
#define MT6363_RG_LDO_VSRAM_MODEM_VOSEL_MASK GENMASK(6, 0)
#define MT6363_BUCK_TOP_KEY_PROT_LO 0x13fa
#define MT6363_BUCK_VS2_WDTDBG_VOSEL_ADDR 0x13fc
#define MT6363_BUCK_VBUCK1_WDTDBG_VOSEL_ADDR 0x13fd
#define MT6363_BUCK_VBUCK2_WDTDBG_VOSEL_ADDR 0x13fe
#define MT6363_BUCK_VBUCK3_WDTDBG_VOSEL_ADDR 0x13ff
#define MT6363_BUCK_VBUCK4_WDTDBG_VOSEL_ADDR 0x1400
#define MT6363_BUCK_VBUCK5_WDTDBG_VOSEL_ADDR 0x1401
#define MT6363_BUCK_VBUCK6_WDTDBG_VOSEL_ADDR 0x1402
#define MT6363_BUCK_VBUCK7_WDTDBG_VOSEL_ADDR 0x1403
#define MT6363_BUCK_VS1_WDTDBG_VOSEL_ADDR 0x1404
#define MT6363_BUCK_VS3_WDTDBG_VOSEL_ADDR 0x1405
#define MT6363_RG_BUCK_EFUSE_RSV1 0x1417
#define MT6363_RG_BUCK_EFUSE_RSV1_MASK GENMASK(7, 4)
#define MT6363_BUCK_VS2_OP_EN_0 0x145d
#define MT6363_BUCK_VS2_HW_LP_MODE 0x1468
#define MT6363_BUCK_VBUCK1_OP_EN_0 0x14dd
#define MT6363_BUCK_VBUCK1_HW_LP_MODE 0x14e8
#define MT6363_RG_BUCK_VBUCK1_SSHUB_EN_ADDR 0x14ea
#define MT6363_RG_BUCK_VBUCK1_SSHUB_VOSEL_ADDR 0x14eb
#define MT6363_RG_BUCK_VBUCK1_SSHUB_VOSEL_MASK GENMASK(7, 0)
#define MT6363_BUCK_VBUCK2_OP_EN_0 0x155d
#define MT6363_BUCK_VBUCK2_HW_LP_MODE 0x1568
#define MT6363_RG_BUCK_VBUCK2_SSHUB_EN_ADDR 0x156a
#define MT6363_RG_BUCK_VBUCK2_SSHUB_VOSEL_ADDR 0x156b
#define MT6363_RG_BUCK_VBUCK2_SSHUB_VOSEL_MASK GENMASK(7, 0)
#define MT6363_BUCK_VBUCK3_OP_EN_0 0x15dd
#define MT6363_BUCK_VBUCK3_HW_LP_MODE 0x15e8
#define MT6363_BUCK_VBUCK4_OP_EN_0 0x165d
#define MT6363_BUCK_VBUCK4_HW_LP_MODE 0x1668
#define MT6363_RG_BUCK_VBUCK4_SSHUB_EN_ADDR 0x166a
#define MT6363_RG_BUCK_VBUCK4_SSHUB_VOSEL_ADDR 0x166b
#define MT6363_RG_BUCK_VBUCK4_SSHUB_VOSEL_MASK GENMASK(7, 0)
#define MT6363_BUCK_VBUCK5_OP_EN_0 0x16dd
#define MT6363_BUCK_VBUCK5_HW_LP_MODE 0x16e8
#define MT6363_BUCK_VBUCK6_OP_EN_0 0x175d
#define MT6363_BUCK_VBUCK6_HW_LP_MODE 0x1768
#define MT6363_BUCK_VBUCK7_OP_EN_0 0x17dd
#define MT6363_BUCK_VBUCK7_HW_LP_MODE 0x17e8
#define MT6363_BUCK_VS1_OP_EN_0 0x185d
#define MT6363_BUCK_VS1_HW_LP_MODE 0x1868
#define MT6363_BUCK_VS3_OP_EN_0 0x18dd
#define MT6363_BUCK_VS3_HW_LP_MODE 0x18e8
#define MT6363_RG_VS1_FCCM_ADDR 0x1964
#define MT6363_RG_VS1_FCCM_BIT 0
#define MT6363_RG_VS3_FCCM_ADDR 0x1973
#define MT6363_RG_VS3_FCCM_BIT 0
#define MT6363_RG_BUCK0_FCCM_ADDR 0x1a02
#define MT6363_RG_VBUCK1_FCCM_BIT 0
#define MT6363_RG_VBUCK2_FCCM_BIT 1
#define MT6363_RG_VBUCK3_FCCM_BIT 2
#define MT6363_RG_VS2_FCCM_BIT 3
#define MT6363_RG_BUCK0_1_FCCM_ADDR 0x1a82
#define MT6363_RG_VBUCK4_FCCM_BIT 0
#define MT6363_RG_VBUCK5_FCCM_BIT 1
#define MT6363_RG_VBUCK6_FCCM_BIT 2
#define MT6363_RG_VBUCK7_FCCM_BIT 3
#define MT6363_RG_VCN13_VOSEL_ADDR 0x1b0f
#define MT6363_RG_VCN13_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VEMC_VOSEL_ADDR 0x1b10
#define MT6363_RG_VEMC_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VEMC_VOSEL_1_MASK GENMASK(7, 4)
#define MT6363_RG_LDO_VSRAM_CPUB_VOSEL_ADDR 0x1b14
#define MT6363_RG_LDO_VSRAM_CPUB_VOSEL_MASK GENMASK(6, 0)
#define MT6363_RG_LDO_VSRAM_CPUM_VOSEL_ADDR 0x1b15
#define MT6363_RG_LDO_VSRAM_CPUM_VOSEL_MASK GENMASK(6, 0)
#define MT6363_RG_LDO_VSRAM_CPUL_VOSEL_ADDR 0x1b16
#define MT6363_RG_LDO_VSRAM_CPUL_VOSEL_MASK GENMASK(6, 0)
#define MT6363_RG_LDO_VSRAM_APU_VOSEL_ADDR 0x1b17
#define MT6363_RG_LDO_VSRAM_APU_VOSEL_MASK GENMASK(6, 0)
#define MT6363_RG_VEMC_VOCAL_ADDR 0x1b1b
#define MT6363_RG_VEMC_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_LDO_VCN15_ADDR 0x1b57
#define MT6363_RG_LDO_VCN15_EN_BIT 0
#define MT6363_RG_LDO_VCN15_LP_BIT 1
#define MT6363_LDO_VCN15_HW_LP_MODE 0x1b5b
#define MT6363_LDO_VCN15_OP_EN0 0x1b5c
#define MT6363_RG_LDO_VRF09_ADDR 0x1b65
#define MT6363_RG_LDO_VRF09_EN_BIT 0
#define MT6363_RG_LDO_VRF09_LP_BIT 1
#define MT6363_LDO_VRF09_HW_LP_MODE 0x1b69
#define MT6363_LDO_VRF09_OP_EN0 0x1b6a
#define MT6363_RG_LDO_VRF12_ADDR 0x1b73
#define MT6363_RG_LDO_VRF12_EN_BIT 0
#define MT6363_RG_LDO_VRF12_LP_BIT 1
#define MT6363_LDO_VRF12_HW_LP_MODE 0x1b77
#define MT6363_LDO_VRF12_OP_EN0 0x1b78
#define MT6363_RG_LDO_VRF13_ADDR 0x1b81
#define MT6363_RG_LDO_VRF13_EN_BIT 0
#define MT6363_RG_LDO_VRF13_LP_BIT 1
#define MT6363_LDO_VRF13_HW_LP_MODE 0x1b85
#define MT6363_LDO_VRF13_OP_EN0 0x1b86
#define MT6363_RG_LDO_VRF18_ADDR 0x1b8f
#define MT6363_RG_LDO_VRF18_EN_BIT 0
#define MT6363_RG_LDO_VRF18_LP_BIT 1
#define MT6363_LDO_VRF18_HW_LP_MODE 0x1b93
#define MT6363_LDO_VRF18_OP_EN0 0x1b94
#define MT6363_RG_LDO_VRFIO18_ADDR 0x1b9d
#define MT6363_RG_LDO_VRFIO18_EN_BIT 0
#define MT6363_RG_LDO_VRFIO18_LP_BIT 1
#define MT6363_LDO_VRFIO18_HW_LP_MODE 0x1ba1
#define MT6363_LDO_VRFIO18_OP_EN0 0x1ba2
#define MT6363_RG_LDO_VTREF18_ADDR 0x1bd7
#define MT6363_RG_LDO_VTREF18_EN_BIT 0
#define MT6363_RG_LDO_VTREF18_LP_BIT 1
#define MT6363_LDO_VTREF18_HW_LP_MODE 0x1bdb
#define MT6363_LDO_VTREF18_OP_EN0 0x1bdc
#define MT6363_RG_LDO_VAUX18_ADDR 0x1be5
#define MT6363_RG_LDO_VAUX18_EN_BIT 0
#define MT6363_RG_LDO_VAUX18_LP_BIT 1
#define MT6363_LDO_VAUX18_HW_LP_MODE 0x1be9
#define MT6363_LDO_VAUX18_OP_EN0 0x1bea
#define MT6363_RG_LDO_VEMC_ADDR 0x1bf3
#define MT6363_RG_LDO_VEMC_EN_BIT 0
#define MT6363_RG_LDO_VEMC_LP_BIT 1
#define MT6363_LDO_VEMC_HW_LP_MODE 0x1bf7
#define MT6363_LDO_VEMC_OP_EN0 0x1bf8
#define MT6363_RG_LDO_VUFS12_ADDR 0x1c01
#define MT6363_RG_LDO_VUFS12_EN_BIT 0
#define MT6363_RG_LDO_VUFS12_LP_BIT 1
#define MT6363_LDO_VUFS12_HW_LP_MODE 0x1c05
#define MT6363_LDO_VUFS12_OP_EN0 0x1c06
#define MT6363_RG_LDO_VUFS18_ADDR 0x1c0f
#define MT6363_RG_LDO_VUFS18_EN_BIT 0
#define MT6363_RG_LDO_VUFS18_LP_BIT 1
#define MT6363_LDO_VUFS18_HW_LP_MODE 0x1c13
#define MT6363_LDO_VUFS18_OP_EN0 0x1c14
#define MT6363_RG_LDO_VIO18_ADDR 0x1c1d
#define MT6363_RG_LDO_VIO18_EN_BIT 0
#define MT6363_RG_LDO_VIO18_LP_BIT 1
#define MT6363_LDO_VIO18_HW_LP_MODE 0x1c21
#define MT6363_LDO_VIO18_OP_EN0 0x1c22
#define MT6363_RG_LDO_VIO075_ADDR 0x1c57
#define MT6363_RG_LDO_VIO075_EN_BIT 0
#define MT6363_RG_LDO_VIO075_LP_BIT 1
#define MT6363_LDO_VIO075_HW_LP_MODE 0x1c5b
#define MT6363_LDO_VIO075_OP_EN0 0x1c5c
#define MT6363_RG_LDO_VA12_1_ADDR 0x1c65
#define MT6363_RG_LDO_VA12_1_EN_BIT 0
#define MT6363_RG_LDO_VA12_1_LP_BIT 1
#define MT6363_LDO_VA12_1_HW_LP_MODE 0x1c69
#define MT6363_LDO_VA12_1_OP_EN0 0x1c6a
#define MT6363_RG_LDO_VA12_2_ADDR 0x1c73
#define MT6363_RG_LDO_VA12_2_EN_BIT 0
#define MT6363_RG_LDO_VA12_2_LP_BIT 1
#define MT6363_LDO_VA12_2_HW_LP_MODE 0x1c77
#define MT6363_LDO_VA12_2_OP_EN0 0x1c78
#define MT6363_RG_LDO_VA15_ADDR 0x1c81
#define MT6363_RG_LDO_VA15_EN_BIT 0
#define MT6363_RG_LDO_VA15_LP_BIT 1
#define MT6363_LDO_VA15_HW_LP_MODE 0x1c85
#define MT6363_LDO_VA15_OP_EN0 0x1c86
#define MT6363_RG_LDO_VM18_ADDR 0x1c8f
#define MT6363_RG_LDO_VM18_EN_BIT 0
#define MT6363_RG_LDO_VM18_LP_BIT 1
#define MT6363_LDO_VM18_HW_LP_MODE 0x1c93
#define MT6363_LDO_VM18_OP_EN0 0x1c94
#define MT6363_RG_LDO_VCN13_ADDR 0x1cd7
#define MT6363_RG_LDO_VCN13_EN_BIT 0
#define MT6363_RG_LDO_VCN13_LP_BIT 1
#define MT6363_LDO_VCN13_HW_LP_MODE 0x1cdb
#define MT6363_LDO_VCN13_OP_EN0 0x1ce4
#define MT6363_LDO_VSRAM_DIGRF_HW_LP_MODE 0x1cf1
#define MT6363_LDO_VSRAM_DIGRF_OP_EN0 0x1cfa
#define MT6363_LDO_VSRAM_MDFE_HW_LP_MODE 0x1d5b
#define MT6363_LDO_VSRAM_MDFE_OP_EN0 0x1d64
#define MT6363_LDO_VSRAM_MODEM_HW_LP_MODE 0x1d76
#define MT6363_LDO_VSRAM_MODEM_OP_EN0 0x1d7f
#define MT6363_RG_LDO_VSRAM_CPUB_ADDR 0x1dd7
#define MT6363_RG_LDO_VSRAM_CPUB_EN_BIT 0
#define MT6363_RG_LDO_VSRAM_CPUB_LP_BIT 1
#define MT6363_LDO_VSRAM_CPUB_HW_LP_MODE 0x1ddb
#define MT6363_LDO_VSRAM_CPUB_OP_EN0 0x1de4
#define MT6363_RG_LDO_VSRAM_CPUM_ADDR 0x1ded
#define MT6363_RG_LDO_VSRAM_CPUM_EN_BIT 0
#define MT6363_RG_LDO_VSRAM_CPUM_LP_BIT 1
#define MT6363_LDO_VSRAM_CPUM_HW_LP_MODE 0x1df1
#define MT6363_LDO_VSRAM_CPUM_OP_EN0 0x1dfa
#define MT6363_RG_LDO_VSRAM_CPUL_ADDR 0x1e57
#define MT6363_RG_LDO_VSRAM_CPUL_EN_BIT 0
#define MT6363_RG_LDO_VSRAM_CPUL_LP_BIT 1
#define MT6363_LDO_VSRAM_CPUL_HW_LP_MODE 0x1e5b
#define MT6363_LDO_VSRAM_CPUL_OP_EN0 0x1e64
#define MT6363_RG_LDO_VSRAM_APU_ADDR 0x1e6d
#define MT6363_RG_LDO_VSRAM_APU_EN_BIT 0
#define MT6363_RG_LDO_VSRAM_APU_LP_BIT 1
#define MT6363_LDO_VSRAM_APU_HW_LP_MODE 0x1e71
#define MT6363_LDO_VSRAM_APU_OP_EN0 0x1e7a
#define MT6363_RG_VTREF18_VOCAL_ADDR 0x1ed8
#define MT6363_RG_VTREF18_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VTREF18_VOSEL_ADDR 0x1ed9
#define MT6363_RG_VTREF18_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VAUX18_VOCAL_ADDR 0x1edc
#define MT6363_RG_VAUX18_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VAUX18_VOSEL_ADDR 0x1edd
#define MT6363_RG_VAUX18_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VCN15_VOCAL_ADDR 0x1ee3
#define MT6363_RG_VCN15_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VCN15_VOSEL_ADDR 0x1ee4
#define MT6363_RG_VCN15_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VUFS18_VOCAL_ADDR 0x1ee7
#define MT6363_RG_VUFS18_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VUFS18_VOSEL_ADDR 0x1ee8
#define MT6363_RG_VUFS18_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VIO18_VOCAL_ADDR 0x1eeb
#define MT6363_RG_VIO18_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VIO18_VOSEL_ADDR 0x1eec
#define MT6363_RG_VIO18_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VM18_VOCAL_ADDR 0x1eef
#define MT6363_RG_VM18_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VM18_VOSEL_ADDR 0x1ef0
#define MT6363_RG_VM18_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VA15_VOCAL_ADDR 0x1ef3
#define MT6363_RG_VA15_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VA15_VOSEL_ADDR 0x1ef4
#define MT6363_RG_VA15_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VRF18_VOCAL_ADDR 0x1ef7
#define MT6363_RG_VRF18_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VRF18_VOSEL_ADDR 0x1ef8
#define MT6363_RG_VRF18_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VRFIO18_VOCAL_ADDR 0x1efb
#define MT6363_RG_VRFIO18_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VRFIO18_VOSEL_ADDR 0x1efc
#define MT6363_RG_VRFIO18_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VIO075_VOCFG_ADDR 0x1f01
#define MT6363_RG_VIO075_VOCAL_ADDR MT6363_RG_VIO075_VOCFG_ADDR
#define MT6363_RG_VIO075_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VIO075_VOSEL_ADDR MT6363_RG_VIO075_VOCFG_ADDR
#define MT6363_RG_VIO075_VOSEL_MASK GENMASK(6, 4)
#define MT6363_RG_VCN13_VOCAL_ADDR 0x1f58
#define MT6363_RG_VCN13_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VUFS12_VOCAL_ADDR 0x1f61
#define MT6363_RG_VUFS12_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VUFS12_VOSEL_ADDR 0x1f62
#define MT6363_RG_VUFS12_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VA12_1_VOCAL_ADDR 0x1f65
#define MT6363_RG_VA12_1_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VA12_1_VOSEL_ADDR 0x1f66
#define MT6363_RG_VA12_1_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VA12_2_VOCAL_ADDR 0x1f69
#define MT6363_RG_VA12_2_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VA12_2_VOSEL_ADDR 0x1f6a
#define MT6363_RG_VA12_2_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VRF12_VOCAL_ADDR 0x1f6d
#define MT6363_RG_VRF12_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VRF12_VOSEL_ADDR 0x1f6e
#define MT6363_RG_VRF12_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VRF13_VOCAL_ADDR 0x1f71
#define MT6363_RG_VRF13_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VRF13_VOSEL_ADDR 0x1f72
#define MT6363_RG_VRF13_VOSEL_MASK GENMASK(3, 0)
#define MT6363_RG_VRF09_VOCAL_ADDR 0x1f78
#define MT6363_RG_VRF09_VOCAL_MASK GENMASK(3, 0)
#define MT6363_RG_VRF09_VOSEL_ADDR 0x1f79
#define MT6363_RG_VRF09_VOSEL_MASK GENMASK(3, 0)
#define MT6363_ISINK_EN_CTRL0 0x21db
#define MT6363_ISINK_CTRL0_MASK GENMASK(7, 0)
#define MT6363_ISINK_EN_CTRL1 0x21dc
#define MT6363_ISINK_CTRL1_MASK GENMASK(7, 4)
#endif /* __LINUX_REGULATOR_MT6363_H */
@@ -0,0 +1,24 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2017 MediaTek Inc.
* Author: Chenglin Xu <chenglin.xu@mediatek.com>
*/
#ifndef __LINUX_REGULATOR_mt6380_H
#define __LINUX_REGULATOR_mt6380_H
enum {
MT6380_ID_VCPU = 0,
MT6380_ID_VCORE,
MT6380_ID_VRF,
MT6380_ID_VMLDO,
MT6380_ID_VALDO,
MT6380_ID_VPHYLDO,
MT6380_ID_VDDRLDO,
MT6380_ID_VTLDO,
MT6380_ID_RG_MAX,
};
#define MT6380_MAX_REGULATOR MT6380_ID_RG_MAX
#endif /* __LINUX_REGULATOR_mt6380_H */
@@ -0,0 +1,41 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2014 MediaTek Inc.
* Author: Flora Fu <flora.fu@mediatek.com>
*/
#ifndef __LINUX_REGULATOR_MT6397_H
#define __LINUX_REGULATOR_MT6397_H
enum {
MT6397_ID_VPCA15 = 0,
MT6397_ID_VPCA7,
MT6397_ID_VSRAMCA15,
MT6397_ID_VSRAMCA7,
MT6397_ID_VCORE,
MT6397_ID_VGPU,
MT6397_ID_VDRM,
MT6397_ID_VIO18 = 7,
MT6397_ID_VTCXO,
MT6397_ID_VA28,
MT6397_ID_VCAMA,
MT6397_ID_VIO28,
MT6397_ID_VUSB,
MT6397_ID_VMC,
MT6397_ID_VMCH,
MT6397_ID_VEMC3V3,
MT6397_ID_VGP1,
MT6397_ID_VGP2,
MT6397_ID_VGP3,
MT6397_ID_VGP4,
MT6397_ID_VGP5,
MT6397_ID_VGP6,
MT6397_ID_VIBR,
MT6397_ID_RG_MAX,
};
#define MT6397_MAX_REGULATOR MT6397_ID_RG_MAX
#define MT6397_REGULATOR_ID97 0x97
#define MT6397_REGULATOR_ID91 0x91
#endif /* __LINUX_REGULATOR_MT6397_H */
@@ -0,0 +1,46 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* OpenFirmware regulator support routines
*
*/
#ifndef __LINUX_OF_REG_H
#define __LINUX_OF_REG_H
struct regulator_desc;
struct of_regulator_match {
const char *name;
void *driver_data;
struct regulator_init_data *init_data;
struct device_node *of_node;
const struct regulator_desc *desc;
};
#if defined(CONFIG_OF)
extern struct regulator_init_data
*of_get_regulator_init_data(struct device *dev,
struct device_node *node,
const struct regulator_desc *desc);
extern int of_regulator_match(struct device *dev, struct device_node *node,
struct of_regulator_match *matches,
unsigned int num_matches);
#else
static inline struct regulator_init_data
*of_get_regulator_init_data(struct device *dev,
struct device_node *node,
const struct regulator_desc *desc)
{
return NULL;
}
static inline int of_regulator_match(struct device *dev,
struct device_node *node,
struct of_regulator_match *matches,
unsigned int num_matches)
{
return 0;
}
#endif /* CONFIG_OF */
#endif /* __LINUX_OF_REG_H */
@@ -0,0 +1,275 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* Copyright 2020 NXP. */
#ifndef __LINUX_REG_PCA9450_H__
#define __LINUX_REG_PCA9450_H__
#include <linux/regmap.h>
enum pca9450_chip_type {
PCA9450_TYPE_PCA9450A = 0,
PCA9450_TYPE_PCA9450BC,
PCA9450_TYPE_PCA9451A,
PCA9450_TYPE_PCA9452,
PCA9450_TYPE_AMOUNT,
};
enum {
PCA9450_BUCK1 = 0,
PCA9450_BUCK2,
PCA9450_BUCK3,
PCA9450_BUCK4,
PCA9450_BUCK5,
PCA9450_BUCK6,
PCA9450_LDO1,
PCA9450_LDO2,
PCA9450_LDO3,
PCA9450_LDO4,
PCA9450_LDO5,
PCA9450_REGULATOR_CNT,
};
enum {
PCA9450_DVS_LEVEL_RUN = 0,
PCA9450_DVS_LEVEL_STANDBY,
PCA9450_DVS_LEVEL_MAX,
};
#define PCA9450_RESTART_HANDLER_PRIORITY 130
#define PCA9450_BUCK1_VOLTAGE_NUM 0x80
#define PCA9450_BUCK2_VOLTAGE_NUM 0x80
#define PCA9450_BUCK3_VOLTAGE_NUM 0x80
#define PCA9450_BUCK4_VOLTAGE_NUM 0x80
#define PCA9450_BUCK5_VOLTAGE_NUM 0x80
#define PCA9450_BUCK6_VOLTAGE_NUM 0x80
#define PCA9450_LDO1_VOLTAGE_NUM 0x08
#define PCA9450_LDO2_VOLTAGE_NUM 0x08
#define PCA9450_LDO3_VOLTAGE_NUM 0x20
#define PCA9450_LDO4_VOLTAGE_NUM 0x20
#define PCA9450_LDO5_VOLTAGE_NUM 0x10
enum {
PCA9450_REG_DEV_ID = 0x00,
PCA9450_REG_INT1 = 0x01,
PCA9450_REG_INT1_MSK = 0x02,
PCA9450_REG_STATUS1 = 0x03,
PCA9450_REG_STATUS2 = 0x04,
PCA9450_REG_PWRON_STAT = 0x05,
PCA9450_REG_SWRST = 0x06,
PCA9450_REG_PWRCTRL = 0x07,
PCA9450_REG_RESET_CTRL = 0x08,
PCA9450_REG_CONFIG1 = 0x09,
PCA9450_REG_CONFIG2 = 0x0A,
PCA9450_REG_BUCK123_DVS = 0x0C,
PCA9450_REG_BUCK1OUT_LIMIT = 0x0D,
PCA9450_REG_BUCK2OUT_LIMIT = 0x0E,
PCA9450_REG_BUCK3OUT_LIMIT = 0x0F,
PCA9450_REG_BUCK1CTRL = 0x10,
PCA9450_REG_BUCK1OUT_DVS0 = 0x11,
PCA9450_REG_BUCK1OUT_DVS1 = 0x12,
PCA9450_REG_BUCK2CTRL = 0x13,
PCA9450_REG_BUCK2OUT_DVS0 = 0x14,
PCA9450_REG_BUCK2OUT_DVS1 = 0x15,
PCA9450_REG_BUCK3CTRL = 0x16,
PCA9450_REG_BUCK3OUT_DVS0 = 0x17,
PCA9450_REG_BUCK3OUT_DVS1 = 0x18,
PCA9450_REG_BUCK4CTRL = 0x19,
PCA9450_REG_BUCK4OUT = 0x1A,
PCA9450_REG_BUCK5CTRL = 0x1B,
PCA9450_REG_BUCK5OUT = 0x1C,
PCA9450_REG_BUCK6CTRL = 0x1D,
PCA9450_REG_BUCK6OUT = 0x1E,
PCA9450_REG_LDO_AD_CTRL = 0x20,
PCA9450_REG_LDO1CTRL = 0x21,
PCA9450_REG_LDO2CTRL = 0x22,
PCA9450_REG_LDO3CTRL = 0x23,
PCA9450_REG_LDO4CTRL = 0x24,
PCA9450_REG_LDO5CTRL_L = 0x25,
PCA9450_REG_LDO5CTRL_H = 0x26,
PCA9450_REG_LOADSW_CTRL = 0x2A,
PCA9450_REG_VRFLT1_STS = 0x2B,
PCA9450_REG_VRFLT2_STS = 0x2C,
PCA9450_REG_VRFLT1_MASK = 0x2D,
PCA9450_REG_VRFLT2_MASK = 0x2E,
PCA9450_MAX_REGISTER = 0x2F,
};
/* PCA9450 BUCK ENMODE bits */
#define BUCK_ENMODE_OFF 0x00
#define BUCK_ENMODE_ONREQ 0x01
#define BUCK_ENMODE_ONREQ_STBYREQ 0x02
#define BUCK_ENMODE_ON 0x03
/* PCA9450_REG_BUCK1_CTRL bits */
#define BUCK1_RAMP_MASK 0xC0
#define BUCK1_RAMP_25MV 0x0
#define BUCK1_RAMP_12P5MV 0x1
#define BUCK1_RAMP_6P25MV 0x2
#define BUCK1_RAMP_3P125MV 0x3
#define BUCK1_DVS_CTRL 0x10
#define BUCK1_AD 0x08
#define BUCK1_FPWM 0x04
#define BUCK1_ENMODE_MASK 0x03
/* PCA9450_REG_BUCK2_CTRL bits */
#define BUCK2_RAMP_MASK 0xC0
#define BUCK2_RAMP_25MV 0x0
#define BUCK2_RAMP_12P5MV 0x1
#define BUCK2_RAMP_6P25MV 0x2
#define BUCK2_RAMP_3P125MV 0x3
#define BUCK2_DVS_CTRL 0x10
#define BUCK2_AD 0x08
#define BUCK2_FPWM 0x04
#define BUCK2_ENMODE_MASK 0x03
/* PCA9450_REG_BUCK3_CTRL bits */
#define BUCK3_RAMP_MASK 0xC0
#define BUCK3_RAMP_25MV 0x0
#define BUCK3_RAMP_12P5MV 0x1
#define BUCK3_RAMP_6P25MV 0x2
#define BUCK3_RAMP_3P125MV 0x3
#define BUCK3_DVS_CTRL 0x10
#define BUCK3_AD 0x08
#define BUCK3_FPWM 0x04
#define BUCK3_ENMODE_MASK 0x03
/* PCA9450_REG_BUCK4_CTRL bits */
#define BUCK4_AD 0x08
#define BUCK4_FPWM 0x04
#define BUCK4_ENMODE_MASK 0x03
/* PCA9450_REG_BUCK5_CTRL bits */
#define BUCK5_AD 0x08
#define BUCK5_FPWM 0x04
#define BUCK5_ENMODE_MASK 0x03
/* PCA9450_REG_BUCK6_CTRL bits */
#define BUCK6_AD 0x08
#define BUCK6_FPWM 0x04
#define BUCK6_ENMODE_MASK 0x03
/* PCA9450_REG_BUCK123_PRESET_EN bit */
#define BUCK123_PRESET_EN 0x80
/* PCA9450_BUCK1OUT_DVS0 bits */
#define BUCK1OUT_DVS0_MASK 0x7F
#define BUCK1OUT_DVS0_DEFAULT 0x14
/* PCA9450_BUCK1OUT_DVS1 bits */
#define BUCK1OUT_DVS1_MASK 0x7F
#define BUCK1OUT_DVS1_DEFAULT 0x14
/* PCA9450_BUCK2OUT_DVS0 bits */
#define BUCK2OUT_DVS0_MASK 0x7F
#define BUCK2OUT_DVS0_DEFAULT 0x14
/* PCA9450_BUCK2OUT_DVS1 bits */
#define BUCK2OUT_DVS1_MASK 0x7F
#define BUCK2OUT_DVS1_DEFAULT 0x14
/* PCA9450_BUCK3OUT_DVS0 bits */
#define BUCK3OUT_DVS0_MASK 0x7F
#define BUCK3OUT_DVS0_DEFAULT 0x14
/* PCA9450_BUCK3OUT_DVS1 bits */
#define BUCK3OUT_DVS1_MASK 0x7F
#define BUCK3OUT_DVS1_DEFAULT 0x14
/* PCA9450_REG_BUCK4OUT bits */
#define BUCK4OUT_MASK 0x7F
#define BUCK4OUT_DEFAULT 0x6C
/* PCA9450_REG_BUCK5OUT bits */
#define BUCK5OUT_MASK 0x7F
#define BUCK5OUT_DEFAULT 0x30
/* PCA9450_REG_BUCK6OUT bits */
#define BUCK6OUT_MASK 0x7F
#define BUCK6OUT_DEFAULT 0x14
/* PCA9450_REG_LDO1_VOLT bits */
#define LDO1_EN_MASK 0xC0
#define LDO1OUT_MASK 0x07
/* PCA9450_REG_LDO2_VOLT bits */
#define LDO2_EN_MASK 0xC0
#define LDO2OUT_MASK 0x07
/* PCA9450_REG_LDO3_VOLT bits */
#define LDO3_EN_MASK 0xC0
#define LDO3OUT_MASK 0x1F
/* PCA9450_REG_LDO4_VOLT bits */
#define LDO4_EN_MASK 0xC0
#define LDO4OUT_MASK 0x1F
/* PCA9450_REG_LDO5_VOLT bits */
#define LDO5L_EN_MASK 0xC0
#define LDO5LOUT_MASK 0x0F
#define LDO5H_EN_MASK 0xC0
#define LDO5HOUT_MASK 0x0F
/* PCA9450_REG_IRQ bits */
#define IRQ_PWRON 0x80
#define IRQ_WDOGB 0x40
#define IRQ_RSVD 0x20
#define IRQ_VR_FLT1 0x10
#define IRQ_VR_FLT2 0x08
#define IRQ_LOWVSYS 0x04
#define IRQ_THERM_105 0x02
#define IRQ_THERM_125 0x01
/* PCA9450_REG_PWRCTRL bits */
#define T_ON_DEB_MASK 0xC0
#define T_ON_DEB_120US (0 << 6)
#define T_ON_DEB_20MS (1 << 6)
#define T_ON_DEB_100MS (2 << 6)
#define T_ON_DEB_750MS (3 << 6)
#define T_OFF_DEB_MASK 0x20
#define T_OFF_DEB_120US (0 << 5)
#define T_OFF_DEB_2MS (1 << 5)
#define T_ON_STEP_MASK 0x18
#define T_ON_STEP_1MS (0 << 3)
#define T_ON_STEP_2MS (1 << 3)
#define T_ON_STEP_4MS (2 << 3)
#define T_ON_STEP_8MS (3 << 3)
#define T_OFF_STEP_MASK 0x06
#define T_OFF_STEP_2MS (0 << 1)
#define T_OFF_STEP_4MS (1 << 1)
#define T_OFF_STEP_8MS (2 << 1)
#define T_OFF_STEP_16MS (3 << 1)
#define T_RESTART_MASK 0x01
#define T_RESTART_250MS 0
#define T_RESTART_500MS 1
/* PCA9450_REG_RESET_CTRL bits */
#define WDOG_B_CFG_MASK 0xC0
#define WDOG_B_CFG_NONE 0x00
#define WDOG_B_CFG_WARM 0x40
#define WDOG_B_CFG_COLD_LDO12 0x80
#define WDOG_B_CFG_COLD 0xC0
#define T_PMIC_RST_DEB_MASK 0x07
#define T_PMIC_RST_DEB_10MS 0x00
#define T_PMIC_RST_DEB_50MS 0x01
#define T_PMIC_RST_DEB_100MS 0x02
#define T_PMIC_RST_DEB_500MS 0x03
#define T_PMIC_RST_DEB_1S 0x04
#define T_PMIC_RST_DEB_2S 0x05
#define T_PMIC_RST_DEB_4S 0x06
#define T_PMIC_RST_DEB_8S 0x07
/* PCA9450_REG_CONFIG2 bits */
#define I2C_LT_MASK 0x03
#define I2C_LT_FORCE_DISABLE 0x00
#define I2C_LT_ON_STANDBY_RUN 0x01
#define I2C_LT_ON_RUN 0x02
#define I2C_LT_FORCE_ENABLE 0x03
/* PCA9450_REG_SW_RST command */
#define SW_RST_COMMAND 0x14
#endif /* __LINUX_REG_PCA9450_H__ */
@@ -0,0 +1,66 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2011-2013 Freescale Semiconductor, Inc. All Rights Reserved.
*/
#ifndef __LINUX_REG_PFUZE100_H
#define __LINUX_REG_PFUZE100_H
#define PFUZE100_SW1AB 0
#define PFUZE100_SW1C 1
#define PFUZE100_SW2 2
#define PFUZE100_SW3A 3
#define PFUZE100_SW3B 4
#define PFUZE100_SW4 5
#define PFUZE100_SWBST 6
#define PFUZE100_VSNVS 7
#define PFUZE100_VREFDDR 8
#define PFUZE100_VGEN1 9
#define PFUZE100_VGEN2 10
#define PFUZE100_VGEN3 11
#define PFUZE100_VGEN4 12
#define PFUZE100_VGEN5 13
#define PFUZE100_VGEN6 14
#define PFUZE100_COIN 15
#define PFUZE100_MAX_REGULATOR 16
#define PFUZE200_SW1AB 0
#define PFUZE200_SW2 1
#define PFUZE200_SW3A 2
#define PFUZE200_SW3B 3
#define PFUZE200_SWBST 4
#define PFUZE200_VSNVS 5
#define PFUZE200_VREFDDR 6
#define PFUZE200_VGEN1 7
#define PFUZE200_VGEN2 8
#define PFUZE200_VGEN3 9
#define PFUZE200_VGEN4 10
#define PFUZE200_VGEN5 11
#define PFUZE200_VGEN6 12
#define PFUZE200_COIN 13
#define PFUZE3000_SW1A 0
#define PFUZE3000_SW1B 1
#define PFUZE3000_SW2 2
#define PFUZE3000_SW3 3
#define PFUZE3000_SWBST 4
#define PFUZE3000_VSNVS 5
#define PFUZE3000_VREFDDR 6
#define PFUZE3000_VLDO1 7
#define PFUZE3000_VLDO2 8
#define PFUZE3000_VCCSD 9
#define PFUZE3000_V33 10
#define PFUZE3000_VLDO3 11
#define PFUZE3000_VLDO4 12
#define PFUZE3001_SW1 0
#define PFUZE3001_SW2 1
#define PFUZE3001_SW3 2
#define PFUZE3001_VSNVS 3
#define PFUZE3001_VLDO1 4
#define PFUZE3001_VLDO2 5
#define PFUZE3001_VCCSD 6
#define PFUZE3001_V33 7
#define PFUZE3001_VLDO3 8
#define PFUZE3001_VLDO4 9
#endif /* __LINUX_REG_PFUZE100_H */
@@ -0,0 +1,73 @@
/* SPDX-License-Identifier: GPL-2.0+ */
// s2dos05.h
//
// Copyright (c) 2016 Samsung Electronics Co., Ltd
// http://www.samsung.com
// Copyright (C) 2024 Dzmitry Sankouski <dsankouski@gmail.com>
#ifndef __LINUX_S2DOS05_H
#define __LINUX_S2DOS05_H
// S2DOS05 registers
// Slave Addr : 0xC0
enum S2DOS05_reg {
S2DOS05_REG_DEV_ID,
S2DOS05_REG_TOPSYS_STAT,
S2DOS05_REG_STAT,
S2DOS05_REG_EN,
S2DOS05_REG_LDO1_CFG,
S2DOS05_REG_LDO2_CFG,
S2DOS05_REG_LDO3_CFG,
S2DOS05_REG_LDO4_CFG,
S2DOS05_REG_BUCK_CFG,
S2DOS05_REG_BUCK_VOUT,
S2DOS05_REG_IRQ_MASK = 0x0D,
S2DOS05_REG_SSD_TSD = 0x0E,
S2DOS05_REG_OCL = 0x10,
S2DOS05_REG_IRQ = 0x11
};
// S2DOS05 regulator ids
enum S2DOS05_regulators {
S2DOS05_LDO1,
S2DOS05_LDO2,
S2DOS05_LDO3,
S2DOS05_LDO4,
S2DOS05_BUCK1,
S2DOS05_REG_MAX,
};
#define S2DOS05_IRQ_PWRMT_MASK BIT(5)
#define S2DOS05_IRQ_TSD_MASK BIT(4)
#define S2DOS05_IRQ_SSD_MASK BIT(3)
#define S2DOS05_IRQ_SCP_MASK BIT(2)
#define S2DOS05_IRQ_UVLO_MASK BIT(1)
#define S2DOS05_IRQ_OCD_MASK BIT(0)
#define S2DOS05_BUCK_MIN1 506250
#define S2DOS05_LDO_MIN1 1500000
#define S2DOS05_LDO_MIN2 2700000
#define S2DOS05_BUCK_STEP1 6250
#define S2DOS05_LDO_STEP1 25000
#define S2DOS05_LDO_VSEL_MASK 0x7F
#define S2DOS05_LDO_FD_MASK 0x80
#define S2DOS05_BUCK_VSEL_MASK 0xFF
#define S2DOS05_BUCK_FD_MASK 0x08
#define S2DOS05_ENABLE_MASK_L1 BIT(0)
#define S2DOS05_ENABLE_MASK_L2 BIT(1)
#define S2DOS05_ENABLE_MASK_L3 BIT(2)
#define S2DOS05_ENABLE_MASK_L4 BIT(3)
#define S2DOS05_ENABLE_MASK_B1 BIT(4)
#define S2DOS05_RAMP_DELAY 12000
#define S2DOS05_ENABLE_TIME_LDO 50
#define S2DOS05_ENABLE_TIME_BUCK 350
#define S2DOS05_LDO_N_VOLTAGES (S2DOS05_LDO_VSEL_MASK + 1)
#define S2DOS05_BUCK_N_VOLTAGES (S2DOS05_BUCK_VSEL_MASK + 1)
#define S2DOS05_REGULATOR_MAX (S2DOS05_REG_MAX)
#endif // __LINUX_S2DOS05_H
@@ -0,0 +1,33 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* tps51632-regulator.h -- TPS51632 regulator
*
* Interface for regulator driver for TPS51632 3-2-1 Phase D-Cap Step Down
* Driverless Controller with serial VID control and DVFS.
*
* Copyright (C) 2012 NVIDIA Corporation
* Author: Laxman Dewangan <ldewangan@nvidia.com>
*/
#ifndef __LINUX_REGULATOR_TPS51632_H
#define __LINUX_REGULATOR_TPS51632_H
/*
* struct tps51632_regulator_platform_data - tps51632 regulator platform data.
*
* @reg_init_data: The regulator init data.
* @enable_pwm_dvfs: Enable PWM DVFS or not.
* @dvfs_step_20mV: Step for DVFS is 20mV or 10mV.
* @max_voltage_uV: Maximum possible voltage in PWM-DVFS mode.
* @base_voltage_uV: Base voltage when PWM-DVFS enabled.
*/
struct tps51632_regulator_platform_data {
struct regulator_init_data *reg_init_data;
bool enable_pwm_dvfs;
bool dvfs_step_20mV;
int max_voltage_uV;
int base_voltage_uV;
};
#endif /* __LINUX_REGULATOR_TPS51632_H */
@@ -0,0 +1,33 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* tps62360.h -- TI tps62360
*
* Interface for regulator driver for TI TPS62360 Processor core supply
*
* Copyright (C) 2012 NVIDIA Corporation
* Author: Laxman Dewangan <ldewangan@nvidia.com>
*/
#ifndef __LINUX_REGULATOR_TPS62360_H
#define __LINUX_REGULATOR_TPS62360_H
/*
* struct tps62360_regulator_platform_data - tps62360 regulator platform data.
*
* @reg_init_data: The regulator init data.
* @en_discharge: Enable discharge the output capacitor via internal
* register.
* @en_internal_pulldn: internal pull down enable or not.
* @vsel0_def_state: Default state of vsel0. 1 if it is high else 0.
* @vsel1_def_state: Default state of vsel1. 1 if it is high else 0.
*/
struct tps62360_regulator_platform_data {
struct regulator_init_data *reg_init_data;
bool en_discharge;
bool en_internal_pulldn;
int vsel0_def_state;
int vsel1_def_state;
};
#endif /* __LINUX_REGULATOR_TPS62360_H */
@@ -0,0 +1,20 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* tps6507x.h -- Voltage regulation for the Texas Instruments TPS6507X
*
* Copyright (C) 2010 Texas Instruments, Inc.
*/
#ifndef REGULATOR_TPS6507X
#define REGULATOR_TPS6507X
/**
* tps6507x_reg_platform_data - platform data for tps6507x
* @defdcdc_default: Defines whether DCDC high or the low register controls
* output voltage by default. Valid for DCDC2 and DCDC3 outputs only.
*/
struct tps6507x_reg_platform_data {
bool defdcdc_default;
};
#endif
@@ -0,0 +1,27 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __REGULATOR_PLATFORM_CONSUMER_H_
#define __REGULATOR_PLATFORM_CONSUMER_H_
struct regulator_consumer_supply;
/**
* struct regulator_userspace_consumer_data - line consumer
* initialisation data.
*
* @name: Name for the consumer line
* @num_supplies: Number of supplies feeding the line
* @supplies: Supplies configuration.
* @init_on: Set if the regulators supplying the line should be
* enabled during initialisation
*/
struct regulator_userspace_consumer_data {
const char *name;
int num_supplies;
struct regulator_bulk_data *supplies;
bool init_on;
bool no_autoswitch;
};
#endif /* __REGULATOR_PLATFORM_CONSUMER_H_ */