diff options
Diffstat (limited to 'include/linux/mfd/tps65090.h')
| -rw-r--r-- | include/linux/mfd/tps65090.h | 104 |
1 files changed, 88 insertions, 16 deletions
diff --git a/include/linux/mfd/tps65090.h b/include/linux/mfd/tps65090.h index 6bc31d854626..6694cf43e8b8 100644 --- a/include/linux/mfd/tps65090.h +++ b/include/linux/mfd/tps65090.h | |||
| @@ -23,37 +23,109 @@ | |||
| 23 | #define __LINUX_MFD_TPS65090_H | 23 | #define __LINUX_MFD_TPS65090_H |
| 24 | 24 | ||
| 25 | #include <linux/irq.h> | 25 | #include <linux/irq.h> |
| 26 | #include <linux/regmap.h> | ||
| 27 | |||
| 28 | /* TPS65090 IRQs */ | ||
| 29 | enum { | ||
| 30 | TPS65090_IRQ_VAC_STATUS_CHANGE, | ||
| 31 | TPS65090_IRQ_VSYS_STATUS_CHANGE, | ||
| 32 | TPS65090_IRQ_BAT_STATUS_CHANGE, | ||
| 33 | TPS65090_IRQ_CHARGING_STATUS_CHANGE, | ||
| 34 | TPS65090_IRQ_CHARGING_COMPLETE, | ||
| 35 | TPS65090_IRQ_OVERLOAD_DCDC1, | ||
| 36 | TPS65090_IRQ_OVERLOAD_DCDC2, | ||
| 37 | TPS65090_IRQ_OVERLOAD_DCDC3, | ||
| 38 | TPS65090_IRQ_OVERLOAD_FET1, | ||
| 39 | TPS65090_IRQ_OVERLOAD_FET2, | ||
| 40 | TPS65090_IRQ_OVERLOAD_FET3, | ||
| 41 | TPS65090_IRQ_OVERLOAD_FET4, | ||
| 42 | TPS65090_IRQ_OVERLOAD_FET5, | ||
| 43 | TPS65090_IRQ_OVERLOAD_FET6, | ||
| 44 | TPS65090_IRQ_OVERLOAD_FET7, | ||
| 45 | }; | ||
| 46 | |||
| 47 | /* TPS65090 Regulator ID */ | ||
| 48 | enum { | ||
| 49 | TPS65090_REGULATOR_DCDC1, | ||
| 50 | TPS65090_REGULATOR_DCDC2, | ||
| 51 | TPS65090_REGULATOR_DCDC3, | ||
| 52 | TPS65090_REGULATOR_FET1, | ||
| 53 | TPS65090_REGULATOR_FET2, | ||
| 54 | TPS65090_REGULATOR_FET3, | ||
| 55 | TPS65090_REGULATOR_FET4, | ||
| 56 | TPS65090_REGULATOR_FET5, | ||
| 57 | TPS65090_REGULATOR_FET6, | ||
| 58 | TPS65090_REGULATOR_FET7, | ||
| 59 | TPS65090_REGULATOR_LDO1, | ||
| 60 | TPS65090_REGULATOR_LDO2, | ||
| 61 | |||
| 62 | /* Last entry for maximum ID */ | ||
| 63 | TPS65090_REGULATOR_MAX, | ||
| 64 | }; | ||
| 26 | 65 | ||
| 27 | struct tps65090 { | 66 | struct tps65090 { |
| 28 | struct mutex lock; | ||
| 29 | struct device *dev; | 67 | struct device *dev; |
| 30 | struct i2c_client *client; | ||
| 31 | struct regmap *rmap; | 68 | struct regmap *rmap; |
| 32 | struct irq_chip irq_chip; | 69 | struct regmap_irq_chip_data *irq_data; |
| 33 | struct mutex irq_lock; | ||
| 34 | int irq_base; | ||
| 35 | unsigned int id; | ||
| 36 | }; | 70 | }; |
| 37 | 71 | ||
| 38 | struct tps65090_subdev_info { | 72 | /* |
| 39 | int id; | 73 | * struct tps65090_regulator_plat_data |
| 40 | const char *name; | 74 | * |
| 41 | void *platform_data; | 75 | * @reg_init_data: The regulator init data. |
| 76 | * @enable_ext_control: Enable extrenal control or not. Only available for | ||
| 77 | * DCDC1, DCDC2 and DCDC3. | ||
| 78 | * @gpio: Gpio number if external control is enabled and controlled through | ||
| 79 | * gpio. | ||
| 80 | */ | ||
| 81 | struct tps65090_regulator_plat_data { | ||
| 82 | struct regulator_init_data *reg_init_data; | ||
| 83 | bool enable_ext_control; | ||
| 84 | int gpio; | ||
| 42 | }; | 85 | }; |
| 43 | 86 | ||
| 44 | struct tps65090_platform_data { | 87 | struct tps65090_platform_data { |
| 45 | int irq_base; | 88 | int irq_base; |
| 46 | int num_subdevs; | 89 | struct tps65090_regulator_plat_data *reg_pdata[TPS65090_REGULATOR_MAX]; |
| 47 | struct tps65090_subdev_info *subdevs; | ||
| 48 | }; | 90 | }; |
| 49 | 91 | ||
| 50 | /* | 92 | /* |
| 51 | * NOTE: the functions below are not intended for use outside | 93 | * NOTE: the functions below are not intended for use outside |
| 52 | * of the TPS65090 sub-device drivers | 94 | * of the TPS65090 sub-device drivers |
| 53 | */ | 95 | */ |
| 54 | extern int tps65090_write(struct device *dev, int reg, uint8_t val); | 96 | static inline int tps65090_write(struct device *dev, int reg, uint8_t val) |
| 55 | extern int tps65090_read(struct device *dev, int reg, uint8_t *val); | 97 | { |
| 56 | extern int tps65090_set_bits(struct device *dev, int reg, uint8_t bit_num); | 98 | struct tps65090 *tps = dev_get_drvdata(dev); |
| 57 | extern int tps65090_clr_bits(struct device *dev, int reg, uint8_t bit_num); | 99 | |
| 100 | return regmap_write(tps->rmap, reg, val); | ||
| 101 | } | ||
| 102 | |||
| 103 | static inline int tps65090_read(struct device *dev, int reg, uint8_t *val) | ||
| 104 | { | ||
| 105 | struct tps65090 *tps = dev_get_drvdata(dev); | ||
| 106 | unsigned int temp_val; | ||
| 107 | int ret; | ||
| 108 | |||
| 109 | ret = regmap_read(tps->rmap, reg, &temp_val); | ||
| 110 | if (!ret) | ||
| 111 | *val = temp_val; | ||
| 112 | return ret; | ||
| 113 | } | ||
| 114 | |||
| 115 | static inline int tps65090_set_bits(struct device *dev, int reg, | ||
| 116 | uint8_t bit_num) | ||
| 117 | { | ||
| 118 | struct tps65090 *tps = dev_get_drvdata(dev); | ||
| 119 | |||
| 120 | return regmap_update_bits(tps->rmap, reg, BIT(bit_num), ~0u); | ||
| 121 | } | ||
| 122 | |||
| 123 | static inline int tps65090_clr_bits(struct device *dev, int reg, | ||
| 124 | uint8_t bit_num) | ||
| 125 | { | ||
| 126 | struct tps65090 *tps = dev_get_drvdata(dev); | ||
| 127 | |||
| 128 | return regmap_update_bits(tps->rmap, reg, BIT(bit_num), 0u); | ||
| 129 | } | ||
| 58 | 130 | ||
| 59 | #endif /*__LINUX_MFD_TPS65090_H */ | 131 | #endif /*__LINUX_MFD_TPS65090_H */ |
