]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/iio/temperature/maxim_thermocouple.c
iio: maxim_thermocouple: detect invalid storage size in read()
[linux.git] / drivers / iio / temperature / maxim_thermocouple.c
index 39dd2026ccc928a7f3c0c1be60948969923594ee..f962f31a5eb223c4f41d273743ed75f30e648a18 100644 (file)
@@ -123,22 +123,26 @@ static int maxim_thermocouple_read(struct maxim_thermocouple_data *data,
 {
        unsigned int storage_bytes = data->chip->read_size;
        unsigned int shift = chan->scan_type.shift + (chan->address * 8);
-       unsigned int buf;
+       __be16 buf16;
+       __be32 buf32;
        int ret;
 
-       ret = spi_read(data->spi, (void *) &buf, storage_bytes);
-       if (ret)
-               return ret;
-
        switch (storage_bytes) {
        case 2:
-               *val = be16_to_cpu(buf);
+               ret = spi_read(data->spi, (void *)&buf16, storage_bytes);
+               *val = be16_to_cpu(buf16);
                break;
        case 4:
-               *val = be32_to_cpu(buf);
+               ret = spi_read(data->spi, (void *)&buf32, storage_bytes);
+               *val = be32_to_cpu(buf32);
                break;
+       default:
+               ret = -EINVAL;
        }
 
+       if (ret)
+               return ret;
+
        /* check to be sure this is a valid reading */
        if (*val & data->chip->status_bit)
                return -EINVAL;