diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/hwmon/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/hwmon/tmp102.c | 16 |
2 files changed, 16 insertions, 1 deletions
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 8f59f057cdf4..80a73bfc1a65 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig | |||
| @@ -1217,6 +1217,7 @@ config SENSORS_PWM_FAN | |||
| 1217 | config SENSORS_SHT15 | 1217 | config SENSORS_SHT15 |
| 1218 | tristate "Sensiron humidity and temperature sensors. SHT15 and compat." | 1218 | tristate "Sensiron humidity and temperature sensors. SHT15 and compat." |
| 1219 | depends on GPIOLIB || COMPILE_TEST | 1219 | depends on GPIOLIB || COMPILE_TEST |
| 1220 | select BITREVERSE | ||
| 1220 | help | 1221 | help |
| 1221 | If you say yes here you get support for the Sensiron SHT10, SHT11, | 1222 | If you say yes here you get support for the Sensiron SHT10, SHT11, |
| 1222 | SHT15, SHT71, SHT75 humidity and temperature sensors. | 1223 | SHT15, SHT71, SHT75 humidity and temperature sensors. |
diff --git a/drivers/hwmon/tmp102.c b/drivers/hwmon/tmp102.c index 65482624ea2c..5289aa0980a8 100644 --- a/drivers/hwmon/tmp102.c +++ b/drivers/hwmon/tmp102.c | |||
| @@ -58,6 +58,7 @@ struct tmp102 { | |||
| 58 | u16 config_orig; | 58 | u16 config_orig; |
| 59 | unsigned long last_update; | 59 | unsigned long last_update; |
| 60 | int temp[3]; | 60 | int temp[3]; |
| 61 | bool first_time; | ||
| 61 | }; | 62 | }; |
| 62 | 63 | ||
| 63 | /* convert left adjusted 13-bit TMP102 register value to milliCelsius */ | 64 | /* convert left adjusted 13-bit TMP102 register value to milliCelsius */ |
| @@ -93,6 +94,7 @@ static struct tmp102 *tmp102_update_device(struct device *dev) | |||
| 93 | tmp102->temp[i] = tmp102_reg_to_mC(status); | 94 | tmp102->temp[i] = tmp102_reg_to_mC(status); |
| 94 | } | 95 | } |
| 95 | tmp102->last_update = jiffies; | 96 | tmp102->last_update = jiffies; |
| 97 | tmp102->first_time = false; | ||
| 96 | } | 98 | } |
| 97 | mutex_unlock(&tmp102->lock); | 99 | mutex_unlock(&tmp102->lock); |
| 98 | return tmp102; | 100 | return tmp102; |
| @@ -102,6 +104,12 @@ static int tmp102_read_temp(void *dev, int *temp) | |||
| 102 | { | 104 | { |
| 103 | struct tmp102 *tmp102 = tmp102_update_device(dev); | 105 | struct tmp102 *tmp102 = tmp102_update_device(dev); |
| 104 | 106 | ||
| 107 | /* Is it too early even to return a conversion? */ | ||
| 108 | if (tmp102->first_time) { | ||
| 109 | dev_dbg(dev, "%s: Conversion not ready yet..\n", __func__); | ||
| 110 | return -EAGAIN; | ||
| 111 | } | ||
| 112 | |||
| 105 | *temp = tmp102->temp[0]; | 113 | *temp = tmp102->temp[0]; |
| 106 | 114 | ||
| 107 | return 0; | 115 | return 0; |
| @@ -114,6 +122,10 @@ static ssize_t tmp102_show_temp(struct device *dev, | |||
| 114 | struct sensor_device_attribute *sda = to_sensor_dev_attr(attr); | 122 | struct sensor_device_attribute *sda = to_sensor_dev_attr(attr); |
| 115 | struct tmp102 *tmp102 = tmp102_update_device(dev); | 123 | struct tmp102 *tmp102 = tmp102_update_device(dev); |
| 116 | 124 | ||
| 125 | /* Is it too early even to return a read? */ | ||
| 126 | if (tmp102->first_time) | ||
| 127 | return -EAGAIN; | ||
| 128 | |||
| 117 | return sprintf(buf, "%d\n", tmp102->temp[sda->index]); | 129 | return sprintf(buf, "%d\n", tmp102->temp[sda->index]); |
| 118 | } | 130 | } |
| 119 | 131 | ||
| @@ -207,7 +219,9 @@ static int tmp102_probe(struct i2c_client *client, | |||
| 207 | status = -ENODEV; | 219 | status = -ENODEV; |
| 208 | goto fail_restore_config; | 220 | goto fail_restore_config; |
| 209 | } | 221 | } |
| 210 | tmp102->last_update = jiffies - HZ; | 222 | tmp102->last_update = jiffies; |
| 223 | /* Mark that we are not ready with data until conversion is complete */ | ||
| 224 | tmp102->first_time = true; | ||
| 211 | mutex_init(&tmp102->lock); | 225 | mutex_init(&tmp102->lock); |
| 212 | 226 | ||
| 213 | hwmon_dev = hwmon_device_register_with_groups(dev, client->name, | 227 | hwmon_dev = hwmon_device_register_with_groups(dev, client->name, |
