diff options
author | Guenter Roeck <linux@roeck-us.net> | 2014-05-10 12:56:15 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2014-05-21 19:02:23 -0400 |
commit | a9622663e0406932612ffd44fde586e59df9de43 (patch) | |
tree | d015baaafef941443fea933e7933eb405447fe34 /Documentation/hwmon/hwmon-kernel-api.txt | |
parent | be7f5c4d48e05cb6753d17eb09bea3c38db2ec6f (diff) |
hwmon: Document hwmon kernel API
The hwmon subsystem has been around for a while. Time to document
its kernel API.
Acked-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'Documentation/hwmon/hwmon-kernel-api.txt')
-rw-r--r-- | Documentation/hwmon/hwmon-kernel-api.txt | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/Documentation/hwmon/hwmon-kernel-api.txt b/Documentation/hwmon/hwmon-kernel-api.txt new file mode 100644 index 000000000000..2ecdbfc85ecf --- /dev/null +++ b/Documentation/hwmon/hwmon-kernel-api.txt | |||
@@ -0,0 +1,107 @@ | |||
1 | The Linux Hardware Monitoring kernel API. | ||
2 | ========================================= | ||
3 | |||
4 | Guenter Roeck | ||
5 | |||
6 | Introduction | ||
7 | ------------ | ||
8 | |||
9 | This document describes the API that can be used by hardware monitoring | ||
10 | drivers that want to use the hardware monitoring framework. | ||
11 | |||
12 | This document does not describe what a hardware monitoring (hwmon) Driver or | ||
13 | Device is. It also does not describe the API which can be used by user space | ||
14 | to communicate with a hardware monitoring device. If you want to know this | ||
15 | then please read the following file: Documentation/hwmon/sysfs-interface. | ||
16 | |||
17 | For additional guidelines on how to write and improve hwmon drivers, please | ||
18 | also read Documentation/hwmon/submitting-patches. | ||
19 | |||
20 | The API | ||
21 | ------- | ||
22 | Each hardware monitoring driver must #include <linux/hwmon.h> and, in most | ||
23 | cases, <linux/hwmon-sysfs.h>. linux/hwmon.h declares the following | ||
24 | register/unregister functions: | ||
25 | |||
26 | struct device *hwmon_device_register(struct device *dev); | ||
27 | struct device * | ||
28 | hwmon_device_register_with_groups(struct device *dev, const char *name, | ||
29 | void *drvdata, | ||
30 | const struct attribute_group **groups); | ||
31 | |||
32 | struct device * | ||
33 | devm_hwmon_device_register_with_groups(struct device *dev, | ||
34 | const char *name, void *drvdata, | ||
35 | const struct attribute_group **groups); | ||
36 | |||
37 | void hwmon_device_unregister(struct device *dev); | ||
38 | void devm_hwmon_device_unregister(struct device *dev); | ||
39 | |||
40 | hwmon_device_register registers a hardware monitoring device. The parameter | ||
41 | of this function is a pointer to the parent device. | ||
42 | This function returns a pointer to the newly created hardware monitoring device | ||
43 | or PTR_ERR for failure. If this registration function is used, hardware | ||
44 | monitoring sysfs attributes are expected to have been created and attached to | ||
45 | the parent device prior to calling hwmon_device_register. A name attribute must | ||
46 | have been created by the caller. | ||
47 | |||
48 | hwmon_device_register_with_groups is similar to hwmon_device_register. However, | ||
49 | it has additional parameters. The name parameter is a pointer to the hwmon | ||
50 | device name. The registration function wil create a name sysfs attribute | ||
51 | pointing to this name. The drvdata parameter is the pointer to the local | ||
52 | driver data. hwmon_device_register_with_groups will attach this pointer | ||
53 | to the newly allocated hwmon device. The pointer can be retrieved by the driver | ||
54 | using dev_get_drvdata() on the hwmon device pointer. The groups parameter is | ||
55 | a pointer to a list of sysfs attribute groups. The list must be NULL terminated. | ||
56 | hwmon_device_register_with_groups creates the hwmon device with name attribute | ||
57 | as well as all sysfs attributes attached to the hwmon device. | ||
58 | |||
59 | devm_hwmon_device_register_with_groups is similar to | ||
60 | hwmon_device_register_with_groups. However, it is device managed, meaning the | ||
61 | hwmon device does not have to be removed explicitly by the removal function. | ||
62 | |||
63 | hwmon_device_unregister deregisters a registered hardware monitoring device. | ||
64 | The parameter of this function is the pointer to the registered hardware | ||
65 | monitoring device structure. This function must be called from the driver | ||
66 | remove function if the hardware monitoring device was registered with | ||
67 | hwmon_device_register or with hwmon_device_register_with_groups. | ||
68 | |||
69 | devm_hwmon_device_unregister does not normally have to be called. It is only | ||
70 | needed for error handling, and only needed if the driver probe fails after | ||
71 | the call to devm_hwmon_device_register_with_groups. | ||
72 | |||
73 | The header file linux/hwmon-sysfs.h provides a number of useful macros to | ||
74 | declare and use hardware monitoring sysfs attributes. | ||
75 | |||
76 | In many cases, you can use the exsting define DEVICE_ATTR to declare such | ||
77 | attributes. This is feasible if an attribute has no additional context. However, | ||
78 | in many cases there will be additional information such as a sensor index which | ||
79 | will need to be passed to the sysfs attribute handling function. | ||
80 | |||
81 | SENSOR_DEVICE_ATTR and SENSOR_DEVICE_ATTR_2 can be used to define attributes | ||
82 | which need such additional context information. SENSOR_DEVICE_ATTR requires | ||
83 | one additional argument, SENSOR_DEVICE_ATTR_2 requires two. | ||
84 | |||
85 | SENSOR_DEVICE_ATTR defines a struct sensor_device_attribute variable. | ||
86 | This structure has the following fields. | ||
87 | |||
88 | struct sensor_device_attribute { | ||
89 | struct device_attribute dev_attr; | ||
90 | int index; | ||
91 | }; | ||
92 | |||
93 | You can use to_sensor_dev_attr to get the pointer to this structure from the | ||
94 | attribute read or write function. Its parameter is the device to which the | ||
95 | attribute is attached. | ||
96 | |||
97 | SENSOR_DEVICE_ATTR_2 defines a struct sensor_device_attribute_2 variable, | ||
98 | which is defined as follows. | ||
99 | |||
100 | struct sensor_device_attribute_2 { | ||
101 | struct device_attribute dev_attr; | ||
102 | u8 index; | ||
103 | u8 nr; | ||
104 | }; | ||
105 | |||
106 | Use to_sensor_dev_attr_2 to get the pointer to this structure. Its parameter | ||
107 | is the device to which the attribute is attached. | ||