> Hi, > > One issue and a couple of nitpicks inline. I really appreciate it. Please see my questions below. > > + switch (mask) { > > + case IIO_CHAN_INFO_RAW: > > + ret = lp8788_get_adc_result(adc, id, val) ? -EIO : > IIO_VAL_INT; > > + break; > > + case IIO_CHAN_INFO_SCALE: > > + *val = (lp8788_scale[id] / 1000) * 1000; > > + *val2 = (lp8788_scale[id] % 1000) * 1000000; > > This looks suspicious. E.g. if the entry in your table has the value > "1234" > you'd end up with a scale factor of 1000.234000000. Which looks wrong > for > two reasons, given that you return INT_PLUS_MICRO val2 should never > exceed 6 > decimal digits and secondly val is multiplied by a factor of thousand. > > Can you tell us in what unit the values in lp8788_scale are, that would > make > review easier. The LP8788 has 13 ADC input selection. ADC selection: Battery voltage, general ADC1 and so on. ADC result: Result = MAX_VALUE * (raw + 0.5) / 4095 except ADC is the charger voltage If the ADC input is the charger voltage, Result = MAX_VALUE * (raw + 0.5) / (4095 * 0.48) The raw value is from the registers. It has the range between 0 to 4095. (12bits) MAX_VALUE is constant for each selection. For the battery voltage, there are three ADC inputs. 5.0/5.5/6.0V Battery voltage for Max 5.0V = 5.0 Battery voltage for Max 5.5V = 5.5 Battery voltage for Max 6.0V = 6.0 Charger = 6.0 ADC1 = 2.5 I'm afraid I still misunderstand how IIO ADC works. Could you me some guide how to setup the scale in the driver? Thank you. Best Regards, Milo -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html