Lines Matching +full:timeout +full:- +full:minutes
1 // SPDX-License-Identifier: GPL-2.0-or-later
11 #include <linux/hwmon-sysfs.h>
61 minutes = 60 enumerator
102 struct fts_data *data = dev_get_drvdata(&client->dev); in fts_read_byte()
104 mutex_lock(&data->access_lock); in fts_read_byte()
106 dev_dbg(&client->dev, "page select - page: 0x%.02x\n", page); in fts_read_byte()
113 dev_dbg(&client->dev, "read - reg: 0x%.02x: val: 0x%.02x\n", reg, ret); in fts_read_byte()
116 mutex_unlock(&data->access_lock); in fts_read_byte()
125 struct fts_data *data = dev_get_drvdata(&client->dev); in fts_write_byte()
127 mutex_lock(&data->access_lock); in fts_write_byte()
129 dev_dbg(&client->dev, "page select - page: 0x%.02x\n", page); in fts_write_byte()
135 dev_dbg(&client->dev, in fts_write_byte()
136 "write - reg: 0x%.02x: val: 0x%.02x\n", reg, value); in fts_write_byte()
140 mutex_unlock(&data->access_lock); in fts_write_byte()
152 mutex_lock(&data->update_lock); in fts_update_device()
153 if (!time_after(jiffies, data->last_updated + 2 * HZ) && data->valid) in fts_update_device()
156 err = fts_read_byte(data->client, FTS_DEVICE_STATUS_REG); in fts_update_device()
160 data->valid = !!(err & 0x02); /* Data not ready yet */ in fts_update_device()
161 if (unlikely(!data->valid)) { in fts_update_device()
162 err = -EAGAIN; in fts_update_device()
166 err = fts_read_byte(data->client, FTS_FAN_PRESENT_REG); in fts_update_device()
169 data->fan_present = err; in fts_update_device()
171 err = fts_read_byte(data->client, FTS_FAN_EVENT_REG); in fts_update_device()
174 data->fan_alarm = err; in fts_update_device()
177 if (data->fan_present & BIT(i)) { in fts_update_device()
178 err = fts_read_byte(data->client, FTS_REG_FAN_INPUT(i)); in fts_update_device()
181 data->fan_input[i] = err; in fts_update_device()
183 err = fts_read_byte(data->client, in fts_update_device()
187 data->fan_source[i] = err; in fts_update_device()
189 data->fan_input[i] = 0; in fts_update_device()
190 data->fan_source[i] = 0; in fts_update_device()
194 err = fts_read_byte(data->client, FTS_SENSOR_EVENT_REG); in fts_update_device()
197 data->temp_alarm = err; in fts_update_device()
200 err = fts_read_byte(data->client, FTS_REG_TEMP_INPUT(i)); in fts_update_device()
203 data->temp_input[i] = err; in fts_update_device()
207 err = fts_read_byte(data->client, FTS_REG_VOLT(i)); in fts_update_device()
210 data->volt[i] = err; in fts_update_device()
212 data->last_updated = jiffies; in fts_update_device()
215 mutex_unlock(&data->update_lock); in fts_update_device()
227 if (data->resolution == resolution) in fts_wd_set_resolution()
230 ret = fts_read_byte(data->client, FTS_WATCHDOG_CONTROL); in fts_wd_set_resolution()
235 (resolution == minutes && (ret & BIT(1)) == 0)) { in fts_wd_set_resolution()
236 data->resolution = resolution; in fts_wd_set_resolution()
245 ret = fts_write_byte(data->client, FTS_WATCHDOG_CONTROL, ret); in fts_wd_set_resolution()
249 data->resolution = resolution; in fts_wd_set_resolution()
253 static int fts_wd_set_timeout(struct watchdog_device *wdd, unsigned int timeout) in fts_wd_set_timeout() argument
260 /* switch watchdog resolution to minutes if timeout does not fit in fts_wd_set_timeout()
263 if (timeout > 0xFF) { in fts_wd_set_timeout()
264 timeout = DIV_ROUND_UP(timeout, 60) * 60; in fts_wd_set_timeout()
265 resolution = minutes; in fts_wd_set_timeout()
272 wdd->timeout = timeout; in fts_wd_set_timeout()
280 return fts_write_byte(data->client, FTS_WATCHDOG_TIME_PRESET, in fts_wd_start()
281 wdd->timeout / (u8)data->resolution); in fts_wd_start()
289 return fts_write_byte(data->client, FTS_WATCHDOG_TIME_PRESET, 0); in fts_wd_stop()
306 int timeout, ret; in fts_watchdog_init() local
308 watchdog_set_drvdata(&data->wdd, data); in fts_watchdog_init()
310 timeout = fts_read_byte(data->client, FTS_WATCHDOG_TIME_PRESET); in fts_watchdog_init()
311 if (timeout < 0) in fts_watchdog_init()
312 return timeout; in fts_watchdog_init()
314 /* watchdog not running, set timeout to a default of 60 sec. */ in fts_watchdog_init()
315 if (timeout == 0) { in fts_watchdog_init()
319 data->wdd.timeout = 60; in fts_watchdog_init()
321 ret = fts_read_byte(data->client, FTS_WATCHDOG_CONTROL); in fts_watchdog_init()
325 data->resolution = ret & BIT(1) ? seconds : minutes; in fts_watchdog_init()
326 data->wdd.timeout = timeout * (u8)data->resolution; in fts_watchdog_init()
327 set_bit(WDOG_HW_RUNNING, &data->wdd.status); in fts_watchdog_init()
331 data->wdd.info = &fts_wd_info; in fts_watchdog_init()
332 data->wdd.ops = &fts_wd_ops; in fts_watchdog_init()
333 data->wdd.parent = &data->client->dev; in fts_watchdog_init()
334 data->wdd.min_timeout = 1; in fts_watchdog_init()
336 /* max timeout 255 minutes. */ in fts_watchdog_init()
337 data->wdd.max_hw_heartbeat_ms = 0xFF * 60 * MSEC_PER_SEC; in fts_watchdog_init()
339 return watchdog_register_device(&data->wdd); in fts_watchdog_init()
349 int index = to_sensor_dev_attr(devattr)->index; in in_value_show()
356 return sprintf(buf, "%u\n", data->volt[index]); in in_value_show()
363 int index = to_sensor_dev_attr(devattr)->index; in temp_value_show()
370 return sprintf(buf, "%u\n", data->temp_input[index]); in temp_value_show()
377 int index = to_sensor_dev_attr(devattr)->index; in temp_fault_show()
385 return sprintf(buf, "%d\n", data->temp_input[index] == 0); in temp_fault_show()
392 int index = to_sensor_dev_attr(devattr)->index; in temp_alarm_show()
399 return sprintf(buf, "%u\n", !!(data->temp_alarm & BIT(index))); in temp_alarm_show()
407 int index = to_sensor_dev_attr(devattr)->index; in temp_alarm_store()
415 return -EINVAL; in temp_alarm_store()
417 mutex_lock(&data->update_lock); in temp_alarm_store()
418 ret = fts_read_byte(data->client, FTS_REG_TEMP_CONTROL(index)); in temp_alarm_store()
422 ret = fts_write_byte(data->client, FTS_REG_TEMP_CONTROL(index), in temp_alarm_store()
427 data->valid = false; in temp_alarm_store()
430 mutex_unlock(&data->update_lock); in temp_alarm_store()
438 int index = to_sensor_dev_attr(devattr)->index; in fan_value_show()
445 return sprintf(buf, "%u\n", data->fan_input[index]); in fan_value_show()
452 int index = to_sensor_dev_attr(devattr)->index; in fan_source_show()
459 return sprintf(buf, "%u\n", data->fan_source[index]); in fan_source_show()
466 int index = to_sensor_dev_attr(devattr)->index; in fan_alarm_show()
473 return sprintf(buf, "%d\n", !!(data->fan_alarm & BIT(index))); in fan_alarm_show()
481 int index = to_sensor_dev_attr(devattr)->index; in fan_alarm_store()
489 return -EINVAL; in fan_alarm_store()
491 mutex_lock(&data->update_lock); in fan_alarm_store()
492 ret = fts_read_byte(data->client, FTS_REG_FAN_CONTROL(index)); in fan_alarm_store()
496 ret = fts_write_byte(data->client, FTS_REG_FAN_CONTROL(index), in fan_alarm_store()
501 data->valid = false; in fan_alarm_store()
504 mutex_unlock(&data->update_lock); in fan_alarm_store()
719 return -ENODEV; in fts_detect()
724 return -ENODEV; in fts_detect()
728 return -ENODEV; in fts_detect()
732 return -ENODEV; in fts_detect()
740 return -ENODEV; in fts_detect()
742 strlcpy(info->type, fts_id[0].name, I2C_NAME_SIZE); in fts_detect()
743 info->flags = 0; in fts_detect()
749 struct fts_data *data = dev_get_drvdata(&client->dev); in fts_remove()
751 watchdog_unregister_device(&data->wdd); in fts_remove()
763 if (client->addr != 0x73) in fts_probe()
764 return -ENODEV; in fts_probe()
773 dev_dbg(&client->dev, in fts_probe()
775 return -ENODEV; in fts_probe()
778 dev_dbg(&client->dev, "No fujitsu board\n"); in fts_probe()
779 return -ENODEV; in fts_probe()
782 data = devm_kzalloc(&client->dev, sizeof(struct fts_data), in fts_probe()
785 return -ENOMEM; in fts_probe()
787 mutex_init(&data->update_lock); in fts_probe()
788 mutex_init(&data->access_lock); in fts_probe()
789 data->client = client; in fts_probe()
790 dev_set_drvdata(&client->dev, data); in fts_probe()
797 hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev, in fts_probe()
808 dev_info(&client->dev, "Detected FTS Teutates chip, revision: %d.%d\n", in fts_probe()