mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
![Thomas Gleixner](/assets/img/avatar_default.png)
Based on 2 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 51 franklin street fifth floor boston ma 02110 1301 usa this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option [no]_[pad]_[ctrl] any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 51 franklin street fifth floor boston ma 02110 1301 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 176 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Jilayne Lovejoy <opensource@jilayne.com> Reviewed-by: Steve Winslow <swinslow@gmail.com> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190519154040.652910950@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
149 lines
3.7 KiB
C
149 lines
3.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Core driver interface for TI TPS65090 PMIC family
|
|
*
|
|
* Copyright (C) 2012 NVIDIA Corporation
|
|
*/
|
|
|
|
#ifndef __LINUX_MFD_TPS65090_H
|
|
#define __LINUX_MFD_TPS65090_H
|
|
|
|
#include <linux/irq.h>
|
|
#include <linux/regmap.h>
|
|
|
|
/* TPS65090 IRQs */
|
|
enum {
|
|
TPS65090_IRQ_INTERRUPT,
|
|
TPS65090_IRQ_VAC_STATUS_CHANGE,
|
|
TPS65090_IRQ_VSYS_STATUS_CHANGE,
|
|
TPS65090_IRQ_BAT_STATUS_CHANGE,
|
|
TPS65090_IRQ_CHARGING_STATUS_CHANGE,
|
|
TPS65090_IRQ_CHARGING_COMPLETE,
|
|
TPS65090_IRQ_OVERLOAD_DCDC1,
|
|
TPS65090_IRQ_OVERLOAD_DCDC2,
|
|
TPS65090_IRQ_OVERLOAD_DCDC3,
|
|
TPS65090_IRQ_OVERLOAD_FET1,
|
|
TPS65090_IRQ_OVERLOAD_FET2,
|
|
TPS65090_IRQ_OVERLOAD_FET3,
|
|
TPS65090_IRQ_OVERLOAD_FET4,
|
|
TPS65090_IRQ_OVERLOAD_FET5,
|
|
TPS65090_IRQ_OVERLOAD_FET6,
|
|
TPS65090_IRQ_OVERLOAD_FET7,
|
|
};
|
|
|
|
/* TPS65090 Regulator ID */
|
|
enum {
|
|
TPS65090_REGULATOR_DCDC1,
|
|
TPS65090_REGULATOR_DCDC2,
|
|
TPS65090_REGULATOR_DCDC3,
|
|
TPS65090_REGULATOR_FET1,
|
|
TPS65090_REGULATOR_FET2,
|
|
TPS65090_REGULATOR_FET3,
|
|
TPS65090_REGULATOR_FET4,
|
|
TPS65090_REGULATOR_FET5,
|
|
TPS65090_REGULATOR_FET6,
|
|
TPS65090_REGULATOR_FET7,
|
|
TPS65090_REGULATOR_LDO1,
|
|
TPS65090_REGULATOR_LDO2,
|
|
|
|
/* Last entry for maximum ID */
|
|
TPS65090_REGULATOR_MAX,
|
|
};
|
|
|
|
/* Register addresses */
|
|
#define TPS65090_REG_INTR_STS 0x00
|
|
#define TPS65090_REG_INTR_STS2 0x01
|
|
#define TPS65090_REG_INTR_MASK 0x02
|
|
#define TPS65090_REG_INTR_MASK2 0x03
|
|
#define TPS65090_REG_CG_CTRL0 0x04
|
|
#define TPS65090_REG_CG_CTRL1 0x05
|
|
#define TPS65090_REG_CG_CTRL2 0x06
|
|
#define TPS65090_REG_CG_CTRL3 0x07
|
|
#define TPS65090_REG_CG_CTRL4 0x08
|
|
#define TPS65090_REG_CG_CTRL5 0x09
|
|
#define TPS65090_REG_CG_STATUS1 0x0a
|
|
#define TPS65090_REG_CG_STATUS2 0x0b
|
|
#define TPS65090_REG_AD_OUT1 0x17
|
|
#define TPS65090_REG_AD_OUT2 0x18
|
|
|
|
#define TPS65090_MAX_REG TPS65090_REG_AD_OUT2
|
|
#define TPS65090_NUM_REGS (TPS65090_MAX_REG + 1)
|
|
|
|
struct gpio_desc;
|
|
|
|
struct tps65090 {
|
|
struct device *dev;
|
|
struct regmap *rmap;
|
|
struct regmap_irq_chip_data *irq_data;
|
|
};
|
|
|
|
/*
|
|
* struct tps65090_regulator_plat_data
|
|
*
|
|
* @reg_init_data: The regulator init data.
|
|
* @enable_ext_control: Enable extrenal control or not. Only available for
|
|
* DCDC1, DCDC2 and DCDC3.
|
|
* @gpiod: Gpio descriptor if external control is enabled and controlled through
|
|
* gpio
|
|
* @overcurrent_wait_valid: True if the overcurrent_wait should be applied.
|
|
* @overcurrent_wait: Value to set as the overcurrent wait time. This is the
|
|
* actual bitfield value, not a time in ms (valid value are 0 - 3).
|
|
*/
|
|
struct tps65090_regulator_plat_data {
|
|
struct regulator_init_data *reg_init_data;
|
|
bool enable_ext_control;
|
|
struct gpio_desc *gpiod;
|
|
bool overcurrent_wait_valid;
|
|
int overcurrent_wait;
|
|
};
|
|
|
|
struct tps65090_platform_data {
|
|
int irq_base;
|
|
|
|
char **supplied_to;
|
|
size_t num_supplicants;
|
|
int enable_low_current_chrg;
|
|
|
|
struct tps65090_regulator_plat_data *reg_pdata[TPS65090_REGULATOR_MAX];
|
|
};
|
|
|
|
/*
|
|
* NOTE: the functions below are not intended for use outside
|
|
* of the TPS65090 sub-device drivers
|
|
*/
|
|
static inline int tps65090_write(struct device *dev, int reg, uint8_t val)
|
|
{
|
|
struct tps65090 *tps = dev_get_drvdata(dev);
|
|
|
|
return regmap_write(tps->rmap, reg, val);
|
|
}
|
|
|
|
static inline int tps65090_read(struct device *dev, int reg, uint8_t *val)
|
|
{
|
|
struct tps65090 *tps = dev_get_drvdata(dev);
|
|
unsigned int temp_val;
|
|
int ret;
|
|
|
|
ret = regmap_read(tps->rmap, reg, &temp_val);
|
|
if (!ret)
|
|
*val = temp_val;
|
|
return ret;
|
|
}
|
|
|
|
static inline int tps65090_set_bits(struct device *dev, int reg,
|
|
uint8_t bit_num)
|
|
{
|
|
struct tps65090 *tps = dev_get_drvdata(dev);
|
|
|
|
return regmap_update_bits(tps->rmap, reg, BIT(bit_num), ~0u);
|
|
}
|
|
|
|
static inline int tps65090_clr_bits(struct device *dev, int reg,
|
|
uint8_t bit_num)
|
|
{
|
|
struct tps65090 *tps = dev_get_drvdata(dev);
|
|
|
|
return regmap_update_bits(tps->rmap, reg, BIT(bit_num), 0u);
|
|
}
|
|
|
|
#endif /*__LINUX_MFD_TPS65090_H */
|