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); |