1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __LINUX_MFD_TPS6586X_H 3*4882a593Smuzhiyun #define __LINUX_MFD_TPS6586X_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #define TPS6586X_SLEW_RATE_INSTANTLY 0x00 6*4882a593Smuzhiyun #define TPS6586X_SLEW_RATE_110UV 0x01 7*4882a593Smuzhiyun #define TPS6586X_SLEW_RATE_220UV 0x02 8*4882a593Smuzhiyun #define TPS6586X_SLEW_RATE_440UV 0x03 9*4882a593Smuzhiyun #define TPS6586X_SLEW_RATE_880UV 0x04 10*4882a593Smuzhiyun #define TPS6586X_SLEW_RATE_1760UV 0x05 11*4882a593Smuzhiyun #define TPS6586X_SLEW_RATE_3520UV 0x06 12*4882a593Smuzhiyun #define TPS6586X_SLEW_RATE_7040UV 0x07 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define TPS6586X_SLEW_RATE_SET 0x08 15*4882a593Smuzhiyun #define TPS6586X_SLEW_RATE_MASK 0x07 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* VERSION CRC */ 18*4882a593Smuzhiyun #define TPS658621A 0x15 19*4882a593Smuzhiyun #define TPS658621CD 0x2c 20*4882a593Smuzhiyun #define TPS658623 0x1b 21*4882a593Smuzhiyun #define TPS658624 0x0a 22*4882a593Smuzhiyun #define TPS658640 0x01 23*4882a593Smuzhiyun #define TPS658640v2 0x02 24*4882a593Smuzhiyun #define TPS658643 0x03 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun enum { 27*4882a593Smuzhiyun TPS6586X_ID_SYS, 28*4882a593Smuzhiyun TPS6586X_ID_SM_0, 29*4882a593Smuzhiyun TPS6586X_ID_SM_1, 30*4882a593Smuzhiyun TPS6586X_ID_SM_2, 31*4882a593Smuzhiyun TPS6586X_ID_LDO_0, 32*4882a593Smuzhiyun TPS6586X_ID_LDO_1, 33*4882a593Smuzhiyun TPS6586X_ID_LDO_2, 34*4882a593Smuzhiyun TPS6586X_ID_LDO_3, 35*4882a593Smuzhiyun TPS6586X_ID_LDO_4, 36*4882a593Smuzhiyun TPS6586X_ID_LDO_5, 37*4882a593Smuzhiyun TPS6586X_ID_LDO_6, 38*4882a593Smuzhiyun TPS6586X_ID_LDO_7, 39*4882a593Smuzhiyun TPS6586X_ID_LDO_8, 40*4882a593Smuzhiyun TPS6586X_ID_LDO_9, 41*4882a593Smuzhiyun TPS6586X_ID_LDO_RTC, 42*4882a593Smuzhiyun TPS6586X_ID_MAX_REGULATOR, 43*4882a593Smuzhiyun }; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun enum { 46*4882a593Smuzhiyun TPS6586X_INT_PLDO_0, 47*4882a593Smuzhiyun TPS6586X_INT_PLDO_1, 48*4882a593Smuzhiyun TPS6586X_INT_PLDO_2, 49*4882a593Smuzhiyun TPS6586X_INT_PLDO_3, 50*4882a593Smuzhiyun TPS6586X_INT_PLDO_4, 51*4882a593Smuzhiyun TPS6586X_INT_PLDO_5, 52*4882a593Smuzhiyun TPS6586X_INT_PLDO_6, 53*4882a593Smuzhiyun TPS6586X_INT_PLDO_7, 54*4882a593Smuzhiyun TPS6586X_INT_COMP_DET, 55*4882a593Smuzhiyun TPS6586X_INT_ADC, 56*4882a593Smuzhiyun TPS6586X_INT_PLDO_8, 57*4882a593Smuzhiyun TPS6586X_INT_PLDO_9, 58*4882a593Smuzhiyun TPS6586X_INT_PSM_0, 59*4882a593Smuzhiyun TPS6586X_INT_PSM_1, 60*4882a593Smuzhiyun TPS6586X_INT_PSM_2, 61*4882a593Smuzhiyun TPS6586X_INT_PSM_3, 62*4882a593Smuzhiyun TPS6586X_INT_RTC_ALM1, 63*4882a593Smuzhiyun TPS6586X_INT_ACUSB_OVP, 64*4882a593Smuzhiyun TPS6586X_INT_USB_DET, 65*4882a593Smuzhiyun TPS6586X_INT_AC_DET, 66*4882a593Smuzhiyun TPS6586X_INT_BAT_DET, 67*4882a593Smuzhiyun TPS6586X_INT_CHG_STAT, 68*4882a593Smuzhiyun TPS6586X_INT_CHG_TEMP, 69*4882a593Smuzhiyun TPS6586X_INT_PP, 70*4882a593Smuzhiyun TPS6586X_INT_RESUME, 71*4882a593Smuzhiyun TPS6586X_INT_LOW_SYS, 72*4882a593Smuzhiyun TPS6586X_INT_RTC_ALM2, 73*4882a593Smuzhiyun }; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun struct tps6586x_settings { 76*4882a593Smuzhiyun int slew_rate; 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun struct tps6586x_subdev_info { 80*4882a593Smuzhiyun int id; 81*4882a593Smuzhiyun const char *name; 82*4882a593Smuzhiyun void *platform_data; 83*4882a593Smuzhiyun struct device_node *of_node; 84*4882a593Smuzhiyun }; 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun struct tps6586x_platform_data { 87*4882a593Smuzhiyun int num_subdevs; 88*4882a593Smuzhiyun struct tps6586x_subdev_info *subdevs; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun int gpio_base; 91*4882a593Smuzhiyun int irq_base; 92*4882a593Smuzhiyun bool pm_off; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun struct regulator_init_data *reg_init_data[TPS6586X_ID_MAX_REGULATOR]; 95*4882a593Smuzhiyun }; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /* 98*4882a593Smuzhiyun * NOTE: the functions below are not intended for use outside 99*4882a593Smuzhiyun * of the TPS6586X sub-device drivers 100*4882a593Smuzhiyun */ 101*4882a593Smuzhiyun extern int tps6586x_write(struct device *dev, int reg, uint8_t val); 102*4882a593Smuzhiyun extern int tps6586x_writes(struct device *dev, int reg, int len, uint8_t *val); 103*4882a593Smuzhiyun extern int tps6586x_read(struct device *dev, int reg, uint8_t *val); 104*4882a593Smuzhiyun extern int tps6586x_reads(struct device *dev, int reg, int len, uint8_t *val); 105*4882a593Smuzhiyun extern int tps6586x_set_bits(struct device *dev, int reg, uint8_t bit_mask); 106*4882a593Smuzhiyun extern int tps6586x_clr_bits(struct device *dev, int reg, uint8_t bit_mask); 107*4882a593Smuzhiyun extern int tps6586x_update(struct device *dev, int reg, uint8_t val, 108*4882a593Smuzhiyun uint8_t mask); 109*4882a593Smuzhiyun extern int tps6586x_irq_get_virq(struct device *dev, int irq); 110*4882a593Smuzhiyun extern int tps6586x_get_version(struct device *dev); 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #endif /*__LINUX_MFD_TPS6586X_H */ 113