Hi[ ... ]
There is possibility of overflow due to large value of ddata->mon_rng+ /*
+ * Calculate voltage from ADC value and MON range.
+ * ddata->mon_rng holds the voltage corresponding to the maximum value the
+ * 10-bit ADC can measure.
+ * To obtain the output, multiply the ADC value by the MON range (in
+ * microvolts) and then divide it by the maximum value of the 10-bit ADC.
+ */
+ *val = mul_u64_u32_shr(*val, ddata->mon_rng[channel], 10);
Why do you use mul_u64_u32_shr() here but a direct shift above ?