Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[linux-2.6-block.git] / drivers / hwmon / occ / common.c
index 13a6290c8d2548a7db45e19be1e6fb1f771ec5b2..a7d2b16dd702c9ae4a312caa40888ea6ad7f1f6c 100644 (file)
@@ -124,12 +124,12 @@ struct extended_sensor {
 static int occ_poll(struct occ *occ)
 {
        int rc;
-       u16 checksum = occ->poll_cmd_data + 1;
+       u16 checksum = occ->poll_cmd_data + occ->seq_no + 1;
        u8 cmd[8];
        struct occ_poll_response_header *header;
 
        /* big endian */
-       cmd[0] = 0;                     /* sequence number */
+       cmd[0] = occ->seq_no++;         /* sequence number */
        cmd[1] = 0;                     /* cmd type */
        cmd[2] = 0;                     /* data length msb */
        cmd[3] = 1;                     /* data length lsb */
@@ -241,6 +241,12 @@ static ssize_t occ_show_temp_1(struct device *dev,
                val = get_unaligned_be16(&temp->sensor_id);
                break;
        case 1:
+               /*
+                * If a sensor reading has expired and couldn't be refreshed,
+                * OCC returns 0xFFFF for that sensor.
+                */
+               if (temp->value == 0xFFFF)
+                       return -EREMOTEIO;
                val = get_unaligned_be16(&temp->value) * 1000;
                break;
        default: