1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * hwmon-sysfs.h - hardware monitoring chip driver sysfs defines 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2005 Yani Ioannou <yani.ioannou@gmail.com> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun #ifndef _LINUX_HWMON_SYSFS_H 8*4882a593Smuzhiyun #define _LINUX_HWMON_SYSFS_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <linux/device.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun struct sensor_device_attribute{ 13*4882a593Smuzhiyun struct device_attribute dev_attr; 14*4882a593Smuzhiyun int index; 15*4882a593Smuzhiyun }; 16*4882a593Smuzhiyun #define to_sensor_dev_attr(_dev_attr) \ 17*4882a593Smuzhiyun container_of(_dev_attr, struct sensor_device_attribute, dev_attr) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define SENSOR_ATTR(_name, _mode, _show, _store, _index) \ 20*4882a593Smuzhiyun { .dev_attr = __ATTR(_name, _mode, _show, _store), \ 21*4882a593Smuzhiyun .index = _index } 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #define SENSOR_ATTR_RO(_name, _func, _index) \ 24*4882a593Smuzhiyun SENSOR_ATTR(_name, 0444, _func##_show, NULL, _index) 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define SENSOR_ATTR_RW(_name, _func, _index) \ 27*4882a593Smuzhiyun SENSOR_ATTR(_name, 0644, _func##_show, _func##_store, _index) 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define SENSOR_ATTR_WO(_name, _func, _index) \ 30*4882a593Smuzhiyun SENSOR_ATTR(_name, 0200, NULL, _func##_store, _index) 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #define SENSOR_DEVICE_ATTR(_name, _mode, _show, _store, _index) \ 33*4882a593Smuzhiyun struct sensor_device_attribute sensor_dev_attr_##_name \ 34*4882a593Smuzhiyun = SENSOR_ATTR(_name, _mode, _show, _store, _index) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define SENSOR_DEVICE_ATTR_RO(_name, _func, _index) \ 37*4882a593Smuzhiyun SENSOR_DEVICE_ATTR(_name, 0444, _func##_show, NULL, _index) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #define SENSOR_DEVICE_ATTR_RW(_name, _func, _index) \ 40*4882a593Smuzhiyun SENSOR_DEVICE_ATTR(_name, 0644, _func##_show, _func##_store, _index) 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #define SENSOR_DEVICE_ATTR_WO(_name, _func, _index) \ 43*4882a593Smuzhiyun SENSOR_DEVICE_ATTR(_name, 0200, NULL, _func##_store, _index) 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun struct sensor_device_attribute_2 { 46*4882a593Smuzhiyun struct device_attribute dev_attr; 47*4882a593Smuzhiyun u8 index; 48*4882a593Smuzhiyun u8 nr; 49*4882a593Smuzhiyun }; 50*4882a593Smuzhiyun #define to_sensor_dev_attr_2(_dev_attr) \ 51*4882a593Smuzhiyun container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr) 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define SENSOR_ATTR_2(_name, _mode, _show, _store, _nr, _index) \ 54*4882a593Smuzhiyun { .dev_attr = __ATTR(_name, _mode, _show, _store), \ 55*4882a593Smuzhiyun .index = _index, \ 56*4882a593Smuzhiyun .nr = _nr } 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #define SENSOR_ATTR_2_RO(_name, _func, _nr, _index) \ 59*4882a593Smuzhiyun SENSOR_ATTR_2(_name, 0444, _func##_show, NULL, _nr, _index) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun #define SENSOR_ATTR_2_RW(_name, _func, _nr, _index) \ 62*4882a593Smuzhiyun SENSOR_ATTR_2(_name, 0644, _func##_show, _func##_store, _nr, _index) 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun #define SENSOR_ATTR_2_WO(_name, _func, _nr, _index) \ 65*4882a593Smuzhiyun SENSOR_ATTR_2(_name, 0200, NULL, _func##_store, _nr, _index) 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #define SENSOR_DEVICE_ATTR_2(_name,_mode,_show,_store,_nr,_index) \ 68*4882a593Smuzhiyun struct sensor_device_attribute_2 sensor_dev_attr_##_name \ 69*4882a593Smuzhiyun = SENSOR_ATTR_2(_name, _mode, _show, _store, _nr, _index) 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun #define SENSOR_DEVICE_ATTR_2_RO(_name, _func, _nr, _index) \ 72*4882a593Smuzhiyun SENSOR_DEVICE_ATTR_2(_name, 0444, _func##_show, NULL, \ 73*4882a593Smuzhiyun _nr, _index) 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun #define SENSOR_DEVICE_ATTR_2_RW(_name, _func, _nr, _index) \ 76*4882a593Smuzhiyun SENSOR_DEVICE_ATTR_2(_name, 0644, _func##_show, _func##_store, \ 77*4882a593Smuzhiyun _nr, _index) 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #define SENSOR_DEVICE_ATTR_2_WO(_name, _func, _nr, _index) \ 80*4882a593Smuzhiyun SENSOR_DEVICE_ATTR_2(_name, 0200, NULL, _func##_store, \ 81*4882a593Smuzhiyun _nr, _index) 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #endif /* _LINUX_HWMON_SYSFS_H */ 84