• Home
  • Raw
  • Download

Lines Matching +full:attr +full:- +full:max +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) ST-Ericsson 2010 - 2013
19 #include <linux/hwmon-sysfs.h>
37 data->work_active = true; in schedule_monitor()
38 schedule_delayed_work(&data->work, DEFAULT_MONITOR_DELAY); in schedule_monitor()
44 for (i = 0; i < data->monitored_sensors; i++) in threshold_updated()
45 if (data->max[i] != 0 || data->min[i] != 0) { in threshold_updated()
50 dev_dbg(&data->pdev->dev, "No active thresholds.\n"); in threshold_updated()
51 cancel_delayed_work_sync(&data->work); in threshold_updated()
52 data->work_active = false; in threshold_updated()
63 mutex_lock(&data->lock); in gpadc_monitor()
65 for (i = 0; i < data->monitored_sensors; i++) { in gpadc_monitor()
67 if (data->max[i] == 0 && data->min[i] == 0) in gpadc_monitor()
70 if (data->max[i] < data->min[i]) in gpadc_monitor()
73 ret = data->ops.read_sensor(data, data->gpadc_addr[i], &temp); in gpadc_monitor()
75 dev_err(&data->pdev->dev, "GPADC read failed\n"); in gpadc_monitor()
82 if (data->min[i] != 0) { in gpadc_monitor()
83 if (temp < data->min[i]) { in gpadc_monitor()
84 if (data->min_alarm[i] == false) { in gpadc_monitor()
85 data->min_alarm[i] = true; in gpadc_monitor()
89 if (data->min_alarm[i] == true) { in gpadc_monitor()
90 data->min_alarm[i] = false; in gpadc_monitor()
95 if (data->max[i] != 0) { in gpadc_monitor()
96 if (temp > data->max[i]) { in gpadc_monitor()
97 if (data->max_alarm[i] == false) { in gpadc_monitor()
98 data->max_alarm[i] = true; in gpadc_monitor()
101 } else if (temp < data->max[i] - data->max_hyst[i]) { in gpadc_monitor()
102 if (data->max_alarm[i] == true) { in gpadc_monitor()
103 data->max_alarm[i] = false; in gpadc_monitor()
111 sysfs_notify(&data->pdev->dev.kobj, NULL, alarm_node); in gpadc_monitor()
115 sysfs_notify(&data->pdev->dev.kobj, NULL, alarm_node); in gpadc_monitor()
120 mutex_unlock(&data->lock); in gpadc_monitor()
128 /* Show chip name */ in name_show()
129 return data->ops.show_name(dev, devattr, buf); in name_show()
137 return data->ops.show_label(dev, devattr, buf); in label_show()
145 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); in input_show() local
146 u8 gpadc_addr = data->gpadc_addr[attr->index]; in input_show()
148 ret = data->ops.read_sensor(data, gpadc_addr, &temp); in input_show()
161 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); in min_store() local
168 mutex_lock(&data->lock); in min_store()
169 data->min[attr->index] = val; in min_store()
171 mutex_unlock(&data->lock); in min_store()
181 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); in max_store() local
188 mutex_lock(&data->lock); in max_store()
189 data->max[attr->index] = val; in max_store()
191 mutex_unlock(&data->lock); in max_store()
202 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); in max_hyst_store() local
209 mutex_lock(&data->lock); in max_hyst_store()
210 data->max_hyst[attr->index] = val; in max_hyst_store()
212 mutex_unlock(&data->lock); in max_hyst_store()
222 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); in min_show() local
224 return sprintf(buf, "%lu\n", data->min[attr->index]); in min_show()
231 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); in max_show() local
233 return sprintf(buf, "%lu\n", data->max[attr->index]); in max_show()
240 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); in max_hyst_show() local
242 return sprintf(buf, "%lu\n", data->max_hyst[attr->index]); in max_hyst_show()
249 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); in min_alarm_show() local
251 return sprintf(buf, "%d\n", data->min_alarm[attr->index]); in min_alarm_show()
258 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); in max_alarm_show() local
260 return sprintf(buf, "%d\n", data->max_alarm[attr->index]); in max_alarm_show()
264 struct attribute *attr, int n) in abx500_attrs_visible() argument
269 if (data->ops.is_visible) in abx500_attrs_visible()
270 return data->ops.is_visible(attr, n); in abx500_attrs_visible()
272 return attr->mode; in abx500_attrs_visible()
275 /* Chip name, required by hwmon */
276 static SENSOR_DEVICE_ATTR_RO(name, name, 0);
278 /* GPADC - SENSOR1 */
282 static SENSOR_DEVICE_ATTR_RW(temp1_max, max, 0);
287 /* GPADC - SENSOR2 */
291 static SENSOR_DEVICE_ATTR_RW(temp2_max, max, 1);
296 /* GPADC - SENSOR3 */
300 static SENSOR_DEVICE_ATTR_RW(temp3_max, max, 2);
305 /* GPADC - SENSOR4 */
309 static SENSOR_DEVICE_ATTR_RW(temp4_max, max, 3);
315 &sensor_dev_attr_name.dev_attr.attr,
317 &sensor_dev_attr_temp1_label.dev_attr.attr,
318 &sensor_dev_attr_temp1_input.dev_attr.attr,
319 &sensor_dev_attr_temp1_min.dev_attr.attr,
320 &sensor_dev_attr_temp1_max.dev_attr.attr,
321 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr,
322 &sensor_dev_attr_temp1_min_alarm.dev_attr.attr,
323 &sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
325 &sensor_dev_attr_temp2_label.dev_attr.attr,
326 &sensor_dev_attr_temp2_input.dev_attr.attr,
327 &sensor_dev_attr_temp2_min.dev_attr.attr,
328 &sensor_dev_attr_temp2_max.dev_attr.attr,
329 &sensor_dev_attr_temp2_max_hyst.dev_attr.attr,
330 &sensor_dev_attr_temp2_min_alarm.dev_attr.attr,
331 &sensor_dev_attr_temp2_max_alarm.dev_attr.attr,
333 &sensor_dev_attr_temp3_label.dev_attr.attr,
334 &sensor_dev_attr_temp3_input.dev_attr.attr,
335 &sensor_dev_attr_temp3_min.dev_attr.attr,
336 &sensor_dev_attr_temp3_max.dev_attr.attr,
337 &sensor_dev_attr_temp3_max_hyst.dev_attr.attr,
338 &sensor_dev_attr_temp3_min_alarm.dev_attr.attr,
339 &sensor_dev_attr_temp3_max_alarm.dev_attr.attr,
341 &sensor_dev_attr_temp4_label.dev_attr.attr,
342 &sensor_dev_attr_temp4_input.dev_attr.attr,
343 &sensor_dev_attr_temp4_min.dev_attr.attr,
344 &sensor_dev_attr_temp4_max.dev_attr.attr,
345 &sensor_dev_attr_temp4_max_hyst.dev_attr.attr,
346 &sensor_dev_attr_temp4_min_alarm.dev_attr.attr,
347 &sensor_dev_attr_temp4_max_alarm.dev_attr.attr,
361 data->ops.irq_handler(irq, data); in abx500_temp_irq_handler()
371 dev_err(&pdev->dev, "Get irq by name failed\n"); in setup_irqs()
375 ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, in setup_irqs()
376 abx500_temp_irq_handler, 0, "abx500-temp", pdev); in setup_irqs()
378 dev_err(&pdev->dev, "Request threaded irq failed (%d)\n", ret); in setup_irqs()
388 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); in abx500_temp_probe()
390 return -ENOMEM; in abx500_temp_probe()
392 data->pdev = pdev; in abx500_temp_probe()
393 mutex_init(&data->lock); in abx500_temp_probe()
397 if (err < 0 || !data->ops.read_sensor || !data->ops.show_name || in abx500_temp_probe()
398 !data->ops.show_label) in abx500_temp_probe()
401 INIT_DEFERRABLE_WORK(&data->work, gpadc_monitor); in abx500_temp_probe()
405 err = sysfs_create_group(&pdev->dev.kobj, &abx500_temp_group); in abx500_temp_probe()
407 dev_err(&pdev->dev, "Create sysfs group failed (%d)\n", err); in abx500_temp_probe()
411 data->hwmon_dev = hwmon_device_register(&pdev->dev); in abx500_temp_probe()
412 if (IS_ERR(data->hwmon_dev)) { in abx500_temp_probe()
413 err = PTR_ERR(data->hwmon_dev); in abx500_temp_probe()
414 dev_err(&pdev->dev, "Class registration failed (%d)\n", err); in abx500_temp_probe()
418 if (data->ops.irq_handler) { in abx500_temp_probe()
426 hwmon_device_unregister(data->hwmon_dev); in abx500_temp_probe()
428 sysfs_remove_group(&pdev->dev.kobj, &abx500_temp_group); in abx500_temp_probe()
436 cancel_delayed_work_sync(&data->work); in abx500_temp_remove()
437 hwmon_device_unregister(data->hwmon_dev); in abx500_temp_remove()
438 sysfs_remove_group(&pdev->dev.kobj, &abx500_temp_group); in abx500_temp_remove()
448 if (data->work_active) in abx500_temp_suspend()
449 cancel_delayed_work_sync(&data->work); in abx500_temp_suspend()
458 if (data->work_active) in abx500_temp_resume()
466 { .compatible = "stericsson,abx500-temp" },
474 .name = "abx500-temp",