* [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values.
@ 2011-11-04 6:50 MyungJoo Ham
2011-11-04 6:50 ` [RFC PATCH 1/2] HWMON: add interfaces to read/write hwmon values inside kernel MyungJoo Ham
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: MyungJoo Ham @ 2011-11-04 6:50 UTC (permalink / raw)
To: lm-sensors
Cc: linux-kernel, Jean Delvare, Guenter Roeck, dg77.kim,
kyungmin.park, myungjoo.ham
We have been reading hwmon values (TMU, the SoC-core temperature sensor,
and NTC, the ambient or battery surface temperature sensor) for
Charger-Manager. However, because hwmon does not have in-kernel interface,
we have been using undesired method, including "../../../fs/*.h".
This patch is to provide in-kernel interface for hwmon:
hwmon_get_value and hwmon_set_value. In order to use these two functions,
the hwmon driver should provide its sysfs attributes to hwmon framework
as well. If the hwmon driver does not provide (by providing NULL), the users
of the hwmon won't be able to use hwmon_get/set_value();
The sysfs attribute (struct attribuyte_group *) is provided with
hwmon_device_register; adding the second parameter to hwmon_device_register().
The 2/2 patch shows the changes in device drivers due to this.
Among the HWMON device, all but ntc_thermistor.c does not setup attribute_group
for HWMON; thus they do not support hwmon_get/set_value with this patch.
As soon as the server synchronizes git repositories, you can see how
hwmon_get_value() is used at:
http://git.infradead.org/users/kmpark/linux-2.6-samsung/shortlog/refs/heads/charger-manager
MyungJoo Ham (2):
HWMON: add interfaces to read/write hwmon values inside kernel
HWMON: adapt to the HWMON interface changes
drivers/char/i8k.c | 2 +-
drivers/gpu/drm/nouveau/nouveau_pm.c | 2 +-
drivers/gpu/drm/radeon/radeon_pm.c | 2 +-
drivers/hwmon/abituguru.c | 2 +-
drivers/hwmon/abituguru3.c | 2 +-
drivers/hwmon/acpi_power_meter.c | 2 +-
drivers/hwmon/ad7414.c | 2 +-
drivers/hwmon/ad7418.c | 2 +-
drivers/hwmon/adcxx.c | 2 +-
drivers/hwmon/adm1021.c | 2 +-
drivers/hwmon/adm1025.c | 2 +-
drivers/hwmon/adm1026.c | 2 +-
drivers/hwmon/adm1029.c | 2 +-
drivers/hwmon/adm1031.c | 2 +-
drivers/hwmon/adm9240.c | 2 +-
drivers/hwmon/ads1015.c | 2 +-
drivers/hwmon/ads7828.c | 2 +-
drivers/hwmon/ads7871.c | 2 +-
drivers/hwmon/adt7411.c | 2 +-
drivers/hwmon/adt7462.c | 2 +-
drivers/hwmon/adt7470.c | 2 +-
drivers/hwmon/adt7475.c | 2 +-
drivers/hwmon/amc6821.c | 2 +-
drivers/hwmon/applesmc.c | 2 +-
drivers/hwmon/asb100.c | 2 +-
drivers/hwmon/asc7621.c | 2 +-
drivers/hwmon/asus_atk0110.c | 2 +-
drivers/hwmon/atxp1.c | 2 +-
drivers/hwmon/coretemp.c | 2 +-
drivers/hwmon/dme1737.c | 4 +-
drivers/hwmon/ds1621.c | 2 +-
drivers/hwmon/ds620.c | 2 +-
drivers/hwmon/emc1403.c | 2 +-
drivers/hwmon/emc2103.c | 2 +-
drivers/hwmon/emc6w201.c | 2 +-
drivers/hwmon/f71805f.c | 2 +-
drivers/hwmon/f71882fg.c | 2 +-
drivers/hwmon/f75375s.c | 2 +-
drivers/hwmon/fam15h_power.c | 2 +-
drivers/hwmon/fschmd.c | 2 +-
drivers/hwmon/g760a.c | 2 +-
drivers/hwmon/gl518sm.c | 2 +-
drivers/hwmon/gl520sm.c | 2 +-
drivers/hwmon/gpio-fan.c | 2 +-
drivers/hwmon/hwmon.c | 108 +++++++++++++++++++++++++++++++++-
drivers/hwmon/i5k_amb.c | 2 +-
drivers/hwmon/ibmaem.c | 4 +-
drivers/hwmon/ibmpex.c | 2 +-
drivers/hwmon/it87.c | 2 +-
drivers/hwmon/jc42.c | 2 +-
drivers/hwmon/jz4740-hwmon.c | 2 +-
drivers/hwmon/k10temp.c | 2 +-
drivers/hwmon/k8temp.c | 2 +-
drivers/hwmon/lineage-pem.c | 2 +-
drivers/hwmon/lm63.c | 2 +-
drivers/hwmon/lm70.c | 2 +-
drivers/hwmon/lm73.c | 2 +-
drivers/hwmon/lm75.c | 2 +-
drivers/hwmon/lm77.c | 2 +-
drivers/hwmon/lm78.c | 4 +-
drivers/hwmon/lm80.c | 2 +-
drivers/hwmon/lm83.c | 2 +-
drivers/hwmon/lm85.c | 2 +-
drivers/hwmon/lm87.c | 2 +-
drivers/hwmon/lm90.c | 2 +-
drivers/hwmon/lm92.c | 2 +-
drivers/hwmon/lm93.c | 2 +-
drivers/hwmon/lm95241.c | 2 +-
drivers/hwmon/lm95245.c | 2 +-
drivers/hwmon/ltc4151.c | 2 +-
drivers/hwmon/ltc4215.c | 2 +-
drivers/hwmon/ltc4245.c | 2 +-
drivers/hwmon/ltc4261.c | 2 +-
drivers/hwmon/max1111.c | 2 +-
drivers/hwmon/max16065.c | 2 +-
drivers/hwmon/max1619.c | 2 +-
drivers/hwmon/max1668.c | 2 +-
drivers/hwmon/max6639.c | 2 +-
drivers/hwmon/max6642.c | 2 +-
drivers/hwmon/max6650.c | 2 +-
drivers/hwmon/mc13783-adc.c | 2 +-
drivers/hwmon/ntc_thermistor.c | 15 +----
drivers/hwmon/pc87360.c | 2 +-
drivers/hwmon/pc87427.c | 2 +-
drivers/hwmon/pcf8591.c | 2 +-
drivers/hwmon/pmbus/pmbus_core.c | 2 +-
drivers/hwmon/s3c-hwmon.c | 2 +-
drivers/hwmon/sch5627.c | 2 +-
drivers/hwmon/sch5636.c | 2 +-
drivers/hwmon/sht15.c | 2 +-
drivers/hwmon/sht21.c | 2 +-
drivers/hwmon/sis5595.c | 2 +-
drivers/hwmon/smm665.c | 2 +-
drivers/hwmon/smsc47b397.c | 2 +-
drivers/hwmon/smsc47m1.c | 2 +-
drivers/hwmon/smsc47m192.c | 2 +-
drivers/hwmon/thmc50.c | 2 +-
drivers/hwmon/tmp102.c | 2 +-
drivers/hwmon/tmp401.c | 2 +-
drivers/hwmon/tmp421.c | 2 +-
drivers/hwmon/twl4030-madc-hwmon.c | 2 +-
drivers/hwmon/ultra45_env.c | 2 +-
drivers/hwmon/via-cputemp.c | 2 +-
drivers/hwmon/via686a.c | 2 +-
drivers/hwmon/vt1211.c | 2 +-
drivers/hwmon/vt8231.c | 2 +-
drivers/hwmon/w83627ehf.c | 2 +-
drivers/hwmon/w83627hf.c | 2 +-
drivers/hwmon/w83781d.c | 4 +-
drivers/hwmon/w83791d.c | 2 +-
drivers/hwmon/w83792d.c | 2 +-
drivers/hwmon/w83793.c | 2 +-
drivers/hwmon/w83795.c | 2 +-
drivers/hwmon/w83l785ts.c | 2 +-
drivers/hwmon/w83l786ng.c | 2 +-
drivers/hwmon/wm831x-hwmon.c | 2 +-
drivers/hwmon/wm8350-hwmon.c | 2 +-
drivers/input/touchscreen/ads7846.c | 2 +-
drivers/platform/x86/asus-wmi.c | 2 +-
drivers/platform/x86/compal-laptop.c | 2 +-
drivers/platform/x86/eeepc-laptop.c | 2 +-
drivers/platform/x86/thinkpad_acpi.c | 2 +-
drivers/thermal/thermal_sys.c | 2 +-
include/linux/hwmon.h | 11 +++-
124 files changed, 245 insertions(+), 139 deletions(-)
--
1.7.4.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [RFC PATCH 1/2] HWMON: add interfaces to read/write hwmon values inside kernel
2011-11-04 6:50 [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values MyungJoo Ham
@ 2011-11-04 6:50 ` MyungJoo Ham
2011-11-04 6:50 ` [RFC PATCH 2/2] HWMON: adapt to the HWMON interface changes MyungJoo Ham
` (2 subsequent siblings)
3 siblings, 0 replies; 10+ messages in thread
From: MyungJoo Ham @ 2011-11-04 6:50 UTC (permalink / raw)
To: lm-sensors
Cc: linux-kernel, Jean Delvare, Guenter Roeck, dg77.kim,
kyungmin.park, myungjoo.ham
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/hwmon/hwmon.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++-
include/linux/hwmon.h | 11 +++++-
2 files changed, 117 insertions(+), 2 deletions(-)
diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
index a61e781..1ea6736c 100644
--- a/drivers/hwmon/hwmon.c
+++ b/drivers/hwmon/hwmon.c
@@ -33,13 +33,20 @@ static DEFINE_SPINLOCK(idr_lock);
/**
* hwmon_device_register - register w/ hwmon
* @dev: the device to register
+ * @attrs: the sysfs attribute group managed by hwmon for the hwmon device.
*
* hwmon_device_unregister() must be called when the device is no
* longer needed.
*
* Returns the pointer to the new device.
+ *
+ * If attrs is not null, it is used to call sysfs_create_group()
+ * for dev->kobj. And then sysfs_remove_group() is called with
+ * hwmon_device_unregister().
+ *
*/
-struct device *hwmon_device_register(struct device *dev)
+struct device *hwmon_device_register(struct device *dev,
+ struct attribute_group *attrs)
{
struct device *hwdev;
int id, err;
@@ -65,8 +72,17 @@ again:
spin_lock(&idr_lock);
idr_remove(&hwmon_idr, id);
spin_unlock(&idr_lock);
+ goto out;
}
+ if (attrs) {
+ err = sysfs_create_group(&dev->kobj, attrs);
+ if (err)
+ return ERR_PTR(err);
+ }
+
+ dev_set_drvdata(hwdev, attrs);
+out:
return hwdev;
}
@@ -78,6 +94,10 @@ again:
void hwmon_device_unregister(struct device *dev)
{
int id;
+ struct attribute_group *attrs = dev_get_drvdata(dev);
+
+ if (attrs)
+ sysfs_remove_group(&dev->parent->kobj, attrs);
if (likely(sscanf(dev_name(dev), HWMON_ID_FORMAT, &id) == 1)) {
device_unregister(dev);
@@ -89,6 +109,92 @@ void hwmon_device_unregister(struct device *dev)
"hwmon_device_unregister() failed: bad class ID!\n");
}
+static int hwmon_access_value(struct device *hwmon_dev, const char *name,
+ char *buf, int bufsize, bool write)
+{
+ struct attribute_group *attrs;
+ struct device_attribute *attr;
+ int i, err = 0;
+
+ get_device(hwmon_dev);
+
+ attrs = dev_get_drvdata(hwmon_dev);
+ if (!attrs)
+ goto out;
+ for (i = 0; attrs->attrs[i]; i++) {
+ attr = container_of(attrs->attrs[i], struct device_attribute,
+ attr);
+ if (!strcmp(attrs->attrs[i]->name, name))
+ goto found;
+ }
+ err = -EINVAL;
+ goto out;
+
+found:
+ if (write) {
+ if (!attr->store) {
+ err = -EINVAL;
+ goto out;
+ }
+ err = attr->store(hwmon_dev->parent, attr, buf, bufsize);
+ } else {
+ if (!attr->show) {
+ err = -EINVAL;
+ goto out;
+ }
+ err = attr->show(hwmon_dev->parent, attr, buf);
+ }
+
+out:
+ put_device(hwmon_dev);
+ return err;
+}
+
+/**
+ * hwmon_get_value - get the sysfs entry value of the hwmon device.
+ *
+ * @hwmon_dev
+ * @name
+ * @buf
+ */
+int hwmon_get_value(struct device *hwmon_dev, const char *name, char *buf)
+{
+ return hwmon_access_value(hwmon_dev, name, buf, 0, false);
+}
+EXPORT_SYMBOL_GPL(hwmon_get_value);
+
+/**
+ * hwmon_set_value - set the sysfs entry value of the hwmon device.
+ *
+ * @hwmon_dev
+ * @name
+ * @buf
+ * @bufsize
+ */
+int hwmon_set_value(struct device *hwmon_dev, const char *name, char *buf,
+ int bufsize)
+{
+ return hwmon_access_value(hwmon_dev, name, buf, bufsize, true);
+}
+EXPORT_SYMBOL_GPL(hwmon_set_value);
+
+static int hwmon_dev_match(struct device *dev, void *data)
+{
+ if (dev->class == hwmon_class)
+ return 1;
+ return 0;
+}
+
+/**
+ * hwmon_find_device - find the hwmon-device of the given device
+ *
+ * @dev
+ */
+struct device *hwmon_find_device(struct device *dev)
+{
+ return device_find_child(dev, NULL, hwmon_dev_match);
+}
+
static void __init hwmon_pci_quirks(void)
{
#if defined CONFIG_X86 && defined CONFIG_PCI
diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h
index 6b6ee70..f787cfc 100644
--- a/include/linux/hwmon.h
+++ b/include/linux/hwmon.h
@@ -16,10 +16,19 @@
#include <linux/device.h>
-struct device *hwmon_device_register(struct device *dev);
+struct device *hwmon_device_register(struct device *dev,
+ struct attribute_group *attrs);
void hwmon_device_unregister(struct device *dev);
+
+extern int hwmon_get_value(struct device *hwmon_dev, const char *name,
+ char *buf);
+extern int hwmon_set_value(struct device *hwmon_dev, const char *name,
+ char *buf, int bufsize);
+
+extern struct device *hwmon_find_device(struct device *dev);
+
/* Scale user input to sensible values */
static inline int SENSORS_LIMIT(long value, long low, long high)
{
--
1.7.4.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [RFC PATCH 2/2] HWMON: adapt to the HWMON interface changes
2011-11-04 6:50 [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values MyungJoo Ham
2011-11-04 6:50 ` [RFC PATCH 1/2] HWMON: add interfaces to read/write hwmon values inside kernel MyungJoo Ham
@ 2011-11-04 6:50 ` MyungJoo Ham
2011-11-06 5:53 ` [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values Guenter Roeck
2011-11-11 20:46 ` Ben Hutchings
3 siblings, 0 replies; 10+ messages in thread
From: MyungJoo Ham @ 2011-11-04 6:50 UTC (permalink / raw)
To: lm-sensors
Cc: linux-kernel, Jean Delvare, Guenter Roeck, dg77.kim,
kyungmin.park, myungjoo.ham
hwmon_device_register() has one more parameter now.
ntc_thermistor.c uses the additional parameter fully.
If the additional parameter is NULL, the behavior of HWMON is not
changed.
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/char/i8k.c | 2 +-
drivers/gpu/drm/nouveau/nouveau_pm.c | 2 +-
drivers/gpu/drm/radeon/radeon_pm.c | 2 +-
drivers/hwmon/abituguru.c | 2 +-
drivers/hwmon/abituguru3.c | 2 +-
drivers/hwmon/acpi_power_meter.c | 2 +-
drivers/hwmon/ad7414.c | 2 +-
drivers/hwmon/ad7418.c | 2 +-
drivers/hwmon/adcxx.c | 2 +-
drivers/hwmon/adm1021.c | 2 +-
drivers/hwmon/adm1025.c | 2 +-
drivers/hwmon/adm1026.c | 2 +-
drivers/hwmon/adm1029.c | 2 +-
drivers/hwmon/adm1031.c | 2 +-
drivers/hwmon/adm9240.c | 2 +-
drivers/hwmon/ads1015.c | 2 +-
drivers/hwmon/ads7828.c | 2 +-
drivers/hwmon/ads7871.c | 2 +-
drivers/hwmon/adt7411.c | 2 +-
drivers/hwmon/adt7462.c | 2 +-
drivers/hwmon/adt7470.c | 2 +-
drivers/hwmon/adt7475.c | 2 +-
drivers/hwmon/amc6821.c | 2 +-
drivers/hwmon/applesmc.c | 2 +-
drivers/hwmon/asb100.c | 2 +-
drivers/hwmon/asc7621.c | 2 +-
drivers/hwmon/asus_atk0110.c | 2 +-
drivers/hwmon/atxp1.c | 2 +-
drivers/hwmon/coretemp.c | 2 +-
drivers/hwmon/dme1737.c | 4 ++--
drivers/hwmon/ds1621.c | 2 +-
drivers/hwmon/ds620.c | 2 +-
drivers/hwmon/emc1403.c | 2 +-
drivers/hwmon/emc2103.c | 2 +-
drivers/hwmon/emc6w201.c | 2 +-
drivers/hwmon/f71805f.c | 2 +-
drivers/hwmon/f71882fg.c | 2 +-
drivers/hwmon/f75375s.c | 2 +-
drivers/hwmon/fam15h_power.c | 2 +-
drivers/hwmon/fschmd.c | 2 +-
drivers/hwmon/g760a.c | 2 +-
drivers/hwmon/gl518sm.c | 2 +-
drivers/hwmon/gl520sm.c | 2 +-
drivers/hwmon/gpio-fan.c | 2 +-
drivers/hwmon/i5k_amb.c | 2 +-
drivers/hwmon/ibmaem.c | 4 ++--
drivers/hwmon/ibmpex.c | 2 +-
drivers/hwmon/it87.c | 2 +-
drivers/hwmon/jc42.c | 2 +-
drivers/hwmon/jz4740-hwmon.c | 2 +-
drivers/hwmon/k10temp.c | 2 +-
drivers/hwmon/k8temp.c | 2 +-
drivers/hwmon/lineage-pem.c | 2 +-
drivers/hwmon/lm63.c | 2 +-
drivers/hwmon/lm70.c | 2 +-
drivers/hwmon/lm73.c | 2 +-
drivers/hwmon/lm75.c | 2 +-
drivers/hwmon/lm77.c | 2 +-
drivers/hwmon/lm78.c | 4 ++--
drivers/hwmon/lm80.c | 2 +-
drivers/hwmon/lm83.c | 2 +-
drivers/hwmon/lm85.c | 2 +-
drivers/hwmon/lm87.c | 2 +-
drivers/hwmon/lm90.c | 2 +-
drivers/hwmon/lm92.c | 2 +-
drivers/hwmon/lm93.c | 2 +-
drivers/hwmon/lm95241.c | 2 +-
drivers/hwmon/lm95245.c | 2 +-
drivers/hwmon/ltc4151.c | 2 +-
drivers/hwmon/ltc4215.c | 2 +-
drivers/hwmon/ltc4245.c | 2 +-
drivers/hwmon/ltc4261.c | 2 +-
drivers/hwmon/max1111.c | 2 +-
drivers/hwmon/max16065.c | 2 +-
drivers/hwmon/max1619.c | 2 +-
drivers/hwmon/max1668.c | 2 +-
drivers/hwmon/max6639.c | 2 +-
drivers/hwmon/max6642.c | 2 +-
drivers/hwmon/max6650.c | 2 +-
drivers/hwmon/mc13783-adc.c | 2 +-
drivers/hwmon/ntc_thermistor.c | 15 +++------------
drivers/hwmon/pc87360.c | 2 +-
drivers/hwmon/pc87427.c | 2 +-
drivers/hwmon/pcf8591.c | 2 +-
drivers/hwmon/pmbus/pmbus_core.c | 2 +-
drivers/hwmon/s3c-hwmon.c | 2 +-
drivers/hwmon/sch5627.c | 2 +-
drivers/hwmon/sch5636.c | 2 +-
drivers/hwmon/sht15.c | 2 +-
drivers/hwmon/sht21.c | 2 +-
drivers/hwmon/sis5595.c | 2 +-
drivers/hwmon/smm665.c | 2 +-
drivers/hwmon/smsc47b397.c | 2 +-
drivers/hwmon/smsc47m1.c | 2 +-
drivers/hwmon/smsc47m192.c | 2 +-
drivers/hwmon/thmc50.c | 2 +-
drivers/hwmon/tmp102.c | 2 +-
drivers/hwmon/tmp401.c | 2 +-
drivers/hwmon/tmp421.c | 2 +-
drivers/hwmon/twl4030-madc-hwmon.c | 2 +-
drivers/hwmon/ultra45_env.c | 2 +-
drivers/hwmon/via-cputemp.c | 2 +-
drivers/hwmon/via686a.c | 2 +-
drivers/hwmon/vt1211.c | 2 +-
drivers/hwmon/vt8231.c | 2 +-
drivers/hwmon/w83627ehf.c | 2 +-
drivers/hwmon/w83627hf.c | 2 +-
drivers/hwmon/w83781d.c | 4 ++--
drivers/hwmon/w83791d.c | 2 +-
drivers/hwmon/w83792d.c | 2 +-
drivers/hwmon/w83793.c | 2 +-
drivers/hwmon/w83795.c | 2 +-
drivers/hwmon/w83l785ts.c | 2 +-
drivers/hwmon/w83l786ng.c | 2 +-
drivers/hwmon/wm831x-hwmon.c | 2 +-
drivers/hwmon/wm8350-hwmon.c | 2 +-
drivers/input/touchscreen/ads7846.c | 2 +-
drivers/platform/x86/asus-wmi.c | 2 +-
drivers/platform/x86/compal-laptop.c | 2 +-
drivers/platform/x86/eeepc-laptop.c | 2 +-
drivers/platform/x86/thinkpad_acpi.c | 2 +-
drivers/thermal/thermal_sys.c | 2 +-
122 files changed, 128 insertions(+), 137 deletions(-)
diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
index 6e40072..457425d 100644
--- a/drivers/char/i8k.c
+++ b/drivers/char/i8k.c
@@ -531,7 +531,7 @@ static int __init i8k_init_hwmon(void)
{
int err;
- i8k_hwmon_dev = hwmon_device_register(NULL);
+ i8k_hwmon_dev = hwmon_device_register(NULL, NULL);
if (IS_ERR(i8k_hwmon_dev)) {
err = PTR_ERR(i8k_hwmon_dev);
i8k_hwmon_dev = NULL;
diff --git a/drivers/gpu/drm/nouveau/nouveau_pm.c b/drivers/gpu/drm/nouveau/nouveau_pm.c
index da8d994..2c5e061 100644
--- a/drivers/gpu/drm/nouveau/nouveau_pm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_pm.c
@@ -418,7 +418,7 @@ nouveau_hwmon_init(struct drm_device *dev)
if (!pm->temp_get)
return -ENODEV;
- hwmon_dev = hwmon_device_register(&dev->pdev->dev);
+ hwmon_dev = hwmon_device_register(&dev->pdev->dev, NULL);
if (IS_ERR(hwmon_dev)) {
ret = PTR_ERR(hwmon_dev);
NV_ERROR(dev,
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
index 6fabe89..142eb83 100644
--- a/drivers/gpu/drm/radeon/radeon_pm.c
+++ b/drivers/gpu/drm/radeon/radeon_pm.c
@@ -489,7 +489,7 @@ static int radeon_hwmon_init(struct radeon_device *rdev)
case THERMAL_TYPE_EVERGREEN:
case THERMAL_TYPE_NI:
case THERMAL_TYPE_SUMO:
- rdev->pm.int_hwmon_dev = hwmon_device_register(rdev->dev);
+ rdev->pm.int_hwmon_dev = hwmon_device_register(rdev->dev, NULL);
if (IS_ERR(rdev->pm.int_hwmon_dev)) {
err = PTR_ERR(rdev->pm.int_hwmon_dev);
dev_err(rdev->dev,
diff --git a/drivers/hwmon/abituguru.c b/drivers/hwmon/abituguru.c
index 65a35cf..736d553 100644
--- a/drivers/hwmon/abituguru.c
+++ b/drivers/hwmon/abituguru.c
@@ -1289,7 +1289,7 @@ static int __devinit abituguru_probe(struct platform_device *pdev)
&abituguru_sysfs_attr[i].dev_attr))
goto abituguru_probe_error;
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (!IS_ERR(data->hwmon_dev))
return 0; /* success */
diff --git a/drivers/hwmon/abituguru3.c b/drivers/hwmon/abituguru3.c
index d30855a..fadc255 100644
--- a/drivers/hwmon/abituguru3.c
+++ b/drivers/hwmon/abituguru3.c
@@ -1000,7 +1000,7 @@ static int __devinit abituguru3_probe(struct platform_device *pdev)
&abituguru3_sysfs_attr[i].dev_attr))
goto abituguru3_probe_error;
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
res = PTR_ERR(data->hwmon_dev);
goto abituguru3_probe_error;
diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c
index 66f6729..1b970ee 100644
--- a/drivers/hwmon/acpi_power_meter.c
+++ b/drivers/hwmon/acpi_power_meter.c
@@ -914,7 +914,7 @@ static int acpi_power_meter_add(struct acpi_device *device)
if (res)
goto exit_free;
- resource->hwmon_dev = hwmon_device_register(&device->dev);
+ resource->hwmon_dev = hwmon_device_register(&device->dev, NULL);
if (IS_ERR(resource->hwmon_dev)) {
res = PTR_ERR(resource->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/ad7414.c b/drivers/hwmon/ad7414.c
index d46c0c7..43b8ea0 100644
--- a/drivers/hwmon/ad7414.c
+++ b/drivers/hwmon/ad7414.c
@@ -212,7 +212,7 @@ static int ad7414_probe(struct i2c_client *client,
if (err)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/ad7418.c b/drivers/hwmon/ad7418.c
index ffc781f..5d49d4f 100644
--- a/drivers/hwmon/ad7418.c
+++ b/drivers/hwmon/ad7418.c
@@ -273,7 +273,7 @@ static int ad7418_probe(struct i2c_client *client,
if ((err = sysfs_create_group(&client->dev.kobj, &data->attrs)))
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/adcxx.c b/drivers/hwmon/adcxx.c
index b2cacbe..2371760 100644
--- a/drivers/hwmon/adcxx.c
+++ b/drivers/hwmon/adcxx.c
@@ -192,7 +192,7 @@ static int __devinit adcxx_probe(struct spi_device *spi)
}
}
- adc->hwmon_dev = hwmon_device_register(&spi->dev);
+ adc->hwmon_dev = hwmon_device_register(&spi->dev, NULL);
if (IS_ERR(adc->hwmon_dev)) {
dev_err(&spi->dev, "hwmon_device_register failed.\n");
status = PTR_ERR(adc->hwmon_dev);
diff --git a/drivers/hwmon/adm1021.c b/drivers/hwmon/adm1021.c
index 1ad0a88..be7f0f0 100644
--- a/drivers/hwmon/adm1021.c
+++ b/drivers/hwmon/adm1021.c
@@ -364,7 +364,7 @@ static int adm1021_probe(struct i2c_client *client,
if ((err = sysfs_create_group(&client->dev.kobj, &adm1021_group)))
goto error1;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto error3;
diff --git a/drivers/hwmon/adm1025.c b/drivers/hwmon/adm1025.c
index 60befc0..c2ab20e 100644
--- a/drivers/hwmon/adm1025.c
+++ b/drivers/hwmon/adm1025.c
@@ -473,7 +473,7 @@ static int adm1025_probe(struct i2c_client *client,
goto exit_remove;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/adm1026.c b/drivers/hwmon/adm1026.c
index 0531867..adb6765 100644
--- a/drivers/hwmon/adm1026.c
+++ b/drivers/hwmon/adm1026.c
@@ -1727,7 +1727,7 @@ static int adm1026_probe(struct i2c_client *client,
if (err)
goto exitremove;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exitremove;
diff --git a/drivers/hwmon/adm1029.c b/drivers/hwmon/adm1029.c
index 0b8a3b1..355fcb6 100644
--- a/drivers/hwmon/adm1029.c
+++ b/drivers/hwmon/adm1029.c
@@ -358,7 +358,7 @@ static int adm1029_probe(struct i2c_client *client,
if ((err = sysfs_create_group(&client->dev.kobj, &adm1029_group)))
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/adm1031.c b/drivers/hwmon/adm1031.c
index 0683e6b..18aa7de 100644
--- a/drivers/hwmon/adm1031.c
+++ b/drivers/hwmon/adm1031.c
@@ -928,7 +928,7 @@ static int adm1031_probe(struct i2c_client *client,
goto exit_remove;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/adm9240.c b/drivers/hwmon/adm9240.c
index 9e234b9..5bbf727 100644
--- a/drivers/hwmon/adm9240.c
+++ b/drivers/hwmon/adm9240.c
@@ -635,7 +635,7 @@ static int adm9240_probe(struct i2c_client *new_client,
if ((err = sysfs_create_group(&new_client->dev.kobj, &adm9240_group)))
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/ads1015.c b/drivers/hwmon/ads1015.c
index e9beeda..296df5a 100644
--- a/drivers/hwmon/ads1015.c
+++ b/drivers/hwmon/ads1015.c
@@ -287,7 +287,7 @@ static int ads1015_probe(struct i2c_client *client,
goto exit_free;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/ads7828.c b/drivers/hwmon/ads7828.c
index c42c5a6..3a31f6c 100644
--- a/drivers/hwmon/ads7828.c
+++ b/drivers/hwmon/ads7828.c
@@ -236,7 +236,7 @@ static int ads7828_probe(struct i2c_client *client,
if (err)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/ads7871.c b/drivers/hwmon/ads7871.c
index 5231934..3b2dcbd 100644
--- a/drivers/hwmon/ads7871.c
+++ b/drivers/hwmon/ads7871.c
@@ -198,7 +198,7 @@ static int __devinit ads7871_probe(struct spi_device *spi)
spi_set_drvdata(spi, pdata);
- pdata->hwmon_dev = hwmon_device_register(&spi->dev);
+ pdata->hwmon_dev = hwmon_device_register(&spi->dev, NULL);
if (IS_ERR(pdata->hwmon_dev)) {
err = PTR_ERR(pdata->hwmon_dev);
goto error_remove;
diff --git a/drivers/hwmon/adt7411.c b/drivers/hwmon/adt7411.c
index 5cc3e37..ad0947e 100644
--- a/drivers/hwmon/adt7411.c
+++ b/drivers/hwmon/adt7411.c
@@ -303,7 +303,7 @@ static int __devinit adt7411_probe(struct i2c_client *client,
if (ret)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
ret = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/adt7462.c b/drivers/hwmon/adt7462.c
index 2af0c7b..7bd45e0 100644
--- a/drivers/hwmon/adt7462.c
+++ b/drivers/hwmon/adt7462.c
@@ -1949,7 +1949,7 @@ static int adt7462_probe(struct i2c_client *client,
if (err)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c
index c6d1ce0..a670df1 100644
--- a/drivers/hwmon/adt7470.c
+++ b/drivers/hwmon/adt7470.c
@@ -1279,7 +1279,7 @@ static int adt7470_probe(struct i2c_client *client,
if ((err = sysfs_create_group(&client->dev.kobj, &data->attrs)))
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/adt7475.c b/drivers/hwmon/adt7475.c
index b5fcd87..c37590f 100644
--- a/drivers/hwmon/adt7475.c
+++ b/drivers/hwmon/adt7475.c
@@ -1361,7 +1361,7 @@ static int adt7475_probe(struct i2c_client *client,
goto eremove;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
ret = PTR_ERR(data->hwmon_dev);
goto eremove;
diff --git a/drivers/hwmon/amc6821.c b/drivers/hwmon/amc6821.c
index 4033974..caf16a8 100644
--- a/drivers/hwmon/amc6821.c
+++ b/drivers/hwmon/amc6821.c
@@ -881,7 +881,7 @@ static int amc6821_probe(
if (err)
goto err_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (!IS_ERR(data->hwmon_dev))
return 0;
diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
index 4c07436..cf42ec0 100644
--- a/drivers/hwmon/applesmc.c
+++ b/drivers/hwmon/applesmc.c
@@ -1275,7 +1275,7 @@ static int __init applesmc_init(void)
if (ret)
goto out_light_sysfs;
- hwmon_dev = hwmon_device_register(&pdev->dev);
+ hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(hwmon_dev)) {
ret = PTR_ERR(hwmon_dev);
goto out_light_ledclass;
diff --git a/drivers/hwmon/asb100.c b/drivers/hwmon/asb100.c
index c02a052..23d033f 100644
--- a/drivers/hwmon/asb100.c
+++ b/drivers/hwmon/asb100.c
@@ -771,7 +771,7 @@ static int asb100_probe(struct i2c_client *client,
if ((err = sysfs_create_group(&client->dev.kobj, &asb100_group)))
goto ERROR3;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto ERROR4;
diff --git a/drivers/hwmon/asc7621.c b/drivers/hwmon/asc7621.c
index d2596ce..a96de41 100644
--- a/drivers/hwmon/asc7621.c
+++ b/drivers/hwmon/asc7621.c
@@ -1127,7 +1127,7 @@ asc7621_probe(struct i2c_client *client, const struct i2c_device_id *id)
goto exit_remove;
}
- data->class_dev = hwmon_device_register(&client->dev);
+ data->class_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->class_dev)) {
err = PTR_ERR(data->class_dev);
goto exit_remove;
diff --git a/drivers/hwmon/asus_atk0110.c b/drivers/hwmon/asus_atk0110.c
index 00e9851..d5e6c29 100644
--- a/drivers/hwmon/asus_atk0110.c
+++ b/drivers/hwmon/asus_atk0110.c
@@ -1239,7 +1239,7 @@ static int atk_register_hwmon(struct atk_data *data)
int err;
dev_dbg(dev, "registering hwmon device\n");
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev))
return PTR_ERR(data->hwmon_dev);
diff --git a/drivers/hwmon/atxp1.c b/drivers/hwmon/atxp1.c
index 33cc143..7a86314 100644
--- a/drivers/hwmon/atxp1.c
+++ b/drivers/hwmon/atxp1.c
@@ -336,7 +336,7 @@ static int atxp1_probe(struct i2c_client *new_client,
if ((err = sysfs_create_group(&new_client->dev.kobj, &atxp1_group)))
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
index 4112576..10a811c 100644
--- a/drivers/hwmon/coretemp.c
+++ b/drivers/hwmon/coretemp.c
@@ -674,7 +674,7 @@ static int __devinit coretemp_probe(struct platform_device *pdev)
pdata->phys_proc_id = TO_PHYS_ID(pdev->id);
platform_set_drvdata(pdev, pdata);
- pdata->hwmon_dev = hwmon_device_register(&pdev->dev);
+ pdata->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(pdata->hwmon_dev)) {
err = PTR_ERR(pdata->hwmon_dev);
dev_err(&pdev->dev, "Class registration failed (%d)\n", err);
diff --git a/drivers/hwmon/dme1737.c b/drivers/hwmon/dme1737.c
index d9c5927..16cc283 100644
--- a/drivers/hwmon/dme1737.c
+++ b/drivers/hwmon/dme1737.c
@@ -2428,7 +2428,7 @@ static int dme1737_i2c_probe(struct i2c_client *client,
}
/* Register device */
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
dev_err(dev, "Failed to register device.\n");
err = PTR_ERR(data->hwmon_dev);
@@ -2637,7 +2637,7 @@ static int __devinit dme1737_isa_probe(struct platform_device *pdev)
}
/* Register device */
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
dev_err(dev, "Failed to register device.\n");
err = PTR_ERR(data->hwmon_dev);
diff --git a/drivers/hwmon/ds1621.c b/drivers/hwmon/ds1621.c
index e113634..8774e28 100644
--- a/drivers/hwmon/ds1621.c
+++ b/drivers/hwmon/ds1621.c
@@ -275,7 +275,7 @@ static int ds1621_probe(struct i2c_client *client,
if ((err = sysfs_create_group(&client->dev.kobj, &ds1621_group)))
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/ds620.c b/drivers/hwmon/ds620.c
index 257957c..6344af5 100644
--- a/drivers/hwmon/ds620.c
+++ b/drivers/hwmon/ds620.c
@@ -271,7 +271,7 @@ static int ds620_probe(struct i2c_client *client,
if (err)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/emc1403.c b/drivers/hwmon/emc1403.c
index cd2a6e4..e72c960 100644
--- a/drivers/hwmon/emc1403.c
+++ b/drivers/hwmon/emc1403.c
@@ -317,7 +317,7 @@ static int emc1403_probe(struct i2c_client *client,
dev_warn(&client->dev, "create group failed\n");
goto thermal_error1;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
res = PTR_ERR(data->hwmon_dev);
dev_warn(&client->dev, "register hwmon dev failed\n");
diff --git a/drivers/hwmon/emc2103.c b/drivers/hwmon/emc2103.c
index af914ad..fbdf8bc 100644
--- a/drivers/hwmon/emc2103.c
+++ b/drivers/hwmon/emc2103.c
@@ -639,7 +639,7 @@ emc2103_probe(struct i2c_client *client, const struct i2c_device_id *id)
goto exit_remove_temp3;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
status = PTR_ERR(data->hwmon_dev);
goto exit_remove_temp4;
diff --git a/drivers/hwmon/emc6w201.c b/drivers/hwmon/emc6w201.c
index 0064432..1b9b628 100644
--- a/drivers/hwmon/emc6w201.c
+++ b/drivers/hwmon/emc6w201.c
@@ -507,7 +507,7 @@ static int emc6w201_probe(struct i2c_client *client,
goto exit_free;
/* Expose as a hwmon device */
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/f71805f.c b/drivers/hwmon/f71805f.c
index 92f9497..f014b2b 100644
--- a/drivers/hwmon/f71805f.c
+++ b/drivers/hwmon/f71805f.c
@@ -1388,7 +1388,7 @@ static int __devinit f71805f_probe(struct platform_device *pdev)
}
}
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
dev_err(&pdev->dev, "Class registration failed (%d)\n", err);
diff --git a/drivers/hwmon/f71882fg.c b/drivers/hwmon/f71882fg.c
index 2d96ed2..79885a1 100644
--- a/drivers/hwmon/f71882fg.c
+++ b/drivers/hwmon/f71882fg.c
@@ -2385,7 +2385,7 @@ no_pwm_auto_point:
"duty-cycle" : "RPM");
}
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
data->hwmon_dev = NULL;
diff --git a/drivers/hwmon/f75375s.c b/drivers/hwmon/f75375s.c
index 95cbfb3..26523c3 100644
--- a/drivers/hwmon/f75375s.c
+++ b/drivers/hwmon/f75375s.c
@@ -647,7 +647,7 @@ static int f75375_probe(struct i2c_client *client,
goto exit_remove;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c
index 523f8fb..f1f1ea4 100644
--- a/drivers/hwmon/fam15h_power.c
+++ b/drivers/hwmon/fam15h_power.c
@@ -173,7 +173,7 @@ static int __devinit fam15h_power_probe(struct pci_dev *pdev,
if (err)
goto exit_free_data;
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_group;
diff --git a/drivers/hwmon/fschmd.c b/drivers/hwmon/fschmd.c
index aa6d8b6..ed6b9c3 100644
--- a/drivers/hwmon/fschmd.c
+++ b/drivers/hwmon/fschmd.c
@@ -1150,7 +1150,7 @@ static int fschmd_probe(struct i2c_client *client,
goto exit_detach;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
data->hwmon_dev = NULL;
diff --git a/drivers/hwmon/g760a.c b/drivers/hwmon/g760a.c
index 1d6a6fa..a66cc12 100644
--- a/drivers/hwmon/g760a.c
+++ b/drivers/hwmon/g760a.c
@@ -224,7 +224,7 @@ static int g760a_probe(struct i2c_client *client,
if (err)
goto error_sysfs_create_group;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto error_hwmon_device_register;
diff --git a/drivers/hwmon/gl518sm.c b/drivers/hwmon/gl518sm.c
index e7ae574..cc52daa 100644
--- a/drivers/hwmon/gl518sm.c
+++ b/drivers/hwmon/gl518sm.c
@@ -535,7 +535,7 @@ static int gl518_probe(struct i2c_client *client,
&gl518_group_r80)))
goto exit_remove_files;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/gl520sm.c b/drivers/hwmon/gl520sm.c
index 131ea86..9af225c 100644
--- a/drivers/hwmon/gl520sm.c
+++ b/drivers/hwmon/gl520sm.c
@@ -747,7 +747,7 @@ static int gl520_probe(struct i2c_client *client,
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/gpio-fan.c b/drivers/hwmon/gpio-fan.c
index 89aa9fb..6e1ef7e 100644
--- a/drivers/hwmon/gpio-fan.c
+++ b/drivers/hwmon/gpio-fan.c
@@ -462,7 +462,7 @@ static int __devinit gpio_fan_probe(struct platform_device *pdev)
goto err_free_ctrl;
/* Make this driver part of hwmon class. */
- fan_data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ fan_data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(fan_data->hwmon_dev)) {
err = PTR_ERR(fan_data->hwmon_dev);
goto err_remove_name;
diff --git a/drivers/hwmon/i5k_amb.c b/drivers/hwmon/i5k_amb.c
index d22f241..5fe077a 100644
--- a/drivers/hwmon/i5k_amb.c
+++ b/drivers/hwmon/i5k_amb.c
@@ -379,7 +379,7 @@ static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev)
if (res)
goto exit_remove;
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
res = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c
index c316294..c2cc112 100644
--- a/drivers/hwmon/ibmaem.c
+++ b/drivers/hwmon/ibmaem.c
@@ -607,7 +607,7 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)
goto ipmi_err;
/* Register with hwmon */
- data->hwmon_dev = hwmon_device_register(&data->pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&data->pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
dev_err(&data->pdev->dev, "Unable to register hwmon "
@@ -740,7 +740,7 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,
goto ipmi_err;
/* Register with hwmon */
- data->hwmon_dev = hwmon_device_register(&data->pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&data->pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
dev_err(&data->pdev->dev, "Unable to register hwmon "
diff --git a/drivers/hwmon/ibmpex.c b/drivers/hwmon/ibmpex.c
index 41dbf81..c20eb60 100644
--- a/drivers/hwmon/ibmpex.c
+++ b/drivers/hwmon/ibmpex.c
@@ -497,7 +497,7 @@ static void ibmpex_register_bmc(int iface, struct device *dev)
goto out_user;
/* Register the BMC as a HWMON class device */
- data->hwmon_dev = hwmon_device_register(data->bmc_device);
+ data->hwmon_dev = hwmon_device_register(data->bmc_device, NULL);
if (IS_ERR(data->hwmon_dev)) {
dev_err(data->bmc_device, "Unable to register hwmon "
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
index d912649..1dd21b7 100644
--- a/drivers/hwmon/it87.c
+++ b/drivers/hwmon/it87.c
@@ -1897,7 +1897,7 @@ static int __devinit it87_probe(struct platform_device *pdev)
goto ERROR4;
}
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto ERROR4;
diff --git a/drivers/hwmon/jc42.c b/drivers/hwmon/jc42.c
index 02cebb7..ad6feeb 100644
--- a/drivers/hwmon/jc42.c
+++ b/drivers/hwmon/jc42.c
@@ -513,7 +513,7 @@ static int jc42_probe(struct i2c_client *new_client,
if (err)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/jz4740-hwmon.c b/drivers/hwmon/jz4740-hwmon.c
index fea292d..1c7f4b5 100644
--- a/drivers/hwmon/jz4740-hwmon.c
+++ b/drivers/hwmon/jz4740-hwmon.c
@@ -162,7 +162,7 @@ static int __devinit jz4740_hwmon_probe(struct platform_device *pdev)
goto err_free_irq;
}
- hwmon->hwmon = hwmon_device_register(&pdev->dev);
+ hwmon->hwmon = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(hwmon->hwmon)) {
ret = PTR_ERR(hwmon->hwmon);
goto err_remove_file;
diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
index 41aa6a3..be8d28a 100644
--- a/drivers/hwmon/k10temp.c
+++ b/drivers/hwmon/k10temp.c
@@ -168,7 +168,7 @@ static int __devinit k10temp_probe(struct pci_dev *pdev,
if (err)
goto exit_remove;
- hwmon_dev = hwmon_device_register(&pdev->dev);
+ hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(hwmon_dev)) {
err = PTR_ERR(hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/k8temp.c b/drivers/hwmon/k8temp.c
index b923bc2..a47f724 100644
--- a/drivers/hwmon/k8temp.c
+++ b/drivers/hwmon/k8temp.c
@@ -287,7 +287,7 @@ static int __devinit k8temp_probe(struct pci_dev *pdev,
if (err)
goto exit_remove;
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
diff --git a/drivers/hwmon/lineage-pem.c b/drivers/hwmon/lineage-pem.c
index 58eded2..1694911 100644
--- a/drivers/hwmon/lineage-pem.c
+++ b/drivers/hwmon/lineage-pem.c
@@ -522,7 +522,7 @@ static int pem_probe(struct i2c_client *client,
goto out_remove_groups;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
ret = PTR_ERR(data->hwmon_dev);
goto out_remove_groups;
diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c
index 508cb29..80880c7 100644
--- a/drivers/hwmon/lm63.c
+++ b/drivers/hwmon/lm63.c
@@ -527,7 +527,7 @@ static int lm63_probe(struct i2c_client *new_client,
goto exit_remove_files;
}
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/lm70.c b/drivers/hwmon/lm70.c
index c274ea2..e698fd1 100644
--- a/drivers/hwmon/lm70.c
+++ b/drivers/hwmon/lm70.c
@@ -157,7 +157,7 @@ static int __devinit lm70_probe(struct spi_device *spi)
p_lm70->chip = chip;
/* sysfs hook */
- p_lm70->hwmon_dev = hwmon_device_register(&spi->dev);
+ p_lm70->hwmon_dev = hwmon_device_register(&spi->dev, NULL);
if (IS_ERR(p_lm70->hwmon_dev)) {
dev_dbg(&spi->dev, "hwmon_device_register failed.\n");
status = PTR_ERR(p_lm70->hwmon_dev);
diff --git a/drivers/hwmon/lm73.c b/drivers/hwmon/lm73.c
index 29b9030..6228d05 100644
--- a/drivers/hwmon/lm73.c
+++ b/drivers/hwmon/lm73.c
@@ -113,7 +113,7 @@ lm73_probe(struct i2c_client *client, const struct i2c_device_id *id)
if (status)
return status;
- hwmon_dev = hwmon_device_register(&client->dev);
+ hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(hwmon_dev)) {
status = PTR_ERR(hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/lm75.c b/drivers/hwmon/lm75.c
index ef902d5..88a2fe2 100644
--- a/drivers/hwmon/lm75.c
+++ b/drivers/hwmon/lm75.c
@@ -183,7 +183,7 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
if (status)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
status = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/lm77.c b/drivers/hwmon/lm77.c
index b28a297..034a5d5 100644
--- a/drivers/hwmon/lm77.c
+++ b/drivers/hwmon/lm77.c
@@ -333,7 +333,7 @@ static int lm77_probe(struct i2c_client *new_client,
if ((err = sysfs_create_group(&new_client->dev.kobj, &lm77_group)))
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/lm78.c b/drivers/hwmon/lm78.c
index 6df0b46..c3169b9 100644
--- a/drivers/hwmon/lm78.c
+++ b/drivers/hwmon/lm78.c
@@ -624,7 +624,7 @@ static int lm78_i2c_probe(struct i2c_client *client,
if (err)
goto ERROR3;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto ERROR4;
@@ -827,7 +827,7 @@ static int __devinit lm78_isa_probe(struct platform_device *pdev)
|| (err = device_create_file(&pdev->dev, &dev_attr_name)))
goto exit_remove_files;
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c
index 18a0e6c..fa52d24 100644
--- a/drivers/hwmon/lm80.c
+++ b/drivers/hwmon/lm80.c
@@ -493,7 +493,7 @@ static int lm80_probe(struct i2c_client *client,
if ((err = sysfs_create_group(&client->dev.kobj, &lm80_group)))
goto error_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto error_remove;
diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c
index 8290476..ddc5bd1 100644
--- a/drivers/hwmon/lm83.c
+++ b/drivers/hwmon/lm83.c
@@ -364,7 +364,7 @@ static int lm83_probe(struct i2c_client *new_client,
goto exit_remove_files;
}
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c
index da72dc1..40e2b6d 100644
--- a/drivers/hwmon/lm85.c
+++ b/drivers/hwmon/lm85.c
@@ -1357,7 +1357,7 @@ static int lm85_probe(struct i2c_client *client,
&lm85_group_in567)))
goto err_remove_files;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto err_remove_files;
diff --git a/drivers/hwmon/lm87.c b/drivers/hwmon/lm87.c
index f1e6e75..5a6606d 100644
--- a/drivers/hwmon/lm87.c
+++ b/drivers/hwmon/lm87.c
@@ -811,7 +811,7 @@ static int lm87_probe(struct i2c_client *new_client,
goto exit_remove;
}
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
index 90ddb87..05ed533 100644
--- a/drivers/hwmon/lm90.c
+++ b/drivers/hwmon/lm90.c
@@ -1432,7 +1432,7 @@ static int lm90_probe(struct i2c_client *new_client,
goto exit_remove_files;
}
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/lm92.c b/drivers/hwmon/lm92.c
index 7c31e62..ed7a7b9 100644
--- a/drivers/hwmon/lm92.c
+++ b/drivers/hwmon/lm92.c
@@ -365,7 +365,7 @@ static int lm92_probe(struct i2c_client *new_client,
if ((err = sysfs_create_group(&new_client->dev.kobj, &lm92_group)))
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/lm93.c b/drivers/hwmon/lm93.c
index 3b43df4..d83a27e 100644
--- a/drivers/hwmon/lm93.c
+++ b/drivers/hwmon/lm93.c
@@ -2592,7 +2592,7 @@ static int lm93_probe(struct i2c_client *client,
goto err_free;
/* Register hwmon driver class */
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if ( !IS_ERR(data->hwmon_dev))
return 0;
diff --git a/drivers/hwmon/lm95241.c b/drivers/hwmon/lm95241.c
index 513901d..4558b77 100644
--- a/drivers/hwmon/lm95241.c
+++ b/drivers/hwmon/lm95241.c
@@ -408,7 +408,7 @@ static int lm95241_probe(struct i2c_client *new_client,
if (err)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/lm95245.c b/drivers/hwmon/lm95245.c
index dce9e68..d7db1f6 100644
--- a/drivers/hwmon/lm95245.c
+++ b/drivers/hwmon/lm95245.c
@@ -479,7 +479,7 @@ static int lm95245_probe(struct i2c_client *new_client,
if (err)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/ltc4151.c b/drivers/hwmon/ltc4151.c
index 4ac06b7..1561f03 100644
--- a/drivers/hwmon/ltc4151.c
+++ b/drivers/hwmon/ltc4151.c
@@ -194,7 +194,7 @@ static int ltc4151_probe(struct i2c_client *client,
if (ret)
goto out_sysfs_create_group;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
ret = PTR_ERR(data->hwmon_dev);
goto out_hwmon_device_register;
diff --git a/drivers/hwmon/ltc4215.c b/drivers/hwmon/ltc4215.c
index c7e6d8e..8e20eaa 100644
--- a/drivers/hwmon/ltc4215.c
+++ b/drivers/hwmon/ltc4215.c
@@ -265,7 +265,7 @@ static int ltc4215_probe(struct i2c_client *client,
if (ret)
goto out_sysfs_create_group;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
ret = PTR_ERR(data->hwmon_dev);
goto out_hwmon_device_register;
diff --git a/drivers/hwmon/ltc4245.c b/drivers/hwmon/ltc4245.c
index 6593083..93b365b 100644
--- a/drivers/hwmon/ltc4245.c
+++ b/drivers/hwmon/ltc4245.c
@@ -535,7 +535,7 @@ static int ltc4245_probe(struct i2c_client *client,
if (ret)
goto out_sysfs_create_groups;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
ret = PTR_ERR(data->hwmon_dev);
goto out_hwmon_device_register;
diff --git a/drivers/hwmon/ltc4261.c b/drivers/hwmon/ltc4261.c
index 4b50601..f53fd0b 100644
--- a/drivers/hwmon/ltc4261.c
+++ b/drivers/hwmon/ltc4261.c
@@ -251,7 +251,7 @@ static int ltc4261_probe(struct i2c_client *client,
if (ret)
goto out_sysfs_create_group;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
ret = PTR_ERR(data->hwmon_dev);
goto out_hwmon_device_register;
diff --git a/drivers/hwmon/max1111.c b/drivers/hwmon/max1111.c
index c97b78e..01c936b 100644
--- a/drivers/hwmon/max1111.c
+++ b/drivers/hwmon/max1111.c
@@ -185,7 +185,7 @@ static int __devinit max1111_probe(struct spi_device *spi)
goto err_free_data;
}
- data->hwmon_dev = hwmon_device_register(&spi->dev);
+ data->hwmon_dev = hwmon_device_register(&spi->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
dev_err(&spi->dev, "failed to create hwmon device\n");
err = PTR_ERR(data->hwmon_dev);
diff --git a/drivers/hwmon/max16065.c b/drivers/hwmon/max16065.c
index dd2d7b9..fa8220a 100644
--- a/drivers/hwmon/max16065.c
+++ b/drivers/hwmon/max16065.c
@@ -652,7 +652,7 @@ static int max16065_probe(struct i2c_client *client,
}
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (unlikely(IS_ERR(data->hwmon_dev))) {
ret = PTR_ERR(data->hwmon_dev);
goto out;
diff --git a/drivers/hwmon/max1619.c b/drivers/hwmon/max1619.c
index 022ded0..4b74756 100644
--- a/drivers/hwmon/max1619.c
+++ b/drivers/hwmon/max1619.c
@@ -278,7 +278,7 @@ static int max1619_probe(struct i2c_client *new_client,
if ((err = sysfs_create_group(&new_client->dev.kobj, &max1619_group)))
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/max1668.c b/drivers/hwmon/max1668.c
index 20d1b2d..0eeec22 100644
--- a/drivers/hwmon/max1668.c
+++ b/drivers/hwmon/max1668.c
@@ -431,7 +431,7 @@ static int max1668_probe(struct i2c_client *client,
goto error_sysrem0;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto error_sysrem1;
diff --git a/drivers/hwmon/max6639.c b/drivers/hwmon/max6639.c
index f20d997..465172d 100644
--- a/drivers/hwmon/max6639.c
+++ b/drivers/hwmon/max6639.c
@@ -565,7 +565,7 @@ static int max6639_probe(struct i2c_client *client,
if (err)
goto error_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto error_remove;
diff --git a/drivers/hwmon/max6642.c b/drivers/hwmon/max6642.c
index e855d3b..d3a40f1 100644
--- a/drivers/hwmon/max6642.c
+++ b/drivers/hwmon/max6642.c
@@ -303,7 +303,7 @@ static int max6642_probe(struct i2c_client *new_client,
if (err)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/max6650.c b/drivers/hwmon/max6650.c
index ece3aaf..3a35a47 100644
--- a/drivers/hwmon/max6650.c
+++ b/drivers/hwmon/max6650.c
@@ -555,7 +555,7 @@ static int max6650_probe(struct i2c_client *client,
goto err_remove;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (!IS_ERR(data->hwmon_dev))
return 0;
diff --git a/drivers/hwmon/mc13783-adc.c b/drivers/hwmon/mc13783-adc.c
index d5226c9..81ab9c8 100644
--- a/drivers/hwmon/mc13783-adc.c
+++ b/drivers/hwmon/mc13783-adc.c
@@ -176,7 +176,7 @@ static int __init mc13783_adc_probe(struct platform_device *pdev)
goto out_err_create2;
}
- priv->hwmon_dev = hwmon_device_register(&pdev->dev);
+ priv->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(priv->hwmon_dev)) {
ret = PTR_ERR(priv->hwmon_dev);
dev_err(&pdev->dev,
diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c
index eab1161..764af4e 100644
--- a/drivers/hwmon/ntc_thermistor.c
+++ b/drivers/hwmon/ntc_thermistor.c
@@ -309,7 +309,7 @@ static struct attribute *ntc_attributes[] = {
NULL,
};
-static const struct attribute_group ntc_attr_group = {
+static struct attribute_group ntc_attr_group = {
.attrs = ntc_attributes,
};
@@ -376,25 +376,17 @@ static int __devinit ntc_thermistor_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, data);
- ret = sysfs_create_group(&data->dev->kobj, &ntc_attr_group);
- if (ret) {
- dev_err(data->dev, "unable to create sysfs files\n");
- goto err;
- }
-
- data->hwmon_dev = hwmon_device_register(data->dev);
+ data->hwmon_dev = hwmon_device_register(data->dev, &ntc_attr_group);
if (IS_ERR_OR_NULL(data->hwmon_dev)) {
dev_err(data->dev, "unable to register as hwmon device.\n");
ret = -EINVAL;
- goto err_after_sysfs;
+ goto err;
}
dev_info(&pdev->dev, "Thermistor %s:%d (type: %s/%lu) successfully probed.\n",
pdev->name, pdev->id, pdev->id_entry->name,
pdev->id_entry->driver_data);
return 0;
-err_after_sysfs:
- sysfs_remove_group(&data->dev->kobj, &ntc_attr_group);
err:
kfree(data);
return ret;
@@ -405,7 +397,6 @@ static int __devexit ntc_thermistor_remove(struct platform_device *pdev)
struct ntc_data *data = platform_get_drvdata(pdev);
hwmon_device_unregister(data->hwmon_dev);
- sysfs_remove_group(&data->dev->kobj, &ntc_attr_group);
platform_set_drvdata(pdev, NULL);
kfree(data);
diff --git a/drivers/hwmon/pc87360.c b/drivers/hwmon/pc87360.c
index 3d99b88..7c0a398 100644
--- a/drivers/hwmon/pc87360.c
+++ b/drivers/hwmon/pc87360.c
@@ -1240,7 +1240,7 @@ static int __devinit pc87360_probe(struct platform_device *pdev)
if ((err = device_create_file(dev, &dev_attr_name)))
goto ERROR3;
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto ERROR3;
diff --git a/drivers/hwmon/pc87427.c b/drivers/hwmon/pc87427.c
index 8da2181..a5f738b 100644
--- a/drivers/hwmon/pc87427.c
+++ b/drivers/hwmon/pc87427.c
@@ -1125,7 +1125,7 @@ static int __devinit pc87427_probe(struct platform_device *pdev)
goto exit_remove_files;
}
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
dev_err(&pdev->dev, "Class registration failed (%d)\n", err);
diff --git a/drivers/hwmon/pcf8591.c b/drivers/hwmon/pcf8591.c
index 731b09a..3a8d5c7 100644
--- a/drivers/hwmon/pcf8591.c
+++ b/drivers/hwmon/pcf8591.c
@@ -204,7 +204,7 @@ static int pcf8591_probe(struct i2c_client *client,
goto exit_sysfs_remove;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_sysfs_remove;
diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c
index 397fc59..6829432 100644
--- a/drivers/hwmon/pmbus/pmbus_core.c
+++ b/drivers/hwmon/pmbus/pmbus_core.c
@@ -1740,7 +1740,7 @@ int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,
dev_err(&client->dev, "Failed to create sysfs entries\n");
goto out_attributes;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
ret = PTR_ERR(data->hwmon_dev);
dev_err(&client->dev, "Failed to register hwmon device\n");
diff --git a/drivers/hwmon/s3c-hwmon.c b/drivers/hwmon/s3c-hwmon.c
index b39f52e..3a55f99 100644
--- a/drivers/hwmon/s3c-hwmon.c
+++ b/drivers/hwmon/s3c-hwmon.c
@@ -315,7 +315,7 @@ static int __devinit s3c_hwmon_probe(struct platform_device *dev)
/* register with the hwmon core */
- hwmon->hwmon_dev = hwmon_device_register(&dev->dev);
+ hwmon->hwmon_dev = hwmon_device_register(&dev->dev, NULL);
if (IS_ERR(hwmon->hwmon_dev)) {
dev_err(&dev->dev, "error registering with hwmon\n");
ret = PTR_ERR(hwmon->hwmon_dev);
diff --git a/drivers/hwmon/sch5627.c b/drivers/hwmon/sch5627.c
index e3b5c60..8e0cef1 100644
--- a/drivers/hwmon/sch5627.c
+++ b/drivers/hwmon/sch5627.c
@@ -567,7 +567,7 @@ static int __devinit sch5627_probe(struct platform_device *pdev)
if (err)
goto error;
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
data->hwmon_dev = NULL;
diff --git a/drivers/hwmon/sch5636.c b/drivers/hwmon/sch5636.c
index 244407a..89a1dde 100644
--- a/drivers/hwmon/sch5636.c
+++ b/drivers/hwmon/sch5636.c
@@ -498,7 +498,7 @@ static int __devinit sch5636_probe(struct platform_device *pdev)
goto error;
}
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
data->hwmon_dev = NULL;
diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c
index fe4104c..b4f3241 100644
--- a/drivers/hwmon/sht15.c
+++ b/drivers/hwmon/sht15.c
@@ -983,7 +983,7 @@ static int __devinit sht15_probe(struct platform_device *pdev)
goto err_release_irq;
}
- data->hwmon_dev = hwmon_device_register(data->dev);
+ data->hwmon_dev = hwmon_device_register(data->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
ret = PTR_ERR(data->hwmon_dev);
goto err_release_sysfs_group;
diff --git a/drivers/hwmon/sht21.c b/drivers/hwmon/sht21.c
index 1c8c981..86c3a9e 100644
--- a/drivers/hwmon/sht21.c
+++ b/drivers/hwmon/sht21.c
@@ -231,7 +231,7 @@ static int __devinit sht21_probe(struct i2c_client *client,
dev_dbg(&client->dev, "could not create sysfs files\n");
goto fail_free;
}
- sht21->hwmon_dev = hwmon_device_register(&client->dev);
+ sht21->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(sht21->hwmon_dev)) {
dev_dbg(&client->dev, "unable to register hwmon device\n");
err = PTR_ERR(sht21->hwmon_dev);
diff --git a/drivers/hwmon/sis5595.c b/drivers/hwmon/sis5595.c
index 47d7ce9..fb39be4 100644
--- a/drivers/hwmon/sis5595.c
+++ b/drivers/hwmon/sis5595.c
@@ -583,7 +583,7 @@ static int __devinit sis5595_probe(struct platform_device *pdev)
goto exit_remove_files;
}
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/smm665.c b/drivers/hwmon/smm665.c
index 425df5b..5e11aea 100644
--- a/drivers/hwmon/smm665.c
+++ b/drivers/hwmon/smm665.c
@@ -673,7 +673,7 @@ static int smm665_probe(struct i2c_client *client,
if (ret)
goto out_unregister;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
ret = PTR_ERR(data->hwmon_dev);
goto out_remove_group;
diff --git a/drivers/hwmon/smsc47b397.c b/drivers/hwmon/smsc47b397.c
index 9fb7516..2b96913 100644
--- a/drivers/hwmon/smsc47b397.c
+++ b/drivers/hwmon/smsc47b397.c
@@ -279,7 +279,7 @@ static int __devinit smsc47b397_probe(struct platform_device *pdev)
if ((err = sysfs_create_group(&dev->kobj, &smsc47b397_group)))
goto error_free;
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto error_remove;
diff --git a/drivers/hwmon/smsc47m1.c b/drivers/hwmon/smsc47m1.c
index f44a89a..f748865 100644
--- a/drivers/hwmon/smsc47m1.c
+++ b/drivers/hwmon/smsc47m1.c
@@ -723,7 +723,7 @@ static int __init smsc47m1_probe(struct platform_device *pdev)
if ((err = device_create_file(dev, &dev_attr_name)))
goto error_remove_files;
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto error_remove_files;
diff --git a/drivers/hwmon/smsc47m192.c b/drivers/hwmon/smsc47m192.c
index 40b2667..6b8d9b5 100644
--- a/drivers/hwmon/smsc47m192.c
+++ b/drivers/hwmon/smsc47m192.c
@@ -543,7 +543,7 @@ static int smsc47m192_probe(struct i2c_client *client,
goto exit_remove_files;
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/thmc50.c b/drivers/hwmon/thmc50.c
index 7dfb4de..2d44779 100644
--- a/drivers/hwmon/thmc50.c
+++ b/drivers/hwmon/thmc50.c
@@ -370,7 +370,7 @@ static int thmc50_probe(struct i2c_client *client,
goto exit_remove_sysfs_thmc50;
/* Register a new directory entry with module sensors */
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_sysfs;
diff --git a/drivers/hwmon/tmp102.c b/drivers/hwmon/tmp102.c
index 5bd1949..ec756e5 100644
--- a/drivers/hwmon/tmp102.c
+++ b/drivers/hwmon/tmp102.c
@@ -208,7 +208,7 @@ static int __devinit tmp102_probe(struct i2c_client *client,
dev_dbg(&client->dev, "could not create sysfs files\n");
goto fail_restore_config;
}
- tmp102->hwmon_dev = hwmon_device_register(&client->dev);
+ tmp102->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(tmp102->hwmon_dev)) {
dev_dbg(&client->dev, "unable to register hwmon device\n");
status = PTR_ERR(tmp102->hwmon_dev);
diff --git a/drivers/hwmon/tmp401.c b/drivers/hwmon/tmp401.c
index ad8d535..08b13c3 100644
--- a/drivers/hwmon/tmp401.c
+++ b/drivers/hwmon/tmp401.c
@@ -634,7 +634,7 @@ static int tmp401_probe(struct i2c_client *client,
}
}
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
data->hwmon_dev = NULL;
diff --git a/drivers/hwmon/tmp421.c b/drivers/hwmon/tmp421.c
index 0517a8f..a97fadd 100644
--- a/drivers/hwmon/tmp421.c
+++ b/drivers/hwmon/tmp421.c
@@ -283,7 +283,7 @@ static int tmp421_probe(struct i2c_client *client,
if (err)
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&client->dev);
+ data->hwmon_dev = hwmon_device_register(&client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
data->hwmon_dev = NULL;
diff --git a/drivers/hwmon/twl4030-madc-hwmon.c b/drivers/hwmon/twl4030-madc-hwmon.c
index 5724074..635703c 100644
--- a/drivers/hwmon/twl4030-madc-hwmon.c
+++ b/drivers/hwmon/twl4030-madc-hwmon.c
@@ -103,7 +103,7 @@ static int __devinit twl4030_madc_hwmon_probe(struct platform_device *pdev)
ret = sysfs_create_group(&pdev->dev.kobj, &twl4030_madc_group);
if (ret)
goto err_sysfs;
- hwmon = hwmon_device_register(&pdev->dev);
+ hwmon = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(hwmon)) {
dev_err(&pdev->dev, "hwmon_device_register failed.\n");
ret = PTR_ERR(hwmon);
diff --git a/drivers/hwmon/ultra45_env.c b/drivers/hwmon/ultra45_env.c
index 27a6271..f549566 100644
--- a/drivers/hwmon/ultra45_env.c
+++ b/drivers/hwmon/ultra45_env.c
@@ -252,7 +252,7 @@ static int __devinit env_probe(struct platform_device *op)
if (err)
goto out_iounmap;
- p->hwmon_dev = hwmon_device_register(&op->dev);
+ p->hwmon_dev = hwmon_device_register(&op->dev, NULL);
if (IS_ERR(p->hwmon_dev)) {
err = PTR_ERR(p->hwmon_dev);
goto out_sysfs_remove_group;
diff --git a/drivers/hwmon/via-cputemp.c b/drivers/hwmon/via-cputemp.c
index 8eac67d..095e318 100644
--- a/drivers/hwmon/via-cputemp.c
+++ b/drivers/hwmon/via-cputemp.c
@@ -177,7 +177,7 @@ static int __devinit via_cputemp_probe(struct platform_device *pdev)
goto exit_remove;
}
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
dev_err(&pdev->dev, "Class registration failed (%d)\n",
diff --git a/drivers/hwmon/via686a.c b/drivers/hwmon/via686a.c
index 25e9166..f2340d0 100644
--- a/drivers/hwmon/via686a.c
+++ b/drivers/hwmon/via686a.c
@@ -658,7 +658,7 @@ static int __devinit via686a_probe(struct platform_device *pdev)
if ((err = sysfs_create_group(&pdev->dev.kobj, &via686a_group)))
goto exit_free;
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/vt1211.c b/drivers/hwmon/vt1211.c
index 49163d4..f1119d4 100644
--- a/drivers/hwmon/vt1211.c
+++ b/drivers/hwmon/vt1211.c
@@ -1198,7 +1198,7 @@ static int __devinit vt1211_probe(struct platform_device *pdev)
}
/* Register device */
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
dev_err(dev, "Class registration failed (%d)\n", err);
diff --git a/drivers/hwmon/vt8231.c b/drivers/hwmon/vt8231.c
index db3b2e8..2924e6a 100644
--- a/drivers/hwmon/vt8231.c
+++ b/drivers/hwmon/vt8231.c
@@ -765,7 +765,7 @@ static int vt8231_probe(struct platform_device *pdev)
}
}
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
index f2b377c..4e94e47 100644
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -2265,7 +2265,7 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
if (err)
goto exit_remove;
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/w83627hf.c b/drivers/hwmon/w83627hf.c
index bde50e3..9646b92 100644
--- a/drivers/hwmon/w83627hf.c
+++ b/drivers/hwmon/w83627hf.c
@@ -1414,7 +1414,7 @@ static int __devinit w83627hf_probe(struct platform_device *pdev)
&sensor_dev_attr_pwm3_enable.dev_attr)))
goto ERROR4;
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto ERROR4;
diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c
index eed43a0..948e2f3 100644
--- a/drivers/hwmon/w83781d.c
+++ b/drivers/hwmon/w83781d.c
@@ -1182,7 +1182,7 @@ w83781d_probe(struct i2c_client *client, const struct i2c_device_id *id)
if (err)
goto ERROR4;
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto ERROR4;
@@ -1745,7 +1745,7 @@ w83781d_isa_probe(struct platform_device *pdev)
if (err)
goto exit_remove_files;
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/w83791d.c b/drivers/hwmon/w83791d.c
index 17cf1ab..35fd74e 100644
--- a/drivers/hwmon/w83791d.c
+++ b/drivers/hwmon/w83791d.c
@@ -1352,7 +1352,7 @@ static int w83791d_probe(struct i2c_client *client,
}
/* Everything is ready, now register the working device */
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto error5;
diff --git a/drivers/hwmon/w83792d.c b/drivers/hwmon/w83792d.c
index f3e7130..a921c2c 100644
--- a/drivers/hwmon/w83792d.c
+++ b/drivers/hwmon/w83792d.c
@@ -1402,7 +1402,7 @@ w83792d_probe(struct i2c_client *client, const struct i2c_device_id *id)
&w83792d_group_fan[3])))
goto exit_remove_files;
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove_files;
diff --git a/drivers/hwmon/w83793.c b/drivers/hwmon/w83793.c
index 854f911..195b0ea 100644
--- a/drivers/hwmon/w83793.c
+++ b/drivers/hwmon/w83793.c
@@ -1807,7 +1807,7 @@ static int w83793_probe(struct i2c_client *client,
}
}
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/w83795.c b/drivers/hwmon/w83795.c
index 845232d..a001282 100644
--- a/drivers/hwmon/w83795.c
+++ b/drivers/hwmon/w83795.c
@@ -2197,7 +2197,7 @@ static int w83795_probe(struct i2c_client *client,
if (data->chip_type == w83795g)
w83795_check_dynamic_in_limits(client);
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/w83l785ts.c b/drivers/hwmon/w83l785ts.c
index 20781de..70b75d0 100644
--- a/drivers/hwmon/w83l785ts.c
+++ b/drivers/hwmon/w83l785ts.c
@@ -212,7 +212,7 @@ static int w83l785ts_probe(struct i2c_client *new_client,
goto exit_remove;
/* Register sysfs hooks */
- data->hwmon_dev = hwmon_device_register(&new_client->dev);
+ data->hwmon_dev = hwmon_device_register(&new_client->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/w83l786ng.c b/drivers/hwmon/w83l786ng.c
index 0254e18..cc9f87a 100644
--- a/drivers/hwmon/w83l786ng.c
+++ b/drivers/hwmon/w83l786ng.c
@@ -655,7 +655,7 @@ w83l786ng_probe(struct i2c_client *client, const struct i2c_device_id *id)
if ((err = sysfs_create_group(&client->dev.kobj, &w83l786ng_group)))
goto exit_remove;
- data->hwmon_dev = hwmon_device_register(dev);
+ data->hwmon_dev = hwmon_device_register(dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
goto exit_remove;
diff --git a/drivers/hwmon/wm831x-hwmon.c b/drivers/hwmon/wm831x-hwmon.c
index 97b1f83..93a2f5c 100644
--- a/drivers/hwmon/wm831x-hwmon.c
+++ b/drivers/hwmon/wm831x-hwmon.c
@@ -171,7 +171,7 @@ static int __devinit wm831x_hwmon_probe(struct platform_device *pdev)
if (ret)
goto err;
- hwmon->classdev = hwmon_device_register(&pdev->dev);
+ hwmon->classdev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(hwmon->classdev)) {
ret = PTR_ERR(hwmon->classdev);
goto err_sysfs;
diff --git a/drivers/hwmon/wm8350-hwmon.c b/drivers/hwmon/wm8350-hwmon.c
index 1329059..147c21b 100644
--- a/drivers/hwmon/wm8350-hwmon.c
+++ b/drivers/hwmon/wm8350-hwmon.c
@@ -100,7 +100,7 @@ static int __devinit wm8350_hwmon_probe(struct platform_device *pdev)
if (ret)
goto err;
- wm8350->hwmon.classdev = hwmon_device_register(&pdev->dev);
+ wm8350->hwmon.classdev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(wm8350->hwmon.classdev)) {
ret = PTR_ERR(wm8350->hwmon.classdev);
goto err_group;
diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
index d507b9b..52f10ac 100644
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -546,7 +546,7 @@ static int ads784x_hwmon_register(struct spi_device *spi, struct ads7846 *ts)
if (err)
return err;
- hwmon = hwmon_device_register(&spi->dev);
+ hwmon = hwmon_device_register(&spi->dev, NULL);
if (IS_ERR(hwmon)) {
sysfs_remove_group(&spi->dev.kobj, ts->attr_group);
return PTR_ERR(hwmon);
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 95cba9e..d03d357 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -1055,7 +1055,7 @@ static int asus_wmi_hwmon_init(struct asus_wmi *asus)
struct device *hwmon;
int result;
- hwmon = hwmon_device_register(&asus->platform_device->dev);
+ hwmon = hwmon_device_register(&asus->platform_device->dev, NULL);
if (IS_ERR(hwmon)) {
pr_err("Could not register asus hwmon device\n");
return PTR_ERR(hwmon);
diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c
index 8877b83..63bdbd6 100644
--- a/drivers/platform/x86/compal-laptop.c
+++ b/drivers/platform/x86/compal-laptop.c
@@ -1035,7 +1035,7 @@ static int __devinit compal_probe(struct platform_device *pdev)
return err;
}
- data->hwmon_dev = hwmon_device_register(&pdev->dev);
+ data->hwmon_dev = hwmon_device_register(&pdev->dev, NULL);
if (IS_ERR(data->hwmon_dev)) {
err = PTR_ERR(data->hwmon_dev);
sysfs_remove_group(&pdev->dev.kobj,
diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c
index 1c45d92..973d031 100644
--- a/drivers/platform/x86/eeepc-laptop.c
+++ b/drivers/platform/x86/eeepc-laptop.c
@@ -1116,7 +1116,7 @@ static int eeepc_hwmon_init(struct eeepc_laptop *eeepc)
struct device *hwmon;
int result;
- hwmon = hwmon_device_register(&eeepc->platform_device->dev);
+ hwmon = hwmon_device_register(&eeepc->platform_device->dev, NULL);
if (IS_ERR(hwmon)) {
pr_err("Could not register eeepc hwmon device\n");
eeepc->hwmon_device = NULL;
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 7bd829f..26c4d90 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -9077,7 +9077,7 @@ static int __init thinkpad_acpi_module_init(void)
return ret;
}
tp_features.sensors_pdev_attrs_registered = 1;
- tpacpi_hwmon = hwmon_device_register(&tpacpi_sensors_pdev->dev);
+ tpacpi_hwmon = hwmon_device_register(&tpacpi_sensors_pdev->dev, NULL);
if (IS_ERR(tpacpi_hwmon)) {
ret = PTR_ERR(tpacpi_hwmon);
tpacpi_hwmon = NULL;
diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c
index 708f8e9..2be2519 100644
--- a/drivers/thermal/thermal_sys.c
+++ b/drivers/thermal/thermal_sys.c
@@ -548,7 +548,7 @@ thermal_add_hwmon_sysfs(struct thermal_zone_device *tz)
INIT_LIST_HEAD(&hwmon->tz_list);
strlcpy(hwmon->type, tz->type, THERMAL_NAME_LENGTH);
- hwmon->device = hwmon_device_register(NULL);
+ hwmon->device = hwmon_device_register(NULL, NULL);
if (IS_ERR(hwmon->device)) {
result = PTR_ERR(hwmon->device);
goto free_mem;
--
1.7.4.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values.
2011-11-04 6:50 [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values MyungJoo Ham
2011-11-04 6:50 ` [RFC PATCH 1/2] HWMON: add interfaces to read/write hwmon values inside kernel MyungJoo Ham
2011-11-04 6:50 ` [RFC PATCH 2/2] HWMON: adapt to the HWMON interface changes MyungJoo Ham
@ 2011-11-06 5:53 ` Guenter Roeck
2011-11-07 4:35 ` MyungJoo Ham
2011-11-11 20:46 ` Ben Hutchings
3 siblings, 1 reply; 10+ messages in thread
From: Guenter Roeck @ 2011-11-06 5:53 UTC (permalink / raw)
To: MyungJoo Ham
Cc: lm-sensors@lm-sensors.org, linux-kernel@vger.kernel.org,
Jean Delvare, dg77.kim@samsung.com, kyungmin.park@samsung.com,
myungjoo.ham@gmail.com
On Fri, Nov 04, 2011 at 02:50:31AM -0400, MyungJoo Ham wrote:
> We have been reading hwmon values (TMU, the SoC-core temperature sensor,
> and NTC, the ambient or battery surface temperature sensor) for
> Charger-Manager. However, because hwmon does not have in-kernel interface,
> we have been using undesired method, including "../../../fs/*.h".
>
> This patch is to provide in-kernel interface for hwmon:
> hwmon_get_value and hwmon_set_value. In order to use these two functions,
> the hwmon driver should provide its sysfs attributes to hwmon framework
> as well. If the hwmon driver does not provide (by providing NULL), the users
> of the hwmon won't be able to use hwmon_get/set_value();
> The sysfs attribute (struct attribuyte_group *) is provided with
> hwmon_device_register; adding the second parameter to hwmon_device_register().
> The 2/2 patch shows the changes in device drivers due to this.
>
> Among the HWMON device, all but ntc_thermistor.c does not setup attribute_group
> for HWMON; thus they do not support hwmon_get/set_value with this patch.
>
> As soon as the server synchronizes git repositories, you can see how
> hwmon_get_value() is used at:
> http://git.infradead.org/users/kmpark/linux-2.6-samsung/shortlog/refs/heads/charger-manager
>
Hi,
I agree that we'll need a solution for the callback problem at some point.
However, I have a number of concerns with the approach used in your patch set.
The first patch breaks compilation. It changes the API w/o making the same changes
in the affected drivers. This is unacceptable. Each patch of a patch series must
result in working code.
Merging functionality into one function and then breaking out again, as you do with
the set/get functions, results in unnecessarily complexity.
{set, get} -> access(flag) --> {set, get}
Better write separate functions and keep the common code in a function called by the
{set, get} functions.
We should not have to change the API for every caller, especially if many of those will
never benefit from the new API. It would be better to define a new API function and map
the old API function to the new one. Saves a lot of calls with unnecessary "NULL" parameter,
and coincidentially reduces the patch size and avoids the breakage mentioned above.
The get and set functions are extremely expensive, having to loop through the list
of attributes and performing a string comparison on each attribute to find the sensor.
The proposed change only works for a small subset of drivers, those with a well defined
single attribute groups. If and when we implement a solution for the internal-API
problem, it should work for all hwmon drivers, not only for a small subset.
Thanks,
Guenter
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values.
2011-11-06 5:53 ` [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values Guenter Roeck
@ 2011-11-07 4:35 ` MyungJoo Ham
0 siblings, 0 replies; 10+ messages in thread
From: MyungJoo Ham @ 2011-11-07 4:35 UTC (permalink / raw)
To: Guenter Roeck
Cc: lm-sensors@lm-sensors.org, linux-kernel@vger.kernel.org,
Jean Delvare, dg77.kim@samsung.com, kyungmin.park@samsung.com
On Sun, Nov 6, 2011 at 2:53 PM, Guenter Roeck
<guenter.roeck@ericsson.com> wrote:
> On Fri, Nov 04, 2011 at 02:50:31AM -0400, MyungJoo Ham wrote:
>> We have been reading hwmon values (TMU, the SoC-core temperature sensor,
>> and NTC, the ambient or battery surface temperature sensor) for
>> Charger-Manager. However, because hwmon does not have in-kernel interface,
>> we have been using undesired method, including "../../../fs/*.h".
>>
>> This patch is to provide in-kernel interface for hwmon:
>> hwmon_get_value and hwmon_set_value. In order to use these two functions,
>> the hwmon driver should provide its sysfs attributes to hwmon framework
>> as well. If the hwmon driver does not provide (by providing NULL), the users
>> of the hwmon won't be able to use hwmon_get/set_value();
>> The sysfs attribute (struct attribuyte_group *) is provided with
>> hwmon_device_register; adding the second parameter to hwmon_device_register().
>> The 2/2 patch shows the changes in device drivers due to this.
>>
>> Among the HWMON device, all but ntc_thermistor.c does not setup attribute_group
>> for HWMON; thus they do not support hwmon_get/set_value with this patch.
>>
>> As soon as the server synchronizes git repositories, you can see how
>> hwmon_get_value() is used at:
>> http://git.infradead.org/users/kmpark/linux-2.6-samsung/shortlog/refs/heads/charger-manager
>>
> Hi,
>
> I agree that we'll need a solution for the callback problem at some point.
> However, I have a number of concerns with the approach used in your patch set.
>
> The first patch breaks compilation. It changes the API w/o making the same changes
> in the affected drivers. This is unacceptable. Each patch of a patch series must
> result in working code.
Hello,
I simply thought having a single patch with API change and device
driver change altogether too ugly.
Anyway, by adding another API function to add get/set properties to
HWMON drivers, the need for this issue will disappear.
>
> Merging functionality into one function and then breaking out again, as you do with
> the set/get functions, results in unnecessarily complexity.
> {set, get} -> access(flag) --> {set, get}
> Better write separate functions and keep the common code in a function called by the
> {set, get} functions.
Ok.
>
> We should not have to change the API for every caller, especially if many of those will
> never benefit from the new API. It would be better to define a new API function and map
> the old API function to the new one. Saves a lot of calls with unnecessary "NULL" parameter,
> and coincidentially reduces the patch size and avoids the breakage mentioned above.
>
Good. I'd like to add a new API function for this functionality, too.
I guess that it'd be easier to address your following comments by
adding another API function.
> The get and set functions are extremely expensive, having to loop through the list
> of attributes and performing a string comparison on each attribute to find the sensor.
>
> The proposed change only works for a small subset of drivers, those with a well defined
> single attribute groups. If and when we implement a solution for the internal-API
> problem, it should work for all hwmon drivers, not only for a small subset.
>
> Thanks,
> Guenter
>
>
Thank you.
Cheers!
MyungJoo
--
MyungJoo Ham, Ph.D.
Mobile Software Platform Lab, DMC Business, Samsung Electronics
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values.
2011-11-04 6:50 [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values MyungJoo Ham
` (2 preceding siblings ...)
2011-11-06 5:53 ` [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values Guenter Roeck
@ 2011-11-11 20:46 ` Ben Hutchings
2011-11-14 1:31 ` MyungJoo Ham
3 siblings, 1 reply; 10+ messages in thread
From: Ben Hutchings @ 2011-11-11 20:46 UTC (permalink / raw)
To: MyungJoo Ham
Cc: lm-sensors, linux-kernel, Jean Delvare, Guenter Roeck, dg77.kim,
kyungmin.park, myungjoo.ham
On Fri, 2011-11-04 at 15:50 +0900, MyungJoo Ham wrote:
> We have been reading hwmon values (TMU, the SoC-core temperature sensor,
> and NTC, the ambient or battery surface temperature sensor) for
> Charger-Manager. However, because hwmon does not have in-kernel interface,
> we have been using undesired method, including "../../../fs/*.h".
>
> This patch is to provide in-kernel interface for hwmon:
> hwmon_get_value and hwmon_set_value. In order to use these two functions,
> the hwmon driver should provide its sysfs attributes to hwmon framework
> as well. If the hwmon driver does not provide (by providing NULL), the users
> of the hwmon won't be able to use hwmon_get/set_value();
> The sysfs attribute (struct attribuyte_group *) is provided with
> hwmon_device_register; adding the second parameter to hwmon_device_register().
> The 2/2 patch shows the changes in device drivers due to this.
[...]
This is an improvement, but I don't think it is quite enough. As I
understand the hwmon sysfs interface, all sensor values should be
integers. So the in-kernel interface should also work with integers,
not strings.
As a first implementation you could perhaps parse the strings back to
integers. However in the longer term the driver API should be changed
so that hwmon drivers fully describe their sensors to the core and the
core takes care of exposing them through sysfs and the in-kernel API.
Ben.
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values.
2011-11-11 20:46 ` Ben Hutchings
@ 2011-11-14 1:31 ` MyungJoo Ham
2011-11-14 16:39 ` Jonathan Cameron
0 siblings, 1 reply; 10+ messages in thread
From: MyungJoo Ham @ 2011-11-14 1:31 UTC (permalink / raw)
To: Ben Hutchings
Cc: lm-sensors, linux-kernel, Jean Delvare, Guenter Roeck, dg77.kim,
kyungmin.park
On Sat, Nov 12, 2011 at 5:46 AM, Ben Hutchings
<bhutchings@solarflare.com> wrote:
> On Fri, 2011-11-04 at 15:50 +0900, MyungJoo Ham wrote:
>> We have been reading hwmon values (TMU, the SoC-core temperature sensor,
>> and NTC, the ambient or battery surface temperature sensor) for
>> Charger-Manager. However, because hwmon does not have in-kernel interface,
>> we have been using undesired method, including "../../../fs/*.h".
>>
>> This patch is to provide in-kernel interface for hwmon:
>> hwmon_get_value and hwmon_set_value. In order to use these two functions,
>> the hwmon driver should provide its sysfs attributes to hwmon framework
>> as well. If the hwmon driver does not provide (by providing NULL), the users
>> of the hwmon won't be able to use hwmon_get/set_value();
>> The sysfs attribute (struct attribuyte_group *) is provided with
>> hwmon_device_register; adding the second parameter to hwmon_device_register().
>> The 2/2 patch shows the changes in device drivers due to this.
> [...]
>
> This is an improvement, but I don't think it is quite enough. As I
> understand the hwmon sysfs interface, all sensor values should be
> integers. So the in-kernel interface should also work with integers,
> not strings.
>
> As a first implementation you could perhaps parse the strings back to
> integers. However in the longer term the driver API should be changed
> so that hwmon drivers fully describe their sensors to the core and the
> core takes care of exposing them through sysfs and the in-kernel API.
I agree.
I'll let it the in-kernel interfaces provide integer value although it will
simply parse strings as you've addressed until we have some other
interfaces for sysfs entries in hwmon device drivers.
MyungJoo.
>
> Ben.
>
> --
> Ben Hutchings, Staff Engineer, Solarflare
> Not speaking for my employer; that's the marketing department's job.
> They asked us to note that Solarflare product names are trademarked.
>
>
--
MyungJoo Ham, Ph.D.
Mobile Software Platform Lab, DMC Business, Samsung Electronics
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values.
2011-11-14 1:31 ` MyungJoo Ham
@ 2011-11-14 16:39 ` Jonathan Cameron
2011-11-17 8:22 ` MyungJoo Ham
0 siblings, 1 reply; 10+ messages in thread
From: Jonathan Cameron @ 2011-11-14 16:39 UTC (permalink / raw)
To: myungjoo.ham
Cc: MyungJoo Ham, Ben Hutchings, lm-sensors, linux-kernel,
Jean Delvare, Guenter Roeck, dg77.kim, kyungmin.park
On 11/14/2011 01:31 AM, MyungJoo Ham wrote:
> On Sat, Nov 12, 2011 at 5:46 AM, Ben Hutchings
> <bhutchings@solarflare.com> wrote:
>> On Fri, 2011-11-04 at 15:50 +0900, MyungJoo Ham wrote:
>>> We have been reading hwmon values (TMU, the SoC-core temperature sensor,
>>> and NTC, the ambient or battery surface temperature sensor) for
>>> Charger-Manager. However, because hwmon does not have in-kernel interface,
>>> we have been using undesired method, including "../../../fs/*.h".
>>>
>>> This patch is to provide in-kernel interface for hwmon:
>>> hwmon_get_value and hwmon_set_value. In order to use these two functions,
>>> the hwmon driver should provide its sysfs attributes to hwmon framework
>>> as well. If the hwmon driver does not provide (by providing NULL), the users
>>> of the hwmon won't be able to use hwmon_get/set_value();
>>> The sysfs attribute (struct attribuyte_group *) is provided with
>>> hwmon_device_register; adding the second parameter to hwmon_device_register().
>>> The 2/2 patch shows the changes in device drivers due to this.
>> [...]
>>
>> This is an improvement, but I don't think it is quite enough. As I
>> understand the hwmon sysfs interface, all sensor values should be
>> integers. So the in-kernel interface should also work with integers,
>> not strings.
>>
>> As a first implementation you could perhaps parse the strings back to
>> integers. However in the longer term the driver API should be changed
>> so that hwmon drivers fully describe their sensors to the core and the
>> core takes care of exposing them through sysfs and the in-kernel API.
>
> I agree.
>
> I'll let it the in-kernel interfaces provide integer value although it will
> simply parse strings as you've addressed until we have some other
> interfaces for sysfs entries in hwmon device drivers.
>
>
To throw another option into the mix, you could make it an IIO driver
and sit hwmon on top of that (there is already a simple driver for
doing this) - IIO has in kernel interfaces of the type
you want. Not everything is there yet though.
Jonathan
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values.
2011-11-14 16:39 ` Jonathan Cameron
@ 2011-11-17 8:22 ` MyungJoo Ham
2011-11-17 20:40 ` Jonathan Cameron
0 siblings, 1 reply; 10+ messages in thread
From: MyungJoo Ham @ 2011-11-17 8:22 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Ben Hutchings, lm-sensors, linux-kernel, Jean Delvare,
Guenter Roeck, dg77.kim, kyungmin.park
On Tue, Nov 15, 2011 at 1:39 AM, Jonathan Cameron <jic23@cam.ac.uk> wrote:
> On 11/14/2011 01:31 AM, MyungJoo Ham wrote:
>> On Sat, Nov 12, 2011 at 5:46 AM, Ben Hutchings
>> <bhutchings@solarflare.com> wrote:
>>> On Fri, 2011-11-04 at 15:50 +0900, MyungJoo Ham wrote:
>>>> We have been reading hwmon values (TMU, the SoC-core temperature sensor,
>>>> and NTC, the ambient or battery surface temperature sensor) for
>>>> Charger-Manager. However, because hwmon does not have in-kernel interface,
>>>> we have been using undesired method, including "../../../fs/*.h".
>>>>
>>>> This patch is to provide in-kernel interface for hwmon:
>>>> hwmon_get_value and hwmon_set_value. In order to use these two functions,
>>>> the hwmon driver should provide its sysfs attributes to hwmon framework
>>>> as well. If the hwmon driver does not provide (by providing NULL), the users
>>>> of the hwmon won't be able to use hwmon_get/set_value();
>>>> The sysfs attribute (struct attribuyte_group *) is provided with
>>>> hwmon_device_register; adding the second parameter to hwmon_device_register().
>>>> The 2/2 patch shows the changes in device drivers due to this.
>>> [...]
>>>
>>> This is an improvement, but I don't think it is quite enough. As I
>>> understand the hwmon sysfs interface, all sensor values should be
>>> integers. So the in-kernel interface should also work with integers,
>>> not strings.
>>>
>>> As a first implementation you could perhaps parse the strings back to
>>> integers. However in the longer term the driver API should be changed
>>> so that hwmon drivers fully describe their sensors to the core and the
>>> core takes care of exposing them through sysfs and the in-kernel API.
>>
>> I agree.
>>
>> I'll let it the in-kernel interfaces provide integer value although it will
>> simply parse strings as you've addressed until we have some other
>> interfaces for sysfs entries in hwmon device drivers.
>>
>>
> To throw another option into the mix, you could make it an IIO driver
> and sit hwmon on top of that (there is already a simple driver for
> doing this) - IIO has in kernel interfaces of the type
> you want. Not everything is there yet though.
>
> Jonathan
Yes, we may alter the HWMON drivers to be IIO drivers as well.
However, to me, at least for the HWMON devices I've been looking, IIO
seems to be an overkill and more complex than needed for the target
devices.
Thanks.
Cheers!
MyungJoo
--
MyungJoo Ham, Ph.D.
Mobile Software Platform Lab, DMC Business, Samsung Electronics
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values.
2011-11-17 8:22 ` MyungJoo Ham
@ 2011-11-17 20:40 ` Jonathan Cameron
0 siblings, 0 replies; 10+ messages in thread
From: Jonathan Cameron @ 2011-11-17 20:40 UTC (permalink / raw)
To: MyungJoo Ham
Cc: Ben Hutchings, lm-sensors, linux-kernel, Jean Delvare,
Guenter Roeck, dg77.kim, kyungmin.park
On 11/17/2011 08:22 AM, MyungJoo Ham wrote:
> On Tue, Nov 15, 2011 at 1:39 AM, Jonathan Cameron <jic23@cam.ac.uk> wrote:
>> On 11/14/2011 01:31 AM, MyungJoo Ham wrote:
>>> On Sat, Nov 12, 2011 at 5:46 AM, Ben Hutchings
>>> <bhutchings@solarflare.com> wrote:
>>>> On Fri, 2011-11-04 at 15:50 +0900, MyungJoo Ham wrote:
>>>>> We have been reading hwmon values (TMU, the SoC-core temperature sensor,
>>>>> and NTC, the ambient or battery surface temperature sensor) for
>>>>> Charger-Manager. However, because hwmon does not have in-kernel interface,
>>>>> we have been using undesired method, including "../../../fs/*.h".
>>>>>
>>>>> This patch is to provide in-kernel interface for hwmon:
>>>>> hwmon_get_value and hwmon_set_value. In order to use these two functions,
>>>>> the hwmon driver should provide its sysfs attributes to hwmon framework
>>>>> as well. If the hwmon driver does not provide (by providing NULL), the users
>>>>> of the hwmon won't be able to use hwmon_get/set_value();
>>>>> The sysfs attribute (struct attribuyte_group *) is provided with
>>>>> hwmon_device_register; adding the second parameter to hwmon_device_register().
>>>>> The 2/2 patch shows the changes in device drivers due to this.
>>>> [...]
>>>>
>>>> This is an improvement, but I don't think it is quite enough. As I
>>>> understand the hwmon sysfs interface, all sensor values should be
>>>> integers. So the in-kernel interface should also work with integers,
>>>> not strings.
>>>>
>>>> As a first implementation you could perhaps parse the strings back to
>>>> integers. However in the longer term the driver API should be changed
>>>> so that hwmon drivers fully describe their sensors to the core and the
>>>> core takes care of exposing them through sysfs and the in-kernel API.
>>>
>>> I agree.
>>>
>>> I'll let it the in-kernel interfaces provide integer value although it will
>>> simply parse strings as you've addressed until we have some other
>>> interfaces for sysfs entries in hwmon device drivers.
>>>
>>>
>> To throw another option into the mix, you could make it an IIO driver
>> and sit hwmon on top of that (there is already a simple driver for
>> doing this) - IIO has in kernel interfaces of the type
>> you want. Not everything is there yet though.
>>
>> Jonathan
>
> Yes, we may alter the HWMON drivers to be IIO drivers as well.
>
> However, to me, at least for the HWMON devices I've been looking, IIO
> seems to be an overkill and more complex than needed for the target
> devices.
It should (at least in theory) be very simple for anything like a simple
hwmon device on which one wants to do polled reads.
All you do is allocate an iio_dev, set up the channel descriptions,
register it with the core. Then a map is used to match supplied
channels to their consumers in kernel.
There is a simple hwmon driver that then takes one of these maps if
you want conventional hwmon interfaces. Other interested drivers can
have their own maps.
Anyhow, IIO is complex for some devices, but pretty simple for simple
things (at least it should be!)
Jonathan
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2011-11-17 20:40 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-04 6:50 [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values MyungJoo Ham
2011-11-04 6:50 ` [RFC PATCH 1/2] HWMON: add interfaces to read/write hwmon values inside kernel MyungJoo Ham
2011-11-04 6:50 ` [RFC PATCH 2/2] HWMON: adapt to the HWMON interface changes MyungJoo Ham
2011-11-06 5:53 ` [RFC PATCH 0/2] HWMON: add in-kernel interfaces to read sensor values Guenter Roeck
2011-11-07 4:35 ` MyungJoo Ham
2011-11-11 20:46 ` Ben Hutchings
2011-11-14 1:31 ` MyungJoo Ham
2011-11-14 16:39 ` Jonathan Cameron
2011-11-17 8:22 ` MyungJoo Ham
2011-11-17 20:40 ` Jonathan Cameron
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).