mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
![Frieder Schrempf](/assets/img/avatar_default.png)
By default the PCA9450 doesn't handle the assertion of the WDOG_B signal, but this is required to guarantee that things like software resets triggered by the watchdog work reliably. As we don't want to rely on the bootloader to enable this, we tell the PMIC to issue a cold reset in case the WDOG_B signal is asserted (WDOG_B_CFG = 10), just as the NXP U-Boot code does. Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de> Link: https://lore.kernel.org/r/20210211105534.38972-3-frieder.schrempf@kontron.de Signed-off-by: Mark Brown <broonie@kernel.org>
226 lines
5.7 KiB
C
226 lines
5.7 KiB
C
/* 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_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_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_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 0x0F
|
|
|
|
/* PCA9450_REG_LDO4_VOLT bits */
|
|
#define LDO4_EN_MASK 0xC0
|
|
#define LDO4OUT_MASK 0x0F
|
|
|
|
/* 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_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
|
|
|
|
#endif /* __LINUX_REG_PCA9450_H__ */
|