Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright (C) 2015 Texas Instruments Incorporated - https://www.ti.com/
0004  *  Andrew F. Davis <afd@ti.com>
0005  *
0006  * Based on the TPS65218 driver and the previous TPS65912 driver by
0007  * Margarita Olaya Cabrera <magi@slimlogic.co.uk>
0008  */
0009 
0010 #ifndef __LINUX_MFD_TPS65912_H
0011 #define __LINUX_MFD_TPS65912_H
0012 
0013 #include <linux/device.h>
0014 #include <linux/regmap.h>
0015 
0016 /* List of registers for TPS65912 */
0017 #define TPS65912_DCDC1_CTRL     0x00
0018 #define TPS65912_DCDC2_CTRL     0x01
0019 #define TPS65912_DCDC3_CTRL     0x02
0020 #define TPS65912_DCDC4_CTRL     0x03
0021 #define TPS65912_DCDC1_OP       0x04
0022 #define TPS65912_DCDC1_AVS      0x05
0023 #define TPS65912_DCDC1_LIMIT        0x06
0024 #define TPS65912_DCDC2_OP       0x07
0025 #define TPS65912_DCDC2_AVS      0x08
0026 #define TPS65912_DCDC2_LIMIT        0x09
0027 #define TPS65912_DCDC3_OP       0x0A
0028 #define TPS65912_DCDC3_AVS      0x0B
0029 #define TPS65912_DCDC3_LIMIT        0x0C
0030 #define TPS65912_DCDC4_OP       0x0D
0031 #define TPS65912_DCDC4_AVS      0x0E
0032 #define TPS65912_DCDC4_LIMIT        0x0F
0033 #define TPS65912_LDO1_OP        0x10
0034 #define TPS65912_LDO1_AVS       0x11
0035 #define TPS65912_LDO1_LIMIT     0x12
0036 #define TPS65912_LDO2_OP        0x13
0037 #define TPS65912_LDO2_AVS       0x14
0038 #define TPS65912_LDO2_LIMIT     0x15
0039 #define TPS65912_LDO3_OP        0x16
0040 #define TPS65912_LDO3_AVS       0x17
0041 #define TPS65912_LDO3_LIMIT     0x18
0042 #define TPS65912_LDO4_OP        0x19
0043 #define TPS65912_LDO4_AVS       0x1A
0044 #define TPS65912_LDO4_LIMIT     0x1B
0045 #define TPS65912_LDO5           0x1C
0046 #define TPS65912_LDO6           0x1D
0047 #define TPS65912_LDO7           0x1E
0048 #define TPS65912_LDO8           0x1F
0049 #define TPS65912_LDO9           0x20
0050 #define TPS65912_LDO10          0x21
0051 #define TPS65912_THRM           0x22
0052 #define TPS65912_CLK32OUT       0x23
0053 #define TPS65912_DEVCTRL        0x24
0054 #define TPS65912_DEVCTRL2       0x25
0055 #define TPS65912_I2C_SPI_CFG        0x26
0056 #define TPS65912_KEEP_ON        0x27
0057 #define TPS65912_KEEP_ON2       0x28
0058 #define TPS65912_SET_OFF1       0x29
0059 #define TPS65912_SET_OFF2       0x2A
0060 #define TPS65912_DEF_VOLT       0x2B
0061 #define TPS65912_DEF_VOLT_MAPPING   0x2C
0062 #define TPS65912_DISCHARGE      0x2D
0063 #define TPS65912_DISCHARGE2     0x2E
0064 #define TPS65912_EN1_SET1       0x2F
0065 #define TPS65912_EN1_SET2       0x30
0066 #define TPS65912_EN2_SET1       0x31
0067 #define TPS65912_EN2_SET2       0x32
0068 #define TPS65912_EN3_SET1       0x33
0069 #define TPS65912_EN3_SET2       0x34
0070 #define TPS65912_EN4_SET1       0x35
0071 #define TPS65912_EN4_SET2       0x36
0072 #define TPS65912_PGOOD          0x37
0073 #define TPS65912_PGOOD2         0x38
0074 #define TPS65912_INT_STS        0x39
0075 #define TPS65912_INT_MSK        0x3A
0076 #define TPS65912_INT_STS2       0x3B
0077 #define TPS65912_INT_MSK2       0x3C
0078 #define TPS65912_INT_STS3       0x3D
0079 #define TPS65912_INT_MSK3       0x3E
0080 #define TPS65912_INT_STS4       0x3F
0081 #define TPS65912_INT_MSK4       0x40
0082 #define TPS65912_GPIO1          0x41
0083 #define TPS65912_GPIO2          0x42
0084 #define TPS65912_GPIO3          0x43
0085 #define TPS65912_GPIO4          0x44
0086 #define TPS65912_GPIO5          0x45
0087 #define TPS65912_VMON           0x46
0088 #define TPS65912_LEDA_CTRL1     0x47
0089 #define TPS65912_LEDA_CTRL2     0x48
0090 #define TPS65912_LEDA_CTRL3     0x49
0091 #define TPS65912_LEDA_CTRL4     0x4A
0092 #define TPS65912_LEDA_CTRL5     0x4B
0093 #define TPS65912_LEDA_CTRL6     0x4C
0094 #define TPS65912_LEDA_CTRL7     0x4D
0095 #define TPS65912_LEDA_CTRL8     0x4E
0096 #define TPS65912_LEDB_CTRL1     0x4F
0097 #define TPS65912_LEDB_CTRL2     0x50
0098 #define TPS65912_LEDB_CTRL3     0x51
0099 #define TPS65912_LEDB_CTRL4     0x52
0100 #define TPS65912_LEDB_CTRL5     0x53
0101 #define TPS65912_LEDB_CTRL6     0x54
0102 #define TPS65912_LEDB_CTRL7     0x55
0103 #define TPS65912_LEDB_CTRL8     0x56
0104 #define TPS65912_LEDC_CTRL1     0x57
0105 #define TPS65912_LEDC_CTRL2     0x58
0106 #define TPS65912_LEDC_CTRL3     0x59
0107 #define TPS65912_LEDC_CTRL4     0x5A
0108 #define TPS65912_LEDC_CTRL5     0x5B
0109 #define TPS65912_LEDC_CTRL6     0x5C
0110 #define TPS65912_LEDC_CTRL7     0x5D
0111 #define TPS65912_LEDC_CTRL8     0x5E
0112 #define TPS65912_LED_RAMP_UP_TIME   0x5F
0113 #define TPS65912_LED_RAMP_DOWN_TIME 0x60
0114 #define TPS65912_LED_SEQ_EN     0x61
0115 #define TPS65912_LOADSWITCH     0x62
0116 #define TPS65912_SPARE          0x63
0117 #define TPS65912_VERNUM         0x64
0118 #define TPS6591X_MAX_REGISTER       0x64
0119 
0120 /* INT_STS Register field definitions */
0121 #define TPS65912_INT_STS_PWRHOLD_F  BIT(0)
0122 #define TPS65912_INT_STS_VMON       BIT(1)
0123 #define TPS65912_INT_STS_PWRON      BIT(2)
0124 #define TPS65912_INT_STS_PWRON_LP   BIT(3)
0125 #define TPS65912_INT_STS_PWRHOLD_R  BIT(4)
0126 #define TPS65912_INT_STS_HOTDIE     BIT(5)
0127 #define TPS65912_INT_STS_GPIO1_R    BIT(6)
0128 #define TPS65912_INT_STS_GPIO1_F    BIT(7)
0129 
0130 /* INT_STS Register field definitions */
0131 #define TPS65912_INT_STS2_GPIO2_R   BIT(0)
0132 #define TPS65912_INT_STS2_GPIO2_F   BIT(1)
0133 #define TPS65912_INT_STS2_GPIO3_R   BIT(2)
0134 #define TPS65912_INT_STS2_GPIO3_F   BIT(3)
0135 #define TPS65912_INT_STS2_GPIO4_R   BIT(4)
0136 #define TPS65912_INT_STS2_GPIO4_F   BIT(5)
0137 #define TPS65912_INT_STS2_GPIO5_R   BIT(6)
0138 #define TPS65912_INT_STS2_GPIO5_F   BIT(7)
0139 
0140 /* INT_STS Register field definitions */
0141 #define TPS65912_INT_STS3_PGOOD_DCDC1   BIT(0)
0142 #define TPS65912_INT_STS3_PGOOD_DCDC2   BIT(1)
0143 #define TPS65912_INT_STS3_PGOOD_DCDC3   BIT(2)
0144 #define TPS65912_INT_STS3_PGOOD_DCDC4   BIT(3)
0145 #define TPS65912_INT_STS3_PGOOD_LDO1    BIT(4)
0146 #define TPS65912_INT_STS3_PGOOD_LDO2    BIT(5)
0147 #define TPS65912_INT_STS3_PGOOD_LDO3    BIT(6)
0148 #define TPS65912_INT_STS3_PGOOD_LDO4    BIT(7)
0149 
0150 /* INT_STS Register field definitions */
0151 #define TPS65912_INT_STS4_PGOOD_LDO5    BIT(0)
0152 #define TPS65912_INT_STS4_PGOOD_LDO6    BIT(1)
0153 #define TPS65912_INT_STS4_PGOOD_LDO7    BIT(2)
0154 #define TPS65912_INT_STS4_PGOOD_LDO8    BIT(3)
0155 #define TPS65912_INT_STS4_PGOOD_LDO9    BIT(4)
0156 #define TPS65912_INT_STS4_PGOOD_LDO10   BIT(5)
0157 
0158 /* GPIO 1 and 2 Register field definitions */
0159 #define GPIO_SLEEP_MASK         0x80
0160 #define GPIO_SLEEP_SHIFT        7
0161 #define GPIO_DEB_MASK           0x10
0162 #define GPIO_DEB_SHIFT          4
0163 #define GPIO_CFG_MASK           0x04
0164 #define GPIO_CFG_SHIFT          2
0165 #define GPIO_STS_MASK           0x02
0166 #define GPIO_STS_SHIFT          1
0167 #define GPIO_SET_MASK           0x01
0168 #define GPIO_SET_SHIFT          0
0169 
0170 /* GPIO 3 Register field definitions */
0171 #define GPIO3_SLEEP_MASK        0x80
0172 #define GPIO3_SLEEP_SHIFT       7
0173 #define GPIO3_SEL_MASK          0x40
0174 #define GPIO3_SEL_SHIFT         6
0175 #define GPIO3_ODEN_MASK         0x20
0176 #define GPIO3_ODEN_SHIFT        5
0177 #define GPIO3_DEB_MASK          0x10
0178 #define GPIO3_DEB_SHIFT         4
0179 #define GPIO3_PDEN_MASK         0x08
0180 #define GPIO3_PDEN_SHIFT        3
0181 #define GPIO3_CFG_MASK          0x04
0182 #define GPIO3_CFG_SHIFT         2
0183 #define GPIO3_STS_MASK          0x02
0184 #define GPIO3_STS_SHIFT         1
0185 #define GPIO3_SET_MASK          0x01
0186 #define GPIO3_SET_SHIFT         0
0187 
0188 /* GPIO 4 Register field definitions */
0189 #define GPIO4_SLEEP_MASK        0x80
0190 #define GPIO4_SLEEP_SHIFT       7
0191 #define GPIO4_SEL_MASK          0x40
0192 #define GPIO4_SEL_SHIFT         6
0193 #define GPIO4_ODEN_MASK         0x20
0194 #define GPIO4_ODEN_SHIFT        5
0195 #define GPIO4_DEB_MASK          0x10
0196 #define GPIO4_DEB_SHIFT         4
0197 #define GPIO4_PDEN_MASK         0x08
0198 #define GPIO4_PDEN_SHIFT        3
0199 #define GPIO4_CFG_MASK          0x04
0200 #define GPIO4_CFG_SHIFT         2
0201 #define GPIO4_STS_MASK          0x02
0202 #define GPIO4_STS_SHIFT         1
0203 #define GPIO4_SET_MASK          0x01
0204 #define GPIO4_SET_SHIFT         0
0205 
0206 /* Register THERM  (0x80) register.RegisterDescription */
0207 #define THERM_THERM_HD_MASK     0x20
0208 #define THERM_THERM_HD_SHIFT        5
0209 #define THERM_THERM_TS_MASK     0x10
0210 #define THERM_THERM_TS_SHIFT        4
0211 #define THERM_THERM_HDSEL_MASK      0x0C
0212 #define THERM_THERM_HDSEL_SHIFT     2
0213 #define THERM_RSVD1_MASK        0x02
0214 #define THERM_RSVD1_SHIFT       1
0215 #define THERM_THERM_STATE_MASK      0x01
0216 #define THERM_THERM_STATE_SHIFT     0
0217 
0218 /* Register DCDCCTRL1 register.RegisterDescription */
0219 #define DCDCCTRL_VCON_ENABLE_MASK   0x80
0220 #define DCDCCTRL_VCON_ENABLE_SHIFT  7
0221 #define DCDCCTRL_VCON_RANGE1_MASK   0x40
0222 #define DCDCCTRL_VCON_RANGE1_SHIFT  6
0223 #define DCDCCTRL_VCON_RANGE0_MASK   0x20
0224 #define DCDCCTRL_VCON_RANGE0_SHIFT  5
0225 #define DCDCCTRL_TSTEP2_MASK        0x10
0226 #define DCDCCTRL_TSTEP2_SHIFT       4
0227 #define DCDCCTRL_TSTEP1_MASK        0x08
0228 #define DCDCCTRL_TSTEP1_SHIFT       3
0229 #define DCDCCTRL_TSTEP0_MASK        0x04
0230 #define DCDCCTRL_TSTEP0_SHIFT       2
0231 #define DCDCCTRL_DCDC1_MODE_MASK    0x02
0232 #define DCDCCTRL_DCDC1_MODE_SHIFT   1
0233 
0234 /* Register DCDCCTRL2 and DCDCCTRL3 register.RegisterDescription */
0235 #define DCDCCTRL_TSTEP2_MASK        0x10
0236 #define DCDCCTRL_TSTEP2_SHIFT       4
0237 #define DCDCCTRL_TSTEP1_MASK        0x08
0238 #define DCDCCTRL_TSTEP1_SHIFT       3
0239 #define DCDCCTRL_TSTEP0_MASK        0x04
0240 #define DCDCCTRL_TSTEP0_SHIFT       2
0241 #define DCDCCTRL_DCDC_MODE_MASK     0x02
0242 #define DCDCCTRL_DCDC_MODE_SHIFT    1
0243 #define DCDCCTRL_RSVD0_MASK     0x01
0244 #define DCDCCTRL_RSVD0_SHIFT        0
0245 
0246 /* Register DCDCCTRL4 register.RegisterDescription */
0247 #define DCDCCTRL_RAMP_TIME_MASK     0x01
0248 #define DCDCCTRL_RAMP_TIME_SHIFT    0
0249 
0250 /* Register DCDCx_AVS */
0251 #define DCDC_AVS_ENABLE_MASK        0x80
0252 #define DCDC_AVS_ENABLE_SHIFT       7
0253 #define DCDC_AVS_ECO_MASK       0x40
0254 #define DCDC_AVS_ECO_SHIFT      6
0255 
0256 /* Register DCDCx_LIMIT */
0257 #define DCDC_LIMIT_RANGE_MASK       0xC0
0258 #define DCDC_LIMIT_RANGE_SHIFT      6
0259 #define DCDC_LIMIT_MAX_SEL_MASK     0x3F
0260 #define DCDC_LIMIT_MAX_SEL_SHIFT    0
0261 
0262 /* Define the TPS65912 IRQ numbers */
0263 enum tps65912_irqs {
0264     /* INT_STS registers */
0265     TPS65912_IRQ_PWRHOLD_F,
0266     TPS65912_IRQ_VMON,
0267     TPS65912_IRQ_PWRON,
0268     TPS65912_IRQ_PWRON_LP,
0269     TPS65912_IRQ_PWRHOLD_R,
0270     TPS65912_IRQ_HOTDIE,
0271     TPS65912_IRQ_GPIO1_R,
0272     TPS65912_IRQ_GPIO1_F,
0273     /* INT_STS2 registers */
0274     TPS65912_IRQ_GPIO2_R,
0275     TPS65912_IRQ_GPIO2_F,
0276     TPS65912_IRQ_GPIO3_R,
0277     TPS65912_IRQ_GPIO3_F,
0278     TPS65912_IRQ_GPIO4_R,
0279     TPS65912_IRQ_GPIO4_F,
0280     TPS65912_IRQ_GPIO5_R,
0281     TPS65912_IRQ_GPIO5_F,
0282     /* INT_STS3 registers */
0283     TPS65912_IRQ_PGOOD_DCDC1,
0284     TPS65912_IRQ_PGOOD_DCDC2,
0285     TPS65912_IRQ_PGOOD_DCDC3,
0286     TPS65912_IRQ_PGOOD_DCDC4,
0287     TPS65912_IRQ_PGOOD_LDO1,
0288     TPS65912_IRQ_PGOOD_LDO2,
0289     TPS65912_IRQ_PGOOD_LDO3,
0290     TPS65912_IRQ_PGOOD_LDO4,
0291     /* INT_STS4 registers */
0292     TPS65912_IRQ_PGOOD_LDO5,
0293     TPS65912_IRQ_PGOOD_LDO6,
0294     TPS65912_IRQ_PGOOD_LDO7,
0295     TPS65912_IRQ_PGOOD_LDO8,
0296     TPS65912_IRQ_PGOOD_LDO9,
0297     TPS65912_IRQ_PGOOD_LDO10,
0298 };
0299 
0300 /*
0301  * struct tps65912 - state holder for the tps65912 driver
0302  *
0303  * Device data may be used to access the TPS65912 chip
0304  */
0305 struct tps65912 {
0306     struct device *dev;
0307     struct regmap *regmap;
0308 
0309     /* IRQ Data */
0310     int irq;
0311     struct regmap_irq_chip_data *irq_data;
0312 };
0313 
0314 extern const struct regmap_config tps65912_regmap_config;
0315 
0316 int tps65912_device_init(struct tps65912 *tps);
0317 void tps65912_device_exit(struct tps65912 *tps);
0318 
0319 #endif /*  __LINUX_MFD_TPS65912_H */