{
struct i2c_client *client = data->client;
struct nct1008_platform_data *pdata = client->dev.platform_data;
+ struct nct1008_sensor_data *sensorp;
s16 temp_hi;
s16 temp_lo;
long temp_milli = 0;
u8 value;
int ret;
+ if (!((sensor == EXT) || (sensor == LOC)))
+ return -1;
+
/* Read External Temp */
if (sensor == EXT) {
ret = nct1008_read_reg(client, NCT_REG(sensor, TEMP_RD_LO));
value = ret;
temp_hi = value_to_temperature(pdata->extended_range, value);
+ temp_milli = CELSIUS_TO_MILLICELSIUS(temp_hi) + temp_lo * 250;
- temp_milli = CELSIUS_TO_MILLICELSIUS(temp_hi) +
- temp_lo * 250;
-
- for (i = 0; i < ARRAY_SIZE(data->sensors[sensor].offset_table);
- i++) {
- if (temp_milli < (data->sensors[sensor].
- offset_table[i].temp * 1000)) {
- off = data->sensors[sensor].offset_table[i].
- offset * 1000;
+ sensorp = &data->sensors[sensor];
+ for (i = 0; i < ARRAY_SIZE(sensorp->offset_table); i++) {
+ if (temp_milli <
+ (sensorp->offset_table[i].temp * 1000)) {
+ off = sensorp->offset_table[i].offset * 1000;
break;
}
}
temp_milli = CELSIUS_TO_MILLICELSIUS(temp_hi);
}
+ if (temp_milli > NCT1008_MAX_TEMP_MILLI)
+ return -1;
+
*temp = temp_milli;
data->sensors[sensor].temp = temp_milli;