Merge branch 'queue' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target...
[firefly-linux-kernel-4.4.55.git] / drivers / mfd / twl4030-madc.c
index 942b666a2a07b20ad02f97b864500db0259b8669..42bd3ea5df3c3f07207b44bf6360fde54fb23b7f 100644 (file)
@@ -211,12 +211,14 @@ static int twl4030battery_current(int raw_volt)
  * @reg_base - Base address of the first channel
  * @Channels - 16 bit bitmap. If the bit is set, channel value is read
  * @buf - The channel values are stored here. if read fails error
+ * @raw - Return raw values without conversion
  * value is stored
  * Returns the number of successfully read channels.
  */
 static int twl4030_madc_read_channels(struct twl4030_madc_data *madc,
                                      u8 reg_base, unsigned
-                                               long channels, int *buf)
+                                     long channels, int *buf,
+                                     bool raw)
 {
        int count = 0, count_req = 0, i;
        u8 reg;
@@ -230,6 +232,10 @@ static int twl4030_madc_read_channels(struct twl4030_madc_data *madc,
                        count_req++;
                        continue;
                }
+               if (raw) {
+                       count++;
+                       continue;
+               }
                switch (i) {
                case 10:
                        buf[i] = twl4030battery_current(buf[i]);
@@ -371,7 +377,7 @@ static irqreturn_t twl4030_madc_threaded_irq_handler(int irq, void *_madc)
                method = &twl4030_conversion_methods[r->method];
                /* Read results */
                len = twl4030_madc_read_channels(madc, method->rbase,
-                                                r->channels, r->rbuf);
+                                                r->channels, r->rbuf, r->raw);
                /* Return results to caller */
                if (r->func_cb != NULL) {
                        r->func_cb(len, r->channels, r->rbuf);
@@ -397,7 +403,7 @@ err_i2c:
                method = &twl4030_conversion_methods[r->method];
                /* Read results */
                len = twl4030_madc_read_channels(madc, method->rbase,
-                                                r->channels, r->rbuf);
+                                                r->channels, r->rbuf, r->raw);
                /* Return results to caller */
                if (r->func_cb != NULL) {
                        r->func_cb(len, r->channels, r->rbuf);
@@ -585,7 +591,7 @@ int twl4030_madc_conversion(struct twl4030_madc_request *req)
                goto out;
        }
        ret = twl4030_madc_read_channels(twl4030_madc, method->rbase,
-                                        req->channels, req->rbuf);
+                                        req->channels, req->rbuf, req->raw);
        twl4030_madc->requests[req->method].active = 0;
 
 out: