@@ -211,6 +211,42 @@ static u16 ina226_interval_to_reg(unsigned long interval)
211211 return FIELD_PREP (INA226_AVG_RD_MASK , avg_bits );
212212}
213213
214+ static int ina2xx_get_value (struct ina2xx_data * data , u8 reg ,
215+ unsigned int regval )
216+ {
217+ int val ;
218+
219+ switch (reg ) {
220+ case INA2XX_SHUNT_VOLTAGE :
221+ /* signed register */
222+ val = DIV_ROUND_CLOSEST ((s16 )regval , data -> config -> shunt_div );
223+ break ;
224+ case INA2XX_BUS_VOLTAGE :
225+ val = (regval >> data -> config -> bus_voltage_shift ) *
226+ data -> config -> bus_voltage_lsb ;
227+ val = DIV_ROUND_CLOSEST (val , 1000 );
228+ break ;
229+ case INA2XX_POWER :
230+ val = regval * data -> power_lsb_uW ;
231+ break ;
232+ case INA2XX_CURRENT :
233+ /* signed register, result in mA */
234+ val = (s16 )regval * data -> current_lsb_uA ;
235+ val = DIV_ROUND_CLOSEST (val , 1000 );
236+ break ;
237+ case INA2XX_CALIBRATION :
238+ val = regval ;
239+ break ;
240+ default :
241+ /* programmer goofed */
242+ WARN_ON_ONCE (1 );
243+ val = 0 ;
244+ break ;
245+ }
246+
247+ return val ;
248+ }
249+
214250static int ina2xx_read_reg (struct device * dev , int reg , unsigned int * regval )
215251{
216252 struct ina2xx_data * data = dev_get_drvdata (dev );
@@ -264,42 +300,6 @@ static int ina2xx_read_reg(struct device *dev, int reg, unsigned int *regval)
264300 return - ENODEV ;
265301}
266302
267- static int ina2xx_get_value (struct ina2xx_data * data , u8 reg ,
268- unsigned int regval )
269- {
270- int val ;
271-
272- switch (reg ) {
273- case INA2XX_SHUNT_VOLTAGE :
274- /* signed register */
275- val = DIV_ROUND_CLOSEST ((s16 )regval , data -> config -> shunt_div );
276- break ;
277- case INA2XX_BUS_VOLTAGE :
278- val = (regval >> data -> config -> bus_voltage_shift )
279- * data -> config -> bus_voltage_lsb ;
280- val = DIV_ROUND_CLOSEST (val , 1000 );
281- break ;
282- case INA2XX_POWER :
283- val = regval * data -> power_lsb_uW ;
284- break ;
285- case INA2XX_CURRENT :
286- /* signed register, result in mA */
287- val = (s16 )regval * data -> current_lsb_uA ;
288- val = DIV_ROUND_CLOSEST (val , 1000 );
289- break ;
290- case INA2XX_CALIBRATION :
291- val = regval ;
292- break ;
293- default :
294- /* programmer goofed */
295- WARN_ON_ONCE (1 );
296- val = 0 ;
297- break ;
298- }
299-
300- return val ;
301- }
302-
303303static ssize_t ina2xx_value_show (struct device * dev ,
304304 struct device_attribute * da , char * buf )
305305{
0 commit comments