diff options
Diffstat (limited to 'include/linux/mfd/da9052/da9052.h')
| -rw-r--r-- | include/linux/mfd/da9052/da9052.h | 66 |
1 files changed, 62 insertions, 4 deletions
diff --git a/include/linux/mfd/da9052/da9052.h b/include/linux/mfd/da9052/da9052.h index 86dd93de6ff2..786d02eb79d2 100644 --- a/include/linux/mfd/da9052/da9052.h +++ b/include/linux/mfd/da9052/da9052.h | |||
| @@ -99,6 +99,9 @@ struct da9052 { | |||
| 99 | u8 chip_id; | 99 | u8 chip_id; |
| 100 | 100 | ||
| 101 | int chip_irq; | 101 | int chip_irq; |
| 102 | |||
| 103 | /* SOC I/O transfer related fixes for DA9052/53 */ | ||
| 104 | int (*fix_io) (struct da9052 *da9052, unsigned char reg); | ||
| 102 | }; | 105 | }; |
| 103 | 106 | ||
| 104 | /* ADC API */ | 107 | /* ADC API */ |
| @@ -113,32 +116,87 @@ static inline int da9052_reg_read(struct da9052 *da9052, unsigned char reg) | |||
| 113 | ret = regmap_read(da9052->regmap, reg, &val); | 116 | ret = regmap_read(da9052->regmap, reg, &val); |
| 114 | if (ret < 0) | 117 | if (ret < 0) |
| 115 | return ret; | 118 | return ret; |
| 119 | |||
| 120 | if (da9052->fix_io) { | ||
| 121 | ret = da9052->fix_io(da9052, reg); | ||
| 122 | if (ret < 0) | ||
| 123 | return ret; | ||
| 124 | } | ||
| 125 | |||
| 116 | return val; | 126 | return val; |
| 117 | } | 127 | } |
| 118 | 128 | ||
| 119 | static inline int da9052_reg_write(struct da9052 *da9052, unsigned char reg, | 129 | static inline int da9052_reg_write(struct da9052 *da9052, unsigned char reg, |
| 120 | unsigned char val) | 130 | unsigned char val) |
| 121 | { | 131 | { |
| 122 | return regmap_write(da9052->regmap, reg, val); | 132 | int ret; |
| 133 | |||
| 134 | ret = regmap_write(da9052->regmap, reg, val); | ||
| 135 | if (ret < 0) | ||
| 136 | return ret; | ||
| 137 | |||
| 138 | if (da9052->fix_io) { | ||
| 139 | ret = da9052->fix_io(da9052, reg); | ||
| 140 | if (ret < 0) | ||
| 141 | return ret; | ||
| 142 | } | ||
| 143 | |||
| 144 | return ret; | ||
| 123 | } | 145 | } |
| 124 | 146 | ||
| 125 | static inline int da9052_group_read(struct da9052 *da9052, unsigned char reg, | 147 | static inline int da9052_group_read(struct da9052 *da9052, unsigned char reg, |
| 126 | unsigned reg_cnt, unsigned char *val) | 148 | unsigned reg_cnt, unsigned char *val) |
| 127 | { | 149 | { |
| 128 | return regmap_bulk_read(da9052->regmap, reg, val, reg_cnt); | 150 | int ret; |
| 151 | |||
| 152 | ret = regmap_bulk_read(da9052->regmap, reg, val, reg_cnt); | ||
| 153 | if (ret < 0) | ||
| 154 | return ret; | ||
| 155 | |||
| 156 | if (da9052->fix_io) { | ||
| 157 | ret = da9052->fix_io(da9052, reg); | ||
| 158 | if (ret < 0) | ||
| 159 | return ret; | ||
| 160 | } | ||
| 161 | |||
| 162 | return ret; | ||
| 129 | } | 163 | } |
| 130 | 164 | ||
| 131 | static inline int da9052_group_write(struct da9052 *da9052, unsigned char reg, | 165 | static inline int da9052_group_write(struct da9052 *da9052, unsigned char reg, |
| 132 | unsigned reg_cnt, unsigned char *val) | 166 | unsigned reg_cnt, unsigned char *val) |
| 133 | { | 167 | { |
| 134 | return regmap_raw_write(da9052->regmap, reg, val, reg_cnt); | 168 | int ret; |
| 169 | |||
| 170 | ret = regmap_raw_write(da9052->regmap, reg, val, reg_cnt); | ||
| 171 | if (ret < 0) | ||
| 172 | return ret; | ||
| 173 | |||
| 174 | if (da9052->fix_io) { | ||
| 175 | ret = da9052->fix_io(da9052, reg); | ||
| 176 | if (ret < 0) | ||
| 177 | return ret; | ||
| 178 | } | ||
| 179 | |||
| 180 | return ret; | ||
| 135 | } | 181 | } |
| 136 | 182 | ||
| 137 | static inline int da9052_reg_update(struct da9052 *da9052, unsigned char reg, | 183 | static inline int da9052_reg_update(struct da9052 *da9052, unsigned char reg, |
| 138 | unsigned char bit_mask, | 184 | unsigned char bit_mask, |
| 139 | unsigned char reg_val) | 185 | unsigned char reg_val) |
| 140 | { | 186 | { |
| 141 | return regmap_update_bits(da9052->regmap, reg, bit_mask, reg_val); | 187 | int ret; |
| 188 | |||
| 189 | ret = regmap_update_bits(da9052->regmap, reg, bit_mask, reg_val); | ||
| 190 | if (ret < 0) | ||
| 191 | return ret; | ||
| 192 | |||
| 193 | if (da9052->fix_io) { | ||
| 194 | ret = da9052->fix_io(da9052, reg); | ||
| 195 | if (ret < 0) | ||
| 196 | return ret; | ||
| 197 | } | ||
| 198 | |||
| 199 | return ret; | ||
| 142 | } | 200 | } |
| 143 | 201 | ||
| 144 | int da9052_device_init(struct da9052 *da9052, u8 chip_id); | 202 | int da9052_device_init(struct da9052 *da9052, u8 chip_id); |
