Skip to contentSkip to conversation

hwmon: Versatile Express hwmon driver

PATCH New Pawel Moll 4 participants 9 messages Sep 21, 2012 – Sep 24, 2012

Subsystems (4)
lore
Share & tools
lore

Pawel Moll

author
#0 lore raw

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
new file mode 100644
index 0000000..9c27ed6
@@ -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
new file mode 100644
index 0000000..557d6d5
@@ -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
index b0a2e4c..7359a07 100644
@@ -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
index 7aa9811..e719a7d 100644
@@ -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
maintainer
#1 lore raw

PATCH 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.

---
 .../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
#2 lore raw

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.

---
 .../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?

#3 lore raw

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 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...

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
maintainer
#4 lore raw

PATCH 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 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...

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

maintainer
#5 lore raw

PATCH v4 1/1 hwmon: Versatile Express hwmon driver

In reply to Pawel Moll
Quoted 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.

After my concern was clarified ...

I assume this will go upstream through the arm tree ?

Thanks,
Guenter

#6 lore raw

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

After my concern was clarified ...

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

maintainer
#7 lore raw

PATCH 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

After my concern was clarified ...

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_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.

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

#8 lore raw

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_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.

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?