hwmon: Versatile Express hwmon driver
PATCH v4 1/1 hwmon: Versatile Express hwmon driver
From: Pawel Moll <[email protected]>
hwmon framework driver for Versatile Express sensors, providing information about board level voltage (only when regulator driver is not configured), currents, temperature and power/energy usage. Labels for the values can be defined as DT properties.
--- .../devicetree/bindings/hwmon/vexpress.txt | 23 ++ Documentation/hwmon/vexpress | 34 +++ drivers/hwmon/Kconfig | 8 + drivers/hwmon/Makefile | 1 + drivers/hwmon/vexpress.c | 229 ++++++++++++++++++++ 5 files changed, 295 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/vexpress.txt create mode 100644 Documentation/hwmon/vexpress create mode 100644 drivers/hwmon/vexpress.c
Documentation/devicetree/bindings/hwmon/vexpress.txt new file +23 -0
@@ -0,0 +1,23 @@ +Versatile Express hwmon sensors +------------------------------- + +Requires node properties: +- "compatible" value : one of + "arm,vexpress-volt" + "arm,vexpress-amp" + "arm,vexpress-temp" + "arm,vexpress-power" + "arm,vexpress-energy" +- "arm,vexpress-sysreg,func" when controlled via vexpress-sysreg + (see Documentation/devicetree/bindings/arm/vexpress-sysreg.txt + for more details) + +Optional node properties: +- label : string describing the monitored value + +Example: + energy at 0 { + compatible = "arm,vexpress-energy"; + arm,vexpress-sysreg,func = <13 0>; + label = "A15 Jcore"; + };
Documentation/hwmon/vexpress new file +34 -0
@@ -0,0 +1,34 @@ +Kernel driver vexpress +====================== + +Supported systems: + * ARM Ltd. Versatile Express platform + Prefix: 'vexpress' + Datasheets: + * "Hardware Description" sections of the Technical Reference Manuals + for the Versatile Express boards: + http://infocenter.arm.com/help/topic/com.arm.doc.subset.boards.express/index.html + * Section "4.4.14. System Configuration registers" of the V2M-P1 TRM: + http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0447-/index.html + +Author: Pawel Moll + +Description +----------- + +Versatile Express platform (http://www.arm.com/versatileexpress/) is a +reference & prototyping system for ARM Ltd. processors. It can be set up +from a wide range of boards, each of them containing (apart of the main +chip/FPGA) a number of microcontrollers responsible for platform +configuration and control. Theses microcontrollers can also monitor the +board and its environment by a number of internal and external sensors, +providing information about power lines voltages and currents, board +temperature and power usage. Some of them also calculate consumed energy +and provide a cumulative use counter. + +The configuration devices are _not_ memory mapped and must be accessed +via a custom interface, abstracted by the "vexpress_config" API. + +As these devices are non-discoverable, they must be described in a Device +Tree passed to the kernel. Details of the DT binding for them can be found +in Documentation/devicetree/bindings/hwmon/vexpress.txt.
drivers/hwmon/Kconfig +8 -0
@@ -1187,6 +1187,14 @@ config SENSORS_TWL4030_MADC This driver can also be built as a module. If so it will be called twl4030-madc-hwmon. +config SENSORS_VEXPRESS + tristate "Versatile Express" + depends on VEXPRESS_CONFIG + help + This driver provides support for hardware sensors available on + the ARM Ltd's Versatile Express platform. It can provide wide + range of information like temperature, power, energy. + config SENSORS_VIA_CPUTEMP tristate "VIA CPU temperature sensor" depends on X86
drivers/hwmon/Makefile +1 -0
@@ -120,6 +120,7 @@ obj-$(CONFIG_SENSORS_TMP102) += tmp102.o obj-$(CONFIG_SENSORS_TMP401) += tmp401.o obj-$(CONFIG_SENSORS_TMP421) += tmp421.o obj-$(CONFIG_SENSORS_TWL4030_MADC)+= twl4030-madc-hwmon.o +obj-$(CONFIG_SENSORS_VEXPRESS) += vexpress.o obj-$(CONFIG_SENSORS_VIA_CPUTEMP)+= via-cputemp.o obj-$(CONFIG_SENSORS_VIA686A) += via686a.o obj-$(CONFIG_SENSORS_VT1211) += vt1211.o
drivers/hwmon/vexpress.c new file +229 -0
229 lines not on this page · raw message
Signature · 1 line
1.7.9.5
Guenter Roeck
maintainerPATCH v4 1/1 hwmon: Versatile Express hwmon driver
Quoted 19 lines · Pawel Moll
From: Pawel Moll <[email protected]>
hwmon framework driver for Versatile Express sensors, providing information about board level voltage (only when regulator driver is not configured), currents, temperature and power/energy usage. Labels for the values can be defined as DT properties.
Signed-off-by Pawel Moll <[email protected]>--- .../devicetree/bindings/hwmon/vexpress.txt | 23 ++ Documentation/hwmon/vexpress | 34 +++ drivers/hwmon/Kconfig | 8 + drivers/hwmon/Makefile | 1 + drivers/hwmon/vexpress.c | 229 ++++++++++++++++++++ 5 files changed, 295 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/vexpress.txt create mode 100644 Documentation/hwmon/vexpress create mode 100644 drivers/hwmon/vexpress.c
[ ... ]
drivers/hwmon/vexpress.c line 183
Quoted 4 lines
drivers/hwmon/vexpress.c new file +4
-0+ + err =sysfs_create_group (&pdev->dev.kobj, match->data); +if (err) + goto error;
You'll need a second label for that. Since the group was not created, you can not delete it.
Quoted 50 lines
drivers/hwmon/vexpress.c new file +46
-0+ + data->hwmon_dev =hwmon_device_register (&pdev->dev); +if (IS_ERR (data->hwmon_dev)) { + err =PTR_ERR (data->hwmon_dev); + goto error; + } + +return 0 ; + +error: +sysfs_remove_group (&pdev->dev.kobj, match->data); +vexpress_config_func_put (data->func); +return err; +} + +static int __devexit vexpress_hwmon_remove(struct platform_device *pdev) +{ +struct vexpress_hwmon_data *data =platform_get_drvdata (pdev); +const struct of_device_id *match; + +hwmon_device_unregister (data->hwmon_dev); + + match =of_match_device (vexpress_hwmon_of_match, &pdev->dev); +sysfs_remove_group (&pdev->dev.kobj, match->data); + +vexpress_config_func_put (data->func); + +return 0 ; +} + +static struct platform_driver vexpress_hwmon_driver = { + .probe = vexpress_hwmon_probe, + .remove =__devexit_p (vexpress_hwmon_remove), + .driver = { + .name =DRVNAME , + .owner =THIS_MODULE , + .of_match_table = vexpress_hwmon_of_match, + }, +}; + +module_platform_driver (vexpress_hwmon_driver); + +MODULE_AUTHOR ("Pawel Moll <[email protected]>" ); +MODULE_DESCRIPTION ("Versatile Express hwmon sensors driver" ); +MODULE_LICENSE ("GPL" ); +MODULE_ALIAS ("platform:vexpress-hwmon" );Signature · 1 line
1.7.9.5
PATCH v4 1/1 hwmon: Versatile Express hwmon driver
Quoted 22 lines · Guenter Roeck
Quoted 19 lines · Pawel Moll
From: Pawel Moll <[email protected]>
hwmon framework driver for Versatile Express sensors, providing information about board level voltage (only when regulator driver is not configured), currents, temperature and power/energy usage. Labels for the values can be defined as DT properties.
Signed-off-by Pawel Moll <[email protected]>--- .../devicetree/bindings/hwmon/vexpress.txt | 23 ++ Documentation/hwmon/vexpress | 34 +++ drivers/hwmon/Kconfig | 8 + drivers/hwmon/Makefile | 1 + drivers/hwmon/vexpress.c | 229 ++++++++++++++++++++ 5 files changed, 295 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/vexpress.txt create mode 100644 Documentation/hwmon/vexpress create mode 100644 drivers/hwmon/vexpress.c[ ... ]
Quoted 7 lines
drivers/hwmon/vexpress.c line 183
Quoted 4 lines
drivers/hwmon/vexpress.c new file +4
-0+ + err =sysfs_create_group (&pdev->dev.kobj, match->data); +if (err) + goto error;You'll need a second label for that. Since the group was not created, you can not delete it.
Actually I think I can... The sysfs_remove_group() effectively is a wrapper for sysfs_hash_and_remove() which acts like "rm -f" - does nothing if the file doesn't exist. Even drivers/hwmon/lm83.c (which, by pure coincidence, I was looking at when re-working this driver) does that in exit_remove_files...
Anyway, it's nothing to argue about, so I'll change it and send (hopefully ;-) final version in a jiffy.
Thanks!
Pawe?
PATCH v4 1/1 hwmon: Versatile Express hwmon driver
Quoted 10 lines · Pawel Moll
Quoted 8 lines · Guenter Roeck
drivers/hwmon/vexpress.c line 183
Quoted 4 lines · Pawel Moll
drivers/hwmon/vexpress.c new file +4
-0+ + err =sysfs_create_group (&pdev->dev.kobj, match->data); +if (err) + goto error;You'll need a second label for that. Since the group was not created, you can not delete it.
Quoted 5 lines
Actually I think I can... The
sysfs_remove_group()effectively is a wrapper forsysfs_hash_and_remove()which acts like "rm -f" - does nothing if the file doesn't exist. Evendrivers/hwmon/lm83.c(which, by pure coincidence, I was looking at when re-working this driver) does that inexit_remove_files...
You are right, and many hwmon drivers do exactly that, to limit the number of labels. This is code which isn't executed when all is fine, so we don't care about performance. Plus, in many cases the file removals are unconditional in the remove function anyway.
Quoted 2 lines
Anyway, it's nothing to argue about, so I'll change it and send (hopefully ;-) final version in a jiffy.
You can keep the code as is too, if you prefer.
Signature · 1 line
Jean Delvare
Guenter Roeck
maintainerPATCH v4 1/1 hwmon: Versatile Express hwmon driver
Quoted 22 lines · Jean Delvare
Quoted 10 lines · Pawel Moll
Quoted 8 lines · Guenter Roeck
drivers/hwmon/vexpress.c line 183
Quoted 4 lines · Pawel Moll
drivers/hwmon/vexpress.c new file +4
-0+ + err =sysfs_create_group (&pdev->dev.kobj, match->data); +if (err) + goto error;You'll need a second label for that. Since the group was not created, you can not delete it.
Quoted 5 lines
Actually I think I can... The
sysfs_remove_group()effectively is a wrapper forsysfs_hash_and_remove()which acts like "rm -f" - does nothing if the file doesn't exist. Evendrivers/hwmon/lm83.c(which, by pure coincidence, I was looking at when re-working this driver) does that inexit_remove_files...You are right, and many hwmon drivers do exactly that, to limit the number of labels. This is code which isn't executed when all is fine, so we don't care about performance. Plus, in many cases the file removals are unconditional in the remove function anyway.
Quoted 5 lines
Quoted 2 lines
Anyway, it's nothing to argue about, so I'll change it and send (hopefully ;-) final version in a jiffy.
You can keep the code as is too, if you prefer.
Ok with me. I was concerned it might hit the WARN, but looke like that won't happen.
Guenter
Guenter Roeck
maintainerPATCH v4 1/1 hwmon: Versatile Express hwmon driver
In reply to Pawel MollQuoted 8 lines · Pawel Moll
From: Pawel Moll <[email protected]>
hwmon framework driver for Versatile Express sensors, providing information about board level voltage (only when regulator driver is not configured), currents, temperature and power/energy usage. Labels for the values can be defined as DT properties.
Signed-off-by Pawel Moll <[email protected]>
After my concern was clarified ...
I assume this will go upstream through the arm tree ?
Thanks,
Guenter
PATCH v4 1/1 hwmon: Versatile Express hwmon driver
Quoted 8 lines · Guenter Roeck
Quoted 7 lines · Pawel Moll
From: Pawel Moll <[email protected]>
hwmon framework driver for Versatile Express sensors, providing information about board level voltage (only when regulator driver is not configured), currents, temperature and power/energy usage. Labels for the values can be defined as DT properties.
Quoted 5 lines
Quoted 1 line
Signed-off-by Pawel Moll <[email protected]>After my concern was clarified ...
Acked-by Guenter Roeck <[email protected]>
Thanks a lot!
Quoted 1 line
I assume this will go upstream through the arm tree ?
I was planning to push the subsystem patches (hwmon, regulator etc.) through respective maintainers, so through your tree - the driver depends on VEXPRESS_CONFIG so won't cause any build issues before the infrastructure is in place. Of course if you'd rather see it go through arm-soc, I'll add it to that branch. Just let me know what is your preference.
Cheers!
Pawel
Guenter Roeck
maintainerPATCH v4 1/1 hwmon: Versatile Express hwmon driver
Quoted 17 lines · Pawel Moll
Quoted 8 lines · Guenter Roeck
Quoted 7 lines · Pawel Moll
From: Pawel Moll <[email protected]>
hwmon framework driver for Versatile Express sensors, providing information about board level voltage (only when regulator driver is not configured), currents, temperature and power/energy usage. Labels for the values can be defined as DT properties.
Quoted 5 lines
Quoted 1 line
Signed-off-by Pawel Moll <[email protected]>After my concern was clarified ...
Acked-by Guenter Roeck <[email protected]>Thanks a lot!
Quoted 9 lines
Quoted 1 line
I assume this will go upstream through the arm tree ?
I was planning to push the subsystem patches (hwmon, regulator etc.) through respective maintainers, so through your tree - the driver depends on
VEXPRESS_CONFIGso won't cause any build issues before the infrastructure is in place. Of course if you'd rather see it go through arm-soc, I'll add it to that branch. Just let me know what is your preference.
Since the driver can not be built w/o the rest of the infrastructure, I think it should be pushed through a tree where it can. This way we also make sure that it is in sync with its infrastructure, and avoid bad surprises late in the game.
Thanks,
Guenter
PATCH v4 1/1 hwmon: Versatile Express hwmon driver
Quoted 11 lines · Guenter Roeck
Quoted 7 lines
I was planning to push the subsystem patches (hwmon, regulator etc.) through respective maintainers, so through your tree - the driver depends on
VEXPRESS_CONFIGso won't cause any build issues before the infrastructure is in place. Of course if you'd rather see it go through arm-soc, I'll add it to that branch. Just let me know what is your preference.Since the driver can not be built w/o the rest of the infrastructure, I think it should be pushed through a tree where it can. This way we also make sure that it is in sync with its infrastructure, and avoid bad surprises late in the game.
No problem, thanks again for your time!
Pawe?