aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-08-05 18:55:36 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-05 18:55:36 -0400
commit161d2e0a195292a8a67b0f5c48e12a9984f75dac (patch)
tree4f3c516ab41737b1e51a58ca3d5f8cca421ae949
parentc489d98c8c81a898cfed6bec193cca2006f956aa (diff)
parentfce9626cd93abaf1ef21b361f8a0fa493cc855b2 (diff)
Merge tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging
Pull hwmon updates from Guenter Roeck: "Notable changes: - Heiko Schocher provided a driver for TI TMP103. - Kamil Debski provided a driver for pwm-controlled fans. - Neelesh Gupta provided a driver for power, fan rpm, voltage and temperature reporting on powerpc/powernv systems. - Scott Kanowitz provided a driver supporting Lattice's POWR1220 power manager IC. - Richard Zhu provided a pmbus front-end driver for TPS40422. - Frans Klaver added support for TMP112 to the lm75 driver. - Johannes Pointner added support for EPCOS B57330V2103 to the ntc_thermistor driver. - Guenter Roeck added support for TMP441 and TMP442 to the tmp421 driver. - Axel Lin converted several drivers to the new hwmon API (36 of them, if I counted correctly), and cleaned up many of the drivers along the way. There are also a number of patches fixing bugs discovered while testing Axel's changes" * tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: (88 commits) hwmon: (g762) Use of_property_read_u32 at appropriate place hwmon: (sis5595) Prevent overflow problem when writing large limits hwmon: (gpio-fan) Prevent overflow problem when writing large limits hwmon: (ibmpowernv) Use of_property_read_u32 at appropriate place hwmon: (lm85) Convert to devm_hwmon_device_register_with_groups hwmon: (lm85) Avoid forward declaration hwmon: (lm78) Convert to devm_hwmon_device_register_with_groups hwmon: (max6697) Use of_property_read_bool at appropriate places hwmon: (pwm-fan) Make SENSORS_PWM_FAN depend on OF hwmon: (pwm-fan) Remove duplicate dev_set_drvdata call hwmon: (nct6775) Remove num_attr_groups from struct nct6775_data hwmon: (nct6775) Update module description and Kconfig for NCT6106D and NCT6791D hwmon: (adt7411) Convert to devm_hwmon_device_register_with_groups hwmon: (g762) Convert to hwmon_device_register_with_groups hwmon: (emc2103) Convert to devm_hwmon_device_register_with_groups hwmon: (smsc47m1) Avoid forward declaration hwmon: (smsc47m192) Convert to devm_hwmon_device_register_with_groups hwmon: (smsc47m192) Avoid forward declaration hwmon: (max1668) Make max1668_addr_list array const hwmon: (max6639) Make normal_i2c array const ...
-rw-r--r--Documentation/devicetree/bindings/hwmon/ibmpowernv.txt23
-rw-r--r--Documentation/devicetree/bindings/hwmon/ntc_thermistor.txt1
-rw-r--r--Documentation/devicetree/bindings/hwmon/pwm-fan.txt12
-rw-r--r--Documentation/devicetree/bindings/i2c/trivial-devices.txt1
-rw-r--r--Documentation/devicetree/bindings/vendor-prefixes.txt1
-rw-r--r--Documentation/hwmon/ibmpowernv41
-rw-r--r--Documentation/hwmon/lm755
-rw-r--r--Documentation/hwmon/ntc_thermistor5
-rw-r--r--Documentation/hwmon/pmbus5
-rw-r--r--Documentation/hwmon/powr122045
-rw-r--r--Documentation/hwmon/pwm-fan17
-rw-r--r--Documentation/hwmon/tmp10328
-rw-r--r--Documentation/hwmon/tmp42126
-rw-r--r--Documentation/hwmon/tps4042264
-rw-r--r--drivers/hwmon/Kconfig57
-rw-r--r--drivers/hwmon/Makefile4
-rw-r--r--drivers/hwmon/ad7414.c57
-rw-r--r--drivers/hwmon/ad7418.c133
-rw-r--r--drivers/hwmon/adm1021.c175
-rw-r--r--drivers/hwmon/adm1025.c231
-rw-r--r--drivers/hwmon/adm1026.c588
-rw-r--r--drivers/hwmon/adm1029.c208
-rw-r--r--drivers/hwmon/adm1031.c349
-rw-r--r--drivers/hwmon/adm9240.c339
-rw-r--r--drivers/hwmon/ads1015.c2
-rw-r--r--drivers/hwmon/ads7828.c52
-rw-r--r--drivers/hwmon/adt7411.c59
-rw-r--r--drivers/hwmon/adt7462.c142
-rw-r--r--drivers/hwmon/adt7470.c163
-rw-r--r--drivers/hwmon/amc6821.c397
-rw-r--r--drivers/hwmon/asc7621.c14
-rw-r--r--drivers/hwmon/atxp1.c76
-rw-r--r--drivers/hwmon/ds620.c60
-rw-r--r--drivers/hwmon/emc1403.c2
-rw-r--r--drivers/hwmon/emc2103.c89
-rw-r--r--drivers/hwmon/emc6w201.c64
-rw-r--r--drivers/hwmon/fam15h_power.c54
-rw-r--r--drivers/hwmon/g760a.c84
-rw-r--r--drivers/hwmon/g762.c78
-rw-r--r--drivers/hwmon/gl518sm.c319
-rw-r--r--drivers/hwmon/gl520sm.c353
-rw-r--r--drivers/hwmon/gpio-fan.c19
-rw-r--r--drivers/hwmon/hih6130.c88
-rw-r--r--drivers/hwmon/htu21.c69
-rw-r--r--drivers/hwmon/ibmpowernv.c363
-rw-r--r--drivers/hwmon/lineage-pem.c66
-rw-r--r--drivers/hwmon/lm63.c27
-rw-r--r--drivers/hwmon/lm75.c8
-rw-r--r--drivers/hwmon/lm77.c11
-rw-r--r--drivers/hwmon/lm78.c100
-rw-r--r--drivers/hwmon/lm85.c660
-rw-r--r--drivers/hwmon/lm93.c154
-rw-r--r--drivers/hwmon/ltc2945.c2
-rw-r--r--drivers/hwmon/ltc4222.c2
-rw-r--r--drivers/hwmon/ltc4260.c2
-rw-r--r--drivers/hwmon/max16065.c5
-rw-r--r--drivers/hwmon/max1668.c2
-rw-r--r--drivers/hwmon/max6639.c2
-rw-r--r--drivers/hwmon/max6697.c16
-rw-r--r--drivers/hwmon/nct6775.c14
-rw-r--r--drivers/hwmon/ntc_thermistor.c50
-rw-r--r--drivers/hwmon/pmbus/Kconfig13
-rw-r--r--drivers/hwmon/pmbus/Makefile1
-rw-r--r--drivers/hwmon/pmbus/pmbus.c1
-rw-r--r--drivers/hwmon/pmbus/tps40422.c64
-rw-r--r--drivers/hwmon/powr1220.c391
-rw-r--r--drivers/hwmon/pwm-fan.c193
-rw-r--r--drivers/hwmon/sht21.c82
-rw-r--r--drivers/hwmon/sis5595.c2
-rw-r--r--drivers/hwmon/smm665.c44
-rw-r--r--drivers/hwmon/smsc47m1.c115
-rw-r--r--drivers/hwmon/smsc47m192.c232
-rw-r--r--drivers/hwmon/thmc50.c212
-rw-r--r--drivers/hwmon/tmp103.c206
-rw-r--r--drivers/hwmon/tmp421.c39
-rw-r--r--drivers/hwmon/twl4030-madc-hwmon.c38
-rw-r--r--drivers/hwmon/w83791d.c15
-rw-r--r--drivers/hwmon/w83l786ng.c289
-rw-r--r--drivers/hwmon/wm831x-hwmon.c72
-rw-r--r--drivers/hwmon/wm8350-hwmon.c50
-rw-r--r--include/linux/platform_data/ntc_thermistor.h1
81 files changed, 4258 insertions, 3885 deletions
diff --git a/Documentation/devicetree/bindings/hwmon/ibmpowernv.txt b/Documentation/devicetree/bindings/hwmon/ibmpowernv.txt
new file mode 100644
index 000000000000..f93242be60a1
--- /dev/null
+++ b/Documentation/devicetree/bindings/hwmon/ibmpowernv.txt
@@ -0,0 +1,23 @@
1IBM POWERNV platform sensors
2----------------------------
3
4Required node properties:
5- compatible: must be one of
6 "ibm,opal-sensor-cooling-fan"
7 "ibm,opal-sensor-amb-temp"
8 "ibm,opal-sensor-power-supply"
9 "ibm,opal-sensor-power"
10- sensor-id: an opaque id provided by the firmware to the kernel, identifies a
11 given sensor and its attribute data
12
13Example sensors node:
14
15cooling-fan#8-data {
16 sensor-id = <0x7052107>;
17 compatible = "ibm,opal-sensor-cooling-fan";
18};
19
20amb-temp#1-thrs {
21 sensor-id = <0x5096000>;
22 compatible = "ibm,opal-sensor-amb-temp";
23};
diff --git a/Documentation/devicetree/bindings/hwmon/ntc_thermistor.txt b/Documentation/devicetree/bindings/hwmon/ntc_thermistor.txt
index b117b2e9e1a7..2391e5c41999 100644
--- a/Documentation/devicetree/bindings/hwmon/ntc_thermistor.txt
+++ b/Documentation/devicetree/bindings/hwmon/ntc_thermistor.txt
@@ -3,6 +3,7 @@ NTC Thermistor hwmon sensors
3 3
4Requires node properties: 4Requires node properties:
5- "compatible" value : one of 5- "compatible" value : one of
6 "epcos,b57330v2103"
6 "murata,ncp15wb473" 7 "murata,ncp15wb473"
7 "murata,ncp18wb473" 8 "murata,ncp18wb473"
8 "murata,ncp21wb473" 9 "murata,ncp21wb473"
diff --git a/Documentation/devicetree/bindings/hwmon/pwm-fan.txt b/Documentation/devicetree/bindings/hwmon/pwm-fan.txt
new file mode 100644
index 000000000000..610757ce4492
--- /dev/null
+++ b/Documentation/devicetree/bindings/hwmon/pwm-fan.txt
@@ -0,0 +1,12 @@
1Bindings for a fan connected to the PWM lines
2
3Required properties:
4- compatible : "pwm-fan"
5- pwms : the PWM that is used to control the PWM fan
6
7Example:
8 pwm-fan {
9 compatible = "pwm-fan";
10 status = "okay";
11 pwms = <&pwm 0 10000 0>;
12 };
diff --git a/Documentation/devicetree/bindings/i2c/trivial-devices.txt b/Documentation/devicetree/bindings/i2c/trivial-devices.txt
index 1a794213f7d1..37803eb5521e 100644
--- a/Documentation/devicetree/bindings/i2c/trivial-devices.txt
+++ b/Documentation/devicetree/bindings/i2c/trivial-devices.txt
@@ -84,5 +84,6 @@ stm,m41t80 M41T80 - SERIAL ACCESS RTC WITH ALARMS
84taos,tsl2550 Ambient Light Sensor with SMBUS/Two Wire Serial Interface 84taos,tsl2550 Ambient Light Sensor with SMBUS/Two Wire Serial Interface
85ti,tsc2003 I2C Touch-Screen Controller 85ti,tsc2003 I2C Touch-Screen Controller
86ti,tmp102 Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface 86ti,tmp102 Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface
87ti,tmp103 Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface
87ti,tmp275 Digital Temperature Sensor 88ti,tmp275 Digital Temperature Sensor
88winbond,wpct301 i2c trusted platform module (TPM) 89winbond,wpct301 i2c trusted platform module (TPM)
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 46a311e728a8..97c9c06132c4 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -42,6 +42,7 @@ dmo Data Modul AG
42ebv EBV Elektronik 42ebv EBV Elektronik
43edt Emerging Display Technologies 43edt Emerging Display Technologies
44emmicro EM Microelectronic 44emmicro EM Microelectronic
45epcos EPCOS AG
45epfl Ecole Polytechnique Fédérale de Lausanne 46epfl Ecole Polytechnique Fédérale de Lausanne
46epson Seiko Epson Corp. 47epson Seiko Epson Corp.
47est ESTeem Wireless Modems 48est ESTeem Wireless Modems
diff --git a/Documentation/hwmon/ibmpowernv b/Documentation/hwmon/ibmpowernv
new file mode 100644
index 000000000000..8826ba29db36
--- /dev/null
+++ b/Documentation/hwmon/ibmpowernv
@@ -0,0 +1,41 @@
1Kernel Driver IBMPOWERNV
2========================
3
4Supported systems:
5 * Any recent IBM P servers based on POWERNV platform
6
7Author: Neelesh Gupta
8
9Description
10-----------
11
12This driver implements reading the platform sensors data like temperature/fan/
13voltage/power for 'POWERNV' platform.
14
15The driver uses the platform device infrastructure. It probes the device tree
16for sensor devices during the __init phase and registers them with the 'hwmon'.
17'hwmon' populates the 'sysfs' tree having attribute files, each for a given
18sensor type and its attribute data.
19
20All the nodes in the DT appear under "/ibm,opal/sensors" and each valid node in
21the DT maps to an attribute file in 'sysfs'. The node exports unique 'sensor-id'
22which the driver uses to make an OPAL call to the firmware.
23
24Usage notes
25-----------
26The driver is built statically with the kernel by enabling the config
27CONFIG_SENSORS_IBMPOWERNV. It can also be built as module 'ibmpowernv'.
28
29Sysfs attributes
30----------------
31
32fanX_input Measured RPM value.
33fanX_min Threshold RPM for alert generation.
34fanX_fault 0: No fail condition
35 1: Failing fan
36tempX_input Measured ambient temperature.
37tempX_max Threshold ambient temperature for alert generation.
38inX_input Measured power supply voltage
39inX_fault 0: No fail condition.
40 1: Failing power supply.
41power1_input System power consumption (microWatt)
diff --git a/Documentation/hwmon/lm75 b/Documentation/hwmon/lm75
index 2560a9c6d445..c6a5ff1b4641 100644
--- a/Documentation/hwmon/lm75
+++ b/Documentation/hwmon/lm75
@@ -42,13 +42,14 @@ Supported chips:
42 Addresses scanned: none 42 Addresses scanned: none
43 Datasheet: Publicly available at the ST website 43 Datasheet: Publicly available at the ST website
44 http://www.st.com/internet/analog/product/121769.jsp 44 http://www.st.com/internet/analog/product/121769.jsp
45 * Texas Instruments TMP100, TMP101, TMP105, TMP75, TMP175, TMP275 45 * Texas Instruments TMP100, TMP101, TMP105, TMP112, TMP75, TMP175, TMP275
46 Prefixes: 'tmp100', 'tmp101', 'tmp105', 'tmp175', 'tmp75', 'tmp275' 46 Prefixes: 'tmp100', 'tmp101', 'tmp105', 'tmp112', 'tmp175', 'tmp75', 'tmp275'
47 Addresses scanned: none 47 Addresses scanned: none
48 Datasheet: Publicly available at the Texas Instruments website 48 Datasheet: Publicly available at the Texas Instruments website
49 http://www.ti.com/product/tmp100 49 http://www.ti.com/product/tmp100
50 http://www.ti.com/product/tmp101 50 http://www.ti.com/product/tmp101
51 http://www.ti.com/product/tmp105 51 http://www.ti.com/product/tmp105
52 http://www.ti.com/product/tmp112
52 http://www.ti.com/product/tmp75 53 http://www.ti.com/product/tmp75
53 http://www.ti.com/product/tmp175 54 http://www.ti.com/product/tmp175
54 http://www.ti.com/product/tmp275 55 http://www.ti.com/product/tmp275
diff --git a/Documentation/hwmon/ntc_thermistor b/Documentation/hwmon/ntc_thermistor
index 057b77029f26..c5e05e2900a3 100644
--- a/Documentation/hwmon/ntc_thermistor
+++ b/Documentation/hwmon/ntc_thermistor
@@ -6,6 +6,11 @@ Supported thermistors from Murata:
6 Prefixes: 'ncp15wb473', 'ncp18wb473', 'ncp21wb473', 'ncp03wb473', 'ncp15wl333' 6 Prefixes: 'ncp15wb473', 'ncp18wb473', 'ncp21wb473', 'ncp03wb473', 'ncp15wl333'
7 Datasheet: Publicly available at Murata 7 Datasheet: Publicly available at Murata
8 8
9Supported thermistors from EPCOS:
10* EPCOS NTC Thermistors B57330V2103
11 Prefixes: b57330v2103
12 Datasheet: Publicly available at EPCOS
13
9Other NTC thermistors can be supported simply by adding compensation 14Other NTC thermistors can be supported simply by adding compensation
10tables; e.g., NCP15WL333 support is added by the table ncpXXwl333. 15tables; e.g., NCP15WL333 support is added by the table ncpXXwl333.
11 16
diff --git a/Documentation/hwmon/pmbus b/Documentation/hwmon/pmbus
index cf756ed48ff9..a3557da8f5b4 100644
--- a/Documentation/hwmon/pmbus
+++ b/Documentation/hwmon/pmbus
@@ -23,12 +23,11 @@ Supported chips:
23 http://www.lineagepower.com/oem/pdf/PDT012A0X.pdf 23 http://www.lineagepower.com/oem/pdf/PDT012A0X.pdf
24 http://www.lineagepower.com/oem/pdf/UDT020A0X.pdf 24 http://www.lineagepower.com/oem/pdf/UDT020A0X.pdf
25 http://www.lineagepower.com/oem/pdf/MDT040A0X.pdf 25 http://www.lineagepower.com/oem/pdf/MDT040A0X.pdf
26 * Texas Instruments TPS40400, TPS40422 26 * Texas Instruments TPS40400
27 Prefixes: 'tps40400', 'tps40422' 27 Prefixes: 'tps40400'
28 Addresses scanned: - 28 Addresses scanned: -
29 Datasheets: 29 Datasheets:
30 http://www.ti.com/lit/gpn/tps40400 30 http://www.ti.com/lit/gpn/tps40400
31 http://www.ti.com/lit/gpn/tps40422
32 * Generic PMBus devices 31 * Generic PMBus devices
33 Prefix: 'pmbus' 32 Prefix: 'pmbus'
34 Addresses scanned: - 33 Addresses scanned: -
diff --git a/Documentation/hwmon/powr1220 b/Documentation/hwmon/powr1220
new file mode 100644
index 000000000000..21e44f71ae6e
--- /dev/null
+++ b/Documentation/hwmon/powr1220
@@ -0,0 +1,45 @@
1Kernel driver powr1220
2==================
3
4Supported chips:
5 * Lattice POWR1220AT8
6 Prefix: 'powr1220'
7 Addresses scanned: none
8 Datasheet: Publicly available at the Lattice website
9 http://www.latticesemi.com/
10
11Author: Scott Kanowitz <scott.kanowitz@gmail.com>
12
13Description
14-----------
15
16This driver supports the Lattice POWR1220AT8 chip. The POWR1220
17includes voltage monitoring for 14 inputs as well as trim settings
18for output voltages and GPIOs. This driver implements the voltage
19monitoring portion of the chip.
20
21Voltages are sampled by a 12-bit ADC with a step size of 2 mV.
22An in-line attenuator allows measurements from 0 to 6 V. The
23attenuator is enabled or disabled depending on the setting of the
24input's max value. The driver will enable the attenuator for any
25value over the low measurement range maximum of 2 V.
26
27The input naming convention is as follows:
28
29driver name pin name
30in0 VMON1
31in1 VMON2
32in2 VMON3
33in2 VMON4
34in4 VMON5
35in5 VMON6
36in6 VMON7
37in7 VMON8
38in8 VMON9
39in9 VMON10
40in10 VMON11
41in11 VMON12
42in12 VCCA
43in13 VCCINP
44
45The ADC readings are updated on request with a minimum period of 1s.
diff --git a/Documentation/hwmon/pwm-fan b/Documentation/hwmon/pwm-fan
new file mode 100644
index 000000000000..18529d2e3bcf
--- /dev/null
+++ b/Documentation/hwmon/pwm-fan
@@ -0,0 +1,17 @@
1Kernel driver pwm-fan
2=====================
3
4This driver enables the use of a PWM module to drive a fan. It uses the
5generic PWM interface thus it is hardware independent. It can be used on
6many SoCs, as long as the SoC supplies a PWM line driver that exposes
7the generic PWM API.
8
9Author: Kamil Debski <k.debski@samsung.com>
10
11Description
12-----------
13
14The driver implements a simple interface for driving a fan connected to
15a PWM output. It uses the generic PWM interface, thus it can be used with
16a range of SoCs. The driver exposes the fan to the user space through
17the hwmon's sysfs interface.
diff --git a/Documentation/hwmon/tmp103 b/Documentation/hwmon/tmp103
new file mode 100644
index 000000000000..ec00a15645ba
--- /dev/null
+++ b/Documentation/hwmon/tmp103
@@ -0,0 +1,28 @@
1Kernel driver tmp103
2====================
3
4Supported chips:
5 * Texas Instruments TMP103
6 Prefix: 'tmp103'
7 Addresses scanned: none
8 Product info and datasheet: http://www.ti.com/product/tmp103
9
10Author:
11 Heiko Schocher <hs@denx.de>
12
13Description
14-----------
15
16The TMP103 is a digital output temperature sensor in a four-ball
17wafer chip-scale package (WCSP). The TMP103 is capable of reading
18temperatures to a resolution of 1°C. The TMP103 is specified for
19operation over a temperature range of –40°C to +125°C.
20
21Resolution: 8 Bits
22Accuracy: ±1°C Typ (–10°C to +100°C)
23
24The driver provides the common sysfs-interface for temperatures (see
25Documentation/hwmon/sysfs-interface under Temperatures).
26
27Please refer how to instantiate this driver:
28Documentation/i2c/instantiating-devices
diff --git a/Documentation/hwmon/tmp421 b/Documentation/hwmon/tmp421
index 0cf07f824741..9e6fe5549ca1 100644
--- a/Documentation/hwmon/tmp421
+++ b/Documentation/hwmon/tmp421
@@ -8,12 +8,20 @@ Supported chips:
8 Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp421.html 8 Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp421.html
9 * Texas Instruments TMP422 9 * Texas Instruments TMP422
10 Prefix: 'tmp422' 10 Prefix: 'tmp422'
11 Addresses scanned: I2C 0x2a, 0x4c, 0x4d, 0x4e and 0x4f 11 Addresses scanned: I2C 0x4c, 0x4d, 0x4e and 0x4f
12 Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp421.html 12 Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp421.html
13 * Texas Instruments TMP423 13 * Texas Instruments TMP423
14 Prefix: 'tmp423' 14 Prefix: 'tmp423'
15 Addresses scanned: I2C 0x2a, 0x4c, 0x4d, 0x4e and 0x4f 15 Addresses scanned: I2C 0x4c and 0x4d
16 Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp421.html 16 Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp421.html
17 * Texas Instruments TMP441
18 Prefix: 'tmp441'
19 Addresses scanned: I2C 0x2a, 0x4c, 0x4d, 0x4e and 0x4f
20 Datasheet: http://www.ti.com/product/tmp441
21 * Texas Instruments TMP442
22 Prefix: 'tmp442'
23 Addresses scanned: I2C 0x4c and 0x4d
24 Datasheet: http://www.ti.com/product/tmp442
17 25
18Authors: 26Authors:
19 Andre Prendel <andre.prendel@gmx.de> 27 Andre Prendel <andre.prendel@gmx.de>
@@ -21,13 +29,13 @@ Authors:
21Description 29Description
22----------- 30-----------
23 31
24This driver implements support for Texas Instruments TMP421, TMP422 32This driver implements support for Texas Instruments TMP421, TMP422,
25and TMP423 temperature sensor chips. These chips implement one local 33TMP423, TMP441, and TMP442 temperature sensor chips. These chips
26and up to one (TMP421), up to two (TMP422) or up to three (TMP423) 34implement one local and up to one (TMP421, TMP441), up to two (TMP422,
27remote sensors. Temperature is measured in degrees Celsius. The chips 35TMP442) or up to three (TMP423) remote sensors. Temperature is measured
28are wired over I2C/SMBus and specified over a temperature range of -40 36in degrees Celsius. The chips are wired over I2C/SMBus and specified
29to +125 degrees Celsius. Resolution for both the local and remote 37over a temperature range of -40 to +125 degrees Celsius. Resolution
30channels is 0.0625 degree C. 38for both the local and remote channels is 0.0625 degree C.
31 39
32The chips support only temperature measurement. The driver exports 40The chips support only temperature measurement. The driver exports
33the temperature values via the following sysfs files: 41the temperature values via the following sysfs files:
diff --git a/Documentation/hwmon/tps40422 b/Documentation/hwmon/tps40422
new file mode 100644
index 000000000000..24bb0688d515
--- /dev/null
+++ b/Documentation/hwmon/tps40422
@@ -0,0 +1,64 @@
1Kernel driver tps40422
2======================
3
4Supported chips:
5 * TI TPS40422
6 Prefix: 'tps40422'
7 Addresses scanned: -
8 Datasheet: http://www.ti.com/lit/gpn/tps40422
9
10Author: Zhu Laiwen <richard.zhu@nsn.com>
11
12
13Description
14-----------
15
16This driver supports TI TPS40422 Dual-Output or Two-Phase Synchronous Buck
17Controller with PMBus
18
19The driver is a client driver to the core PMBus driver.
20Please see Documentation/hwmon/pmbus for details on PMBus client drivers.
21
22
23Usage Notes
24-----------
25
26This driver does not auto-detect devices. You will have to instantiate the
27devices explicitly. Please see Documentation/i2c/instantiating-devices for
28details.
29
30
31Platform data support
32---------------------
33
34The driver supports standard PMBus driver platform data.
35
36
37Sysfs entries
38-------------
39
40The following attributes are supported.
41
42in[1-2]_label "vout[1-2]"
43in[1-2]_input Measured voltage. From READ_VOUT register.
44in[1-2]_alarm voltage alarm.
45
46curr[1-2]_input Measured current. From READ_IOUT register.
47curr[1-2]_label "iout[1-2]"
48curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register.
49curr1_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register.
50curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT status.
51curr1_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status.
52curr2_alarm Current high alarm. From IOUT_OC_WARNING status.
53
54temp1_input Measured temperature. From READ_TEMPERATURE_2 register on page 0.
55temp1_max Maximum temperature. From OT_WARN_LIMIT register.
56temp1_crit Critical high temperature. From OT_FAULT_LIMIT register.
57temp1_max_alarm Chip temperature high alarm. Set by comparing
58 READ_TEMPERATURE_2 on page 0 with OT_WARN_LIMIT if TEMP_OT_WARNING
59 status is set.
60temp1_crit_alarm Chip temperature critical high alarm. Set by comparing
61 READ_TEMPERATURE_2 on page 0 with OT_FAULT_LIMIT if TEMP_OT_FAULT
62 status is set.
63temp2_input Measured temperature. From READ_TEMPERATURE_2 register on page 1.
64temp2_alarm Chip temperature alarm on page 1.
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 02d3d85829f3..f00d048aa583 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -554,6 +554,17 @@ config SENSORS_IBMPEX
554 This driver can also be built as a module. If so, the module 554 This driver can also be built as a module. If so, the module
555 will be called ibmpex. 555 will be called ibmpex.
556 556
557config SENSORS_IBMPOWERNV
558 tristate "IBM POWERNV platform sensors"
559 depends on PPC_POWERNV
560 default y
561 help
562 If you say yes here you get support for the temperature/fan/power
563 sensors on your PowerNV platform.
564
565 This driver can also be built as a module. If so, the module
566 will be called ibmpowernv.
567
557config SENSORS_IIO_HWMON 568config SENSORS_IIO_HWMON
558 tristate "Hwmon driver that uses channels specified via iio maps" 569 tristate "Hwmon driver that uses channels specified via iio maps"
559 depends on IIO 570 depends on IIO
@@ -608,6 +619,18 @@ config SENSORS_JC42
608 This driver can also be built as a module. If so, the module 619 This driver can also be built as a module. If so, the module
609 will be called jc42. 620 will be called jc42.
610 621
622config SENSORS_POWR1220
623 tristate "Lattice POWR1220 Power Monitoring"
624 depends on I2C
625 default n
626 help
627 If you say yes here you get access to the hardware monitoring
628 functions of the Lattice POWR1220 isp Power Supply Monitoring,
629 Sequencing and Margining Controller.
630
631 This driver can also be built as a module. If so, the module
632 will be called powr1220.
633
611config SENSORS_LINEAGE 634config SENSORS_LINEAGE
612 tristate "Lineage Compact Power Line Power Entry Module" 635 tristate "Lineage Compact Power Line Power Entry Module"
613 depends on I2C 636 depends on I2C
@@ -882,8 +905,8 @@ config SENSORS_LM75
882 - NXP's LM75A 905 - NXP's LM75A
883 - ST Microelectronics STDS75 906 - ST Microelectronics STDS75
884 - TelCom (now Microchip) TCN75 907 - TelCom (now Microchip) TCN75
885 - Texas Instruments TMP100, TMP101, TMP105, TMP75, TMP175, 908 - Texas Instruments TMP100, TMP101, TMP105, TMP112, TMP75,
886 TMP275 909 TMP175, TMP275
887 910
888 This driver supports driver model based binding through board 911 This driver supports driver model based binding through board
889 specific I2C device tables. 912 specific I2C device tables.
@@ -1061,7 +1084,7 @@ config SENSORS_NTC_THERMISTOR
1061 1084
1062 Currently, this driver supports 1085 Currently, this driver supports
1063 NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, and NCP15WL333 1086 NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, and NCP15WL333
1064 from Murata. 1087 from Murata and B57330V2103 from EPCOS.
1065 1088
1066 This driver can also be built as a module. If so, the module 1089 This driver can also be built as a module. If so, the module
1067 will be called ntc-thermistor. 1090 will be called ntc-thermistor.
@@ -1082,8 +1105,8 @@ config SENSORS_NCT6775
1082 select HWMON_VID 1105 select HWMON_VID
1083 help 1106 help
1084 If you say yes here you get support for the hardware monitoring 1107 If you say yes here you get support for the hardware monitoring
1085 functionality of the Nuvoton NCT6775F, NCT6776F, NCT6779D 1108 functionality of the Nuvoton NCT6106D, NCT6775F, NCT6776F, NCT6779D,
1086 and compatible Super-I/O chips. This driver replaces the 1109 NCT6791D and compatible Super-I/O chips. This driver replaces the
1087 w83627ehf driver for NCT6775F and NCT6776F. 1110 w83627ehf driver for NCT6775F and NCT6776F.
1088 1111
1089 This driver can also be built as a module. If so, the module 1112 This driver can also be built as a module. If so, the module
@@ -1105,6 +1128,17 @@ config SENSORS_PCF8591
1105 1128
1106source drivers/hwmon/pmbus/Kconfig 1129source drivers/hwmon/pmbus/Kconfig
1107 1130
1131config SENSORS_PWM_FAN
1132 tristate "PWM fan"
1133 depends on (PWM && OF) || COMPILE_TEST
1134 help
1135 If you say yes here you get support for fans connected to PWM lines.
1136 The driver uses the generic PWM interface, thus it will work on a
1137 variety of SoCs.
1138
1139 This driver can also be built as a module. If so, the module
1140 will be called pwm-fan.
1141
1108config SENSORS_SHT15 1142config SENSORS_SHT15
1109 tristate "Sensiron humidity and temperature sensors. SHT15 and compat." 1143 tristate "Sensiron humidity and temperature sensors. SHT15 and compat."
1110 depends on GPIOLIB 1144 depends on GPIOLIB
@@ -1393,6 +1427,17 @@ config SENSORS_TMP102
1393 This driver can also be built as a module. If so, the module 1427 This driver can also be built as a module. If so, the module
1394 will be called tmp102. 1428 will be called tmp102.
1395 1429
1430config SENSORS_TMP103
1431 tristate "Texas Instruments TMP103"
1432 depends on I2C
1433 select REGMAP_I2C
1434 help
1435 If you say yes here you get support for Texas Instruments TMP103
1436 sensor chips.
1437
1438 This driver can also be built as a module. If so, the module
1439 will be called tmp103.
1440
1396config SENSORS_TMP401 1441config SENSORS_TMP401
1397 tristate "Texas Instruments TMP401 and compatibles" 1442 tristate "Texas Instruments TMP401 and compatibles"
1398 depends on I2C 1443 depends on I2C
@@ -1408,7 +1453,7 @@ config SENSORS_TMP421
1408 depends on I2C 1453 depends on I2C
1409 help 1454 help
1410 If you say yes here you get support for Texas Instruments TMP421, 1455 If you say yes here you get support for Texas Instruments TMP421,
1411 TMP422 and TMP423 temperature sensor chips. 1456 TMP422, TMP423, TMP441, and TMP442 temperature sensor chips.
1412 1457
1413 This driver can also be built as a module. If so, the module 1458 This driver can also be built as a module. If so, the module
1414 will be called tmp421. 1459 will be called tmp421.
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index 3dc0f02f71d2..be28152c9848 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -71,6 +71,7 @@ obj-$(CONFIG_SENSORS_ULTRA45) += ultra45_env.o
71obj-$(CONFIG_SENSORS_I5K_AMB) += i5k_amb.o 71obj-$(CONFIG_SENSORS_I5K_AMB) += i5k_amb.o
72obj-$(CONFIG_SENSORS_IBMAEM) += ibmaem.o 72obj-$(CONFIG_SENSORS_IBMAEM) += ibmaem.o
73obj-$(CONFIG_SENSORS_IBMPEX) += ibmpex.o 73obj-$(CONFIG_SENSORS_IBMPEX) += ibmpex.o
74obj-$(CONFIG_SENSORS_IBMPOWERNV)+= ibmpowernv.o
74obj-$(CONFIG_SENSORS_IIO_HWMON) += iio_hwmon.o 75obj-$(CONFIG_SENSORS_IIO_HWMON) += iio_hwmon.o
75obj-$(CONFIG_SENSORS_INA209) += ina209.o 76obj-$(CONFIG_SENSORS_INA209) += ina209.o
76obj-$(CONFIG_SENSORS_INA2XX) += ina2xx.o 77obj-$(CONFIG_SENSORS_INA2XX) += ina2xx.o
@@ -120,6 +121,8 @@ obj-$(CONFIG_SENSORS_NTC_THERMISTOR) += ntc_thermistor.o
120obj-$(CONFIG_SENSORS_PC87360) += pc87360.o 121obj-$(CONFIG_SENSORS_PC87360) += pc87360.o
121obj-$(CONFIG_SENSORS_PC87427) += pc87427.o 122obj-$(CONFIG_SENSORS_PC87427) += pc87427.o
122obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o 123obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
124obj-$(CONFIG_SENSORS_POWR1220) += powr1220.o
125obj-$(CONFIG_SENSORS_PWM_FAN) += pwm-fan.o
123obj-$(CONFIG_SENSORS_S3C) += s3c-hwmon.o 126obj-$(CONFIG_SENSORS_S3C) += s3c-hwmon.o
124obj-$(CONFIG_SENSORS_SCH56XX_COMMON)+= sch56xx-common.o 127obj-$(CONFIG_SENSORS_SCH56XX_COMMON)+= sch56xx-common.o
125obj-$(CONFIG_SENSORS_SCH5627) += sch5627.o 128obj-$(CONFIG_SENSORS_SCH5627) += sch5627.o
@@ -135,6 +138,7 @@ obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
135obj-$(CONFIG_SENSORS_AMC6821) += amc6821.o 138obj-$(CONFIG_SENSORS_AMC6821) += amc6821.o
136obj-$(CONFIG_SENSORS_THMC50) += thmc50.o 139obj-$(CONFIG_SENSORS_THMC50) += thmc50.o
137obj-$(CONFIG_SENSORS_TMP102) += tmp102.o 140obj-$(CONFIG_SENSORS_TMP102) += tmp102.o
141obj-$(CONFIG_SENSORS_TMP103) += tmp103.o
138obj-$(CONFIG_SENSORS_TMP401) += tmp401.o 142obj-$(CONFIG_SENSORS_TMP401) += tmp401.o
139obj-$(CONFIG_SENSORS_TMP421) += tmp421.o 143obj-$(CONFIG_SENSORS_TMP421) += tmp421.o
140obj-$(CONFIG_SENSORS_TWL4030_MADC)+= twl4030-madc-hwmon.o 144obj-$(CONFIG_SENSORS_TWL4030_MADC)+= twl4030-madc-hwmon.o
diff --git a/drivers/hwmon/ad7414.c b/drivers/hwmon/ad7414.c
index 5d501adc3e54..763490acc0df 100644
--- a/drivers/hwmon/ad7414.c
+++ b/drivers/hwmon/ad7414.c
@@ -39,7 +39,7 @@
39static u8 AD7414_REG_LIMIT[] = { AD7414_REG_T_HIGH, AD7414_REG_T_LOW }; 39static u8 AD7414_REG_LIMIT[] = { AD7414_REG_T_HIGH, AD7414_REG_T_LOW };
40 40
41struct ad7414_data { 41struct ad7414_data {
42 struct device *hwmon_dev; 42 struct i2c_client *client;
43 struct mutex lock; /* atomic read data updates */ 43 struct mutex lock; /* atomic read data updates */
44 char valid; /* !=0 if following fields are valid */ 44 char valid; /* !=0 if following fields are valid */
45 unsigned long next_update; /* In jiffies */ 45 unsigned long next_update; /* In jiffies */
@@ -72,8 +72,8 @@ static inline int ad7414_write(struct i2c_client *client, u8 reg, u8 value)
72 72
73static struct ad7414_data *ad7414_update_device(struct device *dev) 73static struct ad7414_data *ad7414_update_device(struct device *dev)
74{ 74{
75 struct i2c_client *client = to_i2c_client(dev); 75 struct ad7414_data *data = dev_get_drvdata(dev);
76 struct ad7414_data *data = i2c_get_clientdata(client); 76 struct i2c_client *client = data->client;
77 77
78 mutex_lock(&data->lock); 78 mutex_lock(&data->lock);
79 79
@@ -127,8 +127,8 @@ static ssize_t set_max_min(struct device *dev,
127 struct device_attribute *attr, 127 struct device_attribute *attr,
128 const char *buf, size_t count) 128 const char *buf, size_t count)
129{ 129{
130 struct i2c_client *client = to_i2c_client(dev); 130 struct ad7414_data *data = dev_get_drvdata(dev);
131 struct ad7414_data *data = i2c_get_clientdata(client); 131 struct i2c_client *client = data->client;
132 int index = to_sensor_dev_attr(attr)->index; 132 int index = to_sensor_dev_attr(attr)->index;
133 u8 reg = AD7414_REG_LIMIT[index]; 133 u8 reg = AD7414_REG_LIMIT[index];
134 long temp; 134 long temp;
@@ -164,7 +164,7 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
164static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 3); 164static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 3);
165static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 4); 165static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 4);
166 166
167static struct attribute *ad7414_attributes[] = { 167static struct attribute *ad7414_attrs[] = {
168 &sensor_dev_attr_temp1_input.dev_attr.attr, 168 &sensor_dev_attr_temp1_input.dev_attr.attr,
169 &sensor_dev_attr_temp1_max.dev_attr.attr, 169 &sensor_dev_attr_temp1_max.dev_attr.attr,
170 &sensor_dev_attr_temp1_min.dev_attr.attr, 170 &sensor_dev_attr_temp1_min.dev_attr.attr,
@@ -173,27 +173,25 @@ static struct attribute *ad7414_attributes[] = {
173 NULL 173 NULL
174}; 174};
175 175
176static const struct attribute_group ad7414_group = { 176ATTRIBUTE_GROUPS(ad7414);
177 .attrs = ad7414_attributes,
178};
179 177
180static int ad7414_probe(struct i2c_client *client, 178static int ad7414_probe(struct i2c_client *client,
181 const struct i2c_device_id *dev_id) 179 const struct i2c_device_id *dev_id)
182{ 180{
181 struct device *dev = &client->dev;
183 struct ad7414_data *data; 182 struct ad7414_data *data;
183 struct device *hwmon_dev;
184 int conf; 184 int conf;
185 int err;
186 185
187 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA | 186 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA |
188 I2C_FUNC_SMBUS_READ_WORD_DATA)) 187 I2C_FUNC_SMBUS_READ_WORD_DATA))
189 return -EOPNOTSUPP; 188 return -EOPNOTSUPP;
190 189
191 data = devm_kzalloc(&client->dev, sizeof(struct ad7414_data), 190 data = devm_kzalloc(dev, sizeof(struct ad7414_data), GFP_KERNEL);
192 GFP_KERNEL);
193 if (!data) 191 if (!data)
194 return -ENOMEM; 192 return -ENOMEM;
195 193
196 i2c_set_clientdata(client, data); 194 data->client = client;
197 mutex_init(&data->lock); 195 mutex_init(&data->lock);
198 196
199 dev_info(&client->dev, "chip found\n"); 197 dev_info(&client->dev, "chip found\n");
@@ -201,38 +199,16 @@ static int ad7414_probe(struct i2c_client *client,
201 /* Make sure the chip is powered up. */ 199 /* Make sure the chip is powered up. */
202 conf = i2c_smbus_read_byte_data(client, AD7414_REG_CONF); 200 conf = i2c_smbus_read_byte_data(client, AD7414_REG_CONF);
203 if (conf < 0) 201 if (conf < 0)
204 dev_warn(&client->dev, 202 dev_warn(dev, "ad7414_probe unable to read config register.\n");
205 "ad7414_probe unable to read config register.\n");
206 else { 203 else {
207 conf &= ~(1 << 7); 204 conf &= ~(1 << 7);
208 i2c_smbus_write_byte_data(client, AD7414_REG_CONF, conf); 205 i2c_smbus_write_byte_data(client, AD7414_REG_CONF, conf);
209 } 206 }
210 207
211 /* Register sysfs hooks */ 208 hwmon_dev = devm_hwmon_device_register_with_groups(dev,
212 err = sysfs_create_group(&client->dev.kobj, &ad7414_group); 209 client->name,
213 if (err) 210 data, ad7414_groups);
214 return err; 211 return PTR_ERR_OR_ZERO(hwmon_dev);
215
216 data->hwmon_dev = hwmon_device_register(&client->dev);
217 if (IS_ERR(data->hwmon_dev)) {
218 err = PTR_ERR(data->hwmon_dev);
219 goto exit_remove;
220 }
221
222 return 0;
223
224exit_remove:
225 sysfs_remove_group(&client->dev.kobj, &ad7414_group);
226 return err;
227}
228
229static int ad7414_remove(struct i2c_client *client)
230{
231 struct ad7414_data *data = i2c_get_clientdata(client);
232
233 hwmon_device_unregister(data->hwmon_dev);
234 sysfs_remove_group(&client->dev.kobj, &ad7414_group);
235 return 0;
236} 212}
237 213
238static const struct i2c_device_id ad7414_id[] = { 214static const struct i2c_device_id ad7414_id[] = {
@@ -246,7 +222,6 @@ static struct i2c_driver ad7414_driver = {
246 .name = "ad7414", 222 .name = "ad7414",
247 }, 223 },
248 .probe = ad7414_probe, 224 .probe = ad7414_probe,
249 .remove = ad7414_remove,
250 .id_table = ad7414_id, 225 .id_table = ad7414_id,
251}; 226};
252 227
diff --git a/drivers/hwmon/ad7418.c b/drivers/hwmon/ad7418.c
index 57d4a6295675..a01b731ba5d7 100644
--- a/drivers/hwmon/ad7418.c
+++ b/drivers/hwmon/ad7418.c
@@ -44,8 +44,7 @@ static const u8 AD7418_REG_TEMP[] = { AD7418_REG_TEMP_IN,
44 AD7418_REG_TEMP_OS }; 44 AD7418_REG_TEMP_OS };
45 45
46struct ad7418_data { 46struct ad7418_data {
47 struct device *hwmon_dev; 47 struct i2c_client *client;
48 struct attribute_group attrs;
49 enum chips type; 48 enum chips type;
50 struct mutex lock; 49 struct mutex lock;
51 int adc_max; /* number of ADC channels */ 50 int adc_max; /* number of ADC channels */
@@ -55,48 +54,10 @@ struct ad7418_data {
55 u16 in[4]; 54 u16 in[4];
56}; 55};
57 56
58static int ad7418_probe(struct i2c_client *client,
59 const struct i2c_device_id *id);
60static int ad7418_remove(struct i2c_client *client);
61
62static const struct i2c_device_id ad7418_id[] = {
63 { "ad7416", ad7416 },
64 { "ad7417", ad7417 },
65 { "ad7418", ad7418 },
66 { }
67};
68MODULE_DEVICE_TABLE(i2c, ad7418_id);
69
70static struct i2c_driver ad7418_driver = {
71 .driver = {
72 .name = "ad7418",
73 },
74 .probe = ad7418_probe,
75 .remove = ad7418_remove,
76 .id_table = ad7418_id,
77};
78
79static void ad7418_init_client(struct i2c_client *client)
80{
81 struct ad7418_data *data = i2c_get_clientdata(client);
82
83 int reg = i2c_smbus_read_byte_data(client, AD7418_REG_CONF);
84 if (reg < 0) {
85 dev_err(&client->dev, "cannot read configuration register\n");
86 } else {
87 dev_info(&client->dev, "configuring for mode 1\n");
88 i2c_smbus_write_byte_data(client, AD7418_REG_CONF, reg & 0xfe);
89
90 if (data->type == ad7417 || data->type == ad7418)
91 i2c_smbus_write_byte_data(client,
92 AD7418_REG_CONF2, 0x00);
93 }
94}
95
96static struct ad7418_data *ad7418_update_device(struct device *dev) 57static struct ad7418_data *ad7418_update_device(struct device *dev)
97{ 58{
98 struct i2c_client *client = to_i2c_client(dev); 59 struct ad7418_data *data = dev_get_drvdata(dev);
99 struct ad7418_data *data = i2c_get_clientdata(client); 60 struct i2c_client *client = data->client;
100 61
101 mutex_lock(&data->lock); 62 mutex_lock(&data->lock);
102 63
@@ -165,8 +126,8 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *devattr,
165 const char *buf, size_t count) 126 const char *buf, size_t count)
166{ 127{
167 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 128 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
168 struct i2c_client *client = to_i2c_client(dev); 129 struct ad7418_data *data = dev_get_drvdata(dev);
169 struct ad7418_data *data = i2c_get_clientdata(client); 130 struct i2c_client *client = data->client;
170 long temp; 131 long temp;
171 int ret = kstrtol(buf, 10, &temp); 132 int ret = kstrtol(buf, 10, &temp);
172 133
@@ -193,14 +154,15 @@ static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_adc, NULL, 1);
193static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_adc, NULL, 2); 154static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_adc, NULL, 2);
194static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_adc, NULL, 3); 155static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_adc, NULL, 3);
195 156
196static struct attribute *ad7416_attributes[] = { 157static struct attribute *ad7416_attrs[] = {
197 &sensor_dev_attr_temp1_max.dev_attr.attr, 158 &sensor_dev_attr_temp1_max.dev_attr.attr,
198 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 159 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr,
199 &sensor_dev_attr_temp1_input.dev_attr.attr, 160 &sensor_dev_attr_temp1_input.dev_attr.attr,
200 NULL 161 NULL
201}; 162};
163ATTRIBUTE_GROUPS(ad7416);
202 164
203static struct attribute *ad7417_attributes[] = { 165static struct attribute *ad7417_attrs[] = {
204 &sensor_dev_attr_temp1_max.dev_attr.attr, 166 &sensor_dev_attr_temp1_max.dev_attr.attr,
205 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 167 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr,
206 &sensor_dev_attr_temp1_input.dev_attr.attr, 168 &sensor_dev_attr_temp1_input.dev_attr.attr,
@@ -210,83 +172,100 @@ static struct attribute *ad7417_attributes[] = {
210 &sensor_dev_attr_in4_input.dev_attr.attr, 172 &sensor_dev_attr_in4_input.dev_attr.attr,
211 NULL 173 NULL
212}; 174};
175ATTRIBUTE_GROUPS(ad7417);
213 176
214static struct attribute *ad7418_attributes[] = { 177static struct attribute *ad7418_attrs[] = {
215 &sensor_dev_attr_temp1_max.dev_attr.attr, 178 &sensor_dev_attr_temp1_max.dev_attr.attr,
216 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 179 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr,
217 &sensor_dev_attr_temp1_input.dev_attr.attr, 180 &sensor_dev_attr_temp1_input.dev_attr.attr,
218 &sensor_dev_attr_in1_input.dev_attr.attr, 181 &sensor_dev_attr_in1_input.dev_attr.attr,
219 NULL 182 NULL
220}; 183};
184ATTRIBUTE_GROUPS(ad7418);
185
186static void ad7418_init_client(struct i2c_client *client)
187{
188 struct ad7418_data *data = i2c_get_clientdata(client);
189
190 int reg = i2c_smbus_read_byte_data(client, AD7418_REG_CONF);
191 if (reg < 0) {
192 dev_err(&client->dev, "cannot read configuration register\n");
193 } else {
194 dev_info(&client->dev, "configuring for mode 1\n");
195 i2c_smbus_write_byte_data(client, AD7418_REG_CONF, reg & 0xfe);
196
197 if (data->type == ad7417 || data->type == ad7418)
198 i2c_smbus_write_byte_data(client,
199 AD7418_REG_CONF2, 0x00);
200 }
201}
221 202
222static int ad7418_probe(struct i2c_client *client, 203static int ad7418_probe(struct i2c_client *client,
223 const struct i2c_device_id *id) 204 const struct i2c_device_id *id)
224{ 205{
206 struct device *dev = &client->dev;
225 struct i2c_adapter *adapter = client->adapter; 207 struct i2c_adapter *adapter = client->adapter;
226 struct ad7418_data *data; 208 struct ad7418_data *data;
227 int err; 209 struct device *hwmon_dev;
210 const struct attribute_group **attr_groups = NULL;
228 211
229 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA | 212 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
230 I2C_FUNC_SMBUS_WORD_DATA)) 213 I2C_FUNC_SMBUS_WORD_DATA))
231 return -EOPNOTSUPP; 214 return -EOPNOTSUPP;
232 215
233 data = devm_kzalloc(&client->dev, sizeof(struct ad7418_data), 216 data = devm_kzalloc(dev, sizeof(struct ad7418_data), GFP_KERNEL);
234 GFP_KERNEL);
235 if (!data) 217 if (!data)
236 return -ENOMEM; 218 return -ENOMEM;
237 219
238 i2c_set_clientdata(client, data); 220 i2c_set_clientdata(client, data);
239 221
240 mutex_init(&data->lock); 222 mutex_init(&data->lock);
223 data->client = client;
241 data->type = id->driver_data; 224 data->type = id->driver_data;
242 225
243 switch (data->type) { 226 switch (data->type) {
244 case ad7416: 227 case ad7416:
245 data->adc_max = 0; 228 data->adc_max = 0;
246 data->attrs.attrs = ad7416_attributes; 229 attr_groups = ad7416_groups;
247 break; 230 break;
248 231
249 case ad7417: 232 case ad7417:
250 data->adc_max = 4; 233 data->adc_max = 4;
251 data->attrs.attrs = ad7417_attributes; 234 attr_groups = ad7417_groups;
252 break; 235 break;
253 236
254 case ad7418: 237 case ad7418:
255 data->adc_max = 1; 238 data->adc_max = 1;
256 data->attrs.attrs = ad7418_attributes; 239 attr_groups = ad7418_groups;
257 break; 240 break;
258 } 241 }
259 242
260 dev_info(&client->dev, "%s chip found\n", client->name); 243 dev_info(dev, "%s chip found\n", client->name);
261 244
262 /* Initialize the AD7418 chip */ 245 /* Initialize the AD7418 chip */
263 ad7418_init_client(client); 246 ad7418_init_client(client);
264 247
265 /* Register sysfs hooks */ 248 hwmon_dev = devm_hwmon_device_register_with_groups(dev,
266 err = sysfs_create_group(&client->dev.kobj, &data->attrs); 249 client->name,
267 if (err) 250 data, attr_groups);
268 return err; 251 return PTR_ERR_OR_ZERO(hwmon_dev);
269
270 data->hwmon_dev = hwmon_device_register(&client->dev);
271 if (IS_ERR(data->hwmon_dev)) {
272 err = PTR_ERR(data->hwmon_dev);
273 goto exit_remove;
274 }
275
276 return 0;
277
278exit_remove:
279 sysfs_remove_group(&client->dev.kobj, &data->attrs);
280 return err;
281} 252}
282 253
283static int ad7418_remove(struct i2c_client *client) 254static const struct i2c_device_id ad7418_id[] = {
284{ 255 { "ad7416", ad7416 },
285 struct ad7418_data *data = i2c_get_clientdata(client); 256 { "ad7417", ad7417 },
286 hwmon_device_unregister(data->hwmon_dev); 257 { "ad7418", ad7418 },
287 sysfs_remove_group(&client->dev.kobj, &data->attrs); 258 { }
288 return 0; 259};
289} 260MODULE_DEVICE_TABLE(i2c, ad7418_id);
261
262static struct i2c_driver ad7418_driver = {
263 .driver = {
264 .name = "ad7418",
265 },
266 .probe = ad7418_probe,
267 .id_table = ad7418_id,
268};
290 269
291module_i2c_driver(ad7418_driver); 270module_i2c_driver(ad7418_driver);
292 271
diff --git a/drivers/hwmon/adm1021.c b/drivers/hwmon/adm1021.c
index d74241bb278c..1fdcc3e703b9 100644
--- a/drivers/hwmon/adm1021.c
+++ b/drivers/hwmon/adm1021.c
@@ -98,41 +98,63 @@ struct adm1021_data {
98 u8 remote_temp_offset_prec; 98 u8 remote_temp_offset_prec;
99}; 99};
100 100
101static int adm1021_probe(struct i2c_client *client,
102 const struct i2c_device_id *id);
103static int adm1021_detect(struct i2c_client *client,
104 struct i2c_board_info *info);
105static void adm1021_init_client(struct i2c_client *client);
106static struct adm1021_data *adm1021_update_device(struct device *dev);
107
108/* (amalysh) read only mode, otherwise any limit's writing confuse BIOS */ 101/* (amalysh) read only mode, otherwise any limit's writing confuse BIOS */
109static bool read_only; 102static bool read_only;
110 103
104static struct adm1021_data *adm1021_update_device(struct device *dev)
105{
106 struct adm1021_data *data = dev_get_drvdata(dev);
107 struct i2c_client *client = data->client;
111 108
112static const struct i2c_device_id adm1021_id[] = { 109 mutex_lock(&data->update_lock);
113 { "adm1021", adm1021 },
114 { "adm1023", adm1023 },
115 { "max1617", max1617 },
116 { "max1617a", max1617a },
117 { "thmc10", thmc10 },
118 { "lm84", lm84 },
119 { "gl523sm", gl523sm },
120 { "mc1066", mc1066 },
121 { }
122};
123MODULE_DEVICE_TABLE(i2c, adm1021_id);
124 110
125/* This is the driver that will be inserted */ 111 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
126static struct i2c_driver adm1021_driver = { 112 || !data->valid) {
127 .class = I2C_CLASS_HWMON, 113 int i;
128 .driver = { 114
129 .name = "adm1021", 115 dev_dbg(dev, "Starting adm1021 update\n");
130 }, 116
131 .probe = adm1021_probe, 117 for (i = 0; i < 2; i++) {
132 .id_table = adm1021_id, 118 data->temp[i] = 1000 *
133 .detect = adm1021_detect, 119 (s8) i2c_smbus_read_byte_data(
134 .address_list = normal_i2c, 120 client, ADM1021_REG_TEMP(i));
135}; 121 data->temp_max[i] = 1000 *
122 (s8) i2c_smbus_read_byte_data(
123 client, ADM1021_REG_TOS_R(i));
124 if (data->type != lm84) {
125 data->temp_min[i] = 1000 *
126 (s8) i2c_smbus_read_byte_data(client,
127 ADM1021_REG_THYST_R(i));
128 }
129 }
130 data->alarms = i2c_smbus_read_byte_data(client,
131 ADM1021_REG_STATUS) & 0x7c;
132 if (data->type == adm1023) {
133 /*
134 * The ADM1023 provides 3 extra bits of precision for
135 * the remote sensor in extra registers.
136 */
137 data->temp[1] += 125 * (i2c_smbus_read_byte_data(
138 client, ADM1023_REG_REM_TEMP_PREC) >> 5);
139 data->temp_max[1] += 125 * (i2c_smbus_read_byte_data(
140 client, ADM1023_REG_REM_TOS_PREC) >> 5);
141 data->temp_min[1] += 125 * (i2c_smbus_read_byte_data(
142 client, ADM1023_REG_REM_THYST_PREC) >> 5);
143 data->remote_temp_offset =
144 i2c_smbus_read_byte_data(client,
145 ADM1023_REG_REM_OFFSET);
146 data->remote_temp_offset_prec =
147 i2c_smbus_read_byte_data(client,
148 ADM1023_REG_REM_OFFSET_PREC);
149 }
150 data->last_updated = jiffies;
151 data->valid = 1;
152 }
153
154 mutex_unlock(&data->update_lock);
155
156 return data;
157}
136 158
137static ssize_t show_temp(struct device *dev, 159static ssize_t show_temp(struct device *dev,
138 struct device_attribute *devattr, char *buf) 160 struct device_attribute *devattr, char *buf)
@@ -411,6 +433,15 @@ static int adm1021_detect(struct i2c_client *client,
411 return 0; 433 return 0;
412} 434}
413 435
436static void adm1021_init_client(struct i2c_client *client)
437{
438 /* Enable ADC and disable suspend mode */
439 i2c_smbus_write_byte_data(client, ADM1021_REG_CONFIG_W,
440 i2c_smbus_read_byte_data(client, ADM1021_REG_CONFIG_R) & 0xBF);
441 /* Set Conversion rate to 1/sec (this can be tinkered with) */
442 i2c_smbus_write_byte_data(client, ADM1021_REG_CONV_RATE_W, 0x04);
443}
444
414static int adm1021_probe(struct i2c_client *client, 445static int adm1021_probe(struct i2c_client *client,
415 const struct i2c_device_id *id) 446 const struct i2c_device_id *id)
416{ 447{
@@ -440,69 +471,29 @@ static int adm1021_probe(struct i2c_client *client,
440 return PTR_ERR_OR_ZERO(hwmon_dev); 471 return PTR_ERR_OR_ZERO(hwmon_dev);
441} 472}
442 473
443static void adm1021_init_client(struct i2c_client *client) 474static const struct i2c_device_id adm1021_id[] = {
444{ 475 { "adm1021", adm1021 },
445 /* Enable ADC and disable suspend mode */ 476 { "adm1023", adm1023 },
446 i2c_smbus_write_byte_data(client, ADM1021_REG_CONFIG_W, 477 { "max1617", max1617 },
447 i2c_smbus_read_byte_data(client, ADM1021_REG_CONFIG_R) & 0xBF); 478 { "max1617a", max1617a },
448 /* Set Conversion rate to 1/sec (this can be tinkered with) */ 479 { "thmc10", thmc10 },
449 i2c_smbus_write_byte_data(client, ADM1021_REG_CONV_RATE_W, 0x04); 480 { "lm84", lm84 },
450} 481 { "gl523sm", gl523sm },
451 482 { "mc1066", mc1066 },
452static struct adm1021_data *adm1021_update_device(struct device *dev) 483 { }
453{ 484};
454 struct adm1021_data *data = dev_get_drvdata(dev); 485MODULE_DEVICE_TABLE(i2c, adm1021_id);
455 struct i2c_client *client = data->client;
456
457 mutex_lock(&data->update_lock);
458
459 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
460 || !data->valid) {
461 int i;
462
463 dev_dbg(dev, "Starting adm1021 update\n");
464
465 for (i = 0; i < 2; i++) {
466 data->temp[i] = 1000 *
467 (s8) i2c_smbus_read_byte_data(
468 client, ADM1021_REG_TEMP(i));
469 data->temp_max[i] = 1000 *
470 (s8) i2c_smbus_read_byte_data(
471 client, ADM1021_REG_TOS_R(i));
472 if (data->type != lm84) {
473 data->temp_min[i] = 1000 *
474 (s8) i2c_smbus_read_byte_data(client,
475 ADM1021_REG_THYST_R(i));
476 }
477 }
478 data->alarms = i2c_smbus_read_byte_data(client,
479 ADM1021_REG_STATUS) & 0x7c;
480 if (data->type == adm1023) {
481 /*
482 * The ADM1023 provides 3 extra bits of precision for
483 * the remote sensor in extra registers.
484 */
485 data->temp[1] += 125 * (i2c_smbus_read_byte_data(
486 client, ADM1023_REG_REM_TEMP_PREC) >> 5);
487 data->temp_max[1] += 125 * (i2c_smbus_read_byte_data(
488 client, ADM1023_REG_REM_TOS_PREC) >> 5);
489 data->temp_min[1] += 125 * (i2c_smbus_read_byte_data(
490 client, ADM1023_REG_REM_THYST_PREC) >> 5);
491 data->remote_temp_offset =
492 i2c_smbus_read_byte_data(client,
493 ADM1023_REG_REM_OFFSET);
494 data->remote_temp_offset_prec =
495 i2c_smbus_read_byte_data(client,
496 ADM1023_REG_REM_OFFSET_PREC);
497 }
498 data->last_updated = jiffies;
499 data->valid = 1;
500 }
501
502 mutex_unlock(&data->update_lock);
503 486
504 return data; 487static struct i2c_driver adm1021_driver = {
505} 488 .class = I2C_CLASS_HWMON,
489 .driver = {
490 .name = "adm1021",
491 },
492 .probe = adm1021_probe,
493 .id_table = adm1021_id,
494 .detect = adm1021_detect,
495 .address_list = normal_i2c,
496};
506 497
507module_i2c_driver(adm1021_driver); 498module_i2c_driver(adm1021_driver);
508 499
diff --git a/drivers/hwmon/adm1025.c b/drivers/hwmon/adm1025.c
index 9ffc4c8ca8b5..d3d0e8cf27b4 100644
--- a/drivers/hwmon/adm1025.c
+++ b/drivers/hwmon/adm1025.c
@@ -103,46 +103,12 @@ static const int in_scale[6] = { 2500, 2250, 3300, 5000, 12000, 3300 };
103 (val) + 500) / 1000)) 103 (val) + 500) / 1000))
104 104
105/* 105/*
106 * Functions declaration
107 */
108
109static int adm1025_probe(struct i2c_client *client,
110 const struct i2c_device_id *id);
111static int adm1025_detect(struct i2c_client *client,
112 struct i2c_board_info *info);
113static void adm1025_init_client(struct i2c_client *client);
114static int adm1025_remove(struct i2c_client *client);
115static struct adm1025_data *adm1025_update_device(struct device *dev);
116
117/*
118 * Driver data (common to all clients)
119 */
120
121static const struct i2c_device_id adm1025_id[] = {
122 { "adm1025", adm1025 },
123 { "ne1619", ne1619 },
124 { }
125};
126MODULE_DEVICE_TABLE(i2c, adm1025_id);
127
128static struct i2c_driver adm1025_driver = {
129 .class = I2C_CLASS_HWMON,
130 .driver = {
131 .name = "adm1025",
132 },
133 .probe = adm1025_probe,
134 .remove = adm1025_remove,
135 .id_table = adm1025_id,
136 .detect = adm1025_detect,
137 .address_list = normal_i2c,
138};
139
140/*
141 * Client data (each client gets its own) 106 * Client data (each client gets its own)
142 */ 107 */
143 108
144struct adm1025_data { 109struct adm1025_data {
145 struct device *hwmon_dev; 110 struct i2c_client *client;
111 const struct attribute_group *groups[3];
146 struct mutex update_lock; 112 struct mutex update_lock;
147 char valid; /* zero until following fields are valid */ 113 char valid; /* zero until following fields are valid */
148 unsigned long last_updated; /* in jiffies */ 114 unsigned long last_updated; /* in jiffies */
@@ -158,6 +124,51 @@ struct adm1025_data {
158 u8 vrm; 124 u8 vrm;
159}; 125};
160 126
127static struct adm1025_data *adm1025_update_device(struct device *dev)
128{
129 struct adm1025_data *data = dev_get_drvdata(dev);
130 struct i2c_client *client = data->client;
131
132 mutex_lock(&data->update_lock);
133
134 if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
135 int i;
136
137 dev_dbg(&client->dev, "Updating data.\n");
138 for (i = 0; i < 6; i++) {
139 data->in[i] = i2c_smbus_read_byte_data(client,
140 ADM1025_REG_IN(i));
141 data->in_min[i] = i2c_smbus_read_byte_data(client,
142 ADM1025_REG_IN_MIN(i));
143 data->in_max[i] = i2c_smbus_read_byte_data(client,
144 ADM1025_REG_IN_MAX(i));
145 }
146 for (i = 0; i < 2; i++) {
147 data->temp[i] = i2c_smbus_read_byte_data(client,
148 ADM1025_REG_TEMP(i));
149 data->temp_min[i] = i2c_smbus_read_byte_data(client,
150 ADM1025_REG_TEMP_LOW(i));
151 data->temp_max[i] = i2c_smbus_read_byte_data(client,
152 ADM1025_REG_TEMP_HIGH(i));
153 }
154 data->alarms = i2c_smbus_read_byte_data(client,
155 ADM1025_REG_STATUS1)
156 | (i2c_smbus_read_byte_data(client,
157 ADM1025_REG_STATUS2) << 8);
158 data->vid = (i2c_smbus_read_byte_data(client,
159 ADM1025_REG_VID) & 0x0f)
160 | ((i2c_smbus_read_byte_data(client,
161 ADM1025_REG_VID4) & 0x01) << 4);
162
163 data->last_updated = jiffies;
164 data->valid = 1;
165 }
166
167 mutex_unlock(&data->update_lock);
168
169 return data;
170}
171
161/* 172/*
162 * Sysfs stuff 173 * Sysfs stuff
163 */ 174 */
@@ -217,8 +228,8 @@ static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
217 const char *buf, size_t count) 228 const char *buf, size_t count)
218{ 229{
219 int index = to_sensor_dev_attr(attr)->index; 230 int index = to_sensor_dev_attr(attr)->index;
220 struct i2c_client *client = to_i2c_client(dev); 231 struct adm1025_data *data = dev_get_drvdata(dev);
221 struct adm1025_data *data = i2c_get_clientdata(client); 232 struct i2c_client *client = data->client;
222 long val; 233 long val;
223 int err; 234 int err;
224 235
@@ -238,8 +249,8 @@ static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
238 const char *buf, size_t count) 249 const char *buf, size_t count)
239{ 250{
240 int index = to_sensor_dev_attr(attr)->index; 251 int index = to_sensor_dev_attr(attr)->index;
241 struct i2c_client *client = to_i2c_client(dev); 252 struct adm1025_data *data = dev_get_drvdata(dev);
242 struct adm1025_data *data = i2c_get_clientdata(client); 253 struct i2c_client *client = data->client;
243 long val; 254 long val;
244 int err; 255 int err;
245 256
@@ -273,8 +284,8 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
273 const char *buf, size_t count) 284 const char *buf, size_t count)
274{ 285{
275 int index = to_sensor_dev_attr(attr)->index; 286 int index = to_sensor_dev_attr(attr)->index;
276 struct i2c_client *client = to_i2c_client(dev); 287 struct adm1025_data *data = dev_get_drvdata(dev);
277 struct adm1025_data *data = i2c_get_clientdata(client); 288 struct i2c_client *client = data->client;
278 long val; 289 long val;
279 int err; 290 int err;
280 291
@@ -294,8 +305,8 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
294 const char *buf, size_t count) 305 const char *buf, size_t count)
295{ 306{
296 int index = to_sensor_dev_attr(attr)->index; 307 int index = to_sensor_dev_attr(attr)->index;
297 struct i2c_client *client = to_i2c_client(dev); 308 struct adm1025_data *data = dev_get_drvdata(dev);
298 struct adm1025_data *data = i2c_get_clientdata(client); 309 struct i2c_client *client = data->client;
299 long val; 310 long val;
300 int err; 311 int err;
301 312
@@ -470,51 +481,6 @@ static int adm1025_detect(struct i2c_client *client,
470 return 0; 481 return 0;
471} 482}
472 483
473static int adm1025_probe(struct i2c_client *client,
474 const struct i2c_device_id *id)
475{
476 struct adm1025_data *data;
477 int err;
478 u8 config;
479
480 data = devm_kzalloc(&client->dev, sizeof(struct adm1025_data),
481 GFP_KERNEL);
482 if (!data)
483 return -ENOMEM;
484
485 i2c_set_clientdata(client, data);
486 mutex_init(&data->update_lock);
487
488 /* Initialize the ADM1025 chip */
489 adm1025_init_client(client);
490
491 /* Register sysfs hooks */
492 err = sysfs_create_group(&client->dev.kobj, &adm1025_group);
493 if (err)
494 return err;
495
496 /* Pin 11 is either in4 (+12V) or VID4 */
497 config = i2c_smbus_read_byte_data(client, ADM1025_REG_CONFIG);
498 if (!(config & 0x20)) {
499 err = sysfs_create_group(&client->dev.kobj, &adm1025_group_in4);
500 if (err)
501 goto exit_remove;
502 }
503
504 data->hwmon_dev = hwmon_device_register(&client->dev);
505 if (IS_ERR(data->hwmon_dev)) {
506 err = PTR_ERR(data->hwmon_dev);
507 goto exit_remove;
508 }
509
510 return 0;
511
512exit_remove:
513 sysfs_remove_group(&client->dev.kobj, &adm1025_group);
514 sysfs_remove_group(&client->dev.kobj, &adm1025_group_in4);
515 return err;
516}
517
518static void adm1025_init_client(struct i2c_client *client) 484static void adm1025_init_client(struct i2c_client *client)
519{ 485{
520 u8 reg; 486 u8 reg;
@@ -557,61 +523,54 @@ static void adm1025_init_client(struct i2c_client *client)
557 (reg&0x7E)|0x01); 523 (reg&0x7E)|0x01);
558} 524}
559 525
560static int adm1025_remove(struct i2c_client *client) 526static int adm1025_probe(struct i2c_client *client,
527 const struct i2c_device_id *id)
561{ 528{
562 struct adm1025_data *data = i2c_get_clientdata(client); 529 struct device *dev = &client->dev;
563 530 struct device *hwmon_dev;
564 hwmon_device_unregister(data->hwmon_dev); 531 struct adm1025_data *data;
565 sysfs_remove_group(&client->dev.kobj, &adm1025_group); 532 u8 config;
566 sysfs_remove_group(&client->dev.kobj, &adm1025_group_in4);
567
568 return 0;
569}
570 533
571static struct adm1025_data *adm1025_update_device(struct device *dev) 534 data = devm_kzalloc(dev, sizeof(struct adm1025_data), GFP_KERNEL);
572{ 535 if (!data)
573 struct i2c_client *client = to_i2c_client(dev); 536 return -ENOMEM;
574 struct adm1025_data *data = i2c_get_clientdata(client);
575 537
576 mutex_lock(&data->update_lock); 538 i2c_set_clientdata(client, data);
539 data->client = client;
540 mutex_init(&data->update_lock);
577 541
578 if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) { 542 /* Initialize the ADM1025 chip */
579 int i; 543 adm1025_init_client(client);
580 544
581 dev_dbg(&client->dev, "Updating data.\n"); 545 /* sysfs hooks */
582 for (i = 0; i < 6; i++) { 546 data->groups[0] = &adm1025_group;
583 data->in[i] = i2c_smbus_read_byte_data(client, 547 /* Pin 11 is either in4 (+12V) or VID4 */
584 ADM1025_REG_IN(i)); 548 config = i2c_smbus_read_byte_data(client, ADM1025_REG_CONFIG);
585 data->in_min[i] = i2c_smbus_read_byte_data(client, 549 if (!(config & 0x20))
586 ADM1025_REG_IN_MIN(i)); 550 data->groups[1] = &adm1025_group_in4;
587 data->in_max[i] = i2c_smbus_read_byte_data(client,
588 ADM1025_REG_IN_MAX(i));
589 }
590 for (i = 0; i < 2; i++) {
591 data->temp[i] = i2c_smbus_read_byte_data(client,
592 ADM1025_REG_TEMP(i));
593 data->temp_min[i] = i2c_smbus_read_byte_data(client,
594 ADM1025_REG_TEMP_LOW(i));
595 data->temp_max[i] = i2c_smbus_read_byte_data(client,
596 ADM1025_REG_TEMP_HIGH(i));
597 }
598 data->alarms = i2c_smbus_read_byte_data(client,
599 ADM1025_REG_STATUS1)
600 | (i2c_smbus_read_byte_data(client,
601 ADM1025_REG_STATUS2) << 8);
602 data->vid = (i2c_smbus_read_byte_data(client,
603 ADM1025_REG_VID) & 0x0f)
604 | ((i2c_smbus_read_byte_data(client,
605 ADM1025_REG_VID4) & 0x01) << 4);
606 551
607 data->last_updated = jiffies; 552 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
608 data->valid = 1; 553 data, data->groups);
609 } 554 return PTR_ERR_OR_ZERO(hwmon_dev);
555}
610 556
611 mutex_unlock(&data->update_lock); 557static const struct i2c_device_id adm1025_id[] = {
558 { "adm1025", adm1025 },
559 { "ne1619", ne1619 },
560 { }
561};
562MODULE_DEVICE_TABLE(i2c, adm1025_id);
612 563
613 return data; 564static struct i2c_driver adm1025_driver = {
614} 565 .class = I2C_CLASS_HWMON,
566 .driver = {
567 .name = "adm1025",
568 },
569 .probe = adm1025_probe,
570 .id_table = adm1025_id,
571 .detect = adm1025_detect,
572 .address_list = normal_i2c,
573};
615 574
616module_i2c_driver(adm1025_driver); 575module_i2c_driver(adm1025_driver);
617 576
diff --git a/drivers/hwmon/adm1026.c b/drivers/hwmon/adm1026.c
index b3498acb9ab4..ca8430f92564 100644
--- a/drivers/hwmon/adm1026.c
+++ b/drivers/hwmon/adm1026.c
@@ -266,7 +266,8 @@ struct pwm_data {
266}; 266};
267 267
268struct adm1026_data { 268struct adm1026_data {
269 struct device *hwmon_dev; 269 struct i2c_client *client;
270 const struct attribute_group *groups[3];
270 271
271 struct mutex update_lock; 272 struct mutex update_lock;
272 int valid; /* !=0 if following fields are valid */ 273 int valid; /* !=0 if following fields are valid */
@@ -298,37 +299,6 @@ struct adm1026_data {
298 u8 config3; /* Register value */ 299 u8 config3; /* Register value */
299}; 300};
300 301
301static int adm1026_probe(struct i2c_client *client,
302 const struct i2c_device_id *id);
303static int adm1026_detect(struct i2c_client *client,
304 struct i2c_board_info *info);
305static int adm1026_remove(struct i2c_client *client);
306static int adm1026_read_value(struct i2c_client *client, u8 reg);
307static int adm1026_write_value(struct i2c_client *client, u8 reg, int value);
308static void adm1026_print_gpio(struct i2c_client *client);
309static void adm1026_fixup_gpio(struct i2c_client *client);
310static struct adm1026_data *adm1026_update_device(struct device *dev);
311static void adm1026_init_client(struct i2c_client *client);
312
313
314static const struct i2c_device_id adm1026_id[] = {
315 { "adm1026", 0 },
316 { }
317};
318MODULE_DEVICE_TABLE(i2c, adm1026_id);
319
320static struct i2c_driver adm1026_driver = {
321 .class = I2C_CLASS_HWMON,
322 .driver = {
323 .name = "adm1026",
324 },
325 .probe = adm1026_probe,
326 .remove = adm1026_remove,
327 .id_table = adm1026_id,
328 .detect = adm1026_detect,
329 .address_list = normal_i2c,
330};
331
332static int adm1026_read_value(struct i2c_client *client, u8 reg) 302static int adm1026_read_value(struct i2c_client *client, u8 reg)
333{ 303{
334 int res; 304 int res;
@@ -357,212 +327,10 @@ static int adm1026_write_value(struct i2c_client *client, u8 reg, int value)
357 return res; 327 return res;
358} 328}
359 329
360static void adm1026_init_client(struct i2c_client *client)
361{
362 int value, i;
363 struct adm1026_data *data = i2c_get_clientdata(client);
364
365 dev_dbg(&client->dev, "Initializing device\n");
366 /* Read chip config */
367 data->config1 = adm1026_read_value(client, ADM1026_REG_CONFIG1);
368 data->config2 = adm1026_read_value(client, ADM1026_REG_CONFIG2);
369 data->config3 = adm1026_read_value(client, ADM1026_REG_CONFIG3);
370
371 /* Inform user of chip config */
372 dev_dbg(&client->dev, "ADM1026_REG_CONFIG1 is: 0x%02x\n",
373 data->config1);
374 if ((data->config1 & CFG1_MONITOR) == 0) {
375 dev_dbg(&client->dev,
376 "Monitoring not currently enabled.\n");
377 }
378 if (data->config1 & CFG1_INT_ENABLE) {
379 dev_dbg(&client->dev,
380 "SMBALERT interrupts are enabled.\n");
381 }
382 if (data->config1 & CFG1_AIN8_9) {
383 dev_dbg(&client->dev,
384 "in8 and in9 enabled. temp3 disabled.\n");
385 } else {
386 dev_dbg(&client->dev,
387 "temp3 enabled. in8 and in9 disabled.\n");
388 }
389 if (data->config1 & CFG1_THERM_HOT) {
390 dev_dbg(&client->dev,
391 "Automatic THERM, PWM, and temp limits enabled.\n");
392 }
393
394 if (data->config3 & CFG3_GPIO16_ENABLE) {
395 dev_dbg(&client->dev,
396 "GPIO16 enabled. THERM pin disabled.\n");
397 } else {
398 dev_dbg(&client->dev,
399 "THERM pin enabled. GPIO16 disabled.\n");
400 }
401 if (data->config3 & CFG3_VREF_250)
402 dev_dbg(&client->dev, "Vref is 2.50 Volts.\n");
403 else
404 dev_dbg(&client->dev, "Vref is 1.82 Volts.\n");
405 /* Read and pick apart the existing GPIO configuration */
406 value = 0;
407 for (i = 0; i <= 15; ++i) {
408 if ((i & 0x03) == 0) {
409 value = adm1026_read_value(client,
410 ADM1026_REG_GPIO_CFG_0_3 + i / 4);
411 }
412 data->gpio_config[i] = value & 0x03;
413 value >>= 2;
414 }
415 data->gpio_config[16] = (data->config3 >> 6) & 0x03;
416
417 /* ... and then print it */
418 adm1026_print_gpio(client);
419
420 /*
421 * If the user asks us to reprogram the GPIO config, then
422 * do it now.
423 */
424 if (gpio_input[0] != -1 || gpio_output[0] != -1
425 || gpio_inverted[0] != -1 || gpio_normal[0] != -1
426 || gpio_fan[0] != -1) {
427 adm1026_fixup_gpio(client);
428 }
429
430 /*
431 * WE INTENTIONALLY make no changes to the limits,
432 * offsets, pwms, fans and zones. If they were
433 * configured, we don't want to mess with them.
434 * If they weren't, the default is 100% PWM, no
435 * control and will suffice until 'sensors -s'
436 * can be run by the user. We DO set the default
437 * value for pwm1.auto_pwm_min to its maximum
438 * so that enabling automatic pwm fan control
439 * without first setting a value for pwm1.auto_pwm_min
440 * will not result in potentially dangerous fan speed decrease.
441 */
442 data->pwm1.auto_pwm_min = 255;
443 /* Start monitoring */
444 value = adm1026_read_value(client, ADM1026_REG_CONFIG1);
445 /* Set MONITOR, clear interrupt acknowledge and s/w reset */
446 value = (value | CFG1_MONITOR) & (~CFG1_INT_CLEAR & ~CFG1_RESET);
447 dev_dbg(&client->dev, "Setting CONFIG to: 0x%02x\n", value);
448 data->config1 = value;
449 adm1026_write_value(client, ADM1026_REG_CONFIG1, value);
450
451 /* initialize fan_div[] to hardware defaults */
452 value = adm1026_read_value(client, ADM1026_REG_FAN_DIV_0_3) |
453 (adm1026_read_value(client, ADM1026_REG_FAN_DIV_4_7) << 8);
454 for (i = 0; i <= 7; ++i) {
455 data->fan_div[i] = DIV_FROM_REG(value & 0x03);
456 value >>= 2;
457 }
458}
459
460static void adm1026_print_gpio(struct i2c_client *client)
461{
462 struct adm1026_data *data = i2c_get_clientdata(client);
463 int i;
464
465 dev_dbg(&client->dev, "GPIO config is:\n");
466 for (i = 0; i <= 7; ++i) {
467 if (data->config2 & (1 << i)) {
468 dev_dbg(&client->dev, "\t%sGP%s%d\n",
469 data->gpio_config[i] & 0x02 ? "" : "!",
470 data->gpio_config[i] & 0x01 ? "OUT" : "IN",
471 i);
472 } else {
473 dev_dbg(&client->dev, "\tFAN%d\n", i);
474 }
475 }
476 for (i = 8; i <= 15; ++i) {
477 dev_dbg(&client->dev, "\t%sGP%s%d\n",
478 data->gpio_config[i] & 0x02 ? "" : "!",
479 data->gpio_config[i] & 0x01 ? "OUT" : "IN",
480 i);
481 }
482 if (data->config3 & CFG3_GPIO16_ENABLE) {
483 dev_dbg(&client->dev, "\t%sGP%s16\n",
484 data->gpio_config[16] & 0x02 ? "" : "!",
485 data->gpio_config[16] & 0x01 ? "OUT" : "IN");
486 } else {
487 /* GPIO16 is THERM */
488 dev_dbg(&client->dev, "\tTHERM\n");
489 }
490}
491
492static void adm1026_fixup_gpio(struct i2c_client *client)
493{
494 struct adm1026_data *data = i2c_get_clientdata(client);
495 int i;
496 int value;
497
498 /* Make the changes requested. */
499 /*
500 * We may need to unlock/stop monitoring or soft-reset the
501 * chip before we can make changes. This hasn't been
502 * tested much. FIXME
503 */
504
505 /* Make outputs */
506 for (i = 0; i <= 16; ++i) {
507 if (gpio_output[i] >= 0 && gpio_output[i] <= 16)
508 data->gpio_config[gpio_output[i]] |= 0x01;
509 /* if GPIO0-7 is output, it isn't a FAN tach */
510 if (gpio_output[i] >= 0 && gpio_output[i] <= 7)
511 data->config2 |= 1 << gpio_output[i];
512 }
513
514 /* Input overrides output */
515 for (i = 0; i <= 16; ++i) {
516 if (gpio_input[i] >= 0 && gpio_input[i] <= 16)
517 data->gpio_config[gpio_input[i]] &= ~0x01;
518 /* if GPIO0-7 is input, it isn't a FAN tach */
519 if (gpio_input[i] >= 0 && gpio_input[i] <= 7)
520 data->config2 |= 1 << gpio_input[i];
521 }
522
523 /* Inverted */
524 for (i = 0; i <= 16; ++i) {
525 if (gpio_inverted[i] >= 0 && gpio_inverted[i] <= 16)
526 data->gpio_config[gpio_inverted[i]] &= ~0x02;
527 }
528
529 /* Normal overrides inverted */
530 for (i = 0; i <= 16; ++i) {
531 if (gpio_normal[i] >= 0 && gpio_normal[i] <= 16)
532 data->gpio_config[gpio_normal[i]] |= 0x02;
533 }
534
535 /* Fan overrides input and output */
536 for (i = 0; i <= 7; ++i) {
537 if (gpio_fan[i] >= 0 && gpio_fan[i] <= 7)
538 data->config2 &= ~(1 << gpio_fan[i]);
539 }
540
541 /* Write new configs to registers */
542 adm1026_write_value(client, ADM1026_REG_CONFIG2, data->config2);
543 data->config3 = (data->config3 & 0x3f)
544 | ((data->gpio_config[16] & 0x03) << 6);
545 adm1026_write_value(client, ADM1026_REG_CONFIG3, data->config3);
546 for (i = 15, value = 0; i >= 0; --i) {
547 value <<= 2;
548 value |= data->gpio_config[i] & 0x03;
549 if ((i & 0x03) == 0) {
550 adm1026_write_value(client,
551 ADM1026_REG_GPIO_CFG_0_3 + i/4,
552 value);
553 value = 0;
554 }
555 }
556
557 /* Print the new config */
558 adm1026_print_gpio(client);
559}
560
561
562static struct adm1026_data *adm1026_update_device(struct device *dev) 330static struct adm1026_data *adm1026_update_device(struct device *dev)
563{ 331{
564 struct i2c_client *client = to_i2c_client(dev); 332 struct adm1026_data *data = dev_get_drvdata(dev);
565 struct adm1026_data *data = i2c_get_clientdata(client); 333 struct i2c_client *client = data->client;
566 int i; 334 int i;
567 long value, alarms, gpio; 335 long value, alarms, gpio;
568 336
@@ -728,8 +496,8 @@ static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
728{ 496{
729 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 497 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
730 int nr = sensor_attr->index; 498 int nr = sensor_attr->index;
731 struct i2c_client *client = to_i2c_client(dev); 499 struct adm1026_data *data = dev_get_drvdata(dev);
732 struct adm1026_data *data = i2c_get_clientdata(client); 500 struct i2c_client *client = data->client;
733 long val; 501 long val;
734 int err; 502 int err;
735 503
@@ -756,8 +524,8 @@ static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
756{ 524{
757 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 525 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
758 int nr = sensor_attr->index; 526 int nr = sensor_attr->index;
759 struct i2c_client *client = to_i2c_client(dev); 527 struct adm1026_data *data = dev_get_drvdata(dev);
760 struct adm1026_data *data = i2c_get_clientdata(client); 528 struct i2c_client *client = data->client;
761 long val; 529 long val;
762 int err; 530 int err;
763 531
@@ -815,8 +583,8 @@ static ssize_t show_in16_min(struct device *dev, struct device_attribute *attr,
815static ssize_t set_in16_min(struct device *dev, struct device_attribute *attr, 583static ssize_t set_in16_min(struct device *dev, struct device_attribute *attr,
816 const char *buf, size_t count) 584 const char *buf, size_t count)
817{ 585{
818 struct i2c_client *client = to_i2c_client(dev); 586 struct adm1026_data *data = dev_get_drvdata(dev);
819 struct adm1026_data *data = i2c_get_clientdata(client); 587 struct i2c_client *client = data->client;
820 long val; 588 long val;
821 int err; 589 int err;
822 590
@@ -840,8 +608,8 @@ static ssize_t show_in16_max(struct device *dev, struct device_attribute *attr,
840static ssize_t set_in16_max(struct device *dev, struct device_attribute *attr, 608static ssize_t set_in16_max(struct device *dev, struct device_attribute *attr,
841 const char *buf, size_t count) 609 const char *buf, size_t count)
842{ 610{
843 struct i2c_client *client = to_i2c_client(dev); 611 struct adm1026_data *data = dev_get_drvdata(dev);
844 struct adm1026_data *data = i2c_get_clientdata(client); 612 struct i2c_client *client = data->client;
845 long val; 613 long val;
846 int err; 614 int err;
847 615
@@ -888,8 +656,8 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
888{ 656{
889 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 657 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
890 int nr = sensor_attr->index; 658 int nr = sensor_attr->index;
891 struct i2c_client *client = to_i2c_client(dev); 659 struct adm1026_data *data = dev_get_drvdata(dev);
892 struct adm1026_data *data = i2c_get_clientdata(client); 660 struct i2c_client *client = data->client;
893 long val; 661 long val;
894 int err; 662 int err;
895 663
@@ -923,8 +691,8 @@ fan_offset(8);
923/* Adjust fan_min to account for new fan divisor */ 691/* Adjust fan_min to account for new fan divisor */
924static void fixup_fan_min(struct device *dev, int fan, int old_div) 692static void fixup_fan_min(struct device *dev, int fan, int old_div)
925{ 693{
926 struct i2c_client *client = to_i2c_client(dev); 694 struct adm1026_data *data = dev_get_drvdata(dev);
927 struct adm1026_data *data = i2c_get_clientdata(client); 695 struct i2c_client *client = data->client;
928 int new_min; 696 int new_min;
929 int new_div = data->fan_div[fan]; 697 int new_div = data->fan_div[fan];
930 698
@@ -952,8 +720,8 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
952{ 720{
953 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 721 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
954 int nr = sensor_attr->index; 722 int nr = sensor_attr->index;
955 struct i2c_client *client = to_i2c_client(dev); 723 struct adm1026_data *data = dev_get_drvdata(dev);
956 struct adm1026_data *data = i2c_get_clientdata(client); 724 struct i2c_client *client = data->client;
957 long val; 725 long val;
958 int orig_div, new_div; 726 int orig_div, new_div;
959 int err; 727 int err;
@@ -1024,8 +792,8 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
1024{ 792{
1025 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 793 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1026 int nr = sensor_attr->index; 794 int nr = sensor_attr->index;
1027 struct i2c_client *client = to_i2c_client(dev); 795 struct adm1026_data *data = dev_get_drvdata(dev);
1028 struct adm1026_data *data = i2c_get_clientdata(client); 796 struct i2c_client *client = data->client;
1029 long val; 797 long val;
1030 int err; 798 int err;
1031 799
@@ -1053,8 +821,8 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
1053{ 821{
1054 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 822 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1055 int nr = sensor_attr->index; 823 int nr = sensor_attr->index;
1056 struct i2c_client *client = to_i2c_client(dev); 824 struct adm1026_data *data = dev_get_drvdata(dev);
1057 struct adm1026_data *data = i2c_get_clientdata(client); 825 struct i2c_client *client = data->client;
1058 long val; 826 long val;
1059 int err; 827 int err;
1060 828
@@ -1097,8 +865,8 @@ static ssize_t set_temp_offset(struct device *dev,
1097{ 865{
1098 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 866 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1099 int nr = sensor_attr->index; 867 int nr = sensor_attr->index;
1100 struct i2c_client *client = to_i2c_client(dev); 868 struct adm1026_data *data = dev_get_drvdata(dev);
1101 struct adm1026_data *data = i2c_get_clientdata(client); 869 struct i2c_client *client = data->client;
1102 long val; 870 long val;
1103 int err; 871 int err;
1104 872
@@ -1153,8 +921,8 @@ static ssize_t set_temp_auto_point1_temp(struct device *dev,
1153{ 921{
1154 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 922 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1155 int nr = sensor_attr->index; 923 int nr = sensor_attr->index;
1156 struct i2c_client *client = to_i2c_client(dev); 924 struct adm1026_data *data = dev_get_drvdata(dev);
1157 struct adm1026_data *data = i2c_get_clientdata(client); 925 struct i2c_client *client = data->client;
1158 long val; 926 long val;
1159 int err; 927 int err;
1160 928
@@ -1192,8 +960,8 @@ static ssize_t show_temp_crit_enable(struct device *dev,
1192static ssize_t set_temp_crit_enable(struct device *dev, 960static ssize_t set_temp_crit_enable(struct device *dev,
1193 struct device_attribute *attr, const char *buf, size_t count) 961 struct device_attribute *attr, const char *buf, size_t count)
1194{ 962{
1195 struct i2c_client *client = to_i2c_client(dev); 963 struct adm1026_data *data = dev_get_drvdata(dev);
1196 struct adm1026_data *data = i2c_get_clientdata(client); 964 struct i2c_client *client = data->client;
1197 unsigned long val; 965 unsigned long val;
1198 int err; 966 int err;
1199 967
@@ -1233,8 +1001,8 @@ static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr,
1233{ 1001{
1234 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 1002 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1235 int nr = sensor_attr->index; 1003 int nr = sensor_attr->index;
1236 struct i2c_client *client = to_i2c_client(dev); 1004 struct adm1026_data *data = dev_get_drvdata(dev);
1237 struct adm1026_data *data = i2c_get_clientdata(client); 1005 struct i2c_client *client = data->client;
1238 long val; 1006 long val;
1239 int err; 1007 int err;
1240 1008
@@ -1268,8 +1036,8 @@ static ssize_t set_analog_out_reg(struct device *dev,
1268 struct device_attribute *attr, 1036 struct device_attribute *attr,
1269 const char *buf, size_t count) 1037 const char *buf, size_t count)
1270{ 1038{
1271 struct i2c_client *client = to_i2c_client(dev); 1039 struct adm1026_data *data = dev_get_drvdata(dev);
1272 struct adm1026_data *data = i2c_get_clientdata(client); 1040 struct i2c_client *client = data->client;
1273 long val; 1041 long val;
1274 int err; 1042 int err;
1275 1043
@@ -1378,8 +1146,8 @@ static ssize_t show_alarm_mask(struct device *dev,
1378static ssize_t set_alarm_mask(struct device *dev, struct device_attribute *attr, 1146static ssize_t set_alarm_mask(struct device *dev, struct device_attribute *attr,
1379 const char *buf, size_t count) 1147 const char *buf, size_t count)
1380{ 1148{
1381 struct i2c_client *client = to_i2c_client(dev); 1149 struct adm1026_data *data = dev_get_drvdata(dev);
1382 struct adm1026_data *data = i2c_get_clientdata(client); 1150 struct i2c_client *client = data->client;
1383 unsigned long mask; 1151 unsigned long mask;
1384 long val; 1152 long val;
1385 int err; 1153 int err;
@@ -1420,8 +1188,8 @@ static ssize_t show_gpio(struct device *dev, struct device_attribute *attr,
1420static ssize_t set_gpio(struct device *dev, struct device_attribute *attr, 1188static ssize_t set_gpio(struct device *dev, struct device_attribute *attr,
1421 const char *buf, size_t count) 1189 const char *buf, size_t count)
1422{ 1190{
1423 struct i2c_client *client = to_i2c_client(dev); 1191 struct adm1026_data *data = dev_get_drvdata(dev);
1424 struct adm1026_data *data = i2c_get_clientdata(client); 1192 struct i2c_client *client = data->client;
1425 long gpio; 1193 long gpio;
1426 long val; 1194 long val;
1427 int err; 1195 int err;
@@ -1453,8 +1221,8 @@ static ssize_t show_gpio_mask(struct device *dev, struct device_attribute *attr,
1453static ssize_t set_gpio_mask(struct device *dev, struct device_attribute *attr, 1221static ssize_t set_gpio_mask(struct device *dev, struct device_attribute *attr,
1454 const char *buf, size_t count) 1222 const char *buf, size_t count)
1455{ 1223{
1456 struct i2c_client *client = to_i2c_client(dev); 1224 struct adm1026_data *data = dev_get_drvdata(dev);
1457 struct adm1026_data *data = i2c_get_clientdata(client); 1225 struct i2c_client *client = data->client;
1458 long mask; 1226 long mask;
1459 long val; 1227 long val;
1460 int err; 1228 int err;
@@ -1487,8 +1255,8 @@ static ssize_t show_pwm_reg(struct device *dev, struct device_attribute *attr,
1487static ssize_t set_pwm_reg(struct device *dev, struct device_attribute *attr, 1255static ssize_t set_pwm_reg(struct device *dev, struct device_attribute *attr,
1488 const char *buf, size_t count) 1256 const char *buf, size_t count)
1489{ 1257{
1490 struct i2c_client *client = to_i2c_client(dev); 1258 struct adm1026_data *data = dev_get_drvdata(dev);
1491 struct adm1026_data *data = i2c_get_clientdata(client); 1259 struct i2c_client *client = data->client;
1492 1260
1493 if (data->pwm1.enable == 1) { 1261 if (data->pwm1.enable == 1) {
1494 long val; 1262 long val;
@@ -1517,8 +1285,8 @@ static ssize_t set_auto_pwm_min(struct device *dev,
1517 struct device_attribute *attr, const char *buf, 1285 struct device_attribute *attr, const char *buf,
1518 size_t count) 1286 size_t count)
1519{ 1287{
1520 struct i2c_client *client = to_i2c_client(dev); 1288 struct adm1026_data *data = dev_get_drvdata(dev);
1521 struct adm1026_data *data = i2c_get_clientdata(client); 1289 struct i2c_client *client = data->client;
1522 unsigned long val; 1290 unsigned long val;
1523 int err; 1291 int err;
1524 1292
@@ -1553,8 +1321,8 @@ static ssize_t show_pwm_enable(struct device *dev,
1553static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *attr, 1321static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *attr,
1554 const char *buf, size_t count) 1322 const char *buf, size_t count)
1555{ 1323{
1556 struct i2c_client *client = to_i2c_client(dev); 1324 struct adm1026_data *data = dev_get_drvdata(dev);
1557 struct adm1026_data *data = i2c_get_clientdata(client); 1325 struct i2c_client *client = data->client;
1558 int old_enable; 1326 int old_enable;
1559 unsigned long val; 1327 unsigned long val;
1560 int err; 1328 int err;
@@ -1829,18 +1597,220 @@ static int adm1026_detect(struct i2c_client *client,
1829 return 0; 1597 return 0;
1830} 1598}
1831 1599
1600static void adm1026_print_gpio(struct i2c_client *client)
1601{
1602 struct adm1026_data *data = i2c_get_clientdata(client);
1603 int i;
1604
1605 dev_dbg(&client->dev, "GPIO config is:\n");
1606 for (i = 0; i <= 7; ++i) {
1607 if (data->config2 & (1 << i)) {
1608 dev_dbg(&client->dev, "\t%sGP%s%d\n",
1609 data->gpio_config[i] & 0x02 ? "" : "!",
1610 data->gpio_config[i] & 0x01 ? "OUT" : "IN",
1611 i);
1612 } else {
1613 dev_dbg(&client->dev, "\tFAN%d\n", i);
1614 }
1615 }
1616 for (i = 8; i <= 15; ++i) {
1617 dev_dbg(&client->dev, "\t%sGP%s%d\n",
1618 data->gpio_config[i] & 0x02 ? "" : "!",
1619 data->gpio_config[i] & 0x01 ? "OUT" : "IN",
1620 i);
1621 }
1622 if (data->config3 & CFG3_GPIO16_ENABLE) {
1623 dev_dbg(&client->dev, "\t%sGP%s16\n",
1624 data->gpio_config[16] & 0x02 ? "" : "!",
1625 data->gpio_config[16] & 0x01 ? "OUT" : "IN");
1626 } else {
1627 /* GPIO16 is THERM */
1628 dev_dbg(&client->dev, "\tTHERM\n");
1629 }
1630}
1631
1632static void adm1026_fixup_gpio(struct i2c_client *client)
1633{
1634 struct adm1026_data *data = i2c_get_clientdata(client);
1635 int i;
1636 int value;
1637
1638 /* Make the changes requested. */
1639 /*
1640 * We may need to unlock/stop monitoring or soft-reset the
1641 * chip before we can make changes. This hasn't been
1642 * tested much. FIXME
1643 */
1644
1645 /* Make outputs */
1646 for (i = 0; i <= 16; ++i) {
1647 if (gpio_output[i] >= 0 && gpio_output[i] <= 16)
1648 data->gpio_config[gpio_output[i]] |= 0x01;
1649 /* if GPIO0-7 is output, it isn't a FAN tach */
1650 if (gpio_output[i] >= 0 && gpio_output[i] <= 7)
1651 data->config2 |= 1 << gpio_output[i];
1652 }
1653
1654 /* Input overrides output */
1655 for (i = 0; i <= 16; ++i) {
1656 if (gpio_input[i] >= 0 && gpio_input[i] <= 16)
1657 data->gpio_config[gpio_input[i]] &= ~0x01;
1658 /* if GPIO0-7 is input, it isn't a FAN tach */
1659 if (gpio_input[i] >= 0 && gpio_input[i] <= 7)
1660 data->config2 |= 1 << gpio_input[i];
1661 }
1662
1663 /* Inverted */
1664 for (i = 0; i <= 16; ++i) {
1665 if (gpio_inverted[i] >= 0 && gpio_inverted[i] <= 16)
1666 data->gpio_config[gpio_inverted[i]] &= ~0x02;
1667 }
1668
1669 /* Normal overrides inverted */
1670 for (i = 0; i <= 16; ++i) {
1671 if (gpio_normal[i] >= 0 && gpio_normal[i] <= 16)
1672 data->gpio_config[gpio_normal[i]] |= 0x02;
1673 }
1674
1675 /* Fan overrides input and output */
1676 for (i = 0; i <= 7; ++i) {
1677 if (gpio_fan[i] >= 0 && gpio_fan[i] <= 7)
1678 data->config2 &= ~(1 << gpio_fan[i]);
1679 }
1680
1681 /* Write new configs to registers */
1682 adm1026_write_value(client, ADM1026_REG_CONFIG2, data->config2);
1683 data->config3 = (data->config3 & 0x3f)
1684 | ((data->gpio_config[16] & 0x03) << 6);
1685 adm1026_write_value(client, ADM1026_REG_CONFIG3, data->config3);
1686 for (i = 15, value = 0; i >= 0; --i) {
1687 value <<= 2;
1688 value |= data->gpio_config[i] & 0x03;
1689 if ((i & 0x03) == 0) {
1690 adm1026_write_value(client,
1691 ADM1026_REG_GPIO_CFG_0_3 + i/4,
1692 value);
1693 value = 0;
1694 }
1695 }
1696
1697 /* Print the new config */
1698 adm1026_print_gpio(client);
1699}
1700
1701static void adm1026_init_client(struct i2c_client *client)
1702{
1703 int value, i;
1704 struct adm1026_data *data = i2c_get_clientdata(client);
1705
1706 dev_dbg(&client->dev, "Initializing device\n");
1707 /* Read chip config */
1708 data->config1 = adm1026_read_value(client, ADM1026_REG_CONFIG1);
1709 data->config2 = adm1026_read_value(client, ADM1026_REG_CONFIG2);
1710 data->config3 = adm1026_read_value(client, ADM1026_REG_CONFIG3);
1711
1712 /* Inform user of chip config */
1713 dev_dbg(&client->dev, "ADM1026_REG_CONFIG1 is: 0x%02x\n",
1714 data->config1);
1715 if ((data->config1 & CFG1_MONITOR) == 0) {
1716 dev_dbg(&client->dev,
1717 "Monitoring not currently enabled.\n");
1718 }
1719 if (data->config1 & CFG1_INT_ENABLE) {
1720 dev_dbg(&client->dev,
1721 "SMBALERT interrupts are enabled.\n");
1722 }
1723 if (data->config1 & CFG1_AIN8_9) {
1724 dev_dbg(&client->dev,
1725 "in8 and in9 enabled. temp3 disabled.\n");
1726 } else {
1727 dev_dbg(&client->dev,
1728 "temp3 enabled. in8 and in9 disabled.\n");
1729 }
1730 if (data->config1 & CFG1_THERM_HOT) {
1731 dev_dbg(&client->dev,
1732 "Automatic THERM, PWM, and temp limits enabled.\n");
1733 }
1734
1735 if (data->config3 & CFG3_GPIO16_ENABLE) {
1736 dev_dbg(&client->dev,
1737 "GPIO16 enabled. THERM pin disabled.\n");
1738 } else {
1739 dev_dbg(&client->dev,
1740 "THERM pin enabled. GPIO16 disabled.\n");
1741 }
1742 if (data->config3 & CFG3_VREF_250)
1743 dev_dbg(&client->dev, "Vref is 2.50 Volts.\n");
1744 else
1745 dev_dbg(&client->dev, "Vref is 1.82 Volts.\n");
1746 /* Read and pick apart the existing GPIO configuration */
1747 value = 0;
1748 for (i = 0; i <= 15; ++i) {
1749 if ((i & 0x03) == 0) {
1750 value = adm1026_read_value(client,
1751 ADM1026_REG_GPIO_CFG_0_3 + i / 4);
1752 }
1753 data->gpio_config[i] = value & 0x03;
1754 value >>= 2;
1755 }
1756 data->gpio_config[16] = (data->config3 >> 6) & 0x03;
1757
1758 /* ... and then print it */
1759 adm1026_print_gpio(client);
1760
1761 /*
1762 * If the user asks us to reprogram the GPIO config, then
1763 * do it now.
1764 */
1765 if (gpio_input[0] != -1 || gpio_output[0] != -1
1766 || gpio_inverted[0] != -1 || gpio_normal[0] != -1
1767 || gpio_fan[0] != -1) {
1768 adm1026_fixup_gpio(client);
1769 }
1770
1771 /*
1772 * WE INTENTIONALLY make no changes to the limits,
1773 * offsets, pwms, fans and zones. If they were
1774 * configured, we don't want to mess with them.
1775 * If they weren't, the default is 100% PWM, no
1776 * control and will suffice until 'sensors -s'
1777 * can be run by the user. We DO set the default
1778 * value for pwm1.auto_pwm_min to its maximum
1779 * so that enabling automatic pwm fan control
1780 * without first setting a value for pwm1.auto_pwm_min
1781 * will not result in potentially dangerous fan speed decrease.
1782 */
1783 data->pwm1.auto_pwm_min = 255;
1784 /* Start monitoring */
1785 value = adm1026_read_value(client, ADM1026_REG_CONFIG1);
1786 /* Set MONITOR, clear interrupt acknowledge and s/w reset */
1787 value = (value | CFG1_MONITOR) & (~CFG1_INT_CLEAR & ~CFG1_RESET);
1788 dev_dbg(&client->dev, "Setting CONFIG to: 0x%02x\n", value);
1789 data->config1 = value;
1790 adm1026_write_value(client, ADM1026_REG_CONFIG1, value);
1791
1792 /* initialize fan_div[] to hardware defaults */
1793 value = adm1026_read_value(client, ADM1026_REG_FAN_DIV_0_3) |
1794 (adm1026_read_value(client, ADM1026_REG_FAN_DIV_4_7) << 8);
1795 for (i = 0; i <= 7; ++i) {
1796 data->fan_div[i] = DIV_FROM_REG(value & 0x03);
1797 value >>= 2;
1798 }
1799}
1800
1832static int adm1026_probe(struct i2c_client *client, 1801static int adm1026_probe(struct i2c_client *client,
1833 const struct i2c_device_id *id) 1802 const struct i2c_device_id *id)
1834{ 1803{
1804 struct device *dev = &client->dev;
1805 struct device *hwmon_dev;
1835 struct adm1026_data *data; 1806 struct adm1026_data *data;
1836 int err;
1837 1807
1838 data = devm_kzalloc(&client->dev, sizeof(struct adm1026_data), 1808 data = devm_kzalloc(dev, sizeof(struct adm1026_data), GFP_KERNEL);
1839 GFP_KERNEL);
1840 if (!data) 1809 if (!data)
1841 return -ENOMEM; 1810 return -ENOMEM;
1842 1811
1843 i2c_set_clientdata(client, data); 1812 i2c_set_clientdata(client, data);
1813 data->client = client;
1844 mutex_init(&data->update_lock); 1814 mutex_init(&data->update_lock);
1845 1815
1846 /* Set the VRM version */ 1816 /* Set the VRM version */
@@ -1849,48 +1819,34 @@ static int adm1026_probe(struct i2c_client *client,
1849 /* Initialize the ADM1026 chip */ 1819 /* Initialize the ADM1026 chip */
1850 adm1026_init_client(client); 1820 adm1026_init_client(client);
1851 1821
1852 /* Register sysfs hooks */ 1822 /* sysfs hooks */
1853 err = sysfs_create_group(&client->dev.kobj, &adm1026_group); 1823 data->groups[0] = &adm1026_group;
1854 if (err)
1855 return err;
1856 if (data->config1 & CFG1_AIN8_9) 1824 if (data->config1 & CFG1_AIN8_9)
1857 err = sysfs_create_group(&client->dev.kobj, 1825 data->groups[1] = &adm1026_group_in8_9;
1858 &adm1026_group_in8_9);
1859 else 1826 else
1860 err = sysfs_create_group(&client->dev.kobj, 1827 data->groups[1] = &adm1026_group_temp3;
1861 &adm1026_group_temp3);
1862 if (err)
1863 goto exitremove;
1864
1865 data->hwmon_dev = hwmon_device_register(&client->dev);
1866 if (IS_ERR(data->hwmon_dev)) {
1867 err = PTR_ERR(data->hwmon_dev);
1868 goto exitremove;
1869 }
1870
1871 return 0;
1872 1828
1873 /* Error out and cleanup code */ 1829 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1874exitremove: 1830 data, data->groups);
1875 sysfs_remove_group(&client->dev.kobj, &adm1026_group); 1831 return PTR_ERR_OR_ZERO(hwmon_dev);
1876 if (data->config1 & CFG1_AIN8_9)
1877 sysfs_remove_group(&client->dev.kobj, &adm1026_group_in8_9);
1878 else
1879 sysfs_remove_group(&client->dev.kobj, &adm1026_group_temp3);
1880 return err;
1881} 1832}
1882 1833
1883static int adm1026_remove(struct i2c_client *client) 1834static const struct i2c_device_id adm1026_id[] = {
1884{ 1835 { "adm1026", 0 },
1885 struct adm1026_data *data = i2c_get_clientdata(client); 1836 { }
1886 hwmon_device_unregister(data->hwmon_dev); 1837};
1887 sysfs_remove_group(&client->dev.kobj, &adm1026_group); 1838MODULE_DEVICE_TABLE(i2c, adm1026_id);
1888 if (data->config1 & CFG1_AIN8_9) 1839
1889 sysfs_remove_group(&client->dev.kobj, &adm1026_group_in8_9); 1840static struct i2c_driver adm1026_driver = {
1890 else 1841 .class = I2C_CLASS_HWMON,
1891 sysfs_remove_group(&client->dev.kobj, &adm1026_group_temp3); 1842 .driver = {
1892 return 0; 1843 .name = "adm1026",
1893} 1844 },
1845 .probe = adm1026_probe,
1846 .id_table = adm1026_id,
1847 .detect = adm1026_detect,
1848 .address_list = normal_i2c,
1849};
1894 1850
1895module_i2c_driver(adm1026_driver); 1851module_i2c_driver(adm1026_driver);
1896 1852
diff --git a/drivers/hwmon/adm1029.c b/drivers/hwmon/adm1029.c
index 2804571b269e..8c5cdb560258 100644
--- a/drivers/hwmon/adm1029.c
+++ b/drivers/hwmon/adm1029.c
@@ -106,45 +106,11 @@ static const u8 ADM1029_REG_FAN_DIV[] = {
106}; 106};
107 107
108/* 108/*
109 * Functions declaration
110 */
111
112static int adm1029_probe(struct i2c_client *client,
113 const struct i2c_device_id *id);
114static int adm1029_detect(struct i2c_client *client,
115 struct i2c_board_info *info);
116static int adm1029_remove(struct i2c_client *client);
117static struct adm1029_data *adm1029_update_device(struct device *dev);
118static int adm1029_init_client(struct i2c_client *client);
119
120/*
121 * Driver data (common to all clients)
122 */
123
124static const struct i2c_device_id adm1029_id[] = {
125 { "adm1029", 0 },
126 { }
127};
128MODULE_DEVICE_TABLE(i2c, adm1029_id);
129
130static struct i2c_driver adm1029_driver = {
131 .class = I2C_CLASS_HWMON,
132 .driver = {
133 .name = "adm1029",
134 },
135 .probe = adm1029_probe,
136 .remove = adm1029_remove,
137 .id_table = adm1029_id,
138 .detect = adm1029_detect,
139 .address_list = normal_i2c,
140};
141
142/*
143 * Client data (each client gets its own) 109 * Client data (each client gets its own)
144 */ 110 */
145 111
146struct adm1029_data { 112struct adm1029_data {
147 struct device *hwmon_dev; 113 struct i2c_client *client;
148 struct mutex update_lock; 114 struct mutex update_lock;
149 char valid; /* zero until following fields are valid */ 115 char valid; /* zero until following fields are valid */
150 unsigned long last_updated; /* in jiffies */ 116 unsigned long last_updated; /* in jiffies */
@@ -156,6 +122,50 @@ struct adm1029_data {
156}; 122};
157 123
158/* 124/*
125 * function that update the status of the chips (temperature for example)
126 */
127static struct adm1029_data *adm1029_update_device(struct device *dev)
128{
129 struct adm1029_data *data = dev_get_drvdata(dev);
130 struct i2c_client *client = data->client;
131
132 mutex_lock(&data->update_lock);
133 /*
134 * Use the "cache" Luke, don't recheck values
135 * if there are already checked not a long time later
136 */
137 if (time_after(jiffies, data->last_updated + HZ * 2)
138 || !data->valid) {
139 int nr;
140
141 dev_dbg(&client->dev, "Updating adm1029 data\n");
142
143 for (nr = 0; nr < ARRAY_SIZE(ADM1029_REG_TEMP); nr++) {
144 data->temp[nr] =
145 i2c_smbus_read_byte_data(client,
146 ADM1029_REG_TEMP[nr]);
147 }
148 for (nr = 0; nr < ARRAY_SIZE(ADM1029_REG_FAN); nr++) {
149 data->fan[nr] =
150 i2c_smbus_read_byte_data(client,
151 ADM1029_REG_FAN[nr]);
152 }
153 for (nr = 0; nr < ARRAY_SIZE(ADM1029_REG_FAN_DIV); nr++) {
154 data->fan_div[nr] =
155 i2c_smbus_read_byte_data(client,
156 ADM1029_REG_FAN_DIV[nr]);
157 }
158
159 data->last_updated = jiffies;
160 data->valid = 1;
161 }
162
163 mutex_unlock(&data->update_lock);
164
165 return data;
166}
167
168/*
159 * Sysfs stuff 169 * Sysfs stuff
160 */ 170 */
161 171
@@ -197,8 +207,8 @@ show_fan_div(struct device *dev, struct device_attribute *devattr, char *buf)
197static ssize_t set_fan_div(struct device *dev, 207static ssize_t set_fan_div(struct device *dev,
198 struct device_attribute *devattr, const char *buf, size_t count) 208 struct device_attribute *devattr, const char *buf, size_t count)
199{ 209{
200 struct i2c_client *client = to_i2c_client(dev); 210 struct adm1029_data *data = dev_get_drvdata(dev);
201 struct adm1029_data *data = i2c_get_clientdata(client); 211 struct i2c_client *client = data->client;
202 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 212 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
203 u8 reg; 213 u8 reg;
204 long val; 214 long val;
@@ -270,7 +280,7 @@ static SENSOR_DEVICE_ATTR(fan1_div, S_IRUGO | S_IWUSR,
270static SENSOR_DEVICE_ATTR(fan2_div, S_IRUGO | S_IWUSR, 280static SENSOR_DEVICE_ATTR(fan2_div, S_IRUGO | S_IWUSR,
271 show_fan_div, set_fan_div, 1); 281 show_fan_div, set_fan_div, 1);
272 282
273static struct attribute *adm1029_attributes[] = { 283static struct attribute *adm1029_attrs[] = {
274 &sensor_dev_attr_temp1_input.dev_attr.attr, 284 &sensor_dev_attr_temp1_input.dev_attr.attr,
275 &sensor_dev_attr_temp1_min.dev_attr.attr, 285 &sensor_dev_attr_temp1_min.dev_attr.attr,
276 &sensor_dev_attr_temp1_max.dev_attr.attr, 286 &sensor_dev_attr_temp1_max.dev_attr.attr,
@@ -289,9 +299,7 @@ static struct attribute *adm1029_attributes[] = {
289 NULL 299 NULL
290}; 300};
291 301
292static const struct attribute_group adm1029_group = { 302ATTRIBUTE_GROUPS(adm1029);
293 .attrs = adm1029_attributes,
294};
295 303
296/* 304/*
297 * Real code 305 * Real code
@@ -340,48 +348,10 @@ static int adm1029_detect(struct i2c_client *client,
340 return 0; 348 return 0;
341} 349}
342 350
343static int adm1029_probe(struct i2c_client *client,
344 const struct i2c_device_id *id)
345{
346 struct adm1029_data *data;
347 int err;
348
349 data = devm_kzalloc(&client->dev, sizeof(struct adm1029_data),
350 GFP_KERNEL);
351 if (!data)
352 return -ENOMEM;
353
354 i2c_set_clientdata(client, data);
355 mutex_init(&data->update_lock);
356
357 /*
358 * Initialize the ADM1029 chip
359 * Check config register
360 */
361 if (adm1029_init_client(client) == 0)
362 return -ENODEV;
363
364 /* Register sysfs hooks */
365 err = sysfs_create_group(&client->dev.kobj, &adm1029_group);
366 if (err)
367 return err;
368
369 data->hwmon_dev = hwmon_device_register(&client->dev);
370 if (IS_ERR(data->hwmon_dev)) {
371 err = PTR_ERR(data->hwmon_dev);
372 goto exit_remove_files;
373 }
374
375 return 0;
376
377 exit_remove_files:
378 sysfs_remove_group(&client->dev.kobj, &adm1029_group);
379 return err;
380}
381
382static int adm1029_init_client(struct i2c_client *client) 351static int adm1029_init_client(struct i2c_client *client)
383{ 352{
384 u8 config; 353 u8 config;
354
385 config = i2c_smbus_read_byte_data(client, ADM1029_REG_CONFIG); 355 config = i2c_smbus_read_byte_data(client, ADM1029_REG_CONFIG);
386 if ((config & 0x10) == 0) { 356 if ((config & 0x10) == 0) {
387 i2c_smbus_write_byte_data(client, ADM1029_REG_CONFIG, 357 i2c_smbus_write_byte_data(client, ADM1029_REG_CONFIG,
@@ -396,59 +366,49 @@ static int adm1029_init_client(struct i2c_client *client)
396 return 1; 366 return 1;
397} 367}
398 368
399static int adm1029_remove(struct i2c_client *client) 369static int adm1029_probe(struct i2c_client *client,
370 const struct i2c_device_id *id)
400{ 371{
401 struct adm1029_data *data = i2c_get_clientdata(client); 372 struct device *dev = &client->dev;
402 373 struct adm1029_data *data;
403 hwmon_device_unregister(data->hwmon_dev); 374 struct device *hwmon_dev;
404 sysfs_remove_group(&client->dev.kobj, &adm1029_group);
405 375
406 return 0; 376 data = devm_kzalloc(dev, sizeof(struct adm1029_data), GFP_KERNEL);
407} 377 if (!data)
378 return -ENOMEM;
408 379
409/* 380 data->client = client;
410 * function that update the status of the chips (temperature for example) 381 mutex_init(&data->update_lock);
411 */
412static struct adm1029_data *adm1029_update_device(struct device *dev)
413{
414 struct i2c_client *client = to_i2c_client(dev);
415 struct adm1029_data *data = i2c_get_clientdata(client);
416 382
417 mutex_lock(&data->update_lock);
418 /* 383 /*
419 * Use the "cache" Luke, don't recheck values 384 * Initialize the ADM1029 chip
420 * if there are already checked not a long time later 385 * Check config register
421 */ 386 */
422 if (time_after(jiffies, data->last_updated + HZ * 2) 387 if (adm1029_init_client(client) == 0)
423 || !data->valid) { 388 return -ENODEV;
424 int nr;
425
426 dev_dbg(&client->dev, "Updating adm1029 data\n");
427
428 for (nr = 0; nr < ARRAY_SIZE(ADM1029_REG_TEMP); nr++) {
429 data->temp[nr] =
430 i2c_smbus_read_byte_data(client,
431 ADM1029_REG_TEMP[nr]);
432 }
433 for (nr = 0; nr < ARRAY_SIZE(ADM1029_REG_FAN); nr++) {
434 data->fan[nr] =
435 i2c_smbus_read_byte_data(client,
436 ADM1029_REG_FAN[nr]);
437 }
438 for (nr = 0; nr < ARRAY_SIZE(ADM1029_REG_FAN_DIV); nr++) {
439 data->fan_div[nr] =
440 i2c_smbus_read_byte_data(client,
441 ADM1029_REG_FAN_DIV[nr]);
442 }
443 389
444 data->last_updated = jiffies; 390 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
445 data->valid = 1; 391 data,
446 } 392 adm1029_groups);
393 return PTR_ERR_OR_ZERO(hwmon_dev);
394}
447 395
448 mutex_unlock(&data->update_lock); 396static const struct i2c_device_id adm1029_id[] = {
397 { "adm1029", 0 },
398 { }
399};
400MODULE_DEVICE_TABLE(i2c, adm1029_id);
449 401
450 return data; 402static struct i2c_driver adm1029_driver = {
451} 403 .class = I2C_CLASS_HWMON,
404 .driver = {
405 .name = "adm1029",
406 },
407 .probe = adm1029_probe,
408 .id_table = adm1029_id,
409 .detect = adm1029_detect,
410 .address_list = normal_i2c,
411};
452 412
453module_i2c_driver(adm1029_driver); 413module_i2c_driver(adm1029_driver);
454 414
diff --git a/drivers/hwmon/adm1031.c b/drivers/hwmon/adm1031.c
index 51c1a5a165ab..a5818980dad7 100644
--- a/drivers/hwmon/adm1031.c
+++ b/drivers/hwmon/adm1031.c
@@ -74,7 +74,8 @@ typedef u8 auto_chan_table_t[8][2];
74 74
75/* Each client has this additional data */ 75/* Each client has this additional data */
76struct adm1031_data { 76struct adm1031_data {
77 struct device *hwmon_dev; 77 struct i2c_client *client;
78 const struct attribute_group *groups[3];
78 struct mutex update_lock; 79 struct mutex update_lock;
79 int chip_type; 80 int chip_type;
80 char valid; /* !=0 if following fields are valid */ 81 char valid; /* !=0 if following fields are valid */
@@ -105,34 +106,6 @@ struct adm1031_data {
105 s8 temp_crit[3]; 106 s8 temp_crit[3];
106}; 107};
107 108
108static int adm1031_probe(struct i2c_client *client,
109 const struct i2c_device_id *id);
110static int adm1031_detect(struct i2c_client *client,
111 struct i2c_board_info *info);
112static void adm1031_init_client(struct i2c_client *client);
113static int adm1031_remove(struct i2c_client *client);
114static struct adm1031_data *adm1031_update_device(struct device *dev);
115
116static const struct i2c_device_id adm1031_id[] = {
117 { "adm1030", adm1030 },
118 { "adm1031", adm1031 },
119 { }
120};
121MODULE_DEVICE_TABLE(i2c, adm1031_id);
122
123/* This is the driver that will be inserted */
124static struct i2c_driver adm1031_driver = {
125 .class = I2C_CLASS_HWMON,
126 .driver = {
127 .name = "adm1031",
128 },
129 .probe = adm1031_probe,
130 .remove = adm1031_remove,
131 .id_table = adm1031_id,
132 .detect = adm1031_detect,
133 .address_list = normal_i2c,
134};
135
136static inline u8 adm1031_read_value(struct i2c_client *client, u8 reg) 109static inline u8 adm1031_read_value(struct i2c_client *client, u8 reg)
137{ 110{
138 return i2c_smbus_read_byte_data(client, reg); 111 return i2c_smbus_read_byte_data(client, reg);
@@ -144,6 +117,96 @@ adm1031_write_value(struct i2c_client *client, u8 reg, unsigned int value)
144 return i2c_smbus_write_byte_data(client, reg, value); 117 return i2c_smbus_write_byte_data(client, reg, value);
145} 118}
146 119
120static struct adm1031_data *adm1031_update_device(struct device *dev)
121{
122 struct adm1031_data *data = dev_get_drvdata(dev);
123 struct i2c_client *client = data->client;
124 unsigned long next_update;
125 int chan;
126
127 mutex_lock(&data->update_lock);
128
129 next_update = data->last_updated
130 + msecs_to_jiffies(data->update_interval);
131 if (time_after(jiffies, next_update) || !data->valid) {
132
133 dev_dbg(&client->dev, "Starting adm1031 update\n");
134 for (chan = 0;
135 chan < ((data->chip_type == adm1031) ? 3 : 2); chan++) {
136 u8 oldh, newh;
137
138 oldh =
139 adm1031_read_value(client, ADM1031_REG_TEMP(chan));
140 data->ext_temp[chan] =
141 adm1031_read_value(client, ADM1031_REG_EXT_TEMP);
142 newh =
143 adm1031_read_value(client, ADM1031_REG_TEMP(chan));
144 if (newh != oldh) {
145 data->ext_temp[chan] =
146 adm1031_read_value(client,
147 ADM1031_REG_EXT_TEMP);
148#ifdef DEBUG
149 oldh =
150 adm1031_read_value(client,
151 ADM1031_REG_TEMP(chan));
152
153 /* oldh is actually newer */
154 if (newh != oldh)
155 dev_warn(&client->dev,
156 "Remote temperature may be wrong.\n");
157#endif
158 }
159 data->temp[chan] = newh;
160
161 data->temp_offset[chan] =
162 adm1031_read_value(client,
163 ADM1031_REG_TEMP_OFFSET(chan));
164 data->temp_min[chan] =
165 adm1031_read_value(client,
166 ADM1031_REG_TEMP_MIN(chan));
167 data->temp_max[chan] =
168 adm1031_read_value(client,
169 ADM1031_REG_TEMP_MAX(chan));
170 data->temp_crit[chan] =
171 adm1031_read_value(client,
172 ADM1031_REG_TEMP_CRIT(chan));
173 data->auto_temp[chan] =
174 adm1031_read_value(client,
175 ADM1031_REG_AUTO_TEMP(chan));
176
177 }
178
179 data->conf1 = adm1031_read_value(client, ADM1031_REG_CONF1);
180 data->conf2 = adm1031_read_value(client, ADM1031_REG_CONF2);
181
182 data->alarm = adm1031_read_value(client, ADM1031_REG_STATUS(0))
183 | (adm1031_read_value(client, ADM1031_REG_STATUS(1)) << 8);
184 if (data->chip_type == adm1030)
185 data->alarm &= 0xc0ff;
186
187 for (chan = 0; chan < (data->chip_type == adm1030 ? 1 : 2);
188 chan++) {
189 data->fan_div[chan] =
190 adm1031_read_value(client,
191 ADM1031_REG_FAN_DIV(chan));
192 data->fan_min[chan] =
193 adm1031_read_value(client,
194 ADM1031_REG_FAN_MIN(chan));
195 data->fan[chan] =
196 adm1031_read_value(client,
197 ADM1031_REG_FAN_SPEED(chan));
198 data->pwm[chan] =
199 (adm1031_read_value(client,
200 ADM1031_REG_PWM) >> (4 * chan)) & 0x0f;
201 }
202 data->last_updated = jiffies;
203 data->valid = 1;
204 }
205
206 mutex_unlock(&data->update_lock);
207
208 return data;
209}
147 210
148#define TEMP_TO_REG(val) (((val) < 0 ? ((val - 500) / 1000) : \ 211#define TEMP_TO_REG(val) (((val) < 0 ? ((val - 500) / 1000) : \
149 ((val + 500) / 1000))) 212 ((val + 500) / 1000)))
@@ -280,8 +343,8 @@ static ssize_t
280set_fan_auto_channel(struct device *dev, struct device_attribute *attr, 343set_fan_auto_channel(struct device *dev, struct device_attribute *attr,
281 const char *buf, size_t count) 344 const char *buf, size_t count)
282{ 345{
283 struct i2c_client *client = to_i2c_client(dev); 346 struct adm1031_data *data = dev_get_drvdata(dev);
284 struct adm1031_data *data = i2c_get_clientdata(client); 347 struct i2c_client *client = data->client;
285 int nr = to_sensor_dev_attr(attr)->index; 348 int nr = to_sensor_dev_attr(attr)->index;
286 long val; 349 long val;
287 u8 reg; 350 u8 reg;
@@ -355,8 +418,8 @@ static ssize_t
355set_auto_temp_min(struct device *dev, struct device_attribute *attr, 418set_auto_temp_min(struct device *dev, struct device_attribute *attr,
356 const char *buf, size_t count) 419 const char *buf, size_t count)
357{ 420{
358 struct i2c_client *client = to_i2c_client(dev); 421 struct adm1031_data *data = dev_get_drvdata(dev);
359 struct adm1031_data *data = i2c_get_clientdata(client); 422 struct i2c_client *client = data->client;
360 int nr = to_sensor_dev_attr(attr)->index; 423 int nr = to_sensor_dev_attr(attr)->index;
361 long val; 424 long val;
362 int ret; 425 int ret;
@@ -385,8 +448,8 @@ static ssize_t
385set_auto_temp_max(struct device *dev, struct device_attribute *attr, 448set_auto_temp_max(struct device *dev, struct device_attribute *attr,
386 const char *buf, size_t count) 449 const char *buf, size_t count)
387{ 450{
388 struct i2c_client *client = to_i2c_client(dev); 451 struct adm1031_data *data = dev_get_drvdata(dev);
389 struct adm1031_data *data = i2c_get_clientdata(client); 452 struct i2c_client *client = data->client;
390 int nr = to_sensor_dev_attr(attr)->index; 453 int nr = to_sensor_dev_attr(attr)->index;
391 long val; 454 long val;
392 int ret; 455 int ret;
@@ -428,8 +491,8 @@ static ssize_t show_pwm(struct device *dev,
428static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, 491static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
429 const char *buf, size_t count) 492 const char *buf, size_t count)
430{ 493{
431 struct i2c_client *client = to_i2c_client(dev); 494 struct adm1031_data *data = dev_get_drvdata(dev);
432 struct adm1031_data *data = i2c_get_clientdata(client); 495 struct i2c_client *client = data->client;
433 int nr = to_sensor_dev_attr(attr)->index; 496 int nr = to_sensor_dev_attr(attr)->index;
434 long val; 497 long val;
435 int ret, reg; 498 int ret, reg;
@@ -541,8 +604,8 @@ static ssize_t show_fan_min(struct device *dev,
541static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 604static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
542 const char *buf, size_t count) 605 const char *buf, size_t count)
543{ 606{
544 struct i2c_client *client = to_i2c_client(dev); 607 struct adm1031_data *data = dev_get_drvdata(dev);
545 struct adm1031_data *data = i2c_get_clientdata(client); 608 struct i2c_client *client = data->client;
546 int nr = to_sensor_dev_attr(attr)->index; 609 int nr = to_sensor_dev_attr(attr)->index;
547 long val; 610 long val;
548 int ret; 611 int ret;
@@ -565,8 +628,8 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
565static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 628static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
566 const char *buf, size_t count) 629 const char *buf, size_t count)
567{ 630{
568 struct i2c_client *client = to_i2c_client(dev); 631 struct adm1031_data *data = dev_get_drvdata(dev);
569 struct adm1031_data *data = i2c_get_clientdata(client); 632 struct i2c_client *client = data->client;
570 int nr = to_sensor_dev_attr(attr)->index; 633 int nr = to_sensor_dev_attr(attr)->index;
571 long val; 634 long val;
572 u8 tmp; 635 u8 tmp;
@@ -667,8 +730,8 @@ static ssize_t set_temp_offset(struct device *dev,
667 struct device_attribute *attr, const char *buf, 730 struct device_attribute *attr, const char *buf,
668 size_t count) 731 size_t count)
669{ 732{
670 struct i2c_client *client = to_i2c_client(dev); 733 struct adm1031_data *data = dev_get_drvdata(dev);
671 struct adm1031_data *data = i2c_get_clientdata(client); 734 struct i2c_client *client = data->client;
672 int nr = to_sensor_dev_attr(attr)->index; 735 int nr = to_sensor_dev_attr(attr)->index;
673 long val; 736 long val;
674 int ret; 737 int ret;
@@ -688,8 +751,8 @@ static ssize_t set_temp_offset(struct device *dev,
688static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, 751static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
689 const char *buf, size_t count) 752 const char *buf, size_t count)
690{ 753{
691 struct i2c_client *client = to_i2c_client(dev); 754 struct adm1031_data *data = dev_get_drvdata(dev);
692 struct adm1031_data *data = i2c_get_clientdata(client); 755 struct i2c_client *client = data->client;
693 int nr = to_sensor_dev_attr(attr)->index; 756 int nr = to_sensor_dev_attr(attr)->index;
694 long val; 757 long val;
695 int ret; 758 int ret;
@@ -709,8 +772,8 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
709static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 772static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
710 const char *buf, size_t count) 773 const char *buf, size_t count)
711{ 774{
712 struct i2c_client *client = to_i2c_client(dev); 775 struct adm1031_data *data = dev_get_drvdata(dev);
713 struct adm1031_data *data = i2c_get_clientdata(client); 776 struct i2c_client *client = data->client;
714 int nr = to_sensor_dev_attr(attr)->index; 777 int nr = to_sensor_dev_attr(attr)->index;
715 long val; 778 long val;
716 int ret; 779 int ret;
@@ -730,8 +793,8 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
730static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr, 793static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr,
731 const char *buf, size_t count) 794 const char *buf, size_t count)
732{ 795{
733 struct i2c_client *client = to_i2c_client(dev); 796 struct adm1031_data *data = dev_get_drvdata(dev);
734 struct adm1031_data *data = i2c_get_clientdata(client); 797 struct i2c_client *client = data->client;
735 int nr = to_sensor_dev_attr(attr)->index; 798 int nr = to_sensor_dev_attr(attr)->index;
736 long val; 799 long val;
737 int ret; 800 int ret;
@@ -807,8 +870,7 @@ static const unsigned int update_intervals[] = {
807static ssize_t show_update_interval(struct device *dev, 870static ssize_t show_update_interval(struct device *dev,
808 struct device_attribute *attr, char *buf) 871 struct device_attribute *attr, char *buf)
809{ 872{
810 struct i2c_client *client = to_i2c_client(dev); 873 struct adm1031_data *data = dev_get_drvdata(dev);
811 struct adm1031_data *data = i2c_get_clientdata(client);
812 874
813 return sprintf(buf, "%u\n", data->update_interval); 875 return sprintf(buf, "%u\n", data->update_interval);
814} 876}
@@ -817,8 +879,8 @@ static ssize_t set_update_interval(struct device *dev,
817 struct device_attribute *attr, 879 struct device_attribute *attr,
818 const char *buf, size_t count) 880 const char *buf, size_t count)
819{ 881{
820 struct i2c_client *client = to_i2c_client(dev); 882 struct adm1031_data *data = dev_get_drvdata(dev);
821 struct adm1031_data *data = i2c_get_clientdata(client); 883 struct i2c_client *client = data->client;
822 unsigned long val; 884 unsigned long val;
823 int i, err; 885 int i, err;
824 u8 reg; 886 u8 reg;
@@ -950,64 +1012,6 @@ static int adm1031_detect(struct i2c_client *client,
950 return 0; 1012 return 0;
951} 1013}
952 1014
953static int adm1031_probe(struct i2c_client *client,
954 const struct i2c_device_id *id)
955{
956 struct adm1031_data *data;
957 int err;
958
959 data = devm_kzalloc(&client->dev, sizeof(struct adm1031_data),
960 GFP_KERNEL);
961 if (!data)
962 return -ENOMEM;
963
964 i2c_set_clientdata(client, data);
965 data->chip_type = id->driver_data;
966 mutex_init(&data->update_lock);
967
968 if (data->chip_type == adm1030)
969 data->chan_select_table = &auto_channel_select_table_adm1030;
970 else
971 data->chan_select_table = &auto_channel_select_table_adm1031;
972
973 /* Initialize the ADM1031 chip */
974 adm1031_init_client(client);
975
976 /* Register sysfs hooks */
977 err = sysfs_create_group(&client->dev.kobj, &adm1031_group);
978 if (err)
979 return err;
980
981 if (data->chip_type == adm1031) {
982 err = sysfs_create_group(&client->dev.kobj, &adm1031_group_opt);
983 if (err)
984 goto exit_remove;
985 }
986
987 data->hwmon_dev = hwmon_device_register(&client->dev);
988 if (IS_ERR(data->hwmon_dev)) {
989 err = PTR_ERR(data->hwmon_dev);
990 goto exit_remove;
991 }
992
993 return 0;
994
995exit_remove:
996 sysfs_remove_group(&client->dev.kobj, &adm1031_group);
997 sysfs_remove_group(&client->dev.kobj, &adm1031_group_opt);
998 return err;
999}
1000
1001static int adm1031_remove(struct i2c_client *client)
1002{
1003 struct adm1031_data *data = i2c_get_clientdata(client);
1004
1005 hwmon_device_unregister(data->hwmon_dev);
1006 sysfs_remove_group(&client->dev.kobj, &adm1031_group);
1007 sysfs_remove_group(&client->dev.kobj, &adm1031_group_opt);
1008 return 0;
1009}
1010
1011static void adm1031_init_client(struct i2c_client *client) 1015static void adm1031_init_client(struct i2c_client *client)
1012{ 1016{
1013 unsigned int read_val; 1017 unsigned int read_val;
@@ -1039,96 +1043,57 @@ static void adm1031_init_client(struct i2c_client *client)
1039 data->update_interval = update_intervals[i]; 1043 data->update_interval = update_intervals[i];
1040} 1044}
1041 1045
1042static struct adm1031_data *adm1031_update_device(struct device *dev) 1046static int adm1031_probe(struct i2c_client *client,
1047 const struct i2c_device_id *id)
1043{ 1048{
1044 struct i2c_client *client = to_i2c_client(dev); 1049 struct device *dev = &client->dev;
1045 struct adm1031_data *data = i2c_get_clientdata(client); 1050 struct device *hwmon_dev;
1046 unsigned long next_update; 1051 struct adm1031_data *data;
1047 int chan;
1048
1049 mutex_lock(&data->update_lock);
1050
1051 next_update = data->last_updated
1052 + msecs_to_jiffies(data->update_interval);
1053 if (time_after(jiffies, next_update) || !data->valid) {
1054
1055 dev_dbg(&client->dev, "Starting adm1031 update\n");
1056 for (chan = 0;
1057 chan < ((data->chip_type == adm1031) ? 3 : 2); chan++) {
1058 u8 oldh, newh;
1059
1060 oldh =
1061 adm1031_read_value(client, ADM1031_REG_TEMP(chan));
1062 data->ext_temp[chan] =
1063 adm1031_read_value(client, ADM1031_REG_EXT_TEMP);
1064 newh =
1065 adm1031_read_value(client, ADM1031_REG_TEMP(chan));
1066 if (newh != oldh) {
1067 data->ext_temp[chan] =
1068 adm1031_read_value(client,
1069 ADM1031_REG_EXT_TEMP);
1070#ifdef DEBUG
1071 oldh =
1072 adm1031_read_value(client,
1073 ADM1031_REG_TEMP(chan));
1074 1052
1075 /* oldh is actually newer */ 1053 data = devm_kzalloc(dev, sizeof(struct adm1031_data), GFP_KERNEL);
1076 if (newh != oldh) 1054 if (!data)
1077 dev_warn(&client->dev, 1055 return -ENOMEM;
1078 "Remote temperature may be wrong.\n");
1079#endif
1080 }
1081 data->temp[chan] = newh;
1082 1056
1083 data->temp_offset[chan] = 1057 i2c_set_clientdata(client, data);
1084 adm1031_read_value(client, 1058 data->client = client;
1085 ADM1031_REG_TEMP_OFFSET(chan)); 1059 data->chip_type = id->driver_data;
1086 data->temp_min[chan] = 1060 mutex_init(&data->update_lock);
1087 adm1031_read_value(client,
1088 ADM1031_REG_TEMP_MIN(chan));
1089 data->temp_max[chan] =
1090 adm1031_read_value(client,
1091 ADM1031_REG_TEMP_MAX(chan));
1092 data->temp_crit[chan] =
1093 adm1031_read_value(client,
1094 ADM1031_REG_TEMP_CRIT(chan));
1095 data->auto_temp[chan] =
1096 adm1031_read_value(client,
1097 ADM1031_REG_AUTO_TEMP(chan));
1098 1061
1099 } 1062 if (data->chip_type == adm1030)
1063 data->chan_select_table = &auto_channel_select_table_adm1030;
1064 else
1065 data->chan_select_table = &auto_channel_select_table_adm1031;
1100 1066
1101 data->conf1 = adm1031_read_value(client, ADM1031_REG_CONF1); 1067 /* Initialize the ADM1031 chip */
1102 data->conf2 = adm1031_read_value(client, ADM1031_REG_CONF2); 1068 adm1031_init_client(client);
1103 1069
1104 data->alarm = adm1031_read_value(client, ADM1031_REG_STATUS(0)) 1070 /* sysfs hooks */
1105 | (adm1031_read_value(client, ADM1031_REG_STATUS(1)) << 8); 1071 data->groups[0] = &adm1031_group;
1106 if (data->chip_type == adm1030) 1072 if (data->chip_type == adm1031)
1107 data->alarm &= 0xc0ff; 1073 data->groups[1] = &adm1031_group_opt;
1108 1074
1109 for (chan = 0; chan < (data->chip_type == adm1030 ? 1 : 2); 1075 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1110 chan++) { 1076 data, data->groups);
1111 data->fan_div[chan] = 1077 return PTR_ERR_OR_ZERO(hwmon_dev);
1112 adm1031_read_value(client, 1078}
1113 ADM1031_REG_FAN_DIV(chan));
1114 data->fan_min[chan] =
1115 adm1031_read_value(client,
1116 ADM1031_REG_FAN_MIN(chan));
1117 data->fan[chan] =
1118 adm1031_read_value(client,
1119 ADM1031_REG_FAN_SPEED(chan));
1120 data->pwm[chan] =
1121 (adm1031_read_value(client,
1122 ADM1031_REG_PWM) >> (4 * chan)) & 0x0f;
1123 }
1124 data->last_updated = jiffies;
1125 data->valid = 1;
1126 }
1127 1079
1128 mutex_unlock(&data->update_lock); 1080static const struct i2c_device_id adm1031_id[] = {
1081 { "adm1030", adm1030 },
1082 { "adm1031", adm1031 },
1083 { }
1084};
1085MODULE_DEVICE_TABLE(i2c, adm1031_id);
1129 1086
1130 return data; 1087static struct i2c_driver adm1031_driver = {
1131} 1088 .class = I2C_CLASS_HWMON,
1089 .driver = {
1090 .name = "adm1031",
1091 },
1092 .probe = adm1031_probe,
1093 .id_table = adm1031_id,
1094 .detect = adm1031_detect,
1095 .address_list = normal_i2c,
1096};
1132 1097
1133module_i2c_driver(adm1031_driver); 1098module_i2c_driver(adm1031_driver);
1134 1099
diff --git a/drivers/hwmon/adm9240.c b/drivers/hwmon/adm9240.c
index 086d02a9ecdc..98114cef1e43 100644
--- a/drivers/hwmon/adm9240.c
+++ b/drivers/hwmon/adm9240.c
@@ -130,38 +130,9 @@ static inline unsigned int AOUT_FROM_REG(u8 reg)
130 return SCALE(reg, 1250, 255); 130 return SCALE(reg, 1250, 255);
131} 131}
132 132
133static int adm9240_probe(struct i2c_client *client,
134 const struct i2c_device_id *id);
135static int adm9240_detect(struct i2c_client *client,
136 struct i2c_board_info *info);
137static void adm9240_init_client(struct i2c_client *client);
138static int adm9240_remove(struct i2c_client *client);
139static struct adm9240_data *adm9240_update_device(struct device *dev);
140
141/* driver data */
142static const struct i2c_device_id adm9240_id[] = {
143 { "adm9240", adm9240 },
144 { "ds1780", ds1780 },
145 { "lm81", lm81 },
146 { }
147};
148MODULE_DEVICE_TABLE(i2c, adm9240_id);
149
150static struct i2c_driver adm9240_driver = {
151 .class = I2C_CLASS_HWMON,
152 .driver = {
153 .name = "adm9240",
154 },
155 .probe = adm9240_probe,
156 .remove = adm9240_remove,
157 .id_table = adm9240_id,
158 .detect = adm9240_detect,
159 .address_list = normal_i2c,
160};
161
162/* per client data */ 133/* per client data */
163struct adm9240_data { 134struct adm9240_data {
164 struct device *hwmon_dev; 135 struct i2c_client *client;
165 struct mutex update_lock; 136 struct mutex update_lock;
166 char valid; 137 char valid;
167 unsigned long last_updated_measure; 138 unsigned long last_updated_measure;
@@ -181,6 +152,110 @@ struct adm9240_data {
181 u8 vrm; /* -- vrm set on startup, no accessor */ 152 u8 vrm; /* -- vrm set on startup, no accessor */
182}; 153};
183 154
155/* write new fan div, callers must hold data->update_lock */
156static void adm9240_write_fan_div(struct i2c_client *client, int nr,
157 u8 fan_div)
158{
159 u8 reg, old, shift = (nr + 2) * 2;
160
161 reg = i2c_smbus_read_byte_data(client, ADM9240_REG_VID_FAN_DIV);
162 old = (reg >> shift) & 3;
163 reg &= ~(3 << shift);
164 reg |= (fan_div << shift);
165 i2c_smbus_write_byte_data(client, ADM9240_REG_VID_FAN_DIV, reg);
166 dev_dbg(&client->dev,
167 "fan%d clock divider changed from %u to %u\n",
168 nr + 1, 1 << old, 1 << fan_div);
169}
170
171static struct adm9240_data *adm9240_update_device(struct device *dev)
172{
173 struct adm9240_data *data = dev_get_drvdata(dev);
174 struct i2c_client *client = data->client;
175 int i;
176
177 mutex_lock(&data->update_lock);
178
179 /* minimum measurement cycle: 1.75 seconds */
180 if (time_after(jiffies, data->last_updated_measure + (HZ * 7 / 4))
181 || !data->valid) {
182
183 for (i = 0; i < 6; i++) { /* read voltages */
184 data->in[i] = i2c_smbus_read_byte_data(client,
185 ADM9240_REG_IN(i));
186 }
187 data->alarms = i2c_smbus_read_byte_data(client,
188 ADM9240_REG_INT(0)) |
189 i2c_smbus_read_byte_data(client,
190 ADM9240_REG_INT(1)) << 8;
191
192 /*
193 * read temperature: assume temperature changes less than
194 * 0.5'C per two measurement cycles thus ignore possible
195 * but unlikely aliasing error on lsb reading. --Grant
196 */
197 data->temp = ((i2c_smbus_read_byte_data(client,
198 ADM9240_REG_TEMP) << 8) |
199 i2c_smbus_read_byte_data(client,
200 ADM9240_REG_TEMP_CONF)) / 128;
201
202 for (i = 0; i < 2; i++) { /* read fans */
203 data->fan[i] = i2c_smbus_read_byte_data(client,
204 ADM9240_REG_FAN(i));
205
206 /* adjust fan clock divider on overflow */
207 if (data->valid && data->fan[i] == 255 &&
208 data->fan_div[i] < 3) {
209
210 adm9240_write_fan_div(client, i,
211 ++data->fan_div[i]);
212
213 /* adjust fan_min if active, but not to 0 */
214 if (data->fan_min[i] < 255 &&
215 data->fan_min[i] >= 2)
216 data->fan_min[i] /= 2;
217 }
218 }
219 data->last_updated_measure = jiffies;
220 }
221
222 /* minimum config reading cycle: 300 seconds */
223 if (time_after(jiffies, data->last_updated_config + (HZ * 300))
224 || !data->valid) {
225
226 for (i = 0; i < 6; i++) {
227 data->in_min[i] = i2c_smbus_read_byte_data(client,
228 ADM9240_REG_IN_MIN(i));
229 data->in_max[i] = i2c_smbus_read_byte_data(client,
230 ADM9240_REG_IN_MAX(i));
231 }
232 for (i = 0; i < 2; i++) {
233 data->fan_min[i] = i2c_smbus_read_byte_data(client,
234 ADM9240_REG_FAN_MIN(i));
235 }
236 data->temp_max[0] = i2c_smbus_read_byte_data(client,
237 ADM9240_REG_TEMP_MAX(0));
238 data->temp_max[1] = i2c_smbus_read_byte_data(client,
239 ADM9240_REG_TEMP_MAX(1));
240
241 /* read fan divs and 5-bit VID */
242 i = i2c_smbus_read_byte_data(client, ADM9240_REG_VID_FAN_DIV);
243 data->fan_div[0] = (i >> 4) & 3;
244 data->fan_div[1] = (i >> 6) & 3;
245 data->vid = i & 0x0f;
246 data->vid |= (i2c_smbus_read_byte_data(client,
247 ADM9240_REG_VID4) & 1) << 4;
248 /* read analog out */
249 data->aout = i2c_smbus_read_byte_data(client,
250 ADM9240_REG_ANALOG_OUT);
251
252 data->last_updated_config = jiffies;
253 data->valid = 1;
254 }
255 mutex_unlock(&data->update_lock);
256 return data;
257}
258
184/*** sysfs accessors ***/ 259/*** sysfs accessors ***/
185 260
186/* temperature */ 261/* temperature */
@@ -203,8 +278,8 @@ static ssize_t set_max(struct device *dev, struct device_attribute *devattr,
203 const char *buf, size_t count) 278 const char *buf, size_t count)
204{ 279{
205 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 280 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
206 struct i2c_client *client = to_i2c_client(dev); 281 struct adm9240_data *data = dev_get_drvdata(dev);
207 struct adm9240_data *data = i2c_get_clientdata(client); 282 struct i2c_client *client = data->client;
208 long val; 283 long val;
209 int err; 284 int err;
210 285
@@ -259,8 +334,8 @@ static ssize_t set_in_min(struct device *dev,
259 const char *buf, size_t count) 334 const char *buf, size_t count)
260{ 335{
261 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 336 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
262 struct i2c_client *client = to_i2c_client(dev); 337 struct adm9240_data *data = dev_get_drvdata(dev);
263 struct adm9240_data *data = i2c_get_clientdata(client); 338 struct i2c_client *client = data->client;
264 unsigned long val; 339 unsigned long val;
265 int err; 340 int err;
266 341
@@ -281,8 +356,8 @@ static ssize_t set_in_max(struct device *dev,
281 const char *buf, size_t count) 356 const char *buf, size_t count)
282{ 357{
283 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 358 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
284 struct i2c_client *client = to_i2c_client(dev); 359 struct adm9240_data *data = dev_get_drvdata(dev);
285 struct adm9240_data *data = i2c_get_clientdata(client); 360 struct i2c_client *client = data->client;
286 unsigned long val; 361 unsigned long val;
287 int err; 362 int err;
288 363
@@ -340,22 +415,6 @@ static ssize_t show_fan_div(struct device *dev,
340 return sprintf(buf, "%d\n", 1 << data->fan_div[attr->index]); 415 return sprintf(buf, "%d\n", 1 << data->fan_div[attr->index]);
341} 416}
342 417
343/* write new fan div, callers must hold data->update_lock */
344static void adm9240_write_fan_div(struct i2c_client *client, int nr,
345 u8 fan_div)
346{
347 u8 reg, old, shift = (nr + 2) * 2;
348
349 reg = i2c_smbus_read_byte_data(client, ADM9240_REG_VID_FAN_DIV);
350 old = (reg >> shift) & 3;
351 reg &= ~(3 << shift);
352 reg |= (fan_div << shift);
353 i2c_smbus_write_byte_data(client, ADM9240_REG_VID_FAN_DIV, reg);
354 dev_dbg(&client->dev,
355 "fan%d clock divider changed from %u to %u\n",
356 nr + 1, 1 << old, 1 << fan_div);
357}
358
359/* 418/*
360 * set fan speed low limit: 419 * set fan speed low limit:
361 * 420 *
@@ -372,8 +431,8 @@ static ssize_t set_fan_min(struct device *dev,
372 const char *buf, size_t count) 431 const char *buf, size_t count)
373{ 432{
374 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 433 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
375 struct i2c_client *client = to_i2c_client(dev); 434 struct adm9240_data *data = dev_get_drvdata(dev);
376 struct adm9240_data *data = i2c_get_clientdata(client); 435 struct i2c_client *client = data->client;
377 int nr = attr->index; 436 int nr = attr->index;
378 u8 new_div; 437 u8 new_div;
379 unsigned long val; 438 unsigned long val;
@@ -485,8 +544,8 @@ static ssize_t set_aout(struct device *dev,
485 struct device_attribute *attr, 544 struct device_attribute *attr,
486 const char *buf, size_t count) 545 const char *buf, size_t count)
487{ 546{
488 struct i2c_client *client = to_i2c_client(dev); 547 struct adm9240_data *data = dev_get_drvdata(dev);
489 struct adm9240_data *data = i2c_get_clientdata(client); 548 struct i2c_client *client = data->client;
490 long val; 549 long val;
491 int err; 550 int err;
492 551
@@ -506,8 +565,8 @@ static ssize_t chassis_clear(struct device *dev,
506 struct device_attribute *attr, 565 struct device_attribute *attr,
507 const char *buf, size_t count) 566 const char *buf, size_t count)
508{ 567{
509 struct i2c_client *client = to_i2c_client(dev); 568 struct adm9240_data *data = dev_get_drvdata(dev);
510 struct adm9240_data *data = i2c_get_clientdata(client); 569 struct i2c_client *client = data->client;
511 unsigned long val; 570 unsigned long val;
512 571
513 if (kstrtoul(buf, 10, &val) || val != 0) 572 if (kstrtoul(buf, 10, &val) || val != 0)
@@ -524,7 +583,7 @@ static ssize_t chassis_clear(struct device *dev,
524static SENSOR_DEVICE_ATTR(intrusion0_alarm, S_IRUGO | S_IWUSR, show_alarm, 583static SENSOR_DEVICE_ATTR(intrusion0_alarm, S_IRUGO | S_IWUSR, show_alarm,
525 chassis_clear, 12); 584 chassis_clear, 12);
526 585
527static struct attribute *adm9240_attributes[] = { 586static struct attribute *adm9240_attrs[] = {
528 &sensor_dev_attr_in0_input.dev_attr.attr, 587 &sensor_dev_attr_in0_input.dev_attr.attr,
529 &sensor_dev_attr_in0_min.dev_attr.attr, 588 &sensor_dev_attr_in0_min.dev_attr.attr,
530 &sensor_dev_attr_in0_max.dev_attr.attr, 589 &sensor_dev_attr_in0_max.dev_attr.attr,
@@ -568,9 +627,7 @@ static struct attribute *adm9240_attributes[] = {
568 NULL 627 NULL
569}; 628};
570 629
571static const struct attribute_group adm9240_group = { 630ATTRIBUTE_GROUPS(adm9240);
572 .attrs = adm9240_attributes,
573};
574 631
575 632
576/*** sensor chip detect and driver install ***/ 633/*** sensor chip detect and driver install ***/
@@ -620,49 +677,6 @@ static int adm9240_detect(struct i2c_client *new_client,
620 return 0; 677 return 0;
621} 678}
622 679
623static int adm9240_probe(struct i2c_client *new_client,
624 const struct i2c_device_id *id)
625{
626 struct adm9240_data *data;
627 int err;
628
629 data = devm_kzalloc(&new_client->dev, sizeof(*data), GFP_KERNEL);
630 if (!data)
631 return -ENOMEM;
632
633 i2c_set_clientdata(new_client, data);
634 mutex_init(&data->update_lock);
635
636 adm9240_init_client(new_client);
637
638 /* populate sysfs filesystem */
639 err = sysfs_create_group(&new_client->dev.kobj, &adm9240_group);
640 if (err)
641 return err;
642
643 data->hwmon_dev = hwmon_device_register(&new_client->dev);
644 if (IS_ERR(data->hwmon_dev)) {
645 err = PTR_ERR(data->hwmon_dev);
646 goto exit_remove;
647 }
648
649 return 0;
650
651exit_remove:
652 sysfs_remove_group(&new_client->dev.kobj, &adm9240_group);
653 return err;
654}
655
656static int adm9240_remove(struct i2c_client *client)
657{
658 struct adm9240_data *data = i2c_get_clientdata(client);
659
660 hwmon_device_unregister(data->hwmon_dev);
661 sysfs_remove_group(&client->dev.kobj, &adm9240_group);
662
663 return 0;
664}
665
666static void adm9240_init_client(struct i2c_client *client) 680static void adm9240_init_client(struct i2c_client *client)
667{ 681{
668 struct adm9240_data *data = i2c_get_clientdata(client); 682 struct adm9240_data *data = i2c_get_clientdata(client);
@@ -705,93 +719,48 @@ static void adm9240_init_client(struct i2c_client *client)
705 } 719 }
706} 720}
707 721
708static struct adm9240_data *adm9240_update_device(struct device *dev) 722static int adm9240_probe(struct i2c_client *new_client,
723 const struct i2c_device_id *id)
709{ 724{
710 struct i2c_client *client = to_i2c_client(dev); 725 struct device *dev = &new_client->dev;
711 struct adm9240_data *data = i2c_get_clientdata(client); 726 struct device *hwmon_dev;
712 int i; 727 struct adm9240_data *data;
713
714 mutex_lock(&data->update_lock);
715
716 /* minimum measurement cycle: 1.75 seconds */
717 if (time_after(jiffies, data->last_updated_measure + (HZ * 7 / 4))
718 || !data->valid) {
719
720 for (i = 0; i < 6; i++) { /* read voltages */
721 data->in[i] = i2c_smbus_read_byte_data(client,
722 ADM9240_REG_IN(i));
723 }
724 data->alarms = i2c_smbus_read_byte_data(client,
725 ADM9240_REG_INT(0)) |
726 i2c_smbus_read_byte_data(client,
727 ADM9240_REG_INT(1)) << 8;
728
729 /*
730 * read temperature: assume temperature changes less than
731 * 0.5'C per two measurement cycles thus ignore possible
732 * but unlikely aliasing error on lsb reading. --Grant
733 */
734 data->temp = ((i2c_smbus_read_byte_data(client,
735 ADM9240_REG_TEMP) << 8) |
736 i2c_smbus_read_byte_data(client,
737 ADM9240_REG_TEMP_CONF)) / 128;
738
739 for (i = 0; i < 2; i++) { /* read fans */
740 data->fan[i] = i2c_smbus_read_byte_data(client,
741 ADM9240_REG_FAN(i));
742
743 /* adjust fan clock divider on overflow */
744 if (data->valid && data->fan[i] == 255 &&
745 data->fan_div[i] < 3) {
746 728
747 adm9240_write_fan_div(client, i, 729 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
748 ++data->fan_div[i]); 730 if (!data)
731 return -ENOMEM;
749 732
750 /* adjust fan_min if active, but not to 0 */ 733 i2c_set_clientdata(new_client, data);
751 if (data->fan_min[i] < 255 && 734 data->client = new_client;
752 data->fan_min[i] >= 2) 735 mutex_init(&data->update_lock);
753 data->fan_min[i] /= 2;
754 }
755 }
756 data->last_updated_measure = jiffies;
757 }
758 736
759 /* minimum config reading cycle: 300 seconds */ 737 adm9240_init_client(new_client);
760 if (time_after(jiffies, data->last_updated_config + (HZ * 300))
761 || !data->valid) {
762 738
763 for (i = 0; i < 6; i++) { 739 hwmon_dev = devm_hwmon_device_register_with_groups(dev,
764 data->in_min[i] = i2c_smbus_read_byte_data(client, 740 new_client->name,
765 ADM9240_REG_IN_MIN(i)); 741 data,
766 data->in_max[i] = i2c_smbus_read_byte_data(client, 742 adm9240_groups);
767 ADM9240_REG_IN_MAX(i)); 743 return PTR_ERR_OR_ZERO(hwmon_dev);
768 } 744}
769 for (i = 0; i < 2; i++) {
770 data->fan_min[i] = i2c_smbus_read_byte_data(client,
771 ADM9240_REG_FAN_MIN(i));
772 }
773 data->temp_max[0] = i2c_smbus_read_byte_data(client,
774 ADM9240_REG_TEMP_MAX(0));
775 data->temp_max[1] = i2c_smbus_read_byte_data(client,
776 ADM9240_REG_TEMP_MAX(1));
777 745
778 /* read fan divs and 5-bit VID */ 746static const struct i2c_device_id adm9240_id[] = {
779 i = i2c_smbus_read_byte_data(client, ADM9240_REG_VID_FAN_DIV); 747 { "adm9240", adm9240 },
780 data->fan_div[0] = (i >> 4) & 3; 748 { "ds1780", ds1780 },
781 data->fan_div[1] = (i >> 6) & 3; 749 { "lm81", lm81 },
782 data->vid = i & 0x0f; 750 { }
783 data->vid |= (i2c_smbus_read_byte_data(client, 751};
784 ADM9240_REG_VID4) & 1) << 4; 752MODULE_DEVICE_TABLE(i2c, adm9240_id);
785 /* read analog out */
786 data->aout = i2c_smbus_read_byte_data(client,
787 ADM9240_REG_ANALOG_OUT);
788 753
789 data->last_updated_config = jiffies; 754static struct i2c_driver adm9240_driver = {
790 data->valid = 1; 755 .class = I2C_CLASS_HWMON,
791 } 756 .driver = {
792 mutex_unlock(&data->update_lock); 757 .name = "adm9240",
793 return data; 758 },
794} 759 .probe = adm9240_probe,
760 .id_table = adm9240_id,
761 .detect = adm9240_detect,
762 .address_list = normal_i2c,
763};
795 764
796module_i2c_driver(adm9240_driver); 765module_i2c_driver(adm9240_driver);
797 766
diff --git a/drivers/hwmon/ads1015.c b/drivers/hwmon/ads1015.c
index 7f9dc2f86b63..22e0c926989d 100644
--- a/drivers/hwmon/ads1015.c
+++ b/drivers/hwmon/ads1015.c
@@ -198,7 +198,7 @@ static int ads1015_get_channels_config_of(struct i2c_client *client)
198 } 198 }
199 199
200 channel = be32_to_cpup(property); 200 channel = be32_to_cpup(property);
201 if (channel > ADS1015_CHANNELS) { 201 if (channel >= ADS1015_CHANNELS) {
202 dev_err(&client->dev, 202 dev_err(&client->dev,
203 "invalid channel index %d on %s\n", 203 "invalid channel index %d on %s\n",
204 channel, node->full_name); 204 channel, node->full_name);
diff --git a/drivers/hwmon/ads7828.c b/drivers/hwmon/ads7828.c
index 7092c78f814f..a622d40eec17 100644
--- a/drivers/hwmon/ads7828.c
+++ b/drivers/hwmon/ads7828.c
@@ -50,7 +50,7 @@ enum ads7828_chips { ads7828, ads7830 };
50 50
51/* Client specific data */ 51/* Client specific data */
52struct ads7828_data { 52struct ads7828_data {
53 struct device *hwmon_dev; 53 struct i2c_client *client;
54 struct mutex update_lock; /* Mutex protecting updates */ 54 struct mutex update_lock; /* Mutex protecting updates */
55 unsigned long last_updated; /* Last updated time (in jiffies) */ 55 unsigned long last_updated; /* Last updated time (in jiffies) */
56 u16 adc_input[ADS7828_NCH]; /* ADS7828_NCH samples */ 56 u16 adc_input[ADS7828_NCH]; /* ADS7828_NCH samples */
@@ -72,8 +72,8 @@ static inline u8 ads7828_cmd_byte(u8 cmd, int ch)
72/* Update data for the device (all 8 channels) */ 72/* Update data for the device (all 8 channels) */
73static struct ads7828_data *ads7828_update_device(struct device *dev) 73static struct ads7828_data *ads7828_update_device(struct device *dev)
74{ 74{
75 struct i2c_client *client = to_i2c_client(dev); 75 struct ads7828_data *data = dev_get_drvdata(dev);
76 struct ads7828_data *data = i2c_get_clientdata(client); 76 struct i2c_client *client = data->client;
77 77
78 mutex_lock(&data->update_lock); 78 mutex_lock(&data->update_lock);
79 79
@@ -116,7 +116,7 @@ static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, ads7828_show_in, NULL, 5);
116static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, ads7828_show_in, NULL, 6); 116static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, ads7828_show_in, NULL, 6);
117static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, ads7828_show_in, NULL, 7); 117static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, ads7828_show_in, NULL, 7);
118 118
119static struct attribute *ads7828_attributes[] = { 119static struct attribute *ads7828_attrs[] = {
120 &sensor_dev_attr_in0_input.dev_attr.attr, 120 &sensor_dev_attr_in0_input.dev_attr.attr,
121 &sensor_dev_attr_in1_input.dev_attr.attr, 121 &sensor_dev_attr_in1_input.dev_attr.attr,
122 &sensor_dev_attr_in2_input.dev_attr.attr, 122 &sensor_dev_attr_in2_input.dev_attr.attr,
@@ -128,29 +128,17 @@ static struct attribute *ads7828_attributes[] = {
128 NULL 128 NULL
129}; 129};
130 130
131static const struct attribute_group ads7828_group = { 131ATTRIBUTE_GROUPS(ads7828);
132 .attrs = ads7828_attributes,
133};
134
135static int ads7828_remove(struct i2c_client *client)
136{
137 struct ads7828_data *data = i2c_get_clientdata(client);
138
139 hwmon_device_unregister(data->hwmon_dev);
140 sysfs_remove_group(&client->dev.kobj, &ads7828_group);
141
142 return 0;
143}
144 132
145static int ads7828_probe(struct i2c_client *client, 133static int ads7828_probe(struct i2c_client *client,
146 const struct i2c_device_id *id) 134 const struct i2c_device_id *id)
147{ 135{
148 struct ads7828_platform_data *pdata = dev_get_platdata(&client->dev); 136 struct device *dev = &client->dev;
137 struct ads7828_platform_data *pdata = dev_get_platdata(dev);
149 struct ads7828_data *data; 138 struct ads7828_data *data;
150 int err; 139 struct device *hwmon_dev;
151 140
152 data = devm_kzalloc(&client->dev, sizeof(struct ads7828_data), 141 data = devm_kzalloc(dev, sizeof(struct ads7828_data), GFP_KERNEL);
153 GFP_KERNEL);
154 if (!data) 142 if (!data)
155 return -ENOMEM; 143 return -ENOMEM;
156 144
@@ -182,24 +170,13 @@ static int ads7828_probe(struct i2c_client *client,
182 if (!data->diff_input) 170 if (!data->diff_input)
183 data->cmd_byte |= ADS7828_CMD_SD_SE; 171 data->cmd_byte |= ADS7828_CMD_SD_SE;
184 172
185 i2c_set_clientdata(client, data); 173 data->client = client;
186 mutex_init(&data->update_lock); 174 mutex_init(&data->update_lock);
187 175
188 err = sysfs_create_group(&client->dev.kobj, &ads7828_group); 176 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
189 if (err) 177 data,
190 return err; 178 ads7828_groups);
191 179 return PTR_ERR_OR_ZERO(hwmon_dev);
192 data->hwmon_dev = hwmon_device_register(&client->dev);
193 if (IS_ERR(data->hwmon_dev)) {
194 err = PTR_ERR(data->hwmon_dev);
195 goto error;
196 }
197
198 return 0;
199
200error:
201 sysfs_remove_group(&client->dev.kobj, &ads7828_group);
202 return err;
203} 180}
204 181
205static const struct i2c_device_id ads7828_device_ids[] = { 182static const struct i2c_device_id ads7828_device_ids[] = {
@@ -216,7 +193,6 @@ static struct i2c_driver ads7828_driver = {
216 193
217 .id_table = ads7828_device_ids, 194 .id_table = ads7828_device_ids,
218 .probe = ads7828_probe, 195 .probe = ads7828_probe,
219 .remove = ads7828_remove,
220}; 196};
221 197
222module_i2c_driver(ads7828_driver); 198module_i2c_driver(ads7828_driver);
diff --git a/drivers/hwmon/adt7411.c b/drivers/hwmon/adt7411.c
index d9299dee37d1..827c03703128 100644
--- a/drivers/hwmon/adt7411.c
+++ b/drivers/hwmon/adt7411.c
@@ -51,7 +51,7 @@ struct adt7411_data {
51 struct mutex update_lock; 51 struct mutex update_lock;
52 unsigned long next_update; 52 unsigned long next_update;
53 int vref_cached; 53 int vref_cached;
54 struct device *hwmon_dev; 54 struct i2c_client *client;
55}; 55};
56 56
57/* 57/*
@@ -111,7 +111,8 @@ static int adt7411_modify_bit(struct i2c_client *client, u8 reg, u8 bit,
111static ssize_t adt7411_show_vdd(struct device *dev, 111static ssize_t adt7411_show_vdd(struct device *dev,
112 struct device_attribute *attr, char *buf) 112 struct device_attribute *attr, char *buf)
113{ 113{
114 struct i2c_client *client = to_i2c_client(dev); 114 struct adt7411_data *data = dev_get_drvdata(dev);
115 struct i2c_client *client = data->client;
115 int ret = adt7411_read_10_bit(client, ADT7411_REG_INT_TEMP_VDD_LSB, 116 int ret = adt7411_read_10_bit(client, ADT7411_REG_INT_TEMP_VDD_LSB,
116 ADT7411_REG_VDD_MSB, 2); 117 ADT7411_REG_VDD_MSB, 2);
117 118
@@ -121,7 +122,8 @@ static ssize_t adt7411_show_vdd(struct device *dev,
121static ssize_t adt7411_show_temp(struct device *dev, 122static ssize_t adt7411_show_temp(struct device *dev,
122 struct device_attribute *attr, char *buf) 123 struct device_attribute *attr, char *buf)
123{ 124{
124 struct i2c_client *client = to_i2c_client(dev); 125 struct adt7411_data *data = dev_get_drvdata(dev);
126 struct i2c_client *client = data->client;
125 int val = adt7411_read_10_bit(client, ADT7411_REG_INT_TEMP_VDD_LSB, 127 int val = adt7411_read_10_bit(client, ADT7411_REG_INT_TEMP_VDD_LSB,
126 ADT7411_REG_INT_TEMP_MSB, 0); 128 ADT7411_REG_INT_TEMP_MSB, 0);
127 129
@@ -137,8 +139,8 @@ static ssize_t adt7411_show_input(struct device *dev,
137 struct device_attribute *attr, char *buf) 139 struct device_attribute *attr, char *buf)
138{ 140{
139 int nr = to_sensor_dev_attr(attr)->index; 141 int nr = to_sensor_dev_attr(attr)->index;
140 struct i2c_client *client = to_i2c_client(dev); 142 struct adt7411_data *data = dev_get_drvdata(dev);
141 struct adt7411_data *data = i2c_get_clientdata(client); 143 struct i2c_client *client = data->client;
142 int val; 144 int val;
143 u8 lsb_reg, lsb_shift; 145 u8 lsb_reg, lsb_shift;
144 146
@@ -180,7 +182,8 @@ static ssize_t adt7411_show_bit(struct device *dev,
180 struct device_attribute *attr, char *buf) 182 struct device_attribute *attr, char *buf)
181{ 183{
182 struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(attr); 184 struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(attr);
183 struct i2c_client *client = to_i2c_client(dev); 185 struct adt7411_data *data = dev_get_drvdata(dev);
186 struct i2c_client *client = data->client;
184 int ret = i2c_smbus_read_byte_data(client, attr2->index); 187 int ret = i2c_smbus_read_byte_data(client, attr2->index);
185 188
186 return ret < 0 ? ret : sprintf(buf, "%u\n", !!(ret & attr2->nr)); 189 return ret < 0 ? ret : sprintf(buf, "%u\n", !!(ret & attr2->nr));
@@ -191,8 +194,8 @@ static ssize_t adt7411_set_bit(struct device *dev,
191 size_t count) 194 size_t count)
192{ 195{
193 struct sensor_device_attribute_2 *s_attr2 = to_sensor_dev_attr_2(attr); 196 struct sensor_device_attribute_2 *s_attr2 = to_sensor_dev_attr_2(attr);
194 struct i2c_client *client = to_i2c_client(dev); 197 struct adt7411_data *data = dev_get_drvdata(dev);
195 struct adt7411_data *data = i2c_get_clientdata(client); 198 struct i2c_client *client = data->client;
196 int ret; 199 int ret;
197 unsigned long flag; 200 unsigned long flag;
198 201
@@ -245,9 +248,7 @@ static struct attribute *adt7411_attrs[] = {
245 NULL 248 NULL
246}; 249};
247 250
248static const struct attribute_group adt7411_attr_grp = { 251ATTRIBUTE_GROUPS(adt7411);
249 .attrs = adt7411_attrs,
250};
251 252
252static int adt7411_detect(struct i2c_client *client, 253static int adt7411_detect(struct i2c_client *client,
253 struct i2c_board_info *info) 254 struct i2c_board_info *info)
@@ -281,14 +282,17 @@ static int adt7411_detect(struct i2c_client *client,
281static int adt7411_probe(struct i2c_client *client, 282static int adt7411_probe(struct i2c_client *client,
282 const struct i2c_device_id *id) 283 const struct i2c_device_id *id)
283{ 284{
285 struct device *dev = &client->dev;
284 struct adt7411_data *data; 286 struct adt7411_data *data;
287 struct device *hwmon_dev;
285 int ret; 288 int ret;
286 289
287 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL); 290 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
288 if (!data) 291 if (!data)
289 return -ENOMEM; 292 return -ENOMEM;
290 293
291 i2c_set_clientdata(client, data); 294 i2c_set_clientdata(client, data);
295 data->client = client;
292 mutex_init(&data->device_lock); 296 mutex_init(&data->device_lock);
293 mutex_init(&data->update_lock); 297 mutex_init(&data->update_lock);
294 298
@@ -300,32 +304,10 @@ static int adt7411_probe(struct i2c_client *client,
300 /* force update on first occasion */ 304 /* force update on first occasion */
301 data->next_update = jiffies; 305 data->next_update = jiffies;
302 306
303 ret = sysfs_create_group(&client->dev.kobj, &adt7411_attr_grp); 307 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
304 if (ret) 308 data,
305 return ret; 309 adt7411_groups);
306 310 return PTR_ERR_OR_ZERO(hwmon_dev);
307 data->hwmon_dev = hwmon_device_register(&client->dev);
308 if (IS_ERR(data->hwmon_dev)) {
309 ret = PTR_ERR(data->hwmon_dev);
310 goto exit_remove;
311 }
312
313 dev_info(&client->dev, "successfully registered\n");
314
315 return 0;
316
317 exit_remove:
318 sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp);
319 return ret;
320}
321
322static int adt7411_remove(struct i2c_client *client)
323{
324 struct adt7411_data *data = i2c_get_clientdata(client);
325
326 hwmon_device_unregister(data->hwmon_dev);
327 sysfs_remove_group(&client->dev.kobj, &adt7411_attr_grp);
328 return 0;
329} 311}
330 312
331static const struct i2c_device_id adt7411_id[] = { 313static const struct i2c_device_id adt7411_id[] = {
@@ -339,7 +321,6 @@ static struct i2c_driver adt7411_driver = {
339 .name = "adt7411", 321 .name = "adt7411",
340 }, 322 },
341 .probe = adt7411_probe, 323 .probe = adt7411_probe,
342 .remove = adt7411_remove,
343 .id_table = adt7411_id, 324 .id_table = adt7411_id,
344 .detect = adt7411_detect, 325 .detect = adt7411_detect,
345 .address_list = normal_i2c, 326 .address_list = normal_i2c,
diff --git a/drivers/hwmon/adt7462.c b/drivers/hwmon/adt7462.c
index 562cc3881d33..5929e126da63 100644
--- a/drivers/hwmon/adt7462.c
+++ b/drivers/hwmon/adt7462.c
@@ -202,8 +202,7 @@ static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END };
202 (((value) & prefix##_MASK) >> prefix##_SHIFT) 202 (((value) & prefix##_MASK) >> prefix##_SHIFT)
203 203
204struct adt7462_data { 204struct adt7462_data {
205 struct device *hwmon_dev; 205 struct i2c_client *client;
206 struct attribute_group attrs;
207 struct mutex lock; 206 struct mutex lock;
208 char sensors_valid; 207 char sensors_valid;
209 char limits_valid; 208 char limits_valid;
@@ -232,30 +231,6 @@ struct adt7462_data {
232 u8 alarms[ADT7462_ALARM_REG_COUNT]; 231 u8 alarms[ADT7462_ALARM_REG_COUNT];
233}; 232};
234 233
235static int adt7462_probe(struct i2c_client *client,
236 const struct i2c_device_id *id);
237static int adt7462_detect(struct i2c_client *client,
238 struct i2c_board_info *info);
239static int adt7462_remove(struct i2c_client *client);
240
241static const struct i2c_device_id adt7462_id[] = {
242 { "adt7462", 0 },
243 { }
244};
245MODULE_DEVICE_TABLE(i2c, adt7462_id);
246
247static struct i2c_driver adt7462_driver = {
248 .class = I2C_CLASS_HWMON,
249 .driver = {
250 .name = "adt7462",
251 },
252 .probe = adt7462_probe,
253 .remove = adt7462_remove,
254 .id_table = adt7462_id,
255 .detect = adt7462_detect,
256 .address_list = normal_i2c,
257};
258
259/* 234/*
260 * 16-bit registers on the ADT7462 are low-byte first. The data sheet says 235 * 16-bit registers on the ADT7462 are low-byte first. The data sheet says
261 * that the low byte must be read before the high byte. 236 * that the low byte must be read before the high byte.
@@ -705,8 +680,8 @@ static int find_trange_value(int trange)
705 680
706static struct adt7462_data *adt7462_update_device(struct device *dev) 681static struct adt7462_data *adt7462_update_device(struct device *dev)
707{ 682{
708 struct i2c_client *client = to_i2c_client(dev); 683 struct adt7462_data *data = dev_get_drvdata(dev);
709 struct adt7462_data *data = i2c_get_clientdata(client); 684 struct i2c_client *client = data->client;
710 unsigned long local_jiffies = jiffies; 685 unsigned long local_jiffies = jiffies;
711 int i; 686 int i;
712 687
@@ -828,8 +803,8 @@ static ssize_t set_temp_min(struct device *dev,
828 size_t count) 803 size_t count)
829{ 804{
830 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 805 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
831 struct i2c_client *client = to_i2c_client(dev); 806 struct adt7462_data *data = dev_get_drvdata(dev);
832 struct adt7462_data *data = i2c_get_clientdata(client); 807 struct i2c_client *client = data->client;
833 long temp; 808 long temp;
834 809
835 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index)) 810 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
@@ -866,8 +841,8 @@ static ssize_t set_temp_max(struct device *dev,
866 size_t count) 841 size_t count)
867{ 842{
868 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 843 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
869 struct i2c_client *client = to_i2c_client(dev); 844 struct adt7462_data *data = dev_get_drvdata(dev);
870 struct adt7462_data *data = i2c_get_clientdata(client); 845 struct i2c_client *client = data->client;
871 long temp; 846 long temp;
872 847
873 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index)) 848 if (kstrtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
@@ -929,8 +904,8 @@ static ssize_t set_volt_max(struct device *dev,
929 size_t count) 904 size_t count)
930{ 905{
931 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 906 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
932 struct i2c_client *client = to_i2c_client(dev); 907 struct adt7462_data *data = dev_get_drvdata(dev);
933 struct adt7462_data *data = i2c_get_clientdata(client); 908 struct i2c_client *client = data->client;
934 int x = voltage_multiplier(data, attr->index); 909 int x = voltage_multiplier(data, attr->index);
935 long temp; 910 long temp;
936 911
@@ -971,8 +946,8 @@ static ssize_t set_volt_min(struct device *dev,
971 size_t count) 946 size_t count)
972{ 947{
973 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 948 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
974 struct i2c_client *client = to_i2c_client(dev); 949 struct adt7462_data *data = dev_get_drvdata(dev);
975 struct adt7462_data *data = i2c_get_clientdata(client); 950 struct i2c_client *client = data->client;
976 int x = voltage_multiplier(data, attr->index); 951 int x = voltage_multiplier(data, attr->index);
977 long temp; 952 long temp;
978 953
@@ -1061,8 +1036,8 @@ static ssize_t set_fan_min(struct device *dev,
1061 const char *buf, size_t count) 1036 const char *buf, size_t count)
1062{ 1037{
1063 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1038 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1064 struct i2c_client *client = to_i2c_client(dev); 1039 struct adt7462_data *data = dev_get_drvdata(dev);
1065 struct adt7462_data *data = i2c_get_clientdata(client); 1040 struct i2c_client *client = data->client;
1066 long temp; 1041 long temp;
1067 1042
1068 if (kstrtol(buf, 10, &temp) || !temp || 1043 if (kstrtol(buf, 10, &temp) || !temp ||
@@ -1109,8 +1084,8 @@ static ssize_t set_force_pwm_max(struct device *dev,
1109 const char *buf, 1084 const char *buf,
1110 size_t count) 1085 size_t count)
1111{ 1086{
1112 struct i2c_client *client = to_i2c_client(dev); 1087 struct adt7462_data *data = dev_get_drvdata(dev);
1113 struct adt7462_data *data = i2c_get_clientdata(client); 1088 struct i2c_client *client = data->client;
1114 long temp; 1089 long temp;
1115 u8 reg; 1090 u8 reg;
1116 1091
@@ -1142,8 +1117,8 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
1142 const char *buf, size_t count) 1117 const char *buf, size_t count)
1143{ 1118{
1144 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1119 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1145 struct i2c_client *client = to_i2c_client(dev); 1120 struct adt7462_data *data = dev_get_drvdata(dev);
1146 struct adt7462_data *data = i2c_get_clientdata(client); 1121 struct i2c_client *client = data->client;
1147 long temp; 1122 long temp;
1148 1123
1149 if (kstrtol(buf, 10, &temp)) 1124 if (kstrtol(buf, 10, &temp))
@@ -1172,8 +1147,8 @@ static ssize_t set_pwm_max(struct device *dev,
1172 const char *buf, 1147 const char *buf,
1173 size_t count) 1148 size_t count)
1174{ 1149{
1175 struct i2c_client *client = to_i2c_client(dev); 1150 struct adt7462_data *data = dev_get_drvdata(dev);
1176 struct adt7462_data *data = i2c_get_clientdata(client); 1151 struct i2c_client *client = data->client;
1177 long temp; 1152 long temp;
1178 1153
1179 if (kstrtol(buf, 10, &temp)) 1154 if (kstrtol(buf, 10, &temp))
@@ -1204,8 +1179,8 @@ static ssize_t set_pwm_min(struct device *dev,
1204 size_t count) 1179 size_t count)
1205{ 1180{
1206 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1181 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1207 struct i2c_client *client = to_i2c_client(dev); 1182 struct adt7462_data *data = dev_get_drvdata(dev);
1208 struct adt7462_data *data = i2c_get_clientdata(client); 1183 struct i2c_client *client = data->client;
1209 long temp; 1184 long temp;
1210 1185
1211 if (kstrtol(buf, 10, &temp)) 1186 if (kstrtol(buf, 10, &temp))
@@ -1238,8 +1213,8 @@ static ssize_t set_pwm_hyst(struct device *dev,
1238 size_t count) 1213 size_t count)
1239{ 1214{
1240 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1215 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1241 struct i2c_client *client = to_i2c_client(dev); 1216 struct adt7462_data *data = dev_get_drvdata(dev);
1242 struct adt7462_data *data = i2c_get_clientdata(client); 1217 struct i2c_client *client = data->client;
1243 long temp; 1218 long temp;
1244 1219
1245 if (kstrtol(buf, 10, &temp)) 1220 if (kstrtol(buf, 10, &temp))
@@ -1283,8 +1258,8 @@ static ssize_t set_pwm_tmax(struct device *dev,
1283{ 1258{
1284 int temp; 1259 int temp;
1285 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1260 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1286 struct i2c_client *client = to_i2c_client(dev); 1261 struct adt7462_data *data = dev_get_drvdata(dev);
1287 struct adt7462_data *data = i2c_get_clientdata(client); 1262 struct i2c_client *client = data->client;
1288 int tmin, trange_value; 1263 int tmin, trange_value;
1289 long trange; 1264 long trange;
1290 1265
@@ -1324,8 +1299,8 @@ static ssize_t set_pwm_tmin(struct device *dev,
1324 size_t count) 1299 size_t count)
1325{ 1300{
1326 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1301 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1327 struct i2c_client *client = to_i2c_client(dev); 1302 struct adt7462_data *data = dev_get_drvdata(dev);
1328 struct adt7462_data *data = i2c_get_clientdata(client); 1303 struct i2c_client *client = data->client;
1329 long temp; 1304 long temp;
1330 1305
1331 if (kstrtol(buf, 10, &temp)) 1306 if (kstrtol(buf, 10, &temp))
@@ -1381,8 +1356,8 @@ static ssize_t set_pwm_auto(struct device *dev,
1381 size_t count) 1356 size_t count)
1382{ 1357{
1383 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1358 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1384 struct i2c_client *client = to_i2c_client(dev); 1359 struct adt7462_data *data = dev_get_drvdata(dev);
1385 struct adt7462_data *data = i2c_get_clientdata(client); 1360 struct i2c_client *client = data->client;
1386 long temp; 1361 long temp;
1387 1362
1388 if (kstrtol(buf, 10, &temp)) 1363 if (kstrtol(buf, 10, &temp))
@@ -1440,8 +1415,8 @@ static ssize_t set_pwm_auto_temp(struct device *dev,
1440 size_t count) 1415 size_t count)
1441{ 1416{
1442 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 1417 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
1443 struct i2c_client *client = to_i2c_client(dev); 1418 struct adt7462_data *data = dev_get_drvdata(dev);
1444 struct adt7462_data *data = i2c_get_clientdata(client); 1419 struct i2c_client *client = data->client;
1445 long temp; 1420 long temp;
1446 1421
1447 if (kstrtol(buf, 10, &temp)) 1422 if (kstrtol(buf, 10, &temp))
@@ -1725,7 +1700,7 @@ static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1725static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO, 1700static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1726 show_pwm_auto_temp, set_pwm_auto_temp, 3); 1701 show_pwm_auto_temp, set_pwm_auto_temp, 3);
1727 1702
1728static struct attribute *adt7462_attr[] = { 1703static struct attribute *adt7462_attrs[] = {
1729 &sensor_dev_attr_temp1_max.dev_attr.attr, 1704 &sensor_dev_attr_temp1_max.dev_attr.attr,
1730 &sensor_dev_attr_temp2_max.dev_attr.attr, 1705 &sensor_dev_attr_temp2_max.dev_attr.attr,
1731 &sensor_dev_attr_temp3_max.dev_attr.attr, 1706 &sensor_dev_attr_temp3_max.dev_attr.attr,
@@ -1896,6 +1871,8 @@ static struct attribute *adt7462_attr[] = {
1896 NULL 1871 NULL
1897}; 1872};
1898 1873
1874ATTRIBUTE_GROUPS(adt7462);
1875
1899/* Return 0 if detection is successful, -ENODEV otherwise */ 1876/* Return 0 if detection is successful, -ENODEV otherwise */
1900static int adt7462_detect(struct i2c_client *client, 1877static int adt7462_detect(struct i2c_client *client,
1901 struct i2c_board_info *info) 1878 struct i2c_board_info *info)
@@ -1926,46 +1903,41 @@ static int adt7462_detect(struct i2c_client *client,
1926static int adt7462_probe(struct i2c_client *client, 1903static int adt7462_probe(struct i2c_client *client,
1927 const struct i2c_device_id *id) 1904 const struct i2c_device_id *id)
1928{ 1905{
1906 struct device *dev = &client->dev;
1929 struct adt7462_data *data; 1907 struct adt7462_data *data;
1930 int err; 1908 struct device *hwmon_dev;
1931 1909
1932 data = devm_kzalloc(&client->dev, sizeof(struct adt7462_data), 1910 data = devm_kzalloc(dev, sizeof(struct adt7462_data), GFP_KERNEL);
1933 GFP_KERNEL);
1934 if (!data) 1911 if (!data)
1935 return -ENOMEM; 1912 return -ENOMEM;
1936 1913
1937 i2c_set_clientdata(client, data); 1914 data->client = client;
1938 mutex_init(&data->lock); 1915 mutex_init(&data->lock);
1939 1916
1940 dev_info(&client->dev, "%s chip found\n", client->name); 1917 dev_info(&client->dev, "%s chip found\n", client->name);
1941 1918
1942 /* Register sysfs hooks */ 1919 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1943 data->attrs.attrs = adt7462_attr; 1920 data,
1944 err = sysfs_create_group(&client->dev.kobj, &data->attrs); 1921 adt7462_groups);
1945 if (err) 1922 return PTR_ERR_OR_ZERO(hwmon_dev);
1946 return err;
1947
1948 data->hwmon_dev = hwmon_device_register(&client->dev);
1949 if (IS_ERR(data->hwmon_dev)) {
1950 err = PTR_ERR(data->hwmon_dev);
1951 goto exit_remove;
1952 }
1953
1954 return 0;
1955
1956exit_remove:
1957 sysfs_remove_group(&client->dev.kobj, &data->attrs);
1958 return err;
1959} 1923}
1960 1924
1961static int adt7462_remove(struct i2c_client *client) 1925static const struct i2c_device_id adt7462_id[] = {
1962{ 1926 { "adt7462", 0 },
1963 struct adt7462_data *data = i2c_get_clientdata(client); 1927 { }
1928};
1929MODULE_DEVICE_TABLE(i2c, adt7462_id);
1964 1930
1965 hwmon_device_unregister(data->hwmon_dev); 1931static struct i2c_driver adt7462_driver = {
1966 sysfs_remove_group(&client->dev.kobj, &data->attrs); 1932 .class = I2C_CLASS_HWMON,
1967 return 0; 1933 .driver = {
1968} 1934 .name = "adt7462",
1935 },
1936 .probe = adt7462_probe,
1937 .id_table = adt7462_id,
1938 .detect = adt7462_detect,
1939 .address_list = normal_i2c,
1940};
1969 1941
1970module_i2c_driver(adt7462_driver); 1942module_i2c_driver(adt7462_driver);
1971 1943
diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c
index 9ee3913850d6..f5da39a68929 100644
--- a/drivers/hwmon/adt7470.c
+++ b/drivers/hwmon/adt7470.c
@@ -143,8 +143,7 @@ static const unsigned short normal_i2c[] = { 0x2C, 0x2E, 0x2F, I2C_CLIENT_END };
143#define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID) 143#define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID)
144 144
145struct adt7470_data { 145struct adt7470_data {
146 struct device *hwmon_dev; 146 struct i2c_client *client;
147 struct attribute_group attrs;
148 struct mutex lock; 147 struct mutex lock;
149 char sensors_valid; 148 char sensors_valid;
150 char limits_valid; 149 char limits_valid;
@@ -175,30 +174,6 @@ struct adt7470_data {
175 unsigned int auto_update_interval; 174 unsigned int auto_update_interval;
176}; 175};
177 176
178static int adt7470_probe(struct i2c_client *client,
179 const struct i2c_device_id *id);
180static int adt7470_detect(struct i2c_client *client,
181 struct i2c_board_info *info);
182static int adt7470_remove(struct i2c_client *client);
183
184static const struct i2c_device_id adt7470_id[] = {
185 { "adt7470", 0 },
186 { }
187};
188MODULE_DEVICE_TABLE(i2c, adt7470_id);
189
190static struct i2c_driver adt7470_driver = {
191 .class = I2C_CLASS_HWMON,
192 .driver = {
193 .name = "adt7470",
194 },
195 .probe = adt7470_probe,
196 .remove = adt7470_remove,
197 .id_table = adt7470_id,
198 .detect = adt7470_detect,
199 .address_list = normal_i2c,
200};
201
202/* 177/*
203 * 16-bit registers on the ADT7470 are low-byte first. The data sheet says 178 * 16-bit registers on the ADT7470 are low-byte first. The data sheet says
204 * that the low byte must be read before the high byte. 179 * that the low byte must be read before the high byte.
@@ -218,18 +193,6 @@ static inline int adt7470_write_word_data(struct i2c_client *client, u8 reg,
218 || i2c_smbus_write_byte_data(client, reg + 1, value >> 8); 193 || i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
219} 194}
220 195
221static void adt7470_init_client(struct i2c_client *client)
222{
223 int reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
224
225 if (reg < 0) {
226 dev_err(&client->dev, "cannot read configuration register\n");
227 } else {
228 /* start monitoring (and do a self-test) */
229 i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg | 3);
230 }
231}
232
233/* Probe for temperature sensors. Assumes lock is held */ 196/* Probe for temperature sensors. Assumes lock is held */
234static int adt7470_read_temperatures(struct i2c_client *client, 197static int adt7470_read_temperatures(struct i2c_client *client,
235 struct adt7470_data *data) 198 struct adt7470_data *data)
@@ -314,8 +277,8 @@ static int adt7470_update_thread(void *p)
314 277
315static struct adt7470_data *adt7470_update_device(struct device *dev) 278static struct adt7470_data *adt7470_update_device(struct device *dev)
316{ 279{
317 struct i2c_client *client = to_i2c_client(dev); 280 struct adt7470_data *data = dev_get_drvdata(dev);
318 struct adt7470_data *data = i2c_get_clientdata(client); 281 struct i2c_client *client = data->client;
319 unsigned long local_jiffies = jiffies; 282 unsigned long local_jiffies = jiffies;
320 u8 cfg; 283 u8 cfg;
321 int i; 284 int i;
@@ -445,8 +408,7 @@ static ssize_t set_auto_update_interval(struct device *dev,
445 const char *buf, 408 const char *buf,
446 size_t count) 409 size_t count)
447{ 410{
448 struct i2c_client *client = to_i2c_client(dev); 411 struct adt7470_data *data = dev_get_drvdata(dev);
449 struct adt7470_data *data = i2c_get_clientdata(client);
450 long temp; 412 long temp;
451 413
452 if (kstrtol(buf, 10, &temp)) 414 if (kstrtol(buf, 10, &temp))
@@ -474,8 +436,7 @@ static ssize_t set_num_temp_sensors(struct device *dev,
474 const char *buf, 436 const char *buf,
475 size_t count) 437 size_t count)
476{ 438{
477 struct i2c_client *client = to_i2c_client(dev); 439 struct adt7470_data *data = dev_get_drvdata(dev);
478 struct adt7470_data *data = i2c_get_clientdata(client);
479 long temp; 440 long temp;
480 441
481 if (kstrtol(buf, 10, &temp)) 442 if (kstrtol(buf, 10, &temp))
@@ -507,8 +468,8 @@ static ssize_t set_temp_min(struct device *dev,
507 size_t count) 468 size_t count)
508{ 469{
509 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 470 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
510 struct i2c_client *client = to_i2c_client(dev); 471 struct adt7470_data *data = dev_get_drvdata(dev);
511 struct adt7470_data *data = i2c_get_clientdata(client); 472 struct i2c_client *client = data->client;
512 long temp; 473 long temp;
513 474
514 if (kstrtol(buf, 10, &temp)) 475 if (kstrtol(buf, 10, &temp))
@@ -541,8 +502,8 @@ static ssize_t set_temp_max(struct device *dev,
541 size_t count) 502 size_t count)
542{ 503{
543 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 504 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
544 struct i2c_client *client = to_i2c_client(dev); 505 struct adt7470_data *data = dev_get_drvdata(dev);
545 struct adt7470_data *data = i2c_get_clientdata(client); 506 struct i2c_client *client = data->client;
546 long temp; 507 long temp;
547 508
548 if (kstrtol(buf, 10, &temp)) 509 if (kstrtol(buf, 10, &temp))
@@ -596,8 +557,8 @@ static ssize_t set_fan_max(struct device *dev,
596 const char *buf, size_t count) 557 const char *buf, size_t count)
597{ 558{
598 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 559 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
599 struct i2c_client *client = to_i2c_client(dev); 560 struct adt7470_data *data = dev_get_drvdata(dev);
600 struct adt7470_data *data = i2c_get_clientdata(client); 561 struct i2c_client *client = data->client;
601 long temp; 562 long temp;
602 563
603 if (kstrtol(buf, 10, &temp) || !temp) 564 if (kstrtol(buf, 10, &temp) || !temp)
@@ -633,8 +594,8 @@ static ssize_t set_fan_min(struct device *dev,
633 const char *buf, size_t count) 594 const char *buf, size_t count)
634{ 595{
635 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 596 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
636 struct i2c_client *client = to_i2c_client(dev); 597 struct adt7470_data *data = dev_get_drvdata(dev);
637 struct adt7470_data *data = i2c_get_clientdata(client); 598 struct i2c_client *client = data->client;
638 long temp; 599 long temp;
639 600
640 if (kstrtol(buf, 10, &temp) || !temp) 601 if (kstrtol(buf, 10, &temp) || !temp)
@@ -677,8 +638,8 @@ static ssize_t set_force_pwm_max(struct device *dev,
677 const char *buf, 638 const char *buf,
678 size_t count) 639 size_t count)
679{ 640{
680 struct i2c_client *client = to_i2c_client(dev); 641 struct adt7470_data *data = dev_get_drvdata(dev);
681 struct adt7470_data *data = i2c_get_clientdata(client); 642 struct i2c_client *client = data->client;
682 long temp; 643 long temp;
683 u8 reg; 644 u8 reg;
684 645
@@ -710,8 +671,8 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
710 const char *buf, size_t count) 671 const char *buf, size_t count)
711{ 672{
712 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 673 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
713 struct i2c_client *client = to_i2c_client(dev); 674 struct adt7470_data *data = dev_get_drvdata(dev);
714 struct adt7470_data *data = i2c_get_clientdata(client); 675 struct i2c_client *client = data->client;
715 long temp; 676 long temp;
716 677
717 if (kstrtol(buf, 10, &temp)) 678 if (kstrtol(buf, 10, &temp))
@@ -742,8 +703,8 @@ static ssize_t set_pwm_max(struct device *dev,
742 size_t count) 703 size_t count)
743{ 704{
744 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 705 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
745 struct i2c_client *client = to_i2c_client(dev); 706 struct adt7470_data *data = dev_get_drvdata(dev);
746 struct adt7470_data *data = i2c_get_clientdata(client); 707 struct i2c_client *client = data->client;
747 long temp; 708 long temp;
748 709
749 if (kstrtol(buf, 10, &temp)) 710 if (kstrtol(buf, 10, &temp))
@@ -775,8 +736,8 @@ static ssize_t set_pwm_min(struct device *dev,
775 size_t count) 736 size_t count)
776{ 737{
777 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 738 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
778 struct i2c_client *client = to_i2c_client(dev); 739 struct adt7470_data *data = dev_get_drvdata(dev);
779 struct adt7470_data *data = i2c_get_clientdata(client); 740 struct i2c_client *client = data->client;
780 long temp; 741 long temp;
781 742
782 if (kstrtol(buf, 10, &temp)) 743 if (kstrtol(buf, 10, &temp))
@@ -818,8 +779,8 @@ static ssize_t set_pwm_tmin(struct device *dev,
818 size_t count) 779 size_t count)
819{ 780{
820 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 781 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
821 struct i2c_client *client = to_i2c_client(dev); 782 struct adt7470_data *data = dev_get_drvdata(dev);
822 struct adt7470_data *data = i2c_get_clientdata(client); 783 struct i2c_client *client = data->client;
823 long temp; 784 long temp;
824 785
825 if (kstrtol(buf, 10, &temp)) 786 if (kstrtol(buf, 10, &temp))
@@ -852,8 +813,8 @@ static ssize_t set_pwm_auto(struct device *dev,
852 size_t count) 813 size_t count)
853{ 814{
854 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 815 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
855 struct i2c_client *client = to_i2c_client(dev); 816 struct adt7470_data *data = dev_get_drvdata(dev);
856 struct adt7470_data *data = i2c_get_clientdata(client); 817 struct i2c_client *client = data->client;
857 int pwm_auto_reg = ADT7470_REG_PWM_CFG(attr->index); 818 int pwm_auto_reg = ADT7470_REG_PWM_CFG(attr->index);
858 int pwm_auto_reg_mask; 819 int pwm_auto_reg_mask;
859 long temp; 820 long temp;
@@ -913,8 +874,8 @@ static ssize_t set_pwm_auto_temp(struct device *dev,
913 size_t count) 874 size_t count)
914{ 875{
915 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 876 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
916 struct i2c_client *client = to_i2c_client(dev); 877 struct adt7470_data *data = dev_get_drvdata(dev);
917 struct adt7470_data *data = i2c_get_clientdata(client); 878 struct i2c_client *client = data->client;
918 int pwm_auto_reg = ADT7470_REG_PWM_AUTO_TEMP(attr->index); 879 int pwm_auto_reg = ADT7470_REG_PWM_AUTO_TEMP(attr->index);
919 long temp; 880 long temp;
920 u8 reg; 881 u8 reg;
@@ -1131,7 +1092,7 @@ static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
1131static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO, 1092static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
1132 show_pwm_auto_temp, set_pwm_auto_temp, 3); 1093 show_pwm_auto_temp, set_pwm_auto_temp, 3);
1133 1094
1134static struct attribute *adt7470_attr[] = { 1095static struct attribute *adt7470_attrs[] = {
1135 &dev_attr_alarm_mask.attr, 1096 &dev_attr_alarm_mask.attr,
1136 &dev_attr_num_temp_sensors.attr, 1097 &dev_attr_num_temp_sensors.attr,
1137 &dev_attr_auto_update_interval.attr, 1098 &dev_attr_auto_update_interval.attr,
@@ -1223,6 +1184,8 @@ static struct attribute *adt7470_attr[] = {
1223 NULL 1184 NULL
1224}; 1185};
1225 1186
1187ATTRIBUTE_GROUPS(adt7470);
1188
1226/* Return 0 if detection is successful, -ENODEV otherwise */ 1189/* Return 0 if detection is successful, -ENODEV otherwise */
1227static int adt7470_detect(struct i2c_client *client, 1190static int adt7470_detect(struct i2c_client *client,
1228 struct i2c_board_info *info) 1191 struct i2c_board_info *info)
@@ -1250,14 +1213,26 @@ static int adt7470_detect(struct i2c_client *client,
1250 return 0; 1213 return 0;
1251} 1214}
1252 1215
1216static void adt7470_init_client(struct i2c_client *client)
1217{
1218 int reg = i2c_smbus_read_byte_data(client, ADT7470_REG_CFG);
1219
1220 if (reg < 0) {
1221 dev_err(&client->dev, "cannot read configuration register\n");
1222 } else {
1223 /* start monitoring (and do a self-test) */
1224 i2c_smbus_write_byte_data(client, ADT7470_REG_CFG, reg | 3);
1225 }
1226}
1227
1253static int adt7470_probe(struct i2c_client *client, 1228static int adt7470_probe(struct i2c_client *client,
1254 const struct i2c_device_id *id) 1229 const struct i2c_device_id *id)
1255{ 1230{
1231 struct device *dev = &client->dev;
1256 struct adt7470_data *data; 1232 struct adt7470_data *data;
1257 int err; 1233 struct device *hwmon_dev;
1258 1234
1259 data = devm_kzalloc(&client->dev, sizeof(struct adt7470_data), 1235 data = devm_kzalloc(dev, sizeof(struct adt7470_data), GFP_KERNEL);
1260 GFP_KERNEL);
1261 if (!data) 1236 if (!data)
1262 return -ENOMEM; 1237 return -ENOMEM;
1263 1238
@@ -1265,6 +1240,7 @@ static int adt7470_probe(struct i2c_client *client,
1265 data->auto_update_interval = AUTO_UPDATE_INTERVAL; 1240 data->auto_update_interval = AUTO_UPDATE_INTERVAL;
1266 1241
1267 i2c_set_clientdata(client, data); 1242 i2c_set_clientdata(client, data);
1243 data->client = client;
1268 mutex_init(&data->lock); 1244 mutex_init(&data->lock);
1269 1245
1270 dev_info(&client->dev, "%s chip found\n", client->name); 1246 dev_info(&client->dev, "%s chip found\n", client->name);
@@ -1273,32 +1249,21 @@ static int adt7470_probe(struct i2c_client *client,
1273 adt7470_init_client(client); 1249 adt7470_init_client(client);
1274 1250
1275 /* Register sysfs hooks */ 1251 /* Register sysfs hooks */
1276 data->attrs.attrs = adt7470_attr; 1252 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1277 err = sysfs_create_group(&client->dev.kobj, &data->attrs); 1253 data,
1278 if (err) 1254 adt7470_groups);
1279 return err; 1255
1280 1256 if (IS_ERR(hwmon_dev))
1281 data->hwmon_dev = hwmon_device_register(&client->dev); 1257 return PTR_ERR(hwmon_dev);
1282 if (IS_ERR(data->hwmon_dev)) {
1283 err = PTR_ERR(data->hwmon_dev);
1284 goto exit_remove;
1285 }
1286 1258
1287 init_completion(&data->auto_update_stop); 1259 init_completion(&data->auto_update_stop);
1288 data->auto_update = kthread_run(adt7470_update_thread, client, "%s", 1260 data->auto_update = kthread_run(adt7470_update_thread, client, "%s",
1289 dev_name(data->hwmon_dev)); 1261 dev_name(hwmon_dev));
1290 if (IS_ERR(data->auto_update)) { 1262 if (IS_ERR(data->auto_update)) {
1291 err = PTR_ERR(data->auto_update); 1263 return PTR_ERR(data->auto_update);
1292 goto exit_unregister;
1293 } 1264 }
1294 1265
1295 return 0; 1266 return 0;
1296
1297exit_unregister:
1298 hwmon_device_unregister(data->hwmon_dev);
1299exit_remove:
1300 sysfs_remove_group(&client->dev.kobj, &data->attrs);
1301 return err;
1302} 1267}
1303 1268
1304static int adt7470_remove(struct i2c_client *client) 1269static int adt7470_remove(struct i2c_client *client)
@@ -1307,11 +1272,27 @@ static int adt7470_remove(struct i2c_client *client)
1307 1272
1308 kthread_stop(data->auto_update); 1273 kthread_stop(data->auto_update);
1309 wait_for_completion(&data->auto_update_stop); 1274 wait_for_completion(&data->auto_update_stop);
1310 hwmon_device_unregister(data->hwmon_dev);
1311 sysfs_remove_group(&client->dev.kobj, &data->attrs);
1312 return 0; 1275 return 0;
1313} 1276}
1314 1277
1278static const struct i2c_device_id adt7470_id[] = {
1279 { "adt7470", 0 },
1280 { }
1281};
1282MODULE_DEVICE_TABLE(i2c, adt7470_id);
1283
1284static struct i2c_driver adt7470_driver = {
1285 .class = I2C_CLASS_HWMON,
1286 .driver = {
1287 .name = "adt7470",
1288 },
1289 .probe = adt7470_probe,
1290 .remove = adt7470_remove,
1291 .id_table = adt7470_id,
1292 .detect = adt7470_detect,
1293 .address_list = normal_i2c,
1294};
1295
1315module_i2c_driver(adt7470_driver); 1296module_i2c_driver(adt7470_driver);
1316 1297
1317MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>"); 1298MODULE_AUTHOR("Darrick J. Wong <darrick.wong@oracle.com>");
diff --git a/drivers/hwmon/amc6821.c b/drivers/hwmon/amc6821.c
index 9f2be3dd28f3..12e851a5af48 100644
--- a/drivers/hwmon/amc6821.c
+++ b/drivers/hwmon/amc6821.c
@@ -21,7 +21,6 @@
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */ 22 */
23 23
24
25#include <linux/kernel.h> /* Needed for KERN_INFO */ 24#include <linux/kernel.h> /* Needed for KERN_INFO */
26#include <linux/module.h> 25#include <linux/module.h>
27#include <linux/init.h> 26#include <linux/init.h>
@@ -33,7 +32,6 @@
33#include <linux/err.h> 32#include <linux/err.h>
34#include <linux/mutex.h> 33#include <linux/mutex.h>
35 34
36
37/* 35/*
38 * Addresses to scan. 36 * Addresses to scan.
39 */ 37 */
@@ -41,8 +39,6 @@
41static const unsigned short normal_i2c[] = {0x18, 0x19, 0x1a, 0x2c, 0x2d, 0x2e, 39static const unsigned short normal_i2c[] = {0x18, 0x19, 0x1a, 0x2c, 0x2d, 0x2e,
42 0x4c, 0x4d, 0x4e, I2C_CLIENT_END}; 40 0x4c, 0x4d, 0x4e, I2C_CLIENT_END};
43 41
44
45
46/* 42/*
47 * Insmod parameters 43 * Insmod parameters
48 */ 44 */
@@ -53,7 +49,6 @@ module_param(pwminv, int, S_IRUGO);
53static int init = 1; /*Power-on initialization.*/ 49static int init = 1; /*Power-on initialization.*/
54module_param(init, int, S_IRUGO); 50module_param(init, int, S_IRUGO);
55 51
56
57enum chips { amc6821 }; 52enum chips { amc6821 };
58 53
59#define AMC6821_REG_DEV_ID 0x3D 54#define AMC6821_REG_DEV_ID 0x3D
@@ -152,46 +147,12 @@ static const u8 fan_reg_hi[] = {AMC6821_REG_TDATA_HI,
152 AMC6821_REG_TACH_LLIMITH, 147 AMC6821_REG_TACH_LLIMITH,
153 AMC6821_REG_TACH_HLIMITH, }; 148 AMC6821_REG_TACH_HLIMITH, };
154 149
155static int amc6821_probe(
156 struct i2c_client *client,
157 const struct i2c_device_id *id);
158static int amc6821_detect(
159 struct i2c_client *client,
160 struct i2c_board_info *info);
161static int amc6821_init_client(struct i2c_client *client);
162static int amc6821_remove(struct i2c_client *client);
163static struct amc6821_data *amc6821_update_device(struct device *dev);
164
165/*
166 * Driver data (common to all clients)
167 */
168
169static const struct i2c_device_id amc6821_id[] = {
170 { "amc6821", amc6821 },
171 { }
172};
173
174MODULE_DEVICE_TABLE(i2c, amc6821_id);
175
176static struct i2c_driver amc6821_driver = {
177 .class = I2C_CLASS_HWMON,
178 .driver = {
179 .name = "amc6821",
180 },
181 .probe = amc6821_probe,
182 .remove = amc6821_remove,
183 .id_table = amc6821_id,
184 .detect = amc6821_detect,
185 .address_list = normal_i2c,
186};
187
188
189/* 150/*
190 * Client data (each client gets its own) 151 * Client data (each client gets its own)
191 */ 152 */
192 153
193struct amc6821_data { 154struct amc6821_data {
194 struct device *hwmon_dev; 155 struct i2c_client *client;
195 struct mutex update_lock; 156 struct mutex update_lock;
196 char valid; /* zero until following fields are valid */ 157 char valid; /* zero until following fields are valid */
197 unsigned long last_updated; /* in jiffies */ 158 unsigned long last_updated; /* in jiffies */
@@ -213,6 +174,108 @@ struct amc6821_data {
213 u8 stat2; 174 u8 stat2;
214}; 175};
215 176
177static struct amc6821_data *amc6821_update_device(struct device *dev)
178{
179 struct amc6821_data *data = dev_get_drvdata(dev);
180 struct i2c_client *client = data->client;
181 int timeout = HZ;
182 u8 reg;
183 int i;
184
185 mutex_lock(&data->update_lock);
186
187 if (time_after(jiffies, data->last_updated + timeout) ||
188 !data->valid) {
189
190 for (i = 0; i < TEMP_IDX_LEN; i++)
191 data->temp[i] = i2c_smbus_read_byte_data(client,
192 temp_reg[i]);
193
194 data->stat1 = i2c_smbus_read_byte_data(client,
195 AMC6821_REG_STAT1);
196 data->stat2 = i2c_smbus_read_byte_data(client,
197 AMC6821_REG_STAT2);
198
199 data->pwm1 = i2c_smbus_read_byte_data(client,
200 AMC6821_REG_DCY);
201 for (i = 0; i < FAN1_IDX_LEN; i++) {
202 data->fan[i] = i2c_smbus_read_byte_data(
203 client,
204 fan_reg_low[i]);
205 data->fan[i] += i2c_smbus_read_byte_data(
206 client,
207 fan_reg_hi[i]) << 8;
208 }
209 data->fan1_div = i2c_smbus_read_byte_data(client,
210 AMC6821_REG_CONF4);
211 data->fan1_div = data->fan1_div & AMC6821_CONF4_PSPR ? 4 : 2;
212
213 data->pwm1_auto_point_pwm[0] = 0;
214 data->pwm1_auto_point_pwm[2] = 255;
215 data->pwm1_auto_point_pwm[1] = i2c_smbus_read_byte_data(client,
216 AMC6821_REG_DCY_LOW_TEMP);
217
218 data->temp1_auto_point_temp[0] =
219 i2c_smbus_read_byte_data(client,
220 AMC6821_REG_PSV_TEMP);
221 data->temp2_auto_point_temp[0] =
222 data->temp1_auto_point_temp[0];
223 reg = i2c_smbus_read_byte_data(client,
224 AMC6821_REG_LTEMP_FAN_CTRL);
225 data->temp1_auto_point_temp[1] = (reg & 0xF8) >> 1;
226 reg &= 0x07;
227 reg = 0x20 >> reg;
228 if (reg > 0)
229 data->temp1_auto_point_temp[2] =
230 data->temp1_auto_point_temp[1] +
231 (data->pwm1_auto_point_pwm[2] -
232 data->pwm1_auto_point_pwm[1]) / reg;
233 else
234 data->temp1_auto_point_temp[2] = 255;
235
236 reg = i2c_smbus_read_byte_data(client,
237 AMC6821_REG_RTEMP_FAN_CTRL);
238 data->temp2_auto_point_temp[1] = (reg & 0xF8) >> 1;
239 reg &= 0x07;
240 reg = 0x20 >> reg;
241 if (reg > 0)
242 data->temp2_auto_point_temp[2] =
243 data->temp2_auto_point_temp[1] +
244 (data->pwm1_auto_point_pwm[2] -
245 data->pwm1_auto_point_pwm[1]) / reg;
246 else
247 data->temp2_auto_point_temp[2] = 255;
248
249 reg = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF1);
250 reg = (reg >> 5) & 0x3;
251 switch (reg) {
252 case 0: /*open loop: software sets pwm1*/
253 data->pwm1_auto_channels_temp = 0;
254 data->pwm1_enable = 1;
255 break;
256 case 2: /*closed loop: remote T (temp2)*/
257 data->pwm1_auto_channels_temp = 2;
258 data->pwm1_enable = 2;
259 break;
260 case 3: /*closed loop: local and remote T (temp2)*/
261 data->pwm1_auto_channels_temp = 3;
262 data->pwm1_enable = 3;
263 break;
264 case 1: /*
265 * semi-open loop: software sets rpm, chip controls
266 * pwm1, currently not implemented
267 */
268 data->pwm1_auto_channels_temp = 0;
269 data->pwm1_enable = 0;
270 break;
271 }
272
273 data->last_updated = jiffies;
274 data->valid = 1;
275 }
276 mutex_unlock(&data->update_lock);
277 return data;
278}
216 279
217static ssize_t get_temp( 280static ssize_t get_temp(
218 struct device *dev, 281 struct device *dev,
@@ -225,16 +288,14 @@ static ssize_t get_temp(
225 return sprintf(buf, "%d\n", data->temp[ix] * 1000); 288 return sprintf(buf, "%d\n", data->temp[ix] * 1000);
226} 289}
227 290
228
229
230static ssize_t set_temp( 291static ssize_t set_temp(
231 struct device *dev, 292 struct device *dev,
232 struct device_attribute *attr, 293 struct device_attribute *attr,
233 const char *buf, 294 const char *buf,
234 size_t count) 295 size_t count)
235{ 296{
236 struct i2c_client *client = to_i2c_client(dev); 297 struct amc6821_data *data = dev_get_drvdata(dev);
237 struct amc6821_data *data = i2c_get_clientdata(client); 298 struct i2c_client *client = data->client;
238 int ix = to_sensor_dev_attr(attr)->index; 299 int ix = to_sensor_dev_attr(attr)->index;
239 long val; 300 long val;
240 301
@@ -253,9 +314,6 @@ static ssize_t set_temp(
253 return count; 314 return count;
254} 315}
255 316
256
257
258
259static ssize_t get_temp_alarm( 317static ssize_t get_temp_alarm(
260 struct device *dev, 318 struct device *dev,
261 struct device_attribute *devattr, 319 struct device_attribute *devattr,
@@ -294,9 +352,6 @@ static ssize_t get_temp_alarm(
294 return sprintf(buf, "0"); 352 return sprintf(buf, "0");
295} 353}
296 354
297
298
299
300static ssize_t get_temp2_fault( 355static ssize_t get_temp2_fault(
301 struct device *dev, 356 struct device *dev,
302 struct device_attribute *devattr, 357 struct device_attribute *devattr,
@@ -324,8 +379,8 @@ static ssize_t set_pwm1(
324 const char *buf, 379 const char *buf,
325 size_t count) 380 size_t count)
326{ 381{
327 struct i2c_client *client = to_i2c_client(dev); 382 struct amc6821_data *data = dev_get_drvdata(dev);
328 struct amc6821_data *data = i2c_get_clientdata(client); 383 struct i2c_client *client = data->client;
329 long val; 384 long val;
330 int ret = kstrtol(buf, 10, &val); 385 int ret = kstrtol(buf, 10, &val);
331 if (ret) 386 if (ret)
@@ -353,18 +408,20 @@ static ssize_t set_pwm1_enable(
353 const char *buf, 408 const char *buf,
354 size_t count) 409 size_t count)
355{ 410{
356 struct i2c_client *client = to_i2c_client(dev); 411 struct amc6821_data *data = dev_get_drvdata(dev);
357 struct amc6821_data *data = i2c_get_clientdata(client); 412 struct i2c_client *client = data->client;
358 long val; 413 long val;
359 int config = kstrtol(buf, 10, &val); 414 int config = kstrtol(buf, 10, &val);
360 if (config) 415 if (config)
361 return config; 416 return config;
362 417
418 mutex_lock(&data->update_lock);
363 config = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF1); 419 config = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF1);
364 if (config < 0) { 420 if (config < 0) {
365 dev_err(&client->dev, 421 dev_err(&client->dev,
366 "Error reading configuration register, aborting.\n"); 422 "Error reading configuration register, aborting.\n");
367 return config; 423 count = config;
424 goto unlock;
368 } 425 }
369 426
370 switch (val) { 427 switch (val) {
@@ -381,19 +438,19 @@ static ssize_t set_pwm1_enable(
381 config |= AMC6821_CONF1_FDRC1; 438 config |= AMC6821_CONF1_FDRC1;
382 break; 439 break;
383 default: 440 default:
384 return -EINVAL; 441 count = -EINVAL;
442 goto unlock;
385 } 443 }
386 mutex_lock(&data->update_lock);
387 if (i2c_smbus_write_byte_data(client, AMC6821_REG_CONF1, config)) { 444 if (i2c_smbus_write_byte_data(client, AMC6821_REG_CONF1, config)) {
388 dev_err(&client->dev, 445 dev_err(&client->dev,
389 "Configuration register write error, aborting.\n"); 446 "Configuration register write error, aborting.\n");
390 count = -EIO; 447 count = -EIO;
391 } 448 }
449unlock:
392 mutex_unlock(&data->update_lock); 450 mutex_unlock(&data->update_lock);
393 return count; 451 return count;
394} 452}
395 453
396
397static ssize_t get_pwm1_auto_channels_temp( 454static ssize_t get_pwm1_auto_channels_temp(
398 struct device *dev, 455 struct device *dev,
399 struct device_attribute *devattr, 456 struct device_attribute *devattr,
@@ -403,7 +460,6 @@ static ssize_t get_pwm1_auto_channels_temp(
403 return sprintf(buf, "%d\n", data->pwm1_auto_channels_temp); 460 return sprintf(buf, "%d\n", data->pwm1_auto_channels_temp);
404} 461}
405 462
406
407static ssize_t get_temp_auto_point_temp( 463static ssize_t get_temp_auto_point_temp(
408 struct device *dev, 464 struct device *dev,
409 struct device_attribute *devattr, 465 struct device_attribute *devattr,
@@ -425,7 +481,6 @@ static ssize_t get_temp_auto_point_temp(
425 } 481 }
426} 482}
427 483
428
429static ssize_t get_pwm1_auto_point_pwm( 484static ssize_t get_pwm1_auto_point_pwm(
430 struct device *dev, 485 struct device *dev,
431 struct device_attribute *devattr, 486 struct device_attribute *devattr,
@@ -436,7 +491,6 @@ static ssize_t get_pwm1_auto_point_pwm(
436 return sprintf(buf, "%d\n", data->pwm1_auto_point_pwm[ix]); 491 return sprintf(buf, "%d\n", data->pwm1_auto_point_pwm[ix]);
437} 492}
438 493
439
440static inline ssize_t set_slope_register(struct i2c_client *client, 494static inline ssize_t set_slope_register(struct i2c_client *client,
441 u8 reg, 495 u8 reg,
442 u8 dpwm, 496 u8 dpwm,
@@ -459,16 +513,14 @@ static inline ssize_t set_slope_register(struct i2c_client *client,
459 return 0; 513 return 0;
460} 514}
461 515
462
463
464static ssize_t set_temp_auto_point_temp( 516static ssize_t set_temp_auto_point_temp(
465 struct device *dev, 517 struct device *dev,
466 struct device_attribute *attr, 518 struct device_attribute *attr,
467 const char *buf, 519 const char *buf,
468 size_t count) 520 size_t count)
469{ 521{
470 struct i2c_client *client = to_i2c_client(dev);
471 struct amc6821_data *data = amc6821_update_device(dev); 522 struct amc6821_data *data = amc6821_update_device(dev);
523 struct i2c_client *client = data->client;
472 int ix = to_sensor_dev_attr_2(attr)->index; 524 int ix = to_sensor_dev_attr_2(attr)->index;
473 int nr = to_sensor_dev_attr_2(attr)->nr; 525 int nr = to_sensor_dev_attr_2(attr)->nr;
474 u8 *ptemp; 526 u8 *ptemp;
@@ -493,8 +545,9 @@ static ssize_t set_temp_auto_point_temp(
493 return -EINVAL; 545 return -EINVAL;
494 } 546 }
495 547
496 data->valid = 0;
497 mutex_lock(&data->update_lock); 548 mutex_lock(&data->update_lock);
549 data->valid = 0;
550
498 switch (ix) { 551 switch (ix) {
499 case 0: 552 case 0:
500 ptemp[0] = clamp_val(val / 1000, 0, 553 ptemp[0] = clamp_val(val / 1000, 0,
@@ -533,16 +586,14 @@ EXIT:
533 return count; 586 return count;
534} 587}
535 588
536
537
538static ssize_t set_pwm1_auto_point_pwm( 589static ssize_t set_pwm1_auto_point_pwm(
539 struct device *dev, 590 struct device *dev,
540 struct device_attribute *attr, 591 struct device_attribute *attr,
541 const char *buf, 592 const char *buf,
542 size_t count) 593 size_t count)
543{ 594{
544 struct i2c_client *client = to_i2c_client(dev); 595 struct amc6821_data *data = dev_get_drvdata(dev);
545 struct amc6821_data *data = i2c_get_clientdata(client); 596 struct i2c_client *client = data->client;
546 int dpwm; 597 int dpwm;
547 long val; 598 long val;
548 int ret = kstrtol(buf, 10, &val); 599 int ret = kstrtol(buf, 10, &val);
@@ -587,8 +638,6 @@ static ssize_t get_fan(
587 return sprintf(buf, "%d\n", (int)(6000000 / data->fan[ix])); 638 return sprintf(buf, "%d\n", (int)(6000000 / data->fan[ix]));
588} 639}
589 640
590
591
592static ssize_t get_fan1_fault( 641static ssize_t get_fan1_fault(
593 struct device *dev, 642 struct device *dev,
594 struct device_attribute *devattr, 643 struct device_attribute *devattr,
@@ -601,15 +650,13 @@ static ssize_t get_fan1_fault(
601 return sprintf(buf, "0"); 650 return sprintf(buf, "0");
602} 651}
603 652
604
605
606static ssize_t set_fan( 653static ssize_t set_fan(
607 struct device *dev, 654 struct device *dev,
608 struct device_attribute *attr, 655 struct device_attribute *attr,
609 const char *buf, size_t count) 656 const char *buf, size_t count)
610{ 657{
611 struct i2c_client *client = to_i2c_client(dev); 658 struct amc6821_data *data = dev_get_drvdata(dev);
612 struct amc6821_data *data = i2c_get_clientdata(client); 659 struct i2c_client *client = data->client;
613 long val; 660 long val;
614 int ix = to_sensor_dev_attr(attr)->index; 661 int ix = to_sensor_dev_attr(attr)->index;
615 int ret = kstrtol(buf, 10, &val); 662 int ret = kstrtol(buf, 10, &val);
@@ -635,8 +682,6 @@ EXIT:
635 return count; 682 return count;
636} 683}
637 684
638
639
640static ssize_t get_fan1_div( 685static ssize_t get_fan1_div(
641 struct device *dev, 686 struct device *dev,
642 struct device_attribute *devattr, 687 struct device_attribute *devattr,
@@ -651,20 +696,21 @@ static ssize_t set_fan1_div(
651 struct device_attribute *attr, 696 struct device_attribute *attr,
652 const char *buf, size_t count) 697 const char *buf, size_t count)
653{ 698{
654 struct i2c_client *client = to_i2c_client(dev); 699 struct amc6821_data *data = dev_get_drvdata(dev);
655 struct amc6821_data *data = i2c_get_clientdata(client); 700 struct i2c_client *client = data->client;
656 long val; 701 long val;
657 int config = kstrtol(buf, 10, &val); 702 int config = kstrtol(buf, 10, &val);
658 if (config) 703 if (config)
659 return config; 704 return config;
660 705
706 mutex_lock(&data->update_lock);
661 config = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF4); 707 config = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF4);
662 if (config < 0) { 708 if (config < 0) {
663 dev_err(&client->dev, 709 dev_err(&client->dev,
664 "Error reading configuration register, aborting.\n"); 710 "Error reading configuration register, aborting.\n");
665 return config; 711 count = config;
712 goto EXIT;
666 } 713 }
667 mutex_lock(&data->update_lock);
668 switch (val) { 714 switch (val) {
669 case 2: 715 case 2:
670 config &= ~AMC6821_CONF4_PSPR; 716 config &= ~AMC6821_CONF4_PSPR;
@@ -688,8 +734,6 @@ EXIT:
688 return count; 734 return count;
689} 735}
690 736
691
692
693static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, 737static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO,
694 get_temp, NULL, IDX_TEMP1_INPUT); 738 get_temp, NULL, IDX_TEMP1_INPUT);
695static SENSOR_DEVICE_ATTR(temp1_min, S_IRUGO | S_IWUSR, get_temp, 739static SENSOR_DEVICE_ATTR(temp1_min, S_IRUGO | S_IWUSR, get_temp,
@@ -754,8 +798,6 @@ static SENSOR_DEVICE_ATTR_2(temp2_auto_point2_temp, S_IWUSR | S_IRUGO,
754static SENSOR_DEVICE_ATTR_2(temp2_auto_point3_temp, S_IWUSR | S_IRUGO, 798static SENSOR_DEVICE_ATTR_2(temp2_auto_point3_temp, S_IWUSR | S_IRUGO,
755 get_temp_auto_point_temp, set_temp_auto_point_temp, 2, 2); 799 get_temp_auto_point_temp, set_temp_auto_point_temp, 2, 2);
756 800
757
758
759static struct attribute *amc6821_attrs[] = { 801static struct attribute *amc6821_attrs[] = {
760 &sensor_dev_attr_temp1_input.dev_attr.attr, 802 &sensor_dev_attr_temp1_input.dev_attr.attr,
761 &sensor_dev_attr_temp1_min.dev_attr.attr, 803 &sensor_dev_attr_temp1_min.dev_attr.attr,
@@ -792,11 +834,7 @@ static struct attribute *amc6821_attrs[] = {
792 NULL 834 NULL
793}; 835};
794 836
795static struct attribute_group amc6821_attr_grp = { 837ATTRIBUTE_GROUPS(amc6821);
796 .attrs = amc6821_attrs,
797};
798
799
800 838
801/* Return 0 if detection is successful, -ENODEV otherwise */ 839/* Return 0 if detection is successful, -ENODEV otherwise */
802static int amc6821_detect( 840static int amc6821_detect(
@@ -844,53 +882,6 @@ static int amc6821_detect(
844 return 0; 882 return 0;
845} 883}
846 884
847static int amc6821_probe(
848 struct i2c_client *client,
849 const struct i2c_device_id *id)
850{
851 struct amc6821_data *data;
852 int err;
853
854 data = devm_kzalloc(&client->dev, sizeof(struct amc6821_data),
855 GFP_KERNEL);
856 if (!data)
857 return -ENOMEM;
858
859 i2c_set_clientdata(client, data);
860 mutex_init(&data->update_lock);
861
862 /*
863 * Initialize the amc6821 chip
864 */
865 err = amc6821_init_client(client);
866 if (err)
867 return err;
868
869 err = sysfs_create_group(&client->dev.kobj, &amc6821_attr_grp);
870 if (err)
871 return err;
872
873 data->hwmon_dev = hwmon_device_register(&client->dev);
874 if (!IS_ERR(data->hwmon_dev))
875 return 0;
876
877 err = PTR_ERR(data->hwmon_dev);
878 dev_err(&client->dev, "error registering hwmon device.\n");
879 sysfs_remove_group(&client->dev.kobj, &amc6821_attr_grp);
880 return err;
881}
882
883static int amc6821_remove(struct i2c_client *client)
884{
885 struct amc6821_data *data = i2c_get_clientdata(client);
886
887 hwmon_device_unregister(data->hwmon_dev);
888 sysfs_remove_group(&client->dev.kobj, &amc6821_attr_grp);
889
890 return 0;
891}
892
893
894static int amc6821_init_client(struct i2c_client *client) 885static int amc6821_init_client(struct i2c_client *client)
895{ 886{
896 int config; 887 int config;
@@ -977,109 +968,51 @@ static int amc6821_init_client(struct i2c_client *client)
977 return 0; 968 return 0;
978} 969}
979 970
980 971static int amc6821_probe(struct i2c_client *client,
981static struct amc6821_data *amc6821_update_device(struct device *dev) 972 const struct i2c_device_id *id)
982{ 973{
983 struct i2c_client *client = to_i2c_client(dev); 974 struct device *dev = &client->dev;
984 struct amc6821_data *data = i2c_get_clientdata(client); 975 struct amc6821_data *data;
985 int timeout = HZ; 976 struct device *hwmon_dev;
986 u8 reg; 977 int err;
987 int i;
988
989 mutex_lock(&data->update_lock);
990
991 if (time_after(jiffies, data->last_updated + timeout) ||
992 !data->valid) {
993
994 for (i = 0; i < TEMP_IDX_LEN; i++)
995 data->temp[i] = i2c_smbus_read_byte_data(client,
996 temp_reg[i]);
997 978
998 data->stat1 = i2c_smbus_read_byte_data(client, 979 data = devm_kzalloc(dev, sizeof(struct amc6821_data), GFP_KERNEL);
999 AMC6821_REG_STAT1); 980 if (!data)
1000 data->stat2 = i2c_smbus_read_byte_data(client, 981 return -ENOMEM;
1001 AMC6821_REG_STAT2);
1002 982
1003 data->pwm1 = i2c_smbus_read_byte_data(client, 983 data->client = client;
1004 AMC6821_REG_DCY); 984 mutex_init(&data->update_lock);
1005 for (i = 0; i < FAN1_IDX_LEN; i++) {
1006 data->fan[i] = i2c_smbus_read_byte_data(
1007 client,
1008 fan_reg_low[i]);
1009 data->fan[i] += i2c_smbus_read_byte_data(
1010 client,
1011 fan_reg_hi[i]) << 8;
1012 }
1013 data->fan1_div = i2c_smbus_read_byte_data(client,
1014 AMC6821_REG_CONF4);
1015 data->fan1_div = data->fan1_div & AMC6821_CONF4_PSPR ? 4 : 2;
1016 985
1017 data->pwm1_auto_point_pwm[0] = 0; 986 /*
1018 data->pwm1_auto_point_pwm[2] = 255; 987 * Initialize the amc6821 chip
1019 data->pwm1_auto_point_pwm[1] = i2c_smbus_read_byte_data(client, 988 */
1020 AMC6821_REG_DCY_LOW_TEMP); 989 err = amc6821_init_client(client);
990 if (err)
991 return err;
1021 992
1022 data->temp1_auto_point_temp[0] = 993 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1023 i2c_smbus_read_byte_data(client, 994 data,
1024 AMC6821_REG_PSV_TEMP); 995 amc6821_groups);
1025 data->temp2_auto_point_temp[0] = 996 return PTR_ERR_OR_ZERO(hwmon_dev);
1026 data->temp1_auto_point_temp[0]; 997}
1027 reg = i2c_smbus_read_byte_data(client,
1028 AMC6821_REG_LTEMP_FAN_CTRL);
1029 data->temp1_auto_point_temp[1] = (reg & 0xF8) >> 1;
1030 reg &= 0x07;
1031 reg = 0x20 >> reg;
1032 if (reg > 0)
1033 data->temp1_auto_point_temp[2] =
1034 data->temp1_auto_point_temp[1] +
1035 (data->pwm1_auto_point_pwm[2] -
1036 data->pwm1_auto_point_pwm[1]) / reg;
1037 else
1038 data->temp1_auto_point_temp[2] = 255;
1039 998
1040 reg = i2c_smbus_read_byte_data(client, 999static const struct i2c_device_id amc6821_id[] = {
1041 AMC6821_REG_RTEMP_FAN_CTRL); 1000 { "amc6821", amc6821 },
1042 data->temp2_auto_point_temp[1] = (reg & 0xF8) >> 1; 1001 { }
1043 reg &= 0x07; 1002};
1044 reg = 0x20 >> reg;
1045 if (reg > 0)
1046 data->temp2_auto_point_temp[2] =
1047 data->temp2_auto_point_temp[1] +
1048 (data->pwm1_auto_point_pwm[2] -
1049 data->pwm1_auto_point_pwm[1]) / reg;
1050 else
1051 data->temp2_auto_point_temp[2] = 255;
1052 1003
1053 reg = i2c_smbus_read_byte_data(client, AMC6821_REG_CONF1); 1004MODULE_DEVICE_TABLE(i2c, amc6821_id);
1054 reg = (reg >> 5) & 0x3;
1055 switch (reg) {
1056 case 0: /*open loop: software sets pwm1*/
1057 data->pwm1_auto_channels_temp = 0;
1058 data->pwm1_enable = 1;
1059 break;
1060 case 2: /*closed loop: remote T (temp2)*/
1061 data->pwm1_auto_channels_temp = 2;
1062 data->pwm1_enable = 2;
1063 break;
1064 case 3: /*closed loop: local and remote T (temp2)*/
1065 data->pwm1_auto_channels_temp = 3;
1066 data->pwm1_enable = 3;
1067 break;
1068 case 1: /*
1069 * semi-open loop: software sets rpm, chip controls
1070 * pwm1, currently not implemented
1071 */
1072 data->pwm1_auto_channels_temp = 0;
1073 data->pwm1_enable = 0;
1074 break;
1075 }
1076 1005
1077 data->last_updated = jiffies; 1006static struct i2c_driver amc6821_driver = {
1078 data->valid = 1; 1007 .class = I2C_CLASS_HWMON,
1079 } 1008 .driver = {
1080 mutex_unlock(&data->update_lock); 1009 .name = "amc6821",
1081 return data; 1010 },
1082} 1011 .probe = amc6821_probe,
1012 .id_table = amc6821_id,
1013 .detect = amc6821_detect,
1014 .address_list = normal_i2c,
1015};
1083 1016
1084module_i2c_driver(amc6821_driver); 1017module_i2c_driver(amc6821_driver);
1085 1018
diff --git a/drivers/hwmon/asc7621.c b/drivers/hwmon/asc7621.c
index 71463689d163..c77644d45a02 100644
--- a/drivers/hwmon/asc7621.c
+++ b/drivers/hwmon/asc7621.c
@@ -300,7 +300,7 @@ static ssize_t store_fan16(struct device *dev,
300 * respectively. That doesn't mean that's what the motherboard provides. :) 300 * respectively. That doesn't mean that's what the motherboard provides. :)
301 */ 301 */
302 302
303static int asc7621_in_scaling[] = { 303static const int asc7621_in_scaling[] = {
304 2500, 2250, 3300, 5000, 12000 304 2500, 2250, 3300, 5000, 12000
305}; 305};
306 306
@@ -451,7 +451,7 @@ static ssize_t store_temp62(struct device *dev,
451 * hwmon specs, we synthesize the auto_point_2 from them. 451 * hwmon specs, we synthesize the auto_point_2 from them.
452 */ 452 */
453 453
454static u32 asc7621_range_map[] = { 454static const u32 asc7621_range_map[] = {
455 2000, 2500, 3330, 4000, 5000, 6670, 8000, 10000, 455 2000, 2500, 3330, 4000, 5000, 6670, 8000, 10000,
456 13330, 16000, 20000, 26670, 32000, 40000, 53330, 80000, 456 13330, 16000, 20000, 26670, 32000, 40000, 53330, 80000,
457}; 457};
@@ -512,7 +512,7 @@ static ssize_t show_pwm_ac(struct device *dev,
512{ 512{
513 SETUP_SHOW_DATA_PARAM(dev, attr); 513 SETUP_SHOW_DATA_PARAM(dev, attr);
514 u8 config, altbit, regval; 514 u8 config, altbit, regval;
515 u8 map[] = { 515 const u8 map[] = {
516 0x01, 0x02, 0x04, 0x1f, 0x00, 0x06, 0x07, 0x10, 516 0x01, 0x02, 0x04, 0x1f, 0x00, 0x06, 0x07, 0x10,
517 0x08, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f 517 0x08, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f
518 }; 518 };
@@ -533,7 +533,7 @@ static ssize_t store_pwm_ac(struct device *dev,
533 SETUP_STORE_DATA_PARAM(dev, attr); 533 SETUP_STORE_DATA_PARAM(dev, attr);
534 unsigned long reqval; 534 unsigned long reqval;
535 u8 currval, config, altbit, newval; 535 u8 currval, config, altbit, newval;
536 u16 map[] = { 536 const u16 map[] = {
537 0x04, 0x00, 0x01, 0xff, 0x02, 0xff, 0x05, 0x06, 537 0x04, 0x00, 0x01, 0xff, 0x02, 0xff, 0x05, 0x06,
538 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 538 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
539 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 539 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
@@ -651,7 +651,7 @@ static ssize_t store_pwm_enable(struct device *dev,
651 return count; 651 return count;
652} 652}
653 653
654static u32 asc7621_pwm_freq_map[] = { 654static const u32 asc7621_pwm_freq_map[] = {
655 10, 15, 23, 30, 38, 47, 62, 94, 655 10, 15, 23, 30, 38, 47, 62, 94,
656 23000, 24000, 25000, 26000, 27000, 28000, 29000, 30000 656 23000, 24000, 25000, 26000, 27000, 28000, 29000, 30000
657}; 657};
@@ -700,7 +700,7 @@ static ssize_t store_pwm_freq(struct device *dev,
700 return count; 700 return count;
701} 701}
702 702
703static u32 asc7621_pwm_auto_spinup_map[] = { 703static const u32 asc7621_pwm_auto_spinup_map[] = {
704 0, 100, 250, 400, 700, 1000, 2000, 4000 704 0, 100, 250, 400, 700, 1000, 2000, 4000
705}; 705};
706 706
@@ -749,7 +749,7 @@ static ssize_t store_pwm_ast(struct device *dev,
749 return count; 749 return count;
750} 750}
751 751
752static u32 asc7621_temp_smoothing_time_map[] = { 752static const u32 asc7621_temp_smoothing_time_map[] = {
753 35000, 17600, 11800, 7000, 4400, 3000, 1600, 800 753 35000, 17600, 11800, 7000, 4400, 3000, 1600, 800
754}; 754};
755 755
diff --git a/drivers/hwmon/atxp1.c b/drivers/hwmon/atxp1.c
index 2ae8a304b5ef..4c829bb2f9db 100644
--- a/drivers/hwmon/atxp1.c
+++ b/drivers/hwmon/atxp1.c
@@ -46,7 +46,7 @@ MODULE_AUTHOR("Sebastian Witt <se.witt@gmx.net>");
46static const unsigned short normal_i2c[] = { 0x37, 0x4e, I2C_CLIENT_END }; 46static const unsigned short normal_i2c[] = { 0x37, 0x4e, I2C_CLIENT_END };
47 47
48struct atxp1_data { 48struct atxp1_data {
49 struct device *hwmon_dev; 49 struct i2c_client *client;
50 struct mutex update_lock; 50 struct mutex update_lock;
51 unsigned long last_updated; 51 unsigned long last_updated;
52 u8 valid; 52 u8 valid;
@@ -61,11 +61,8 @@ struct atxp1_data {
61 61
62static struct atxp1_data *atxp1_update_device(struct device *dev) 62static struct atxp1_data *atxp1_update_device(struct device *dev)
63{ 63{
64 struct i2c_client *client; 64 struct atxp1_data *data = dev_get_drvdata(dev);
65 struct atxp1_data *data; 65 struct i2c_client *client = data->client;
66
67 client = to_i2c_client(dev);
68 data = i2c_get_clientdata(client);
69 66
70 mutex_lock(&data->update_lock); 67 mutex_lock(&data->update_lock);
71 68
@@ -105,15 +102,12 @@ static ssize_t atxp1_storevcore(struct device *dev,
105 struct device_attribute *attr, 102 struct device_attribute *attr,
106 const char *buf, size_t count) 103 const char *buf, size_t count)
107{ 104{
108 struct atxp1_data *data; 105 struct atxp1_data *data = atxp1_update_device(dev);
109 struct i2c_client *client; 106 struct i2c_client *client = data->client;
110 int vid, cvid; 107 int vid, cvid;
111 unsigned long vcore; 108 unsigned long vcore;
112 int err; 109 int err;
113 110
114 client = to_i2c_client(dev);
115 data = atxp1_update_device(dev);
116
117 err = kstrtoul(buf, 10, &vcore); 111 err = kstrtoul(buf, 10, &vcore);
118 if (err) 112 if (err)
119 return err; 113 return err;
@@ -184,14 +178,11 @@ static ssize_t atxp1_storegpio1(struct device *dev,
184 struct device_attribute *attr, const char *buf, 178 struct device_attribute *attr, const char *buf,
185 size_t count) 179 size_t count)
186{ 180{
187 struct atxp1_data *data; 181 struct atxp1_data *data = atxp1_update_device(dev);
188 struct i2c_client *client; 182 struct i2c_client *client = data->client;
189 unsigned long value; 183 unsigned long value;
190 int err; 184 int err;
191 185
192 client = to_i2c_client(dev);
193 data = atxp1_update_device(dev);
194
195 err = kstrtoul(buf, 16, &value); 186 err = kstrtoul(buf, 16, &value);
196 if (err) 187 if (err)
197 return err; 188 return err;
@@ -234,7 +225,7 @@ static ssize_t atxp1_storegpio2(struct device *dev,
234 const char *buf, size_t count) 225 const char *buf, size_t count)
235{ 226{
236 struct atxp1_data *data = atxp1_update_device(dev); 227 struct atxp1_data *data = atxp1_update_device(dev);
237 struct i2c_client *client = to_i2c_client(dev); 228 struct i2c_client *client = data->client;
238 unsigned long value; 229 unsigned long value;
239 int err; 230 int err;
240 231
@@ -260,17 +251,13 @@ static ssize_t atxp1_storegpio2(struct device *dev,
260 */ 251 */
261static DEVICE_ATTR(gpio2, S_IRUGO | S_IWUSR, atxp1_showgpio2, atxp1_storegpio2); 252static DEVICE_ATTR(gpio2, S_IRUGO | S_IWUSR, atxp1_showgpio2, atxp1_storegpio2);
262 253
263static struct attribute *atxp1_attributes[] = { 254static struct attribute *atxp1_attrs[] = {
264 &dev_attr_gpio1.attr, 255 &dev_attr_gpio1.attr,
265 &dev_attr_gpio2.attr, 256 &dev_attr_gpio2.attr,
266 &dev_attr_cpu0_vid.attr, 257 &dev_attr_cpu0_vid.attr,
267 NULL 258 NULL
268}; 259};
269 260ATTRIBUTE_GROUPS(atxp1);
270static const struct attribute_group atxp1_group = {
271 .attrs = atxp1_attributes,
272};
273
274 261
275/* Return 0 if detection is successful, -ENODEV otherwise */ 262/* Return 0 if detection is successful, -ENODEV otherwise */
276static int atxp1_detect(struct i2c_client *new_client, 263static int atxp1_detect(struct i2c_client *new_client,
@@ -314,50 +301,30 @@ static int atxp1_detect(struct i2c_client *new_client,
314 return 0; 301 return 0;
315} 302}
316 303
317static int atxp1_probe(struct i2c_client *new_client, 304static int atxp1_probe(struct i2c_client *client,
318 const struct i2c_device_id *id) 305 const struct i2c_device_id *id)
319{ 306{
307 struct device *dev = &client->dev;
320 struct atxp1_data *data; 308 struct atxp1_data *data;
321 int err; 309 struct device *hwmon_dev;
322 310
323 data = devm_kzalloc(&new_client->dev, sizeof(struct atxp1_data), 311 data = devm_kzalloc(dev, sizeof(struct atxp1_data), GFP_KERNEL);
324 GFP_KERNEL);
325 if (!data) 312 if (!data)
326 return -ENOMEM; 313 return -ENOMEM;
327 314
328 /* Get VRM */ 315 /* Get VRM */
329 data->vrm = vid_which_vrm(); 316 data->vrm = vid_which_vrm();
330 317
331 i2c_set_clientdata(new_client, data); 318 data->client = client;
332 mutex_init(&data->update_lock); 319 mutex_init(&data->update_lock);
333 320
334 /* Register sysfs hooks */ 321 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
335 err = sysfs_create_group(&new_client->dev.kobj, &atxp1_group); 322 data,
336 if (err) 323 atxp1_groups);
337 return err; 324 if (IS_ERR(hwmon_dev))
338 325 return PTR_ERR(hwmon_dev);
339 data->hwmon_dev = hwmon_device_register(&new_client->dev);
340 if (IS_ERR(data->hwmon_dev)) {
341 err = PTR_ERR(data->hwmon_dev);
342 goto exit_remove_files;
343 }
344
345 dev_info(&new_client->dev, "Using VRM: %d.%d\n",
346 data->vrm / 10, data->vrm % 10);
347
348 return 0;
349
350exit_remove_files:
351 sysfs_remove_group(&new_client->dev.kobj, &atxp1_group);
352 return err;
353};
354
355static int atxp1_remove(struct i2c_client *client)
356{
357 struct atxp1_data *data = i2c_get_clientdata(client);
358 326
359 hwmon_device_unregister(data->hwmon_dev); 327 dev_info(dev, "Using VRM: %d.%d\n", data->vrm / 10, data->vrm % 10);
360 sysfs_remove_group(&client->dev.kobj, &atxp1_group);
361 328
362 return 0; 329 return 0;
363}; 330};
@@ -374,7 +341,6 @@ static struct i2c_driver atxp1_driver = {
374 .name = "atxp1", 341 .name = "atxp1",
375 }, 342 },
376 .probe = atxp1_probe, 343 .probe = atxp1_probe,
377 .remove = atxp1_remove,
378 .id_table = atxp1_id, 344 .id_table = atxp1_id,
379 .detect = atxp1_detect, 345 .detect = atxp1_detect,
380 .address_list = normal_i2c, 346 .address_list = normal_i2c,
diff --git a/drivers/hwmon/ds620.c b/drivers/hwmon/ds620.c
index 0918b9136588..edf550fc4eef 100644
--- a/drivers/hwmon/ds620.c
+++ b/drivers/hwmon/ds620.c
@@ -67,7 +67,7 @@ static const u8 DS620_REG_TEMP[3] = {
67 67
68/* Each client has this additional data */ 68/* Each client has this additional data */
69struct ds620_data { 69struct ds620_data {
70 struct device *hwmon_dev; 70 struct i2c_client *client;
71 struct mutex update_lock; 71 struct mutex update_lock;
72 char valid; /* !=0 if following fields are valid */ 72 char valid; /* !=0 if following fields are valid */
73 unsigned long last_updated; /* In jiffies */ 73 unsigned long last_updated; /* In jiffies */
@@ -106,8 +106,8 @@ static void ds620_init_client(struct i2c_client *client)
106 106
107static struct ds620_data *ds620_update_client(struct device *dev) 107static struct ds620_data *ds620_update_client(struct device *dev)
108{ 108{
109 struct i2c_client *client = to_i2c_client(dev); 109 struct ds620_data *data = dev_get_drvdata(dev);
110 struct ds620_data *data = i2c_get_clientdata(client); 110 struct i2c_client *client = data->client;
111 struct ds620_data *ret = data; 111 struct ds620_data *ret = data;
112 112
113 mutex_lock(&data->update_lock); 113 mutex_lock(&data->update_lock);
@@ -158,8 +158,8 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *da,
158 long val; 158 long val;
159 159
160 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); 160 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
161 struct i2c_client *client = to_i2c_client(dev); 161 struct ds620_data *data = dev_get_drvdata(dev);
162 struct ds620_data *data = i2c_get_clientdata(client); 162 struct i2c_client *client = data->client;
163 163
164 res = kstrtol(buf, 10, &val); 164 res = kstrtol(buf, 10, &val);
165 165
@@ -181,13 +181,15 @@ static ssize_t show_alarm(struct device *dev, struct device_attribute *da,
181{ 181{
182 struct sensor_device_attribute *attr = to_sensor_dev_attr(da); 182 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
183 struct ds620_data *data = ds620_update_client(dev); 183 struct ds620_data *data = ds620_update_client(dev);
184 struct i2c_client *client = to_i2c_client(dev); 184 struct i2c_client *client;
185 u16 conf, new_conf; 185 u16 conf, new_conf;
186 int res; 186 int res;
187 187
188 if (IS_ERR(data)) 188 if (IS_ERR(data))
189 return PTR_ERR(data); 189 return PTR_ERR(data);
190 190
191 client = data->client;
192
191 /* reset alarms if necessary */ 193 /* reset alarms if necessary */
192 res = i2c_smbus_read_word_swapped(client, DS620_REG_CONF); 194 res = i2c_smbus_read_word_swapped(client, DS620_REG_CONF);
193 if (res < 0) 195 if (res < 0)
@@ -213,7 +215,7 @@ static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL,
213static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 215static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL,
214 DS620_REG_CONFIG_THF); 216 DS620_REG_CONFIG_THF);
215 217
216static struct attribute *ds620_attributes[] = { 218static struct attribute *ds620_attrs[] = {
217 &sensor_dev_attr_temp1_input.dev_attr.attr, 219 &sensor_dev_attr_temp1_input.dev_attr.attr,
218 &sensor_dev_attr_temp1_min.dev_attr.attr, 220 &sensor_dev_attr_temp1_min.dev_attr.attr,
219 &sensor_dev_attr_temp1_max.dev_attr.attr, 221 &sensor_dev_attr_temp1_max.dev_attr.attr,
@@ -222,55 +224,28 @@ static struct attribute *ds620_attributes[] = {
222 NULL 224 NULL
223}; 225};
224 226
225static const struct attribute_group ds620_group = { 227ATTRIBUTE_GROUPS(ds620);
226 .attrs = ds620_attributes,
227};
228 228
229static int ds620_probe(struct i2c_client *client, 229static int ds620_probe(struct i2c_client *client,
230 const struct i2c_device_id *id) 230 const struct i2c_device_id *id)
231{ 231{
232 struct device *dev = &client->dev;
233 struct device *hwmon_dev;
232 struct ds620_data *data; 234 struct ds620_data *data;
233 int err;
234 235
235 data = devm_kzalloc(&client->dev, sizeof(struct ds620_data), 236 data = devm_kzalloc(dev, sizeof(struct ds620_data), GFP_KERNEL);
236 GFP_KERNEL);
237 if (!data) 237 if (!data)
238 return -ENOMEM; 238 return -ENOMEM;
239 239
240 i2c_set_clientdata(client, data); 240 data->client = client;
241 mutex_init(&data->update_lock); 241 mutex_init(&data->update_lock);
242 242
243 /* Initialize the DS620 chip */ 243 /* Initialize the DS620 chip */
244 ds620_init_client(client); 244 ds620_init_client(client);
245 245
246 /* Register sysfs hooks */ 246 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
247 err = sysfs_create_group(&client->dev.kobj, &ds620_group); 247 data, ds620_groups);
248 if (err) 248 return PTR_ERR_OR_ZERO(hwmon_dev);
249 return err;
250
251 data->hwmon_dev = hwmon_device_register(&client->dev);
252 if (IS_ERR(data->hwmon_dev)) {
253 err = PTR_ERR(data->hwmon_dev);
254 goto exit_remove_files;
255 }
256
257 dev_info(&client->dev, "temperature sensor found\n");
258
259 return 0;
260
261exit_remove_files:
262 sysfs_remove_group(&client->dev.kobj, &ds620_group);
263 return err;
264}
265
266static int ds620_remove(struct i2c_client *client)
267{
268 struct ds620_data *data = i2c_get_clientdata(client);
269
270 hwmon_device_unregister(data->hwmon_dev);
271 sysfs_remove_group(&client->dev.kobj, &ds620_group);
272
273 return 0;
274} 249}
275 250
276static const struct i2c_device_id ds620_id[] = { 251static const struct i2c_device_id ds620_id[] = {
@@ -287,7 +262,6 @@ static struct i2c_driver ds620_driver = {
287 .name = "ds620", 262 .name = "ds620",
288 }, 263 },
289 .probe = ds620_probe, 264 .probe = ds620_probe,
290 .remove = ds620_remove,
291 .id_table = ds620_id, 265 .id_table = ds620_id,
292}; 266};
293 267
diff --git a/drivers/hwmon/emc1403.c b/drivers/hwmon/emc1403.c
index a37b2204a418..1ea7ca510f84 100644
--- a/drivers/hwmon/emc1403.c
+++ b/drivers/hwmon/emc1403.c
@@ -416,7 +416,7 @@ static bool emc1403_regmap_is_volatile(struct device *dev, unsigned int reg)
416 } 416 }
417} 417}
418 418
419static struct regmap_config emc1403_regmap_config = { 419static const struct regmap_config emc1403_regmap_config = {
420 .reg_bits = 8, 420 .reg_bits = 8,
421 .val_bits = 8, 421 .val_bits = 8,
422 .cache_type = REGCACHE_RBTREE, 422 .cache_type = REGCACHE_RBTREE,
diff --git a/drivers/hwmon/emc2103.c b/drivers/hwmon/emc2103.c
index 78002de46cb6..952fe692d764 100644
--- a/drivers/hwmon/emc2103.c
+++ b/drivers/hwmon/emc2103.c
@@ -66,7 +66,8 @@ struct temperature {
66}; 66};
67 67
68struct emc2103_data { 68struct emc2103_data {
69 struct device *hwmon_dev; 69 struct i2c_client *client;
70 const struct attribute_group *groups[4];
70 struct mutex update_lock; 71 struct mutex update_lock;
71 bool valid; /* registers are valid */ 72 bool valid; /* registers are valid */
72 bool fan_rpm_control; 73 bool fan_rpm_control;
@@ -146,8 +147,8 @@ static void read_fan_config_from_i2c(struct i2c_client *client)
146 147
147static struct emc2103_data *emc2103_update_device(struct device *dev) 148static struct emc2103_data *emc2103_update_device(struct device *dev)
148{ 149{
149 struct i2c_client *client = to_i2c_client(dev); 150 struct emc2103_data *data = dev_get_drvdata(dev);
150 struct emc2103_data *data = i2c_get_clientdata(client); 151 struct i2c_client *client = data->client;
151 152
152 mutex_lock(&data->update_lock); 153 mutex_lock(&data->update_lock);
153 154
@@ -242,8 +243,8 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *da,
242 const char *buf, size_t count) 243 const char *buf, size_t count)
243{ 244{
244 int nr = to_sensor_dev_attr(da)->index; 245 int nr = to_sensor_dev_attr(da)->index;
245 struct i2c_client *client = to_i2c_client(dev); 246 struct emc2103_data *data = dev_get_drvdata(dev);
246 struct emc2103_data *data = i2c_get_clientdata(client); 247 struct i2c_client *client = data->client;
247 long val; 248 long val;
248 249
249 int result = kstrtol(buf, 10, &val); 250 int result = kstrtol(buf, 10, &val);
@@ -264,8 +265,8 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *da,
264 const char *buf, size_t count) 265 const char *buf, size_t count)
265{ 266{
266 int nr = to_sensor_dev_attr(da)->index; 267 int nr = to_sensor_dev_attr(da)->index;
267 struct i2c_client *client = to_i2c_client(dev); 268 struct emc2103_data *data = dev_get_drvdata(dev);
268 struct emc2103_data *data = i2c_get_clientdata(client); 269 struct i2c_client *client = data->client;
269 long val; 270 long val;
270 271
271 int result = kstrtol(buf, 10, &val); 272 int result = kstrtol(buf, 10, &val);
@@ -310,7 +311,7 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *da,
310 const char *buf, size_t count) 311 const char *buf, size_t count)
311{ 312{
312 struct emc2103_data *data = emc2103_update_device(dev); 313 struct emc2103_data *data = emc2103_update_device(dev);
313 struct i2c_client *client = to_i2c_client(dev); 314 struct i2c_client *client = data->client;
314 int new_range_bits, old_div = 8 / data->fan_multiplier; 315 int new_range_bits, old_div = 8 / data->fan_multiplier;
315 long new_div; 316 long new_div;
316 317
@@ -385,7 +386,7 @@ static ssize_t set_fan_target(struct device *dev, struct device_attribute *da,
385 const char *buf, size_t count) 386 const char *buf, size_t count)
386{ 387{
387 struct emc2103_data *data = emc2103_update_device(dev); 388 struct emc2103_data *data = emc2103_update_device(dev);
388 struct i2c_client *client = to_i2c_client(dev); 389 struct i2c_client *client = data->client;
389 unsigned long rpm_target; 390 unsigned long rpm_target;
390 391
391 int result = kstrtoul(buf, 10, &rpm_target); 392 int result = kstrtoul(buf, 10, &rpm_target);
@@ -428,8 +429,8 @@ show_pwm_enable(struct device *dev, struct device_attribute *da, char *buf)
428static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *da, 429static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *da,
429 const char *buf, size_t count) 430 const char *buf, size_t count)
430{ 431{
431 struct i2c_client *client = to_i2c_client(dev); 432 struct emc2103_data *data = dev_get_drvdata(dev);
432 struct emc2103_data *data = i2c_get_clientdata(client); 433 struct i2c_client *client = data->client;
433 long new_value; 434 long new_value;
434 u8 conf_reg; 435 u8 conf_reg;
435 436
@@ -580,7 +581,8 @@ static int
580emc2103_probe(struct i2c_client *client, const struct i2c_device_id *id) 581emc2103_probe(struct i2c_client *client, const struct i2c_device_id *id)
581{ 582{
582 struct emc2103_data *data; 583 struct emc2103_data *data;
583 int status; 584 struct device *hwmon_dev;
585 int status, idx = 0;
584 586
585 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 587 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
586 return -EIO; 588 return -EIO;
@@ -591,6 +593,7 @@ emc2103_probe(struct i2c_client *client, const struct i2c_device_id *id)
591 return -ENOMEM; 593 return -ENOMEM;
592 594
593 i2c_set_clientdata(client, data); 595 i2c_set_clientdata(client, data);
596 data->client = client;
594 mutex_init(&data->update_lock); 597 mutex_init(&data->update_lock);
595 598
596 /* 2103-2 and 2103-4 have 3 external diodes, 2103-1 has 1 */ 599 /* 2103-2 and 2103-4 have 3 external diodes, 2103-1 has 1 */
@@ -624,60 +627,21 @@ emc2103_probe(struct i2c_client *client, const struct i2c_device_id *id)
624 } 627 }
625 } 628 }
626 629
627 /* Register sysfs hooks */ 630 /* sysfs hooks */
628 status = sysfs_create_group(&client->dev.kobj, &emc2103_group); 631 data->groups[idx++] = &emc2103_group;
629 if (status)
630 return status;
631
632 if (data->temp_count >= 3) {
633 status = sysfs_create_group(&client->dev.kobj,
634 &emc2103_temp3_group);
635 if (status)
636 goto exit_remove;
637 }
638
639 if (data->temp_count == 4) {
640 status = sysfs_create_group(&client->dev.kobj,
641 &emc2103_temp4_group);
642 if (status)
643 goto exit_remove_temp3;
644 }
645
646 data->hwmon_dev = hwmon_device_register(&client->dev);
647 if (IS_ERR(data->hwmon_dev)) {
648 status = PTR_ERR(data->hwmon_dev);
649 goto exit_remove_temp4;
650 }
651
652 dev_info(&client->dev, "%s: sensor '%s'\n",
653 dev_name(data->hwmon_dev), client->name);
654
655 return 0;
656
657exit_remove_temp4:
658 if (data->temp_count == 4)
659 sysfs_remove_group(&client->dev.kobj, &emc2103_temp4_group);
660exit_remove_temp3:
661 if (data->temp_count >= 3) 632 if (data->temp_count >= 3)
662 sysfs_remove_group(&client->dev.kobj, &emc2103_temp3_group); 633 data->groups[idx++] = &emc2103_temp3_group;
663exit_remove:
664 sysfs_remove_group(&client->dev.kobj, &emc2103_group);
665 return status;
666}
667
668static int emc2103_remove(struct i2c_client *client)
669{
670 struct emc2103_data *data = i2c_get_clientdata(client);
671
672 hwmon_device_unregister(data->hwmon_dev);
673
674 if (data->temp_count == 4) 634 if (data->temp_count == 4)
675 sysfs_remove_group(&client->dev.kobj, &emc2103_temp4_group); 635 data->groups[idx++] = &emc2103_temp4_group;
676 636
677 if (data->temp_count >= 3) 637 hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev,
678 sysfs_remove_group(&client->dev.kobj, &emc2103_temp3_group); 638 client->name, data,
639 data->groups);
640 if (IS_ERR(hwmon_dev))
641 return PTR_ERR(hwmon_dev);
679 642
680 sysfs_remove_group(&client->dev.kobj, &emc2103_group); 643 dev_info(&client->dev, "%s: sensor '%s'\n",
644 dev_name(hwmon_dev), client->name);
681 645
682 return 0; 646 return 0;
683} 647}
@@ -717,7 +681,6 @@ static struct i2c_driver emc2103_driver = {
717 .name = "emc2103", 681 .name = "emc2103",
718 }, 682 },
719 .probe = emc2103_probe, 683 .probe = emc2103_probe,
720 .remove = emc2103_remove,
721 .id_table = emc2103_ids, 684 .id_table = emc2103_ids,
722 .detect = emc2103_detect, 685 .detect = emc2103_detect,
723 .address_list = normal_i2c, 686 .address_list = normal_i2c,
diff --git a/drivers/hwmon/emc6w201.c b/drivers/hwmon/emc6w201.c
index f76a74cb6dc4..e87da902f3ae 100644
--- a/drivers/hwmon/emc6w201.c
+++ b/drivers/hwmon/emc6w201.c
@@ -56,7 +56,7 @@ enum subfeature { input, min, max };
56 */ 56 */
57 57
58struct emc6w201_data { 58struct emc6w201_data {
59 struct device *hwmon_dev; 59 struct i2c_client *client;
60 struct mutex update_lock; 60 struct mutex update_lock;
61 char valid; /* zero until following fields are valid */ 61 char valid; /* zero until following fields are valid */
62 unsigned long last_updated; /* in jiffies */ 62 unsigned long last_updated; /* in jiffies */
@@ -134,8 +134,8 @@ static int emc6w201_write8(struct i2c_client *client, u8 reg, u8 val)
134 134
135static struct emc6w201_data *emc6w201_update_device(struct device *dev) 135static struct emc6w201_data *emc6w201_update_device(struct device *dev)
136{ 136{
137 struct i2c_client *client = to_i2c_client(dev); 137 struct emc6w201_data *data = dev_get_drvdata(dev);
138 struct emc6w201_data *data = i2c_get_clientdata(client); 138 struct i2c_client *client = data->client;
139 int nr; 139 int nr;
140 140
141 mutex_lock(&data->update_lock); 141 mutex_lock(&data->update_lock);
@@ -203,8 +203,8 @@ static ssize_t show_in(struct device *dev, struct device_attribute *devattr,
203static ssize_t set_in(struct device *dev, struct device_attribute *devattr, 203static ssize_t set_in(struct device *dev, struct device_attribute *devattr,
204 const char *buf, size_t count) 204 const char *buf, size_t count)
205{ 205{
206 struct i2c_client *client = to_i2c_client(dev); 206 struct emc6w201_data *data = dev_get_drvdata(dev);
207 struct emc6w201_data *data = i2c_get_clientdata(client); 207 struct i2c_client *client = data->client;
208 int sf = to_sensor_dev_attr_2(devattr)->index; 208 int sf = to_sensor_dev_attr_2(devattr)->index;
209 int nr = to_sensor_dev_attr_2(devattr)->nr; 209 int nr = to_sensor_dev_attr_2(devattr)->nr;
210 int err; 210 int err;
@@ -240,8 +240,8 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
240static ssize_t set_temp(struct device *dev, struct device_attribute *devattr, 240static ssize_t set_temp(struct device *dev, struct device_attribute *devattr,
241 const char *buf, size_t count) 241 const char *buf, size_t count)
242{ 242{
243 struct i2c_client *client = to_i2c_client(dev); 243 struct emc6w201_data *data = dev_get_drvdata(dev);
244 struct emc6w201_data *data = i2c_get_clientdata(client); 244 struct i2c_client *client = data->client;
245 int sf = to_sensor_dev_attr_2(devattr)->index; 245 int sf = to_sensor_dev_attr_2(devattr)->index;
246 int nr = to_sensor_dev_attr_2(devattr)->nr; 246 int nr = to_sensor_dev_attr_2(devattr)->nr;
247 int err; 247 int err;
@@ -283,8 +283,8 @@ static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
283static ssize_t set_fan(struct device *dev, struct device_attribute *devattr, 283static ssize_t set_fan(struct device *dev, struct device_attribute *devattr,
284 const char *buf, size_t count) 284 const char *buf, size_t count)
285{ 285{
286 struct i2c_client *client = to_i2c_client(dev); 286 struct emc6w201_data *data = dev_get_drvdata(dev);
287 struct emc6w201_data *data = i2c_get_clientdata(client); 287 struct i2c_client *client = data->client;
288 int sf = to_sensor_dev_attr_2(devattr)->index; 288 int sf = to_sensor_dev_attr_2(devattr)->index;
289 int nr = to_sensor_dev_attr_2(devattr)->nr; 289 int nr = to_sensor_dev_attr_2(devattr)->nr;
290 int err; 290 int err;
@@ -388,7 +388,7 @@ static SENSOR_DEVICE_ATTR_2(fan5_input, S_IRUGO, show_fan, NULL, 4, input);
388static SENSOR_DEVICE_ATTR_2(fan5_min, S_IRUGO | S_IWUSR, show_fan, set_fan, 388static SENSOR_DEVICE_ATTR_2(fan5_min, S_IRUGO | S_IWUSR, show_fan, set_fan,
389 4, min); 389 4, min);
390 390
391static struct attribute *emc6w201_attributes[] = { 391static struct attribute *emc6w201_attrs[] = {
392 &sensor_dev_attr_in0_input.dev_attr.attr, 392 &sensor_dev_attr_in0_input.dev_attr.attr,
393 &sensor_dev_attr_in0_min.dev_attr.attr, 393 &sensor_dev_attr_in0_min.dev_attr.attr,
394 &sensor_dev_attr_in0_max.dev_attr.attr, 394 &sensor_dev_attr_in0_max.dev_attr.attr,
@@ -440,9 +440,7 @@ static struct attribute *emc6w201_attributes[] = {
440 NULL 440 NULL
441}; 441};
442 442
443static const struct attribute_group emc6w201_group = { 443ATTRIBUTE_GROUPS(emc6w201);
444 .attrs = emc6w201_attributes,
445};
446 444
447/* 445/*
448 * Driver interface 446 * Driver interface
@@ -488,44 +486,21 @@ static int emc6w201_detect(struct i2c_client *client,
488static int emc6w201_probe(struct i2c_client *client, 486static int emc6w201_probe(struct i2c_client *client,
489 const struct i2c_device_id *id) 487 const struct i2c_device_id *id)
490{ 488{
489 struct device *dev = &client->dev;
491 struct emc6w201_data *data; 490 struct emc6w201_data *data;
492 int err; 491 struct device *hwmon_dev;
493 492
494 data = devm_kzalloc(&client->dev, sizeof(struct emc6w201_data), 493 data = devm_kzalloc(dev, sizeof(struct emc6w201_data), GFP_KERNEL);
495 GFP_KERNEL);
496 if (!data) 494 if (!data)
497 return -ENOMEM; 495 return -ENOMEM;
498 496
499 i2c_set_clientdata(client, data); 497 data->client = client;
500 mutex_init(&data->update_lock); 498 mutex_init(&data->update_lock);
501 499
502 /* Create sysfs attribute */ 500 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
503 err = sysfs_create_group(&client->dev.kobj, &emc6w201_group); 501 data,
504 if (err) 502 emc6w201_groups);
505 return err; 503 return PTR_ERR_OR_ZERO(hwmon_dev);
506
507 /* Expose as a hwmon device */
508 data->hwmon_dev = hwmon_device_register(&client->dev);
509 if (IS_ERR(data->hwmon_dev)) {
510 err = PTR_ERR(data->hwmon_dev);
511 goto exit_remove;
512 }
513
514 return 0;
515
516 exit_remove:
517 sysfs_remove_group(&client->dev.kobj, &emc6w201_group);
518 return err;
519}
520
521static int emc6w201_remove(struct i2c_client *client)
522{
523 struct emc6w201_data *data = i2c_get_clientdata(client);
524
525 hwmon_device_unregister(data->hwmon_dev);
526 sysfs_remove_group(&client->dev.kobj, &emc6w201_group);
527
528 return 0;
529} 504}
530 505
531static const struct i2c_device_id emc6w201_id[] = { 506static const struct i2c_device_id emc6w201_id[] = {
@@ -540,7 +515,6 @@ static struct i2c_driver emc6w201_driver = {
540 .name = "emc6w201", 515 .name = "emc6w201",
541 }, 516 },
542 .probe = emc6w201_probe, 517 .probe = emc6w201_probe,
543 .remove = emc6w201_remove,
544 .id_table = emc6w201_id, 518 .id_table = emc6w201_id,
545 .detect = emc6w201_detect, 519 .detect = emc6w201_detect,
546 .address_list = normal_i2c, 520 .address_list = normal_i2c,
diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c
index 6040121a405a..4a7cbfad1d74 100644
--- a/drivers/hwmon/fam15h_power.c
+++ b/drivers/hwmon/fam15h_power.c
@@ -31,9 +31,6 @@ MODULE_DESCRIPTION("AMD Family 15h CPU processor power monitor");
31MODULE_AUTHOR("Andreas Herrmann <herrmann.der.user@googlemail.com>"); 31MODULE_AUTHOR("Andreas Herrmann <herrmann.der.user@googlemail.com>");
32MODULE_LICENSE("GPL"); 32MODULE_LICENSE("GPL");
33 33
34/* Family 16h Northbridge's function 4 PCI ID */
35#define PCI_DEVICE_ID_AMD_16H_NB_F4 0x1534
36
37/* D18F3 */ 34/* D18F3 */
38#define REG_NORTHBRIDGE_CAP 0xe8 35#define REG_NORTHBRIDGE_CAP 0xe8
39 36
@@ -45,7 +42,7 @@ MODULE_LICENSE("GPL");
45#define REG_TDP_LIMIT3 0xe8 42#define REG_TDP_LIMIT3 0xe8
46 43
47struct fam15h_power_data { 44struct fam15h_power_data {
48 struct device *hwmon_dev; 45 struct pci_dev *pdev;
49 unsigned int tdp_to_watts; 46 unsigned int tdp_to_watts;
50 unsigned int base_tdp; 47 unsigned int base_tdp;
51 unsigned int processor_pwr_watts; 48 unsigned int processor_pwr_watts;
@@ -57,8 +54,8 @@ static ssize_t show_power(struct device *dev,
57 u32 val, tdp_limit, running_avg_range; 54 u32 val, tdp_limit, running_avg_range;
58 s32 running_avg_capture; 55 s32 running_avg_capture;
59 u64 curr_pwr_watts; 56 u64 curr_pwr_watts;
60 struct pci_dev *f4 = to_pci_dev(dev);
61 struct fam15h_power_data *data = dev_get_drvdata(dev); 57 struct fam15h_power_data *data = dev_get_drvdata(dev);
58 struct pci_dev *f4 = data->pdev;
62 59
63 pci_bus_read_config_dword(f4->bus, PCI_DEVFN(PCI_SLOT(f4->devfn), 5), 60 pci_bus_read_config_dword(f4->bus, PCI_DEVFN(PCI_SLOT(f4->devfn), 5),
64 REG_TDP_RUNNING_AVERAGE, &val); 61 REG_TDP_RUNNING_AVERAGE, &val);
@@ -96,23 +93,13 @@ static ssize_t show_power_crit(struct device *dev,
96} 93}
97static DEVICE_ATTR(power1_crit, S_IRUGO, show_power_crit, NULL); 94static DEVICE_ATTR(power1_crit, S_IRUGO, show_power_crit, NULL);
98 95
99static ssize_t show_name(struct device *dev,
100 struct device_attribute *attr, char *buf)
101{
102 return sprintf(buf, "fam15h_power\n");
103}
104static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
105
106static struct attribute *fam15h_power_attrs[] = { 96static struct attribute *fam15h_power_attrs[] = {
107 &dev_attr_power1_input.attr, 97 &dev_attr_power1_input.attr,
108 &dev_attr_power1_crit.attr, 98 &dev_attr_power1_crit.attr,
109 &dev_attr_name.attr,
110 NULL 99 NULL
111}; 100};
112 101
113static const struct attribute_group fam15h_power_attr_group = { 102ATTRIBUTE_GROUPS(fam15h_power);
114 .attrs = fam15h_power_attrs,
115};
116 103
117static bool fam15h_power_is_internal_node0(struct pci_dev *f4) 104static bool fam15h_power_is_internal_node0(struct pci_dev *f4)
118{ 105{
@@ -202,7 +189,7 @@ static int fam15h_power_probe(struct pci_dev *pdev,
202{ 189{
203 struct fam15h_power_data *data; 190 struct fam15h_power_data *data;
204 struct device *dev = &pdev->dev; 191 struct device *dev = &pdev->dev;
205 int err; 192 struct device *hwmon_dev;
206 193
207 /* 194 /*
208 * though we ignore every other northbridge, we still have to 195 * though we ignore every other northbridge, we still have to
@@ -219,34 +206,12 @@ static int fam15h_power_probe(struct pci_dev *pdev,
219 return -ENOMEM; 206 return -ENOMEM;
220 207
221 fam15h_power_init_data(pdev, data); 208 fam15h_power_init_data(pdev, data);
209 data->pdev = pdev;
222 210
223 dev_set_drvdata(dev, data); 211 hwmon_dev = devm_hwmon_device_register_with_groups(dev, "fam15h_power",
224 err = sysfs_create_group(&dev->kobj, &fam15h_power_attr_group); 212 data,
225 if (err) 213 fam15h_power_groups);
226 return err; 214 return PTR_ERR_OR_ZERO(hwmon_dev);
227
228 data->hwmon_dev = hwmon_device_register(dev);
229 if (IS_ERR(data->hwmon_dev)) {
230 err = PTR_ERR(data->hwmon_dev);
231 goto exit_remove_group;
232 }
233
234 return 0;
235
236exit_remove_group:
237 sysfs_remove_group(&dev->kobj, &fam15h_power_attr_group);
238 return err;
239}
240
241static void fam15h_power_remove(struct pci_dev *pdev)
242{
243 struct device *dev;
244 struct fam15h_power_data *data;
245
246 dev = &pdev->dev;
247 data = dev_get_drvdata(dev);
248 hwmon_device_unregister(data->hwmon_dev);
249 sysfs_remove_group(&dev->kobj, &fam15h_power_attr_group);
250} 215}
251 216
252static const struct pci_device_id fam15h_power_id_table[] = { 217static const struct pci_device_id fam15h_power_id_table[] = {
@@ -260,7 +225,6 @@ static struct pci_driver fam15h_power_driver = {
260 .name = "fam15h_power", 225 .name = "fam15h_power",
261 .id_table = fam15h_power_id_table, 226 .id_table = fam15h_power_id_table,
262 .probe = fam15h_power_probe, 227 .probe = fam15h_power_probe,
263 .remove = fam15h_power_remove,
264 .resume = fam15h_power_resume, 228 .resume = fam15h_power_resume,
265}; 229};
266 230
diff --git a/drivers/hwmon/g760a.c b/drivers/hwmon/g760a.c
index ea6480b80e7f..ec6a77da411a 100644
--- a/drivers/hwmon/g760a.c
+++ b/drivers/hwmon/g760a.c
@@ -24,12 +24,6 @@
24#include <linux/mutex.h> 24#include <linux/mutex.h>
25#include <linux/sysfs.h> 25#include <linux/sysfs.h>
26 26
27static const struct i2c_device_id g760a_id[] = {
28 { "g760a", 0 },
29 { }
30};
31MODULE_DEVICE_TABLE(i2c, g760a_id);
32
33enum g760a_regs { 27enum g760a_regs {
34 G760A_REG_SET_CNT = 0x00, 28 G760A_REG_SET_CNT = 0x00,
35 G760A_REG_ACT_CNT = 0x01, 29 G760A_REG_ACT_CNT = 0x01,
@@ -44,7 +38,6 @@ enum g760a_regs {
44 38
45struct g760a_data { 39struct g760a_data {
46 struct i2c_client *client; 40 struct i2c_client *client;
47 struct device *hwmon_dev;
48 struct mutex update_lock; 41 struct mutex update_lock;
49 42
50 /* board specific parameters */ 43 /* board specific parameters */
@@ -74,20 +67,6 @@ static inline unsigned int rpm_from_cnt(u8 val, u32 clk, u16 div)
74 return ((val == 0x00) ? 0 : ((clk*30)/(val*div))); 67 return ((val == 0x00) ? 0 : ((clk*30)/(val*div)));
75} 68}
76 69
77/* new-style driver model */
78static int g760a_probe(struct i2c_client *client,
79 const struct i2c_device_id *id);
80static int g760a_remove(struct i2c_client *client);
81
82static struct i2c_driver g760a_driver = {
83 .driver = {
84 .name = "g760a",
85 },
86 .probe = g760a_probe,
87 .remove = g760a_remove,
88 .id_table = g760a_id,
89};
90
91/* read/write wrappers */ 70/* read/write wrappers */
92static int g760a_read_value(struct i2c_client *client, enum g760a_regs reg) 71static int g760a_read_value(struct i2c_client *client, enum g760a_regs reg)
93{ 72{
@@ -106,8 +85,8 @@ static int g760a_write_value(struct i2c_client *client, enum g760a_regs reg,
106 85
107static struct g760a_data *g760a_update_client(struct device *dev) 86static struct g760a_data *g760a_update_client(struct device *dev)
108{ 87{
109 struct i2c_client *client = to_i2c_client(dev); 88 struct g760a_data *data = dev_get_drvdata(dev);
110 struct g760a_data *data = i2c_get_clientdata(client); 89 struct i2c_client *client = data->client;
111 90
112 mutex_lock(&data->update_lock); 91 mutex_lock(&data->update_lock);
113 92
@@ -163,8 +142,8 @@ static ssize_t get_pwm(struct device *dev, struct device_attribute *da,
163static ssize_t set_pwm(struct device *dev, struct device_attribute *da, 142static ssize_t set_pwm(struct device *dev, struct device_attribute *da,
164 const char *buf, size_t count) 143 const char *buf, size_t count)
165{ 144{
166 struct i2c_client *client = to_i2c_client(dev);
167 struct g760a_data *data = g760a_update_client(dev); 145 struct g760a_data *data = g760a_update_client(dev);
146 struct i2c_client *client = data->client;
168 unsigned long val; 147 unsigned long val;
169 148
170 if (kstrtoul(buf, 10, &val)) 149 if (kstrtoul(buf, 10, &val))
@@ -182,16 +161,14 @@ static DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, get_pwm, set_pwm);
182static DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL); 161static DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL);
183static DEVICE_ATTR(fan1_alarm, S_IRUGO, show_fan_alarm, NULL); 162static DEVICE_ATTR(fan1_alarm, S_IRUGO, show_fan_alarm, NULL);
184 163
185static struct attribute *g760a_attributes[] = { 164static struct attribute *g760a_attrs[] = {
186 &dev_attr_pwm1.attr, 165 &dev_attr_pwm1.attr,
187 &dev_attr_fan1_input.attr, 166 &dev_attr_fan1_input.attr,
188 &dev_attr_fan1_alarm.attr, 167 &dev_attr_fan1_alarm.attr,
189 NULL 168 NULL
190}; 169};
191 170
192static const struct attribute_group g760a_group = { 171ATTRIBUTE_GROUPS(g760a);
193 .attrs = g760a_attributes,
194};
195 172
196/* 173/*
197 * new-style driver model code 174 * new-style driver model code
@@ -200,20 +177,17 @@ static const struct attribute_group g760a_group = {
200static int g760a_probe(struct i2c_client *client, 177static int g760a_probe(struct i2c_client *client,
201 const struct i2c_device_id *id) 178 const struct i2c_device_id *id)
202{ 179{
180 struct device *dev = &client->dev;
203 struct g760a_data *data; 181 struct g760a_data *data;
204 int err; 182 struct device *hwmon_dev;
205 183
206 if (!i2c_check_functionality(client->adapter, 184 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
207 I2C_FUNC_SMBUS_BYTE_DATA))
208 return -EIO; 185 return -EIO;
209 186
210 data = devm_kzalloc(&client->dev, sizeof(struct g760a_data), 187 data = devm_kzalloc(dev, sizeof(struct g760a_data), GFP_KERNEL);
211 GFP_KERNEL);
212 if (!data) 188 if (!data)
213 return -ENOMEM; 189 return -ENOMEM;
214 190
215 i2c_set_clientdata(client, data);
216
217 data->client = client; 191 data->client = client;
218 mutex_init(&data->update_lock); 192 mutex_init(&data->update_lock);
219 193
@@ -221,31 +195,25 @@ static int g760a_probe(struct i2c_client *client,
221 data->fan_div = G760A_DEFAULT_FAN_DIV; 195 data->fan_div = G760A_DEFAULT_FAN_DIV;
222 data->clk = G760A_DEFAULT_CLK; 196 data->clk = G760A_DEFAULT_CLK;
223 197
224 /* Register sysfs hooks */ 198 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
225 err = sysfs_create_group(&client->dev.kobj, &g760a_group); 199 data,
226 if (err) 200 g760a_groups);
227 return err; 201 return PTR_ERR_OR_ZERO(hwmon_dev);
228
229 data->hwmon_dev = hwmon_device_register(&client->dev);
230 if (IS_ERR(data->hwmon_dev)) {
231 err = PTR_ERR(data->hwmon_dev);
232 goto error_hwmon_device_register;
233 }
234
235 return 0;
236
237error_hwmon_device_register:
238 sysfs_remove_group(&client->dev.kobj, &g760a_group);
239 return err;
240} 202}
241 203
242static int g760a_remove(struct i2c_client *client) 204static const struct i2c_device_id g760a_id[] = {
243{ 205 { "g760a", 0 },
244 struct g760a_data *data = i2c_get_clientdata(client); 206 { }
245 hwmon_device_unregister(data->hwmon_dev); 207};
246 sysfs_remove_group(&client->dev.kobj, &g760a_group); 208MODULE_DEVICE_TABLE(i2c, g760a_id);
247 return 0; 209
248} 210static struct i2c_driver g760a_driver = {
211 .driver = {
212 .name = "g760a",
213 },
214 .probe = g760a_probe,
215 .id_table = g760a_id,
216};
249 217
250module_i2c_driver(g760a_driver); 218module_i2c_driver(g760a_driver);
251 219
diff --git a/drivers/hwmon/g762.c b/drivers/hwmon/g762.c
index 98a8618d8fbf..6aac695b1688 100644
--- a/drivers/hwmon/g762.c
+++ b/drivers/hwmon/g762.c
@@ -128,8 +128,8 @@ enum g762_regs {
128 G762_REG_FAN_CMD2_GEAR_MODE_1)) >> 2)) 128 G762_REG_FAN_CMD2_GEAR_MODE_1)) >> 2))
129 129
130struct g762_data { 130struct g762_data {
131 struct i2c_client *client;
132 struct device *hwmon_dev; 131 struct device *hwmon_dev;
132 struct i2c_client *client;
133 struct clk *clk; 133 struct clk *clk;
134 134
135 /* update mutex */ 135 /* update mutex */
@@ -206,8 +206,8 @@ static inline unsigned char cnt_from_rpm(u32 rpm, u32 clk_freq, u16 p,
206/* helper to grab and cache data, at most one time per second */ 206/* helper to grab and cache data, at most one time per second */
207static struct g762_data *g762_update_client(struct device *dev) 207static struct g762_data *g762_update_client(struct device *dev)
208{ 208{
209 struct i2c_client *client = to_i2c_client(dev); 209 struct g762_data *data = dev_get_drvdata(dev);
210 struct g762_data *data = i2c_get_clientdata(client); 210 struct i2c_client *client = data->client;
211 int ret = 0; 211 int ret = 0;
212 212
213 mutex_lock(&data->update_lock); 213 mutex_lock(&data->update_lock);
@@ -266,8 +266,7 @@ static struct g762_data *g762_update_client(struct device *dev)
266 */ 266 */
267static int do_set_clk_freq(struct device *dev, unsigned long val) 267static int do_set_clk_freq(struct device *dev, unsigned long val)
268{ 268{
269 struct i2c_client *client = to_i2c_client(dev); 269 struct g762_data *data = dev_get_drvdata(dev);
270 struct g762_data *data = i2c_get_clientdata(client);
271 270
272 if (val > 0xffffff) 271 if (val > 0xffffff)
273 return -EINVAL; 272 return -EINVAL;
@@ -282,7 +281,6 @@ static int do_set_clk_freq(struct device *dev, unsigned long val)
282/* Set pwm mode. Accepts either 0 (PWM mode) or 1 (DC mode) */ 281/* Set pwm mode. Accepts either 0 (PWM mode) or 1 (DC mode) */
283static int do_set_pwm_mode(struct device *dev, unsigned long val) 282static int do_set_pwm_mode(struct device *dev, unsigned long val)
284{ 283{
285 struct i2c_client *client = to_i2c_client(dev);
286 struct g762_data *data = g762_update_client(dev); 284 struct g762_data *data = g762_update_client(dev);
287 int ret; 285 int ret;
288 286
@@ -301,7 +299,7 @@ static int do_set_pwm_mode(struct device *dev, unsigned long val)
301 ret = -EINVAL; 299 ret = -EINVAL;
302 goto out; 300 goto out;
303 } 301 }
304 ret = i2c_smbus_write_byte_data(client, G762_REG_FAN_CMD1, 302 ret = i2c_smbus_write_byte_data(data->client, G762_REG_FAN_CMD1,
305 data->fan_cmd1); 303 data->fan_cmd1);
306 data->valid = false; 304 data->valid = false;
307 out: 305 out:
@@ -313,7 +311,6 @@ static int do_set_pwm_mode(struct device *dev, unsigned long val)
313/* Set fan clock divisor. Accepts either 1, 2, 4 or 8. */ 311/* Set fan clock divisor. Accepts either 1, 2, 4 or 8. */
314static int do_set_fan_div(struct device *dev, unsigned long val) 312static int do_set_fan_div(struct device *dev, unsigned long val)
315{ 313{
316 struct i2c_client *client = to_i2c_client(dev);
317 struct g762_data *data = g762_update_client(dev); 314 struct g762_data *data = g762_update_client(dev);
318 int ret; 315 int ret;
319 316
@@ -342,7 +339,7 @@ static int do_set_fan_div(struct device *dev, unsigned long val)
342 ret = -EINVAL; 339 ret = -EINVAL;
343 goto out; 340 goto out;
344 } 341 }
345 ret = i2c_smbus_write_byte_data(client, G762_REG_FAN_CMD1, 342 ret = i2c_smbus_write_byte_data(data->client, G762_REG_FAN_CMD1,
346 data->fan_cmd1); 343 data->fan_cmd1);
347 data->valid = false; 344 data->valid = false;
348 out: 345 out:
@@ -354,7 +351,6 @@ static int do_set_fan_div(struct device *dev, unsigned long val)
354/* Set fan gear mode. Accepts either 0, 1 or 2. */ 351/* Set fan gear mode. Accepts either 0, 1 or 2. */
355static int do_set_fan_gear_mode(struct device *dev, unsigned long val) 352static int do_set_fan_gear_mode(struct device *dev, unsigned long val)
356{ 353{
357 struct i2c_client *client = to_i2c_client(dev);
358 struct g762_data *data = g762_update_client(dev); 354 struct g762_data *data = g762_update_client(dev);
359 int ret; 355 int ret;
360 356
@@ -379,7 +375,7 @@ static int do_set_fan_gear_mode(struct device *dev, unsigned long val)
379 ret = -EINVAL; 375 ret = -EINVAL;
380 goto out; 376 goto out;
381 } 377 }
382 ret = i2c_smbus_write_byte_data(client, G762_REG_FAN_CMD2, 378 ret = i2c_smbus_write_byte_data(data->client, G762_REG_FAN_CMD2,
383 data->fan_cmd2); 379 data->fan_cmd2);
384 data->valid = false; 380 data->valid = false;
385 out: 381 out:
@@ -391,7 +387,6 @@ static int do_set_fan_gear_mode(struct device *dev, unsigned long val)
391/* Set number of fan pulses per revolution. Accepts either 2 or 4. */ 387/* Set number of fan pulses per revolution. Accepts either 2 or 4. */
392static int do_set_fan_pulses(struct device *dev, unsigned long val) 388static int do_set_fan_pulses(struct device *dev, unsigned long val)
393{ 389{
394 struct i2c_client *client = to_i2c_client(dev);
395 struct g762_data *data = g762_update_client(dev); 390 struct g762_data *data = g762_update_client(dev);
396 int ret; 391 int ret;
397 392
@@ -410,7 +405,7 @@ static int do_set_fan_pulses(struct device *dev, unsigned long val)
410 ret = -EINVAL; 405 ret = -EINVAL;
411 goto out; 406 goto out;
412 } 407 }
413 ret = i2c_smbus_write_byte_data(client, G762_REG_FAN_CMD1, 408 ret = i2c_smbus_write_byte_data(data->client, G762_REG_FAN_CMD1,
414 data->fan_cmd1); 409 data->fan_cmd1);
415 data->valid = false; 410 data->valid = false;
416 out: 411 out:
@@ -422,7 +417,6 @@ static int do_set_fan_pulses(struct device *dev, unsigned long val)
422/* Set fan mode. Accepts either 1 (open-loop) or 2 (closed-loop). */ 417/* Set fan mode. Accepts either 1 (open-loop) or 2 (closed-loop). */
423static int do_set_pwm_enable(struct device *dev, unsigned long val) 418static int do_set_pwm_enable(struct device *dev, unsigned long val)
424{ 419{
425 struct i2c_client *client = to_i2c_client(dev);
426 struct g762_data *data = g762_update_client(dev); 420 struct g762_data *data = g762_update_client(dev);
427 int ret; 421 int ret;
428 422
@@ -444,15 +438,15 @@ static int do_set_pwm_enable(struct device *dev, unsigned long val)
444 * value of 254 if it is 255 when switching to open-loop. 438 * value of 254 if it is 255 when switching to open-loop.
445 */ 439 */
446 if (data->set_cnt == 0xff) 440 if (data->set_cnt == 0xff)
447 i2c_smbus_write_byte_data(client, G762_REG_SET_CNT, 441 i2c_smbus_write_byte_data(data->client,
448 254); 442 G762_REG_SET_CNT, 254);
449 break; 443 break;
450 default: 444 default:
451 ret = -EINVAL; 445 ret = -EINVAL;
452 goto out; 446 goto out;
453 } 447 }
454 448
455 ret = i2c_smbus_write_byte_data(client, G762_REG_FAN_CMD1, 449 ret = i2c_smbus_write_byte_data(data->client, G762_REG_FAN_CMD1,
456 data->fan_cmd1); 450 data->fan_cmd1);
457 data->valid = false; 451 data->valid = false;
458 out: 452 out:
@@ -464,7 +458,6 @@ static int do_set_pwm_enable(struct device *dev, unsigned long val)
464/* Set PWM polarity. Accepts either 0 (positive duty) or 1 (negative duty) */ 458/* Set PWM polarity. Accepts either 0 (positive duty) or 1 (negative duty) */
465static int do_set_pwm_polarity(struct device *dev, unsigned long val) 459static int do_set_pwm_polarity(struct device *dev, unsigned long val)
466{ 460{
467 struct i2c_client *client = to_i2c_client(dev);
468 struct g762_data *data = g762_update_client(dev); 461 struct g762_data *data = g762_update_client(dev);
469 int ret; 462 int ret;
470 463
@@ -483,7 +476,7 @@ static int do_set_pwm_polarity(struct device *dev, unsigned long val)
483 ret = -EINVAL; 476 ret = -EINVAL;
484 goto out; 477 goto out;
485 } 478 }
486 ret = i2c_smbus_write_byte_data(client, G762_REG_FAN_CMD1, 479 ret = i2c_smbus_write_byte_data(data->client, G762_REG_FAN_CMD1,
487 data->fan_cmd1); 480 data->fan_cmd1);
488 data->valid = false; 481 data->valid = false;
489 out: 482 out:
@@ -498,8 +491,8 @@ static int do_set_pwm_polarity(struct device *dev, unsigned long val)
498 */ 491 */
499static int do_set_pwm(struct device *dev, unsigned long val) 492static int do_set_pwm(struct device *dev, unsigned long val)
500{ 493{
501 struct i2c_client *client = to_i2c_client(dev); 494 struct g762_data *data = dev_get_drvdata(dev);
502 struct g762_data *data = i2c_get_clientdata(client); 495 struct i2c_client *client = data->client;
503 int ret; 496 int ret;
504 497
505 if (val > 255) 498 if (val > 255)
@@ -519,7 +512,6 @@ static int do_set_pwm(struct device *dev, unsigned long val)
519 */ 512 */
520static int do_set_fan_target(struct device *dev, unsigned long val) 513static int do_set_fan_target(struct device *dev, unsigned long val)
521{ 514{
522 struct i2c_client *client = to_i2c_client(dev);
523 struct g762_data *data = g762_update_client(dev); 515 struct g762_data *data = g762_update_client(dev);
524 int ret; 516 int ret;
525 517
@@ -531,7 +523,7 @@ static int do_set_fan_target(struct device *dev, unsigned long val)
531 G762_PULSE_FROM_REG(data->fan_cmd1), 523 G762_PULSE_FROM_REG(data->fan_cmd1),
532 G762_CLKDIV_FROM_REG(data->fan_cmd1), 524 G762_CLKDIV_FROM_REG(data->fan_cmd1),
533 G762_GEARMULT_FROM_REG(data->fan_cmd2)); 525 G762_GEARMULT_FROM_REG(data->fan_cmd2));
534 ret = i2c_smbus_write_byte_data(client, G762_REG_SET_CNT, 526 ret = i2c_smbus_write_byte_data(data->client, G762_REG_SET_CNT,
535 data->set_cnt); 527 data->set_cnt);
536 data->valid = false; 528 data->valid = false;
537 mutex_unlock(&data->update_lock); 529 mutex_unlock(&data->update_lock);
@@ -542,7 +534,6 @@ static int do_set_fan_target(struct device *dev, unsigned long val)
542/* Set fan startup voltage. Accepted values are either 0, 1, 2 or 3. */ 534/* Set fan startup voltage. Accepted values are either 0, 1, 2 or 3. */
543static int do_set_fan_startv(struct device *dev, unsigned long val) 535static int do_set_fan_startv(struct device *dev, unsigned long val)
544{ 536{
545 struct i2c_client *client = to_i2c_client(dev);
546 struct g762_data *data = g762_update_client(dev); 537 struct g762_data *data = g762_update_client(dev);
547 int ret; 538 int ret;
548 539
@@ -571,7 +562,7 @@ static int do_set_fan_startv(struct device *dev, unsigned long val)
571 ret = -EINVAL; 562 ret = -EINVAL;
572 goto out; 563 goto out;
573 } 564 }
574 ret = i2c_smbus_write_byte_data(client, G762_REG_FAN_CMD2, 565 ret = i2c_smbus_write_byte_data(data->client, G762_REG_FAN_CMD2,
575 data->fan_cmd2); 566 data->fan_cmd2);
576 data->valid = false; 567 data->valid = false;
577 out: 568 out:
@@ -658,15 +649,12 @@ static int g762_of_prop_import_one(struct i2c_client *client,
658 int (*psetter)(struct device *dev, 649 int (*psetter)(struct device *dev,
659 unsigned long val)) 650 unsigned long val))
660{ 651{
661 const __be32 *prop; 652 int ret;
662 int len, ret;
663 u32 pval; 653 u32 pval;
664 654
665 prop = of_get_property(client->dev.of_node, pname, &len); 655 if (of_property_read_u32(client->dev.of_node, pname, &pval))
666 if (!prop || len != sizeof(u32))
667 return 0; 656 return 0;
668 657
669 pval = be32_to_cpu(prop[0]);
670 dev_dbg(&client->dev, "found %s (%d)\n", pname, pval); 658 dev_dbg(&client->dev, "found %s (%d)\n", pname, pval);
671 ret = (*psetter)(&client->dev, pval); 659 ret = (*psetter)(&client->dev, pval);
672 if (ret) 660 if (ret)
@@ -1026,7 +1014,7 @@ static DEVICE_ATTR(fan1_pulses, S_IWUSR | S_IRUGO,
1026 get_fan_pulses, set_fan_pulses); 1014 get_fan_pulses, set_fan_pulses);
1027 1015
1028/* Driver data */ 1016/* Driver data */
1029static struct attribute *g762_attributes[] = { 1017static struct attribute *g762_attrs[] = {
1030 &dev_attr_fan1_input.attr, 1018 &dev_attr_fan1_input.attr,
1031 &dev_attr_fan1_alarm.attr, 1019 &dev_attr_fan1_alarm.attr,
1032 &dev_attr_fan1_fault.attr, 1020 &dev_attr_fan1_fault.attr,
@@ -1039,9 +1027,7 @@ static struct attribute *g762_attributes[] = {
1039 NULL 1027 NULL
1040}; 1028};
1041 1029
1042static const struct attribute_group g762_group = { 1030ATTRIBUTE_GROUPS(g762);
1043 .attrs = g762_attributes,
1044};
1045 1031
1046/* 1032/*
1047 * Enable both fan failure detection and fan out of control protection. The 1033 * Enable both fan failure detection and fan out of control protection. The
@@ -1050,7 +1036,6 @@ static const struct attribute_group g762_group = {
1050 */ 1036 */
1051static inline int g762_fan_init(struct device *dev) 1037static inline int g762_fan_init(struct device *dev)
1052{ 1038{
1053 struct i2c_client *client = to_i2c_client(dev);
1054 struct g762_data *data = g762_update_client(dev); 1039 struct g762_data *data = g762_update_client(dev);
1055 1040
1056 if (IS_ERR(data)) 1041 if (IS_ERR(data))
@@ -1060,12 +1045,13 @@ static inline int g762_fan_init(struct device *dev)
1060 data->fan_cmd1 |= G762_REG_FAN_CMD1_DET_FAN_OOC; 1045 data->fan_cmd1 |= G762_REG_FAN_CMD1_DET_FAN_OOC;
1061 data->valid = false; 1046 data->valid = false;
1062 1047
1063 return i2c_smbus_write_byte_data(client, G762_REG_FAN_CMD1, 1048 return i2c_smbus_write_byte_data(data->client, G762_REG_FAN_CMD1,
1064 data->fan_cmd1); 1049 data->fan_cmd1);
1065} 1050}
1066 1051
1067static int g762_probe(struct i2c_client *client, const struct i2c_device_id *id) 1052static int g762_probe(struct i2c_client *client, const struct i2c_device_id *id)
1068{ 1053{
1054 struct device *dev = &client->dev;
1069 struct g762_data *data; 1055 struct g762_data *data;
1070 int ret; 1056 int ret;
1071 1057
@@ -1073,7 +1059,7 @@ static int g762_probe(struct i2c_client *client, const struct i2c_device_id *id)
1073 I2C_FUNC_SMBUS_BYTE_DATA)) 1059 I2C_FUNC_SMBUS_BYTE_DATA))
1074 return -ENODEV; 1060 return -ENODEV;
1075 1061
1076 data = devm_kzalloc(&client->dev, sizeof(struct g762_data), GFP_KERNEL); 1062 data = devm_kzalloc(dev, sizeof(struct g762_data), GFP_KERNEL);
1077 if (!data) 1063 if (!data)
1078 return -ENOMEM; 1064 return -ENOMEM;
1079 1065
@@ -1082,7 +1068,7 @@ static int g762_probe(struct i2c_client *client, const struct i2c_device_id *id)
1082 mutex_init(&data->update_lock); 1068 mutex_init(&data->update_lock);
1083 1069
1084 /* Enable fan failure detection and fan out of control protection */ 1070 /* Enable fan failure detection and fan out of control protection */
1085 ret = g762_fan_init(&client->dev); 1071 ret = g762_fan_init(dev);
1086 if (ret) 1072 if (ret)
1087 return ret; 1073 return ret;
1088 1074
@@ -1098,22 +1084,17 @@ static int g762_probe(struct i2c_client *client, const struct i2c_device_id *id)
1098 if (ret) 1084 if (ret)
1099 goto clock_dis; 1085 goto clock_dis;
1100 1086
1101 /* Register sysfs hooks */ 1087 data->hwmon_dev = devm_hwmon_device_register_with_groups(dev,
1102 ret = sysfs_create_group(&client->dev.kobj, &g762_group); 1088 client->name,
1103 if (ret) 1089 data,
1104 goto clock_dis; 1090 g762_groups);
1105
1106 data->hwmon_dev = hwmon_device_register(&client->dev);
1107 if (IS_ERR(data->hwmon_dev)) { 1091 if (IS_ERR(data->hwmon_dev)) {
1108 ret = PTR_ERR(data->hwmon_dev); 1092 ret = PTR_ERR(data->hwmon_dev);
1109 goto sysfs_rem; 1093 goto clock_dis;
1110 } 1094 }
1111 1095
1112 return 0; 1096 return 0;
1113 1097
1114 sysfs_rem:
1115 sysfs_remove_group(&client->dev.kobj, &g762_group);
1116
1117 clock_dis: 1098 clock_dis:
1118 g762_of_clock_disable(client); 1099 g762_of_clock_disable(client);
1119 1100
@@ -1125,7 +1106,6 @@ static int g762_remove(struct i2c_client *client)
1125 struct g762_data *data = i2c_get_clientdata(client); 1106 struct g762_data *data = i2c_get_clientdata(client);
1126 1107
1127 hwmon_device_unregister(data->hwmon_dev); 1108 hwmon_device_unregister(data->hwmon_dev);
1128 sysfs_remove_group(&client->dev.kobj, &g762_group);
1129 g762_of_clock_disable(client); 1109 g762_of_clock_disable(client);
1130 1110
1131 return 0; 1111 return 0;
diff --git a/drivers/hwmon/gl518sm.c b/drivers/hwmon/gl518sm.c
index 1e9830513045..0212c8317bca 100644
--- a/drivers/hwmon/gl518sm.c
+++ b/drivers/hwmon/gl518sm.c
@@ -114,7 +114,8 @@ static inline u8 FAN_TO_REG(long rpm, int div)
114 114
115/* Each client has this additional data */ 115/* Each client has this additional data */
116struct gl518_data { 116struct gl518_data {
117 struct device *hwmon_dev; 117 struct i2c_client *client;
118 const struct attribute_group *groups[3];
118 enum chips type; 119 enum chips type;
119 120
120 struct mutex update_lock; 121 struct mutex update_lock;
@@ -137,33 +138,98 @@ struct gl518_data {
137 u8 beep_enable; /* Boolean */ 138 u8 beep_enable; /* Boolean */
138}; 139};
139 140
140static int gl518_probe(struct i2c_client *client, 141/*
141 const struct i2c_device_id *id); 142 * Registers 0x07 to 0x0c are word-sized, others are byte-sized
142static int gl518_detect(struct i2c_client *client, struct i2c_board_info *info); 143 * GL518 uses a high-byte first convention, which is exactly opposite to
143static void gl518_init_client(struct i2c_client *client); 144 * the SMBus standard.
144static int gl518_remove(struct i2c_client *client); 145 */
145static int gl518_read_value(struct i2c_client *client, u8 reg); 146static int gl518_read_value(struct i2c_client *client, u8 reg)
146static int gl518_write_value(struct i2c_client *client, u8 reg, u16 value); 147{
147static struct gl518_data *gl518_update_device(struct device *dev); 148 if ((reg >= 0x07) && (reg <= 0x0c))
149 return i2c_smbus_read_word_swapped(client, reg);
150 else
151 return i2c_smbus_read_byte_data(client, reg);
152}
148 153
149static const struct i2c_device_id gl518_id[] = { 154static int gl518_write_value(struct i2c_client *client, u8 reg, u16 value)
150 { "gl518sm", 0 }, 155{
151 { } 156 if ((reg >= 0x07) && (reg <= 0x0c))
152}; 157 return i2c_smbus_write_word_swapped(client, reg, value);
153MODULE_DEVICE_TABLE(i2c, gl518_id); 158 else
159 return i2c_smbus_write_byte_data(client, reg, value);
160}
154 161
155/* This is the driver that will be inserted */ 162static struct gl518_data *gl518_update_device(struct device *dev)
156static struct i2c_driver gl518_driver = { 163{
157 .class = I2C_CLASS_HWMON, 164 struct gl518_data *data = dev_get_drvdata(dev);
158 .driver = { 165 struct i2c_client *client = data->client;
159 .name = "gl518sm", 166 int val;
160 }, 167
161 .probe = gl518_probe, 168 mutex_lock(&data->update_lock);
162 .remove = gl518_remove, 169
163 .id_table = gl518_id, 170 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
164 .detect = gl518_detect, 171 || !data->valid) {
165 .address_list = normal_i2c, 172 dev_dbg(&client->dev, "Starting gl518 update\n");
166}; 173
174 data->alarms = gl518_read_value(client, GL518_REG_INT);
175 data->beep_mask = gl518_read_value(client, GL518_REG_ALARM);
176
177 val = gl518_read_value(client, GL518_REG_VDD_LIMIT);
178 data->voltage_min[0] = val & 0xff;
179 data->voltage_max[0] = (val >> 8) & 0xff;
180 val = gl518_read_value(client, GL518_REG_VIN1_LIMIT);
181 data->voltage_min[1] = val & 0xff;
182 data->voltage_max[1] = (val >> 8) & 0xff;
183 val = gl518_read_value(client, GL518_REG_VIN2_LIMIT);
184 data->voltage_min[2] = val & 0xff;
185 data->voltage_max[2] = (val >> 8) & 0xff;
186 val = gl518_read_value(client, GL518_REG_VIN3_LIMIT);
187 data->voltage_min[3] = val & 0xff;
188 data->voltage_max[3] = (val >> 8) & 0xff;
189
190 val = gl518_read_value(client, GL518_REG_FAN_COUNT);
191 data->fan_in[0] = (val >> 8) & 0xff;
192 data->fan_in[1] = val & 0xff;
193
194 val = gl518_read_value(client, GL518_REG_FAN_LIMIT);
195 data->fan_min[0] = (val >> 8) & 0xff;
196 data->fan_min[1] = val & 0xff;
197
198 data->temp_in = gl518_read_value(client, GL518_REG_TEMP_IN);
199 data->temp_max =
200 gl518_read_value(client, GL518_REG_TEMP_MAX);
201 data->temp_hyst =
202 gl518_read_value(client, GL518_REG_TEMP_HYST);
203
204 val = gl518_read_value(client, GL518_REG_MISC);
205 data->fan_div[0] = (val >> 6) & 0x03;
206 data->fan_div[1] = (val >> 4) & 0x03;
207 data->fan_auto1 = (val >> 3) & 0x01;
208
209 data->alarms &= data->alarm_mask;
210
211 val = gl518_read_value(client, GL518_REG_CONF);
212 data->beep_enable = (val >> 2) & 1;
213
214 if (data->type != gl518sm_r00) {
215 data->voltage_in[0] =
216 gl518_read_value(client, GL518_REG_VDD);
217 data->voltage_in[1] =
218 gl518_read_value(client, GL518_REG_VIN1);
219 data->voltage_in[2] =
220 gl518_read_value(client, GL518_REG_VIN2);
221 }
222 data->voltage_in[3] =
223 gl518_read_value(client, GL518_REG_VIN3);
224
225 data->last_updated = jiffies;
226 data->valid = 1;
227 }
228
229 mutex_unlock(&data->update_lock);
230
231 return data;
232}
167 233
168/* 234/*
169 * Sysfs stuff 235 * Sysfs stuff
@@ -228,8 +294,8 @@ static ssize_t set_##suffix(struct device *dev, \
228 struct device_attribute *attr, \ 294 struct device_attribute *attr, \
229 const char *buf, size_t count) \ 295 const char *buf, size_t count) \
230{ \ 296{ \
231 struct i2c_client *client = to_i2c_client(dev); \ 297 struct gl518_data *data = dev_get_drvdata(dev); \
232 struct gl518_data *data = i2c_get_clientdata(client); \ 298 struct i2c_client *client = data->client; \
233 long val; \ 299 long val; \
234 int err = kstrtol(buf, 10, &val); \ 300 int err = kstrtol(buf, 10, &val); \
235 if (err) \ 301 if (err) \
@@ -247,8 +313,8 @@ static ssize_t set_##suffix(struct device *dev, \
247 struct device_attribute *attr, \ 313 struct device_attribute *attr, \
248 const char *buf, size_t count) \ 314 const char *buf, size_t count) \
249{ \ 315{ \
250 struct i2c_client *client = to_i2c_client(dev); \ 316 struct gl518_data *data = dev_get_drvdata(dev); \
251 struct gl518_data *data = i2c_get_clientdata(client); \ 317 struct i2c_client *client = data->client; \
252 int regvalue; \ 318 int regvalue; \
253 unsigned long val; \ 319 unsigned long val; \
254 int err = kstrtoul(buf, 10, &val); \ 320 int err = kstrtoul(buf, 10, &val); \
@@ -286,8 +352,8 @@ set(BEEP_MASK, beep_mask, beep_mask, GL518_REG_ALARM);
286static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 352static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
287 const char *buf, size_t count) 353 const char *buf, size_t count)
288{ 354{
289 struct i2c_client *client = to_i2c_client(dev); 355 struct gl518_data *data = dev_get_drvdata(dev);
290 struct gl518_data *data = i2c_get_clientdata(client); 356 struct i2c_client *client = data->client;
291 int nr = to_sensor_dev_attr(attr)->index; 357 int nr = to_sensor_dev_attr(attr)->index;
292 int regvalue; 358 int regvalue;
293 unsigned long val; 359 unsigned long val;
@@ -319,8 +385,8 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
319static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 385static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
320 const char *buf, size_t count) 386 const char *buf, size_t count)
321{ 387{
322 struct i2c_client *client = to_i2c_client(dev); 388 struct gl518_data *data = dev_get_drvdata(dev);
323 struct gl518_data *data = i2c_get_clientdata(client); 389 struct i2c_client *client = data->client;
324 int nr = to_sensor_dev_attr(attr)->index; 390 int nr = to_sensor_dev_attr(attr)->index;
325 int regvalue; 391 int regvalue;
326 unsigned long val; 392 unsigned long val;
@@ -420,8 +486,8 @@ static ssize_t show_beep(struct device *dev, struct device_attribute *attr,
420static ssize_t set_beep(struct device *dev, struct device_attribute *attr, 486static ssize_t set_beep(struct device *dev, struct device_attribute *attr,
421 const char *buf, size_t count) 487 const char *buf, size_t count)
422{ 488{
423 struct i2c_client *client = to_i2c_client(dev); 489 struct gl518_data *data = dev_get_drvdata(dev);
424 struct gl518_data *data = i2c_get_clientdata(client); 490 struct i2c_client *client = data->client;
425 int bitnr = to_sensor_dev_attr(attr)->index; 491 int bitnr = to_sensor_dev_attr(attr)->index;
426 unsigned long bit; 492 unsigned long bit;
427 int err; 493 int err;
@@ -539,52 +605,6 @@ static int gl518_detect(struct i2c_client *client, struct i2c_board_info *info)
539 return 0; 605 return 0;
540} 606}
541 607
542static int gl518_probe(struct i2c_client *client,
543 const struct i2c_device_id *id)
544{
545 struct gl518_data *data;
546 int err, revision;
547
548 data = devm_kzalloc(&client->dev, sizeof(struct gl518_data),
549 GFP_KERNEL);
550 if (!data)
551 return -ENOMEM;
552
553 i2c_set_clientdata(client, data);
554 revision = gl518_read_value(client, GL518_REG_REVISION);
555 data->type = revision == 0x80 ? gl518sm_r80 : gl518sm_r00;
556 mutex_init(&data->update_lock);
557
558 /* Initialize the GL518SM chip */
559 data->alarm_mask = 0xff;
560 gl518_init_client(client);
561
562 /* Register sysfs hooks */
563 err = sysfs_create_group(&client->dev.kobj, &gl518_group);
564 if (err)
565 return err;
566 if (data->type == gl518sm_r80) {
567 err = sysfs_create_group(&client->dev.kobj, &gl518_group_r80);
568 if (err)
569 goto exit_remove_files;
570 }
571
572 data->hwmon_dev = hwmon_device_register(&client->dev);
573 if (IS_ERR(data->hwmon_dev)) {
574 err = PTR_ERR(data->hwmon_dev);
575 goto exit_remove_files;
576 }
577
578 return 0;
579
580exit_remove_files:
581 sysfs_remove_group(&client->dev.kobj, &gl518_group);
582 if (data->type == gl518sm_r80)
583 sysfs_remove_group(&client->dev.kobj, &gl518_group_r80);
584 return err;
585}
586
587
588/* 608/*
589 * Called when we have found a new GL518SM. 609 * Called when we have found a new GL518SM.
590 * Note that we preserve D4:NoFan2 and D2:beep_enable. 610 * Note that we preserve D4:NoFan2 and D2:beep_enable.
@@ -605,110 +625,53 @@ static void gl518_init_client(struct i2c_client *client)
605 gl518_write_value(client, GL518_REG_CONF, 0x40 | regvalue); 625 gl518_write_value(client, GL518_REG_CONF, 0x40 | regvalue);
606} 626}
607 627
608static int gl518_remove(struct i2c_client *client) 628static int gl518_probe(struct i2c_client *client,
609{ 629 const struct i2c_device_id *id)
610 struct gl518_data *data = i2c_get_clientdata(client);
611
612 hwmon_device_unregister(data->hwmon_dev);
613 sysfs_remove_group(&client->dev.kobj, &gl518_group);
614 if (data->type == gl518sm_r80)
615 sysfs_remove_group(&client->dev.kobj, &gl518_group_r80);
616
617 return 0;
618}
619
620/*
621 * Registers 0x07 to 0x0c are word-sized, others are byte-sized
622 * GL518 uses a high-byte first convention, which is exactly opposite to
623 * the SMBus standard.
624 */
625static int gl518_read_value(struct i2c_client *client, u8 reg)
626{
627 if ((reg >= 0x07) && (reg <= 0x0c))
628 return i2c_smbus_read_word_swapped(client, reg);
629 else
630 return i2c_smbus_read_byte_data(client, reg);
631}
632
633static int gl518_write_value(struct i2c_client *client, u8 reg, u16 value)
634{
635 if ((reg >= 0x07) && (reg <= 0x0c))
636 return i2c_smbus_write_word_swapped(client, reg, value);
637 else
638 return i2c_smbus_write_byte_data(client, reg, value);
639}
640
641static struct gl518_data *gl518_update_device(struct device *dev)
642{ 630{
643 struct i2c_client *client = to_i2c_client(dev); 631 struct device *dev = &client->dev;
644 struct gl518_data *data = i2c_get_clientdata(client); 632 struct device *hwmon_dev;
645 int val; 633 struct gl518_data *data;
646 634 int revision;
647 mutex_lock(&data->update_lock);
648
649 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
650 || !data->valid) {
651 dev_dbg(&client->dev, "Starting gl518 update\n");
652
653 data->alarms = gl518_read_value(client, GL518_REG_INT);
654 data->beep_mask = gl518_read_value(client, GL518_REG_ALARM);
655
656 val = gl518_read_value(client, GL518_REG_VDD_LIMIT);
657 data->voltage_min[0] = val & 0xff;
658 data->voltage_max[0] = (val >> 8) & 0xff;
659 val = gl518_read_value(client, GL518_REG_VIN1_LIMIT);
660 data->voltage_min[1] = val & 0xff;
661 data->voltage_max[1] = (val >> 8) & 0xff;
662 val = gl518_read_value(client, GL518_REG_VIN2_LIMIT);
663 data->voltage_min[2] = val & 0xff;
664 data->voltage_max[2] = (val >> 8) & 0xff;
665 val = gl518_read_value(client, GL518_REG_VIN3_LIMIT);
666 data->voltage_min[3] = val & 0xff;
667 data->voltage_max[3] = (val >> 8) & 0xff;
668
669 val = gl518_read_value(client, GL518_REG_FAN_COUNT);
670 data->fan_in[0] = (val >> 8) & 0xff;
671 data->fan_in[1] = val & 0xff;
672
673 val = gl518_read_value(client, GL518_REG_FAN_LIMIT);
674 data->fan_min[0] = (val >> 8) & 0xff;
675 data->fan_min[1] = val & 0xff;
676
677 data->temp_in = gl518_read_value(client, GL518_REG_TEMP_IN);
678 data->temp_max =
679 gl518_read_value(client, GL518_REG_TEMP_MAX);
680 data->temp_hyst =
681 gl518_read_value(client, GL518_REG_TEMP_HYST);
682 635
683 val = gl518_read_value(client, GL518_REG_MISC); 636 data = devm_kzalloc(dev, sizeof(struct gl518_data), GFP_KERNEL);
684 data->fan_div[0] = (val >> 6) & 0x03; 637 if (!data)
685 data->fan_div[1] = (val >> 4) & 0x03; 638 return -ENOMEM;
686 data->fan_auto1 = (val >> 3) & 0x01;
687 639
688 data->alarms &= data->alarm_mask; 640 data->client = client;
641 revision = gl518_read_value(client, GL518_REG_REVISION);
642 data->type = revision == 0x80 ? gl518sm_r80 : gl518sm_r00;
643 mutex_init(&data->update_lock);
689 644
690 val = gl518_read_value(client, GL518_REG_CONF); 645 /* Initialize the GL518SM chip */
691 data->beep_enable = (val >> 2) & 1; 646 data->alarm_mask = 0xff;
647 gl518_init_client(client);
692 648
693 if (data->type != gl518sm_r00) { 649 /* sysfs hooks */
694 data->voltage_in[0] = 650 data->groups[0] = &gl518_group;
695 gl518_read_value(client, GL518_REG_VDD); 651 if (data->type == gl518sm_r80)
696 data->voltage_in[1] = 652 data->groups[1] = &gl518_group_r80;
697 gl518_read_value(client, GL518_REG_VIN1);
698 data->voltage_in[2] =
699 gl518_read_value(client, GL518_REG_VIN2);
700 }
701 data->voltage_in[3] =
702 gl518_read_value(client, GL518_REG_VIN3);
703 653
704 data->last_updated = jiffies; 654 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
705 data->valid = 1; 655 data, data->groups);
706 } 656 return PTR_ERR_OR_ZERO(hwmon_dev);
657}
707 658
708 mutex_unlock(&data->update_lock); 659static const struct i2c_device_id gl518_id[] = {
660 { "gl518sm", 0 },
661 { }
662};
663MODULE_DEVICE_TABLE(i2c, gl518_id);
709 664
710 return data; 665static struct i2c_driver gl518_driver = {
711} 666 .class = I2C_CLASS_HWMON,
667 .driver = {
668 .name = "gl518sm",
669 },
670 .probe = gl518_probe,
671 .id_table = gl518_id,
672 .detect = gl518_detect,
673 .address_list = normal_i2c,
674};
712 675
713module_i2c_driver(gl518_driver); 676module_i2c_driver(gl518_driver);
714 677
diff --git a/drivers/hwmon/gl520sm.c b/drivers/hwmon/gl520sm.c
index ed56e09c3dd7..dee93ec87d02 100644
--- a/drivers/hwmon/gl520sm.c
+++ b/drivers/hwmon/gl520sm.c
@@ -73,41 +73,10 @@ static const u8 GL520_REG_TEMP_MAX_HYST[] = { 0x06, 0x18 };
73#define GL520_REG_BEEP_MASK 0x10 73#define GL520_REG_BEEP_MASK 0x10
74#define GL520_REG_BEEP_ENABLE GL520_REG_CONF 74#define GL520_REG_BEEP_ENABLE GL520_REG_CONF
75 75
76/*
77 * Function declarations
78 */
79
80static int gl520_probe(struct i2c_client *client,
81 const struct i2c_device_id *id);
82static int gl520_detect(struct i2c_client *client, struct i2c_board_info *info);
83static void gl520_init_client(struct i2c_client *client);
84static int gl520_remove(struct i2c_client *client);
85static int gl520_read_value(struct i2c_client *client, u8 reg);
86static int gl520_write_value(struct i2c_client *client, u8 reg, u16 value);
87static struct gl520_data *gl520_update_device(struct device *dev);
88
89/* Driver data */
90static const struct i2c_device_id gl520_id[] = {
91 { "gl520sm", 0 },
92 { }
93};
94MODULE_DEVICE_TABLE(i2c, gl520_id);
95
96static struct i2c_driver gl520_driver = {
97 .class = I2C_CLASS_HWMON,
98 .driver = {
99 .name = "gl520sm",
100 },
101 .probe = gl520_probe,
102 .remove = gl520_remove,
103 .id_table = gl520_id,
104 .detect = gl520_detect,
105 .address_list = normal_i2c,
106};
107
108/* Client data */ 76/* Client data */
109struct gl520_data { 77struct gl520_data {
110 struct device *hwmon_dev; 78 struct i2c_client *client;
79 const struct attribute_group *groups[3];
111 struct mutex update_lock; 80 struct mutex update_lock;
112 char valid; /* zero until the following fields are valid */ 81 char valid; /* zero until the following fields are valid */
113 unsigned long last_updated; /* in jiffies */ 82 unsigned long last_updated; /* in jiffies */
@@ -132,6 +101,102 @@ struct gl520_data {
132}; 101};
133 102
134/* 103/*
104 * Registers 0x07 to 0x0c are word-sized, others are byte-sized
105 * GL520 uses a high-byte first convention
106 */
107static int gl520_read_value(struct i2c_client *client, u8 reg)
108{
109 if ((reg >= 0x07) && (reg <= 0x0c))
110 return i2c_smbus_read_word_swapped(client, reg);
111 else
112 return i2c_smbus_read_byte_data(client, reg);
113}
114
115static int gl520_write_value(struct i2c_client *client, u8 reg, u16 value)
116{
117 if ((reg >= 0x07) && (reg <= 0x0c))
118 return i2c_smbus_write_word_swapped(client, reg, value);
119 else
120 return i2c_smbus_write_byte_data(client, reg, value);
121}
122
123static struct gl520_data *gl520_update_device(struct device *dev)
124{
125 struct gl520_data *data = dev_get_drvdata(dev);
126 struct i2c_client *client = data->client;
127 int val, i;
128
129 mutex_lock(&data->update_lock);
130
131 if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) {
132
133 dev_dbg(&client->dev, "Starting gl520sm update\n");
134
135 data->alarms = gl520_read_value(client, GL520_REG_ALARMS);
136 data->beep_mask = gl520_read_value(client, GL520_REG_BEEP_MASK);
137 data->vid = gl520_read_value(client,
138 GL520_REG_VID_INPUT) & 0x1f;
139
140 for (i = 0; i < 4; i++) {
141 data->in_input[i] = gl520_read_value(client,
142 GL520_REG_IN_INPUT[i]);
143 val = gl520_read_value(client, GL520_REG_IN_LIMIT[i]);
144 data->in_min[i] = val & 0xff;
145 data->in_max[i] = (val >> 8) & 0xff;
146 }
147
148 val = gl520_read_value(client, GL520_REG_FAN_INPUT);
149 data->fan_input[0] = (val >> 8) & 0xff;
150 data->fan_input[1] = val & 0xff;
151
152 val = gl520_read_value(client, GL520_REG_FAN_MIN);
153 data->fan_min[0] = (val >> 8) & 0xff;
154 data->fan_min[1] = val & 0xff;
155
156 data->temp_input[0] = gl520_read_value(client,
157 GL520_REG_TEMP_INPUT[0]);
158 data->temp_max[0] = gl520_read_value(client,
159 GL520_REG_TEMP_MAX[0]);
160 data->temp_max_hyst[0] = gl520_read_value(client,
161 GL520_REG_TEMP_MAX_HYST[0]);
162
163 val = gl520_read_value(client, GL520_REG_FAN_DIV);
164 data->fan_div[0] = (val >> 6) & 0x03;
165 data->fan_div[1] = (val >> 4) & 0x03;
166 data->fan_off = (val >> 2) & 0x01;
167
168 data->alarms &= data->alarm_mask;
169
170 val = gl520_read_value(client, GL520_REG_CONF);
171 data->beep_enable = !((val >> 2) & 1);
172
173 /* Temp1 and Vin4 are the same input */
174 if (data->two_temps) {
175 data->temp_input[1] = gl520_read_value(client,
176 GL520_REG_TEMP_INPUT[1]);
177 data->temp_max[1] = gl520_read_value(client,
178 GL520_REG_TEMP_MAX[1]);
179 data->temp_max_hyst[1] = gl520_read_value(client,
180 GL520_REG_TEMP_MAX_HYST[1]);
181 } else {
182 data->in_input[4] = gl520_read_value(client,
183 GL520_REG_IN_INPUT[4]);
184 data->in_min[4] = gl520_read_value(client,
185 GL520_REG_IN_MIN[4]);
186 data->in_max[4] = gl520_read_value(client,
187 GL520_REG_IN_MAX[4]);
188 }
189
190 data->last_updated = jiffies;
191 data->valid = 1;
192 }
193
194 mutex_unlock(&data->update_lock);
195
196 return data;
197}
198
199/*
135 * Sysfs stuff 200 * Sysfs stuff
136 */ 201 */
137 202
@@ -191,8 +256,8 @@ static ssize_t get_in_max(struct device *dev, struct device_attribute *attr,
191static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, 256static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
192 const char *buf, size_t count) 257 const char *buf, size_t count)
193{ 258{
194 struct i2c_client *client = to_i2c_client(dev); 259 struct gl520_data *data = dev_get_drvdata(dev);
195 struct gl520_data *data = i2c_get_clientdata(client); 260 struct i2c_client *client = data->client;
196 int n = to_sensor_dev_attr(attr)->index; 261 int n = to_sensor_dev_attr(attr)->index;
197 u8 r; 262 u8 r;
198 long v; 263 long v;
@@ -225,8 +290,8 @@ static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
225static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, 290static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
226 const char *buf, size_t count) 291 const char *buf, size_t count)
227{ 292{
228 struct i2c_client *client = to_i2c_client(dev); 293 struct gl520_data *data = dev_get_drvdata(dev);
229 struct gl520_data *data = i2c_get_clientdata(client); 294 struct i2c_client *client = data->client;
230 int n = to_sensor_dev_attr(attr)->index; 295 int n = to_sensor_dev_attr(attr)->index;
231 u8 r; 296 u8 r;
232 long v; 297 long v;
@@ -326,8 +391,8 @@ static ssize_t get_fan_off(struct device *dev, struct device_attribute *attr,
326static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 391static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
327 const char *buf, size_t count) 392 const char *buf, size_t count)
328{ 393{
329 struct i2c_client *client = to_i2c_client(dev); 394 struct gl520_data *data = dev_get_drvdata(dev);
330 struct gl520_data *data = i2c_get_clientdata(client); 395 struct i2c_client *client = data->client;
331 int n = to_sensor_dev_attr(attr)->index; 396 int n = to_sensor_dev_attr(attr)->index;
332 u8 r; 397 u8 r;
333 unsigned long v; 398 unsigned long v;
@@ -365,8 +430,8 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
365static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 430static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
366 const char *buf, size_t count) 431 const char *buf, size_t count)
367{ 432{
368 struct i2c_client *client = to_i2c_client(dev); 433 struct gl520_data *data = dev_get_drvdata(dev);
369 struct gl520_data *data = i2c_get_clientdata(client); 434 struct i2c_client *client = data->client;
370 int n = to_sensor_dev_attr(attr)->index; 435 int n = to_sensor_dev_attr(attr)->index;
371 u8 r; 436 u8 r;
372 unsigned long v; 437 unsigned long v;
@@ -414,8 +479,8 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
414static ssize_t set_fan_off(struct device *dev, struct device_attribute *attr, 479static ssize_t set_fan_off(struct device *dev, struct device_attribute *attr,
415 const char *buf, size_t count) 480 const char *buf, size_t count)
416{ 481{
417 struct i2c_client *client = to_i2c_client(dev); 482 struct gl520_data *data = dev_get_drvdata(dev);
418 struct gl520_data *data = i2c_get_clientdata(client); 483 struct i2c_client *client = data->client;
419 u8 r; 484 u8 r;
420 unsigned long v; 485 unsigned long v;
421 int err; 486 int err;
@@ -482,8 +547,8 @@ static ssize_t get_temp_max_hyst(struct device *dev,
482static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, 547static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
483 const char *buf, size_t count) 548 const char *buf, size_t count)
484{ 549{
485 struct i2c_client *client = to_i2c_client(dev); 550 struct gl520_data *data = dev_get_drvdata(dev);
486 struct gl520_data *data = i2c_get_clientdata(client); 551 struct i2c_client *client = data->client;
487 int n = to_sensor_dev_attr(attr)->index; 552 int n = to_sensor_dev_attr(attr)->index;
488 long v; 553 long v;
489 int err; 554 int err;
@@ -502,8 +567,8 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
502static ssize_t set_temp_max_hyst(struct device *dev, struct device_attribute 567static ssize_t set_temp_max_hyst(struct device *dev, struct device_attribute
503 *attr, const char *buf, size_t count) 568 *attr, const char *buf, size_t count)
504{ 569{
505 struct i2c_client *client = to_i2c_client(dev); 570 struct gl520_data *data = dev_get_drvdata(dev);
506 struct gl520_data *data = i2c_get_clientdata(client); 571 struct i2c_client *client = data->client;
507 int n = to_sensor_dev_attr(attr)->index; 572 int n = to_sensor_dev_attr(attr)->index;
508 long v; 573 long v;
509 int err; 574 int err;
@@ -555,8 +620,8 @@ static ssize_t get_beep_mask(struct device *dev, struct device_attribute *attr,
555static ssize_t set_beep_enable(struct device *dev, struct device_attribute 620static ssize_t set_beep_enable(struct device *dev, struct device_attribute
556 *attr, const char *buf, size_t count) 621 *attr, const char *buf, size_t count)
557{ 622{
558 struct i2c_client *client = to_i2c_client(dev); 623 struct gl520_data *data = dev_get_drvdata(dev);
559 struct gl520_data *data = i2c_get_clientdata(client); 624 struct i2c_client *client = data->client;
560 u8 r; 625 u8 r;
561 unsigned long v; 626 unsigned long v;
562 int err; 627 int err;
@@ -579,8 +644,8 @@ static ssize_t set_beep_enable(struct device *dev, struct device_attribute
579static ssize_t set_beep_mask(struct device *dev, struct device_attribute *attr, 644static ssize_t set_beep_mask(struct device *dev, struct device_attribute *attr,
580 const char *buf, size_t count) 645 const char *buf, size_t count)
581{ 646{
582 struct i2c_client *client = to_i2c_client(dev); 647 struct gl520_data *data = dev_get_drvdata(dev);
583 struct gl520_data *data = i2c_get_clientdata(client); 648 struct i2c_client *client = data->client;
584 unsigned long r; 649 unsigned long r;
585 int err; 650 int err;
586 651
@@ -633,8 +698,8 @@ static ssize_t get_beep(struct device *dev, struct device_attribute *attr,
633static ssize_t set_beep(struct device *dev, struct device_attribute *attr, 698static ssize_t set_beep(struct device *dev, struct device_attribute *attr,
634 const char *buf, size_t count) 699 const char *buf, size_t count)
635{ 700{
636 struct i2c_client *client = to_i2c_client(dev); 701 struct gl520_data *data = dev_get_drvdata(dev);
637 struct gl520_data *data = i2c_get_clientdata(client); 702 struct i2c_client *client = data->client;
638 int bitnr = to_sensor_dev_attr(attr)->index; 703 int bitnr = to_sensor_dev_attr(attr)->index;
639 unsigned long bit; 704 unsigned long bit;
640 705
@@ -772,52 +837,6 @@ static int gl520_detect(struct i2c_client *client, struct i2c_board_info *info)
772 return 0; 837 return 0;
773} 838}
774 839
775static int gl520_probe(struct i2c_client *client,
776 const struct i2c_device_id *id)
777{
778 struct gl520_data *data;
779 int err;
780
781 data = devm_kzalloc(&client->dev, sizeof(struct gl520_data),
782 GFP_KERNEL);
783 if (!data)
784 return -ENOMEM;
785
786 i2c_set_clientdata(client, data);
787 mutex_init(&data->update_lock);
788
789 /* Initialize the GL520SM chip */
790 gl520_init_client(client);
791
792 /* Register sysfs hooks */
793 err = sysfs_create_group(&client->dev.kobj, &gl520_group);
794 if (err)
795 return err;
796
797 if (data->two_temps)
798 err = sysfs_create_group(&client->dev.kobj, &gl520_group_temp2);
799 else
800 err = sysfs_create_group(&client->dev.kobj, &gl520_group_in4);
801
802 if (err)
803 goto exit_remove_files;
804
805 data->hwmon_dev = hwmon_device_register(&client->dev);
806 if (IS_ERR(data->hwmon_dev)) {
807 err = PTR_ERR(data->hwmon_dev);
808 goto exit_remove_files;
809 }
810
811 return 0;
812
813exit_remove_files:
814 sysfs_remove_group(&client->dev.kobj, &gl520_group);
815 sysfs_remove_group(&client->dev.kobj, &gl520_group_in4);
816 sysfs_remove_group(&client->dev.kobj, &gl520_group_temp2);
817 return err;
818}
819
820
821/* Called when we have found a new GL520SM. */ 840/* Called when we have found a new GL520SM. */
822static void gl520_init_client(struct i2c_client *client) 841static void gl520_init_client(struct i2c_client *client)
823{ 842{
@@ -856,115 +875,53 @@ static void gl520_init_client(struct i2c_client *client)
856 gl520_write_value(client, GL520_REG_BEEP_MASK, data->beep_mask); 875 gl520_write_value(client, GL520_REG_BEEP_MASK, data->beep_mask);
857} 876}
858 877
859static int gl520_remove(struct i2c_client *client) 878static int gl520_probe(struct i2c_client *client,
879 const struct i2c_device_id *id)
860{ 880{
861 struct gl520_data *data = i2c_get_clientdata(client); 881 struct device *dev = &client->dev;
882 struct device *hwmon_dev;
883 struct gl520_data *data;
862 884
863 hwmon_device_unregister(data->hwmon_dev); 885 data = devm_kzalloc(dev, sizeof(struct gl520_data), GFP_KERNEL);
864 sysfs_remove_group(&client->dev.kobj, &gl520_group); 886 if (!data)
865 sysfs_remove_group(&client->dev.kobj, &gl520_group_in4); 887 return -ENOMEM;
866 sysfs_remove_group(&client->dev.kobj, &gl520_group_temp2);
867 888
868 return 0; 889 i2c_set_clientdata(client, data);
869} 890 mutex_init(&data->update_lock);
891 data->client = client;
870 892
893 /* Initialize the GL520SM chip */
894 gl520_init_client(client);
871 895
872/* 896 /* sysfs hooks */
873 * Registers 0x07 to 0x0c are word-sized, others are byte-sized 897 data->groups[0] = &gl520_group;
874 * GL520 uses a high-byte first convention
875 */
876static int gl520_read_value(struct i2c_client *client, u8 reg)
877{
878 if ((reg >= 0x07) && (reg <= 0x0c))
879 return i2c_smbus_read_word_swapped(client, reg);
880 else
881 return i2c_smbus_read_byte_data(client, reg);
882}
883 898
884static int gl520_write_value(struct i2c_client *client, u8 reg, u16 value) 899 if (data->two_temps)
885{ 900 data->groups[1] = &gl520_group_temp2;
886 if ((reg >= 0x07) && (reg <= 0x0c))
887 return i2c_smbus_write_word_swapped(client, reg, value);
888 else 901 else
889 return i2c_smbus_write_byte_data(client, reg, value); 902 data->groups[1] = &gl520_group_in4;
890}
891
892
893static struct gl520_data *gl520_update_device(struct device *dev)
894{
895 struct i2c_client *client = to_i2c_client(dev);
896 struct gl520_data *data = i2c_get_clientdata(client);
897 int val, i;
898
899 mutex_lock(&data->update_lock);
900
901 if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) {
902
903 dev_dbg(&client->dev, "Starting gl520sm update\n");
904
905 data->alarms = gl520_read_value(client, GL520_REG_ALARMS);
906 data->beep_mask = gl520_read_value(client, GL520_REG_BEEP_MASK);
907 data->vid = gl520_read_value(client,
908 GL520_REG_VID_INPUT) & 0x1f;
909
910 for (i = 0; i < 4; i++) {
911 data->in_input[i] = gl520_read_value(client,
912 GL520_REG_IN_INPUT[i]);
913 val = gl520_read_value(client, GL520_REG_IN_LIMIT[i]);
914 data->in_min[i] = val & 0xff;
915 data->in_max[i] = (val >> 8) & 0xff;
916 }
917
918 val = gl520_read_value(client, GL520_REG_FAN_INPUT);
919 data->fan_input[0] = (val >> 8) & 0xff;
920 data->fan_input[1] = val & 0xff;
921 903
922 val = gl520_read_value(client, GL520_REG_FAN_MIN); 904 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
923 data->fan_min[0] = (val >> 8) & 0xff; 905 data, data->groups);
924 data->fan_min[1] = val & 0xff; 906 return PTR_ERR_OR_ZERO(hwmon_dev);
925 907}
926 data->temp_input[0] = gl520_read_value(client,
927 GL520_REG_TEMP_INPUT[0]);
928 data->temp_max[0] = gl520_read_value(client,
929 GL520_REG_TEMP_MAX[0]);
930 data->temp_max_hyst[0] = gl520_read_value(client,
931 GL520_REG_TEMP_MAX_HYST[0]);
932
933 val = gl520_read_value(client, GL520_REG_FAN_DIV);
934 data->fan_div[0] = (val >> 6) & 0x03;
935 data->fan_div[1] = (val >> 4) & 0x03;
936 data->fan_off = (val >> 2) & 0x01;
937
938 data->alarms &= data->alarm_mask;
939
940 val = gl520_read_value(client, GL520_REG_CONF);
941 data->beep_enable = !((val >> 2) & 1);
942
943 /* Temp1 and Vin4 are the same input */
944 if (data->two_temps) {
945 data->temp_input[1] = gl520_read_value(client,
946 GL520_REG_TEMP_INPUT[1]);
947 data->temp_max[1] = gl520_read_value(client,
948 GL520_REG_TEMP_MAX[1]);
949 data->temp_max_hyst[1] = gl520_read_value(client,
950 GL520_REG_TEMP_MAX_HYST[1]);
951 } else {
952 data->in_input[4] = gl520_read_value(client,
953 GL520_REG_IN_INPUT[4]);
954 data->in_min[4] = gl520_read_value(client,
955 GL520_REG_IN_MIN[4]);
956 data->in_max[4] = gl520_read_value(client,
957 GL520_REG_IN_MAX[4]);
958 }
959
960 data->last_updated = jiffies;
961 data->valid = 1;
962 }
963 908
964 mutex_unlock(&data->update_lock); 909static const struct i2c_device_id gl520_id[] = {
910 { "gl520sm", 0 },
911 { }
912};
913MODULE_DEVICE_TABLE(i2c, gl520_id);
965 914
966 return data; 915static struct i2c_driver gl520_driver = {
967} 916 .class = I2C_CLASS_HWMON,
917 .driver = {
918 .name = "gl520sm",
919 },
920 .probe = gl520_probe,
921 .id_table = gl520_id,
922 .detect = gl520_detect,
923 .address_list = normal_i2c,
924};
968 925
969module_i2c_driver(gl520_driver); 926module_i2c_driver(gl520_driver);
970 927
diff --git a/drivers/hwmon/gpio-fan.c b/drivers/hwmon/gpio-fan.c
index 2566c43dd1e9..4efa1734bdad 100644
--- a/drivers/hwmon/gpio-fan.c
+++ b/drivers/hwmon/gpio-fan.c
@@ -173,7 +173,7 @@ static int get_fan_speed_index(struct gpio_fan_data *fan_data)
173 return -ENODEV; 173 return -ENODEV;
174} 174}
175 175
176static int rpm_to_speed_index(struct gpio_fan_data *fan_data, int rpm) 176static int rpm_to_speed_index(struct gpio_fan_data *fan_data, unsigned long rpm)
177{ 177{
178 struct gpio_fan_speed *speed = fan_data->speed; 178 struct gpio_fan_speed *speed = fan_data->speed;
179 int i; 179 int i;
@@ -537,9 +537,10 @@ static int gpio_fan_probe(struct platform_device *pdev)
537 } 537 }
538 538
539 /* Make this driver part of hwmon class. */ 539 /* Make this driver part of hwmon class. */
540 fan_data->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, 540 fan_data->hwmon_dev =
541 "gpio_fan", fan_data, 541 devm_hwmon_device_register_with_groups(&pdev->dev,
542 gpio_fan_groups); 542 "gpio_fan", fan_data,
543 gpio_fan_groups);
543 if (IS_ERR(fan_data->hwmon_dev)) 544 if (IS_ERR(fan_data->hwmon_dev))
544 return PTR_ERR(fan_data->hwmon_dev); 545 return PTR_ERR(fan_data->hwmon_dev);
545 546
@@ -548,15 +549,6 @@ static int gpio_fan_probe(struct platform_device *pdev)
548 return 0; 549 return 0;
549} 550}
550 551
551static int gpio_fan_remove(struct platform_device *pdev)
552{
553 struct gpio_fan_data *fan_data = platform_get_drvdata(pdev);
554
555 hwmon_device_unregister(fan_data->hwmon_dev);
556
557 return 0;
558}
559
560#ifdef CONFIG_PM_SLEEP 552#ifdef CONFIG_PM_SLEEP
561static int gpio_fan_suspend(struct device *dev) 553static int gpio_fan_suspend(struct device *dev)
562{ 554{
@@ -588,7 +580,6 @@ static SIMPLE_DEV_PM_OPS(gpio_fan_pm, gpio_fan_suspend, gpio_fan_resume);
588 580
589static struct platform_driver gpio_fan_driver = { 581static struct platform_driver gpio_fan_driver = {
590 .probe = gpio_fan_probe, 582 .probe = gpio_fan_probe,
591 .remove = gpio_fan_remove,
592 .driver = { 583 .driver = {
593 .name = "gpio-fan", 584 .name = "gpio-fan",
594 .pm = GPIO_FAN_PM, 585 .pm = GPIO_FAN_PM,
diff --git a/drivers/hwmon/hih6130.c b/drivers/hwmon/hih6130.c
index 7d68a08baaa8..0e01c4e13e33 100644
--- a/drivers/hwmon/hih6130.c
+++ b/drivers/hwmon/hih6130.c
@@ -46,7 +46,7 @@
46 * @write_length: length for I2C measurement request 46 * @write_length: length for I2C measurement request
47 */ 47 */
48struct hih6130 { 48struct hih6130 {
49 struct device *hwmon_dev; 49 struct i2c_client *client;
50 struct mutex lock; 50 struct mutex lock;
51 bool valid; 51 bool valid;
52 unsigned long last_update; 52 unsigned long last_update;
@@ -62,7 +62,6 @@ struct hih6130 {
62 */ 62 */
63static inline int hih6130_temp_ticks_to_millicelsius(int ticks) 63static inline int hih6130_temp_ticks_to_millicelsius(int ticks)
64{ 64{
65
66 ticks = ticks >> 2; 65 ticks = ticks >> 2;
67 /* 66 /*
68 * from data sheet section 5.0 67 * from data sheet section 5.0
@@ -78,7 +77,6 @@ static inline int hih6130_temp_ticks_to_millicelsius(int ticks)
78 */ 77 */
79static inline int hih6130_rh_ticks_to_per_cent_mille(int ticks) 78static inline int hih6130_rh_ticks_to_per_cent_mille(int ticks)
80{ 79{
81
82 ticks &= ~0xC000; /* clear status bits */ 80 ticks &= ~0xC000; /* clear status bits */
83 /* 81 /*
84 * from data sheet section 4.0 82 * from data sheet section 4.0
@@ -89,15 +87,16 @@ static inline int hih6130_rh_ticks_to_per_cent_mille(int ticks)
89 87
90/** 88/**
91 * hih6130_update_measurements() - get updated measurements from device 89 * hih6130_update_measurements() - get updated measurements from device
92 * @client: I2C client device 90 * @dev: device
93 * 91 *
94 * Returns 0 on success, else negative errno. 92 * Returns 0 on success, else negative errno.
95 */ 93 */
96static int hih6130_update_measurements(struct i2c_client *client) 94static int hih6130_update_measurements(struct device *dev)
97{ 95{
96 struct hih6130 *hih6130 = dev_get_drvdata(dev);
97 struct i2c_client *client = hih6130->client;
98 int ret = 0; 98 int ret = 0;
99 int t; 99 int t;
100 struct hih6130 *hih6130 = i2c_get_clientdata(client);
101 unsigned char tmp[4]; 100 unsigned char tmp[4];
102 struct i2c_msg msgs[1] = { 101 struct i2c_msg msgs[1] = {
103 { 102 {
@@ -176,9 +175,10 @@ static ssize_t hih6130_show_temperature(struct device *dev,
176 struct device_attribute *attr, 175 struct device_attribute *attr,
177 char *buf) 176 char *buf)
178{ 177{
179 struct i2c_client *client = to_i2c_client(dev); 178 struct hih6130 *hih6130 = dev_get_drvdata(dev);
180 struct hih6130 *hih6130 = i2c_get_clientdata(client); 179 int ret;
181 int ret = hih6130_update_measurements(client); 180
181 ret = hih6130_update_measurements(dev);
182 if (ret < 0) 182 if (ret < 0)
183 return ret; 183 return ret;
184 return sprintf(buf, "%d\n", hih6130->temperature); 184 return sprintf(buf, "%d\n", hih6130->temperature);
@@ -196,9 +196,10 @@ static ssize_t hih6130_show_temperature(struct device *dev,
196static ssize_t hih6130_show_humidity(struct device *dev, 196static ssize_t hih6130_show_humidity(struct device *dev,
197 struct device_attribute *attr, char *buf) 197 struct device_attribute *attr, char *buf)
198{ 198{
199 struct i2c_client *client = to_i2c_client(dev); 199 struct hih6130 *hih6130 = dev_get_drvdata(dev);
200 struct hih6130 *hih6130 = i2c_get_clientdata(client); 200 int ret;
201 int ret = hih6130_update_measurements(client); 201
202 ret = hih6130_update_measurements(dev);
202 if (ret < 0) 203 if (ret < 0)
203 return ret; 204 return ret;
204 return sprintf(buf, "%d\n", hih6130->humidity); 205 return sprintf(buf, "%d\n", hih6130->humidity);
@@ -210,79 +211,37 @@ static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, hih6130_show_temperature,
210static SENSOR_DEVICE_ATTR(humidity1_input, S_IRUGO, hih6130_show_humidity, 211static SENSOR_DEVICE_ATTR(humidity1_input, S_IRUGO, hih6130_show_humidity,
211 NULL, 0); 212 NULL, 0);
212 213
213static struct attribute *hih6130_attributes[] = { 214static struct attribute *hih6130_attrs[] = {
214 &sensor_dev_attr_temp1_input.dev_attr.attr, 215 &sensor_dev_attr_temp1_input.dev_attr.attr,
215 &sensor_dev_attr_humidity1_input.dev_attr.attr, 216 &sensor_dev_attr_humidity1_input.dev_attr.attr,
216 NULL 217 NULL
217}; 218};
218 219
219static const struct attribute_group hih6130_attr_group = { 220ATTRIBUTE_GROUPS(hih6130);
220 .attrs = hih6130_attributes,
221};
222 221
223/**
224 * hih6130_probe() - probe device
225 * @client: I2C client device
226 * @id: device ID
227 *
228 * Called by the I2C core when an entry in the ID table matches a
229 * device's name.
230 * Returns 0 on success.
231 */
232static int hih6130_probe(struct i2c_client *client, 222static int hih6130_probe(struct i2c_client *client,
233 const struct i2c_device_id *id) 223 const struct i2c_device_id *id)
234{ 224{
225 struct device *dev = &client->dev;
235 struct hih6130 *hih6130; 226 struct hih6130 *hih6130;
236 int err; 227 struct device *hwmon_dev;
237 228
238 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { 229 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
239 dev_err(&client->dev, "adapter does not support true I2C\n"); 230 dev_err(&client->dev, "adapter does not support true I2C\n");
240 return -ENODEV; 231 return -ENODEV;
241 } 232 }
242 233
243 hih6130 = devm_kzalloc(&client->dev, sizeof(*hih6130), GFP_KERNEL); 234 hih6130 = devm_kzalloc(dev, sizeof(*hih6130), GFP_KERNEL);
244 if (!hih6130) 235 if (!hih6130)
245 return -ENOMEM; 236 return -ENOMEM;
246 237
247 i2c_set_clientdata(client, hih6130); 238 hih6130->client = client;
248
249 mutex_init(&hih6130->lock); 239 mutex_init(&hih6130->lock);
250 240
251 err = sysfs_create_group(&client->dev.kobj, &hih6130_attr_group); 241 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
252 if (err) { 242 hih6130,
253 dev_dbg(&client->dev, "could not create sysfs files\n"); 243 hih6130_groups);
254 return err; 244 return PTR_ERR_OR_ZERO(hwmon_dev);
255 }
256
257 hih6130->hwmon_dev = hwmon_device_register(&client->dev);
258 if (IS_ERR(hih6130->hwmon_dev)) {
259 dev_dbg(&client->dev, "unable to register hwmon device\n");
260 err = PTR_ERR(hih6130->hwmon_dev);
261 goto fail_remove_sysfs;
262 }
263
264 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_QUICK))
265 hih6130->write_length = 1;
266
267 return 0;
268
269fail_remove_sysfs:
270 sysfs_remove_group(&client->dev.kobj, &hih6130_attr_group);
271 return err;
272}
273
274/**
275 * hih6130_remove() - remove device
276 * @client: I2C client device
277 */
278static int hih6130_remove(struct i2c_client *client)
279{
280 struct hih6130 *hih6130 = i2c_get_clientdata(client);
281
282 hwmon_device_unregister(hih6130->hwmon_dev);
283 sysfs_remove_group(&client->dev.kobj, &hih6130_attr_group);
284
285 return 0;
286} 245}
287 246
288/* Device ID table */ 247/* Device ID table */
@@ -295,7 +254,6 @@ MODULE_DEVICE_TABLE(i2c, hih6130_id);
295static struct i2c_driver hih6130_driver = { 254static struct i2c_driver hih6130_driver = {
296 .driver.name = "hih6130", 255 .driver.name = "hih6130",
297 .probe = hih6130_probe, 256 .probe = hih6130_probe,
298 .remove = hih6130_remove,
299 .id_table = hih6130_id, 257 .id_table = hih6130_id,
300}; 258};
301 259
diff --git a/drivers/hwmon/htu21.c b/drivers/hwmon/htu21.c
index 839086e0e951..4c3bbb72f82a 100644
--- a/drivers/hwmon/htu21.c
+++ b/drivers/hwmon/htu21.c
@@ -31,7 +31,7 @@
31#define HTU21_RH_MEASUREMENT_HM 0xE5 31#define HTU21_RH_MEASUREMENT_HM 0xE5
32 32
33struct htu21 { 33struct htu21 {
34 struct device *hwmon_dev; 34 struct i2c_client *client;
35 struct mutex lock; 35 struct mutex lock;
36 bool valid; 36 bool valid;
37 unsigned long last_update; 37 unsigned long last_update;
@@ -59,10 +59,11 @@ static inline int htu21_rh_ticks_to_per_cent_mille(int ticks)
59 return ((15625 * ticks) >> 13) - 6000; 59 return ((15625 * ticks) >> 13) - 6000;
60} 60}
61 61
62static int htu21_update_measurements(struct i2c_client *client) 62static int htu21_update_measurements(struct device *dev)
63{ 63{
64 struct htu21 *htu21 = dev_get_drvdata(dev);
65 struct i2c_client *client = htu21->client;
64 int ret = 0; 66 int ret = 0;
65 struct htu21 *htu21 = i2c_get_clientdata(client);
66 67
67 mutex_lock(&htu21->lock); 68 mutex_lock(&htu21->lock);
68 69
@@ -90,9 +91,10 @@ out:
90static ssize_t htu21_show_temperature(struct device *dev, 91static ssize_t htu21_show_temperature(struct device *dev,
91 struct device_attribute *attr, char *buf) 92 struct device_attribute *attr, char *buf)
92{ 93{
93 struct i2c_client *client = to_i2c_client(dev); 94 struct htu21 *htu21 = dev_get_drvdata(dev);
94 struct htu21 *htu21 = i2c_get_clientdata(client); 95 int ret;
95 int ret = htu21_update_measurements(client); 96
97 ret = htu21_update_measurements(dev);
96 if (ret < 0) 98 if (ret < 0)
97 return ret; 99 return ret;
98 return sprintf(buf, "%d\n", htu21->temperature); 100 return sprintf(buf, "%d\n", htu21->temperature);
@@ -101,9 +103,10 @@ static ssize_t htu21_show_temperature(struct device *dev,
101static ssize_t htu21_show_humidity(struct device *dev, 103static ssize_t htu21_show_humidity(struct device *dev,
102 struct device_attribute *attr, char *buf) 104 struct device_attribute *attr, char *buf)
103{ 105{
104 struct i2c_client *client = to_i2c_client(dev); 106 struct htu21 *htu21 = dev_get_drvdata(dev);
105 struct htu21 *htu21 = i2c_get_clientdata(client); 107 int ret;
106 int ret = htu21_update_measurements(client); 108
109 ret = htu21_update_measurements(dev);
107 if (ret < 0) 110 if (ret < 0)
108 return ret; 111 return ret;
109 return sprintf(buf, "%d\n", htu21->humidity); 112 return sprintf(buf, "%d\n", htu21->humidity);
@@ -114,21 +117,20 @@ static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO,
114static SENSOR_DEVICE_ATTR(humidity1_input, S_IRUGO, 117static SENSOR_DEVICE_ATTR(humidity1_input, S_IRUGO,
115 htu21_show_humidity, NULL, 0); 118 htu21_show_humidity, NULL, 0);
116 119
117static struct attribute *htu21_attributes[] = { 120static struct attribute *htu21_attrs[] = {
118 &sensor_dev_attr_temp1_input.dev_attr.attr, 121 &sensor_dev_attr_temp1_input.dev_attr.attr,
119 &sensor_dev_attr_humidity1_input.dev_attr.attr, 122 &sensor_dev_attr_humidity1_input.dev_attr.attr,
120 NULL 123 NULL
121}; 124};
122 125
123static const struct attribute_group htu21_group = { 126ATTRIBUTE_GROUPS(htu21);
124 .attrs = htu21_attributes,
125};
126 127
127static int htu21_probe(struct i2c_client *client, 128static int htu21_probe(struct i2c_client *client,
128 const struct i2c_device_id *id) 129 const struct i2c_device_id *id)
129{ 130{
131 struct device *dev = &client->dev;
130 struct htu21 *htu21; 132 struct htu21 *htu21;
131 int err; 133 struct device *hwmon_dev;
132 134
133 if (!i2c_check_functionality(client->adapter, 135 if (!i2c_check_functionality(client->adapter,
134 I2C_FUNC_SMBUS_READ_WORD_DATA)) { 136 I2C_FUNC_SMBUS_READ_WORD_DATA)) {
@@ -137,43 +139,17 @@ static int htu21_probe(struct i2c_client *client,
137 return -ENODEV; 139 return -ENODEV;
138 } 140 }
139 141
140 htu21 = devm_kzalloc(&client->dev, sizeof(*htu21), GFP_KERNEL); 142 htu21 = devm_kzalloc(dev, sizeof(*htu21), GFP_KERNEL);
141 if (!htu21) 143 if (!htu21)
142 return -ENOMEM; 144 return -ENOMEM;
143 145
144 i2c_set_clientdata(client, htu21); 146 htu21->client = client;
145
146 mutex_init(&htu21->lock); 147 mutex_init(&htu21->lock);
147 148
148 err = sysfs_create_group(&client->dev.kobj, &htu21_group); 149 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
149 if (err) { 150 htu21,
150 dev_dbg(&client->dev, "could not create sysfs files\n"); 151 htu21_groups);
151 return err; 152 return PTR_ERR_OR_ZERO(hwmon_dev);
152 }
153 htu21->hwmon_dev = hwmon_device_register(&client->dev);
154 if (IS_ERR(htu21->hwmon_dev)) {
155 dev_dbg(&client->dev, "unable to register hwmon device\n");
156 err = PTR_ERR(htu21->hwmon_dev);
157 goto error;
158 }
159
160 dev_info(&client->dev, "initialized\n");
161
162 return 0;
163
164error:
165 sysfs_remove_group(&client->dev.kobj, &htu21_group);
166 return err;
167}
168
169static int htu21_remove(struct i2c_client *client)
170{
171 struct htu21 *htu21 = i2c_get_clientdata(client);
172
173 hwmon_device_unregister(htu21->hwmon_dev);
174 sysfs_remove_group(&client->dev.kobj, &htu21_group);
175
176 return 0;
177} 153}
178 154
179static const struct i2c_device_id htu21_id[] = { 155static const struct i2c_device_id htu21_id[] = {
@@ -188,7 +164,6 @@ static struct i2c_driver htu21_driver = {
188 .name = "htu21", 164 .name = "htu21",
189 }, 165 },
190 .probe = htu21_probe, 166 .probe = htu21_probe,
191 .remove = htu21_remove,
192 .id_table = htu21_id, 167 .id_table = htu21_id,
193}; 168};
194 169
diff --git a/drivers/hwmon/ibmpowernv.c b/drivers/hwmon/ibmpowernv.c
new file mode 100644
index 000000000000..d2bf2c97ae70
--- /dev/null
+++ b/drivers/hwmon/ibmpowernv.c
@@ -0,0 +1,363 @@
1/*
2 * IBM PowerNV platform sensors for temperature/fan/voltage/power
3 * Copyright (C) 2014 IBM
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program.
17 */
18
19#define DRVNAME "ibmpowernv"
20#define pr_fmt(fmt) DRVNAME ": " fmt
21
22#include <linux/init.h>
23#include <linux/module.h>
24#include <linux/kernel.h>
25#include <linux/hwmon.h>
26#include <linux/hwmon-sysfs.h>
27#include <linux/of.h>
28#include <linux/slab.h>
29
30#include <linux/platform_device.h>
31#include <asm/opal.h>
32#include <linux/err.h>
33
34#define MAX_ATTR_LEN 32
35
36/* Sensor suffix name from DT */
37#define DT_FAULT_ATTR_SUFFIX "faulted"
38#define DT_DATA_ATTR_SUFFIX "data"
39#define DT_THRESHOLD_ATTR_SUFFIX "thrs"
40
41/*
42 * Enumerates all the types of sensors in the POWERNV platform and does index
43 * into 'struct sensor_group'
44 */
45enum sensors {
46 FAN,
47 AMBIENT_TEMP,
48 POWER_SUPPLY,
49 POWER_INPUT,
50 MAX_SENSOR_TYPE,
51};
52
53static struct sensor_group {
54 const char *name;
55 const char *compatible;
56 struct attribute_group group;
57 u32 attr_count;
58} sensor_groups[] = {
59 {"fan", "ibm,opal-sensor-cooling-fan"},
60 {"temp", "ibm,opal-sensor-amb-temp"},
61 {"in", "ibm,opal-sensor-power-supply"},
62 {"power", "ibm,opal-sensor-power"}
63};
64
65struct sensor_data {
66 u32 id; /* An opaque id of the firmware for each sensor */
67 enum sensors type;
68 char name[MAX_ATTR_LEN];
69 struct device_attribute dev_attr;
70};
71
72struct platform_data {
73 const struct attribute_group *attr_groups[MAX_SENSOR_TYPE + 1];
74 u32 sensors_count; /* Total count of sensors from each group */
75};
76
77/* Platform device representing all the ibmpowernv sensors */
78static struct platform_device *pdevice;
79
80static ssize_t show_sensor(struct device *dev, struct device_attribute *devattr,
81 char *buf)
82{
83 struct sensor_data *sdata = container_of(devattr, struct sensor_data,
84 dev_attr);
85 ssize_t ret;
86 u32 x;
87
88 ret = opal_get_sensor_data(sdata->id, &x);
89 if (ret)
90 return ret;
91
92 /* Convert temperature to milli-degrees */
93 if (sdata->type == AMBIENT_TEMP)
94 x *= 1000;
95 /* Convert power to micro-watts */
96 else if (sdata->type == POWER_INPUT)
97 x *= 1000000;
98
99 return sprintf(buf, "%u\n", x);
100}
101
102static int __init get_sensor_index_attr(const char *name, u32 *index,
103 char *attr)
104{
105 char *hash_pos = strchr(name, '#');
106 char buf[8] = { 0 };
107 char *dash_pos;
108 u32 copy_len;
109 int err;
110
111 if (!hash_pos)
112 return -EINVAL;
113
114 dash_pos = strchr(hash_pos, '-');
115 if (!dash_pos)
116 return -EINVAL;
117
118 copy_len = dash_pos - hash_pos - 1;
119 if (copy_len >= sizeof(buf))
120 return -EINVAL;
121
122 strncpy(buf, hash_pos + 1, copy_len);
123
124 err = kstrtou32(buf, 10, index);
125 if (err)
126 return err;
127
128 strncpy(attr, dash_pos + 1, MAX_ATTR_LEN);
129
130 return 0;
131}
132
133/*
134 * This function translates the DT node name into the 'hwmon' attribute name.
135 * IBMPOWERNV device node appear like cooling-fan#2-data, amb-temp#1-thrs etc.
136 * which need to be mapped as fan2_input, temp1_max respectively before
137 * populating them inside hwmon device class.
138 */
139static int __init create_hwmon_attr_name(struct device *dev, enum sensors type,
140 const char *node_name,
141 char *hwmon_attr_name)
142{
143 char attr_suffix[MAX_ATTR_LEN];
144 char *attr_name;
145 u32 index;
146 int err;
147
148 err = get_sensor_index_attr(node_name, &index, attr_suffix);
149 if (err) {
150 dev_err(dev, "Sensor device node name '%s' is invalid\n",
151 node_name);
152 return err;
153 }
154
155 if (!strcmp(attr_suffix, DT_FAULT_ATTR_SUFFIX)) {
156 attr_name = "fault";
157 } else if (!strcmp(attr_suffix, DT_DATA_ATTR_SUFFIX)) {
158 attr_name = "input";
159 } else if (!strcmp(attr_suffix, DT_THRESHOLD_ATTR_SUFFIX)) {
160 if (type == AMBIENT_TEMP)
161 attr_name = "max";
162 else if (type == FAN)
163 attr_name = "min";
164 else
165 return -ENOENT;
166 } else {
167 return -ENOENT;
168 }
169
170 snprintf(hwmon_attr_name, MAX_ATTR_LEN, "%s%d_%s",
171 sensor_groups[type].name, index, attr_name);
172 return 0;
173}
174
175static int __init populate_attr_groups(struct platform_device *pdev)
176{
177 struct platform_data *pdata = platform_get_drvdata(pdev);
178 const struct attribute_group **pgroups = pdata->attr_groups;
179 struct device_node *opal, *np;
180 enum sensors type;
181
182 opal = of_find_node_by_path("/ibm,opal/sensors");
183 if (!opal) {
184 dev_err(&pdev->dev, "Opal node 'sensors' not found\n");
185 return -ENODEV;
186 }
187
188 for_each_child_of_node(opal, np) {
189 if (np->name == NULL)
190 continue;
191
192 for (type = 0; type < MAX_SENSOR_TYPE; type++)
193 if (of_device_is_compatible(np,
194 sensor_groups[type].compatible)) {
195 sensor_groups[type].attr_count++;
196 break;
197 }
198 }
199
200 of_node_put(opal);
201
202 for (type = 0; type < MAX_SENSOR_TYPE; type++) {
203 sensor_groups[type].group.attrs = devm_kzalloc(&pdev->dev,
204 sizeof(struct attribute *) *
205 (sensor_groups[type].attr_count + 1),
206 GFP_KERNEL);
207 if (!sensor_groups[type].group.attrs)
208 return -ENOMEM;
209
210 pgroups[type] = &sensor_groups[type].group;
211 pdata->sensors_count += sensor_groups[type].attr_count;
212 sensor_groups[type].attr_count = 0;
213 }
214
215 return 0;
216}
217
218/*
219 * Iterate through the device tree for each child of 'sensors' node, create
220 * a sysfs attribute file, the file is named by translating the DT node name
221 * to the name required by the higher 'hwmon' driver like fan1_input, temp1_max
222 * etc..
223 */
224static int __init create_device_attrs(struct platform_device *pdev)
225{
226 struct platform_data *pdata = platform_get_drvdata(pdev);
227 const struct attribute_group **pgroups = pdata->attr_groups;
228 struct device_node *opal, *np;
229 struct sensor_data *sdata;
230 u32 sensor_id;
231 enum sensors type;
232 u32 count = 0;
233 int err = 0;
234
235 opal = of_find_node_by_path("/ibm,opal/sensors");
236 sdata = devm_kzalloc(&pdev->dev, pdata->sensors_count * sizeof(*sdata),
237 GFP_KERNEL);
238 if (!sdata) {
239 err = -ENOMEM;
240 goto exit_put_node;
241 }
242
243 for_each_child_of_node(opal, np) {
244 if (np->name == NULL)
245 continue;
246
247 for (type = 0; type < MAX_SENSOR_TYPE; type++)
248 if (of_device_is_compatible(np,
249 sensor_groups[type].compatible))
250 break;
251
252 if (type == MAX_SENSOR_TYPE)
253 continue;
254
255 if (of_property_read_u32(np, "sensor-id", &sensor_id)) {
256 dev_info(&pdev->dev,
257 "'sensor-id' missing in the node '%s'\n",
258 np->name);
259 continue;
260 }
261
262 sdata[count].id = sensor_id;
263 sdata[count].type = type;
264 err = create_hwmon_attr_name(&pdev->dev, type, np->name,
265 sdata[count].name);
266 if (err)
267 goto exit_put_node;
268
269 sysfs_attr_init(&sdata[count].dev_attr.attr);
270 sdata[count].dev_attr.attr.name = sdata[count].name;
271 sdata[count].dev_attr.attr.mode = S_IRUGO;
272 sdata[count].dev_attr.show = show_sensor;
273
274 pgroups[type]->attrs[sensor_groups[type].attr_count++] =
275 &sdata[count++].dev_attr.attr;
276 }
277
278exit_put_node:
279 of_node_put(opal);
280 return err;
281}
282
283static int __init ibmpowernv_probe(struct platform_device *pdev)
284{
285 struct platform_data *pdata;
286 struct device *hwmon_dev;
287 int err;
288
289 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
290 if (!pdata)
291 return -ENOMEM;
292
293 platform_set_drvdata(pdev, pdata);
294 pdata->sensors_count = 0;
295 err = populate_attr_groups(pdev);
296 if (err)
297 return err;
298
299 /* Create sysfs attribute data for each sensor found in the DT */
300 err = create_device_attrs(pdev);
301 if (err)
302 return err;
303
304 /* Finally, register with hwmon */
305 hwmon_dev = devm_hwmon_device_register_with_groups(&pdev->dev, DRVNAME,
306 pdata,
307 pdata->attr_groups);
308
309 return PTR_ERR_OR_ZERO(hwmon_dev);
310}
311
312static struct platform_driver ibmpowernv_driver = {
313 .driver = {
314 .owner = THIS_MODULE,
315 .name = DRVNAME,
316 },
317};
318
319static int __init ibmpowernv_init(void)
320{
321 int err;
322
323 pdevice = platform_device_alloc(DRVNAME, 0);
324 if (!pdevice) {
325 pr_err("Device allocation failed\n");
326 err = -ENOMEM;
327 goto exit;
328 }
329
330 err = platform_device_add(pdevice);
331 if (err) {
332 pr_err("Device addition failed (%d)\n", err);
333 goto exit_device_put;
334 }
335
336 err = platform_driver_probe(&ibmpowernv_driver, ibmpowernv_probe);
337 if (err) {
338 pr_err("Platfrom driver probe failed\n");
339 goto exit_device_del;
340 }
341
342 return 0;
343
344exit_device_del:
345 platform_device_del(pdevice);
346exit_device_put:
347 platform_device_put(pdevice);
348exit:
349 return err;
350}
351
352static void __exit ibmpowernv_exit(void)
353{
354 platform_driver_unregister(&ibmpowernv_driver);
355 platform_device_unregister(pdevice);
356}
357
358MODULE_AUTHOR("Neelesh Gupta <neelegup@linux.vnet.ibm.com>");
359MODULE_DESCRIPTION("IBM POWERNV platform sensors");
360MODULE_LICENSE("GPL");
361
362module_init(ibmpowernv_init);
363module_exit(ibmpowernv_exit);
diff --git a/drivers/hwmon/lineage-pem.c b/drivers/hwmon/lineage-pem.c
index ebbb9f4f27a3..84d791bdb62d 100644
--- a/drivers/hwmon/lineage-pem.c
+++ b/drivers/hwmon/lineage-pem.c
@@ -125,7 +125,8 @@
125#define FAN_SPEED_LEN 5 125#define FAN_SPEED_LEN 5
126 126
127struct pem_data { 127struct pem_data {
128 struct device *hwmon_dev; 128 struct i2c_client *client;
129 const struct attribute_group *groups[4];
129 130
130 struct mutex update_lock; 131 struct mutex update_lock;
131 bool valid; 132 bool valid;
@@ -160,8 +161,8 @@ abort:
160 161
161static struct pem_data *pem_update_device(struct device *dev) 162static struct pem_data *pem_update_device(struct device *dev)
162{ 163{
163 struct i2c_client *client = to_i2c_client(dev); 164 struct pem_data *data = dev_get_drvdata(dev);
164 struct pem_data *data = i2c_get_clientdata(client); 165 struct i2c_client *client = data->client;
165 struct pem_data *ret = data; 166 struct pem_data *ret = data;
166 167
167 mutex_lock(&data->update_lock); 168 mutex_lock(&data->update_lock);
@@ -444,18 +445,20 @@ static int pem_probe(struct i2c_client *client,
444 const struct i2c_device_id *id) 445 const struct i2c_device_id *id)
445{ 446{
446 struct i2c_adapter *adapter = client->adapter; 447 struct i2c_adapter *adapter = client->adapter;
448 struct device *dev = &client->dev;
449 struct device *hwmon_dev;
447 struct pem_data *data; 450 struct pem_data *data;
448 int ret; 451 int ret, idx = 0;
449 452
450 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BLOCK_DATA 453 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BLOCK_DATA
451 | I2C_FUNC_SMBUS_WRITE_BYTE)) 454 | I2C_FUNC_SMBUS_WRITE_BYTE))
452 return -ENODEV; 455 return -ENODEV;
453 456
454 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL); 457 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
455 if (!data) 458 if (!data)
456 return -ENOMEM; 459 return -ENOMEM;
457 460
458 i2c_set_clientdata(client, data); 461 data->client = client;
459 mutex_init(&data->update_lock); 462 mutex_init(&data->update_lock);
460 463
461 /* 464 /*
@@ -471,14 +474,12 @@ static int pem_probe(struct i2c_client *client,
471 if (ret < 0) 474 if (ret < 0)
472 return ret; 475 return ret;
473 476
474 dev_info(&client->dev, "Firmware revision %d.%d.%d\n", 477 dev_info(dev, "Firmware revision %d.%d.%d\n",
475 data->firmware_rev[0], data->firmware_rev[1], 478 data->firmware_rev[0], data->firmware_rev[1],
476 data->firmware_rev[2]); 479 data->firmware_rev[2]);
477 480
478 /* Register sysfs hooks */ 481 /* sysfs hooks */
479 ret = sysfs_create_group(&client->dev.kobj, &pem_group); 482 data->groups[idx++] = &pem_group;
480 if (ret)
481 return ret;
482 483
483 /* 484 /*
484 * Check if input readings are supported. 485 * Check if input readings are supported.
@@ -501,12 +502,9 @@ static int pem_probe(struct i2c_client *client,
501 data->input_string[2] || data->input_string[3])) 502 data->input_string[2] || data->input_string[3]))
502 data->input_length = sizeof(data->input_string); 503 data->input_length = sizeof(data->input_string);
503 } 504 }
504 ret = 0; 505
505 if (data->input_length) { 506 if (data->input_length)
506 ret = sysfs_create_group(&client->dev.kobj, &pem_input_group); 507 data->groups[idx++] = &pem_input_group;
507 if (ret)
508 goto out_remove_groups;
509 }
510 508
511 /* 509 /*
512 * Check if fan speed readings are supported. 510 * Check if fan speed readings are supported.
@@ -520,37 +518,12 @@ static int pem_probe(struct i2c_client *client,
520 if (!ret && (data->fan_speed[0] || data->fan_speed[1] || 518 if (!ret && (data->fan_speed[0] || data->fan_speed[1] ||
521 data->fan_speed[2] || data->fan_speed[3])) { 519 data->fan_speed[2] || data->fan_speed[3])) {
522 data->fans_supported = true; 520 data->fans_supported = true;
523 ret = sysfs_create_group(&client->dev.kobj, &pem_fan_group); 521 data->groups[idx++] = &pem_fan_group;
524 if (ret)
525 goto out_remove_groups;
526 }
527
528 data->hwmon_dev = hwmon_device_register(&client->dev);
529 if (IS_ERR(data->hwmon_dev)) {
530 ret = PTR_ERR(data->hwmon_dev);
531 goto out_remove_groups;
532 } 522 }
533 523
534 return 0; 524 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
535 525 data, data->groups);
536out_remove_groups: 526 return PTR_ERR_OR_ZERO(hwmon_dev);
537 sysfs_remove_group(&client->dev.kobj, &pem_input_group);
538 sysfs_remove_group(&client->dev.kobj, &pem_fan_group);
539 sysfs_remove_group(&client->dev.kobj, &pem_group);
540 return ret;
541}
542
543static int pem_remove(struct i2c_client *client)
544{
545 struct pem_data *data = i2c_get_clientdata(client);
546
547 hwmon_device_unregister(data->hwmon_dev);
548
549 sysfs_remove_group(&client->dev.kobj, &pem_input_group);
550 sysfs_remove_group(&client->dev.kobj, &pem_fan_group);
551 sysfs_remove_group(&client->dev.kobj, &pem_group);
552
553 return 0;
554} 527}
555 528
556static const struct i2c_device_id pem_id[] = { 529static const struct i2c_device_id pem_id[] = {
@@ -564,7 +537,6 @@ static struct i2c_driver pem_driver = {
564 .name = "lineage_pem", 537 .name = "lineage_pem",
565 }, 538 },
566 .probe = pem_probe, 539 .probe = pem_probe,
567 .remove = pem_remove,
568 .id_table = pem_id, 540 .id_table = pem_id,
569}; 541};
570 542
diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c
index 848b9611151f..33bfdb444138 100644
--- a/drivers/hwmon/lm63.c
+++ b/drivers/hwmon/lm63.c
@@ -126,24 +126,17 @@ static const unsigned short normal_i2c[] = { 0x18, 0x4c, 0x4e, I2C_CLIENT_END };
126#define FAN_TO_REG(val) ((val) <= 82 ? 0xFFFC : \ 126#define FAN_TO_REG(val) ((val) <= 82 ? 0xFFFC : \
127 (5400000 / (val)) & 0xFFFC) 127 (5400000 / (val)) & 0xFFFC)
128#define TEMP8_FROM_REG(reg) ((reg) * 1000) 128#define TEMP8_FROM_REG(reg) ((reg) * 1000)
129#define TEMP8_TO_REG(val) ((val) <= -128000 ? -128 : \ 129#define TEMP8_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val((val), -128000, \
130 (val) >= 127000 ? 127 : \ 130 127000), 1000)
131 (val) < 0 ? ((val) - 500) / 1000 : \ 131#define TEMP8U_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val((val), 0, \
132 ((val) + 500) / 1000) 132 255000), 1000)
133#define TEMP8U_TO_REG(val) ((val) <= 0 ? 0 : \
134 (val) >= 255000 ? 255 : \
135 ((val) + 500) / 1000)
136#define TEMP11_FROM_REG(reg) ((reg) / 32 * 125) 133#define TEMP11_FROM_REG(reg) ((reg) / 32 * 125)
137#define TEMP11_TO_REG(val) ((val) <= -128000 ? 0x8000 : \ 134#define TEMP11_TO_REG(val) (DIV_ROUND_CLOSEST(clamp_val((val), -128000, \
138 (val) >= 127875 ? 0x7FE0 : \ 135 127875), 125) * 32)
139 (val) < 0 ? ((val) - 62) / 125 * 32 : \ 136#define TEMP11U_TO_REG(val) (DIV_ROUND_CLOSEST(clamp_val((val), 0, \
140 ((val) + 62) / 125 * 32) 137 255875), 125) * 32)
141#define TEMP11U_TO_REG(val) ((val) <= 0 ? 0 : \ 138#define HYST_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val((val), 0, 127000), \
142 (val) >= 255875 ? 0xFFE0 : \ 139 1000)
143 ((val) + 62) / 125 * 32)
144#define HYST_TO_REG(val) ((val) <= 0 ? 0 : \
145 (val) >= 127000 ? 127 : \
146 ((val) + 500) / 1000)
147 140
148#define UPDATE_INTERVAL(max, rate) \ 141#define UPDATE_INTERVAL(max, rate) \
149 ((1000 << (LM63_MAX_CONVRATE - (rate))) / (max)) 142 ((1000 << (LM63_MAX_CONVRATE - (rate))) / (max))
diff --git a/drivers/hwmon/lm75.c b/drivers/hwmon/lm75.c
index 479ffbeed3f8..d16dbb33a531 100644
--- a/drivers/hwmon/lm75.c
+++ b/drivers/hwmon/lm75.c
@@ -52,6 +52,7 @@ enum lm75_type { /* keep sorted in alphabetical order */
52 tmp100, 52 tmp100,
53 tmp101, 53 tmp101,
54 tmp105, 54 tmp105,
55 tmp112,
55 tmp175, 56 tmp175,
56 tmp275, 57 tmp275,
57 tmp75, 58 tmp75,
@@ -255,6 +256,12 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
255 data->sample_time = HZ; 256 data->sample_time = HZ;
256 clr_mask |= 1 << 7; /* not one-shot mode */ 257 clr_mask |= 1 << 7; /* not one-shot mode */
257 break; 258 break;
259 case tmp112:
260 set_mask |= 3 << 5; /* 12-bit mode */
261 clr_mask |= 1 << 7; /* not one-shot mode */
262 data->resolution = 12;
263 data->sample_time = HZ / 4;
264 break;
258 case tmp105: 265 case tmp105:
259 case tmp175: 266 case tmp175:
260 case tmp275: 267 case tmp275:
@@ -323,6 +330,7 @@ static const struct i2c_device_id lm75_ids[] = {
323 { "tmp100", tmp100, }, 330 { "tmp100", tmp100, },
324 { "tmp101", tmp101, }, 331 { "tmp101", tmp101, },
325 { "tmp105", tmp105, }, 332 { "tmp105", tmp105, },
333 { "tmp112", tmp112, },
326 { "tmp175", tmp175, }, 334 { "tmp175", tmp175, },
327 { "tmp275", tmp275, }, 335 { "tmp275", tmp275, },
328 { "tmp75", tmp75, }, 336 { "tmp75", tmp75, },
diff --git a/drivers/hwmon/lm77.c b/drivers/hwmon/lm77.c
index 5ceb443b938d..69b05cc2f60e 100644
--- a/drivers/hwmon/lm77.c
+++ b/drivers/hwmon/lm77.c
@@ -80,8 +80,7 @@ struct lm77_data {
80 */ 80 */
81static inline s16 LM77_TEMP_TO_REG(int temp) 81static inline s16 LM77_TEMP_TO_REG(int temp)
82{ 82{
83 int ntemp = clamp_val(temp, LM77_TEMP_MIN, LM77_TEMP_MAX); 83 return (temp / 500) * 8;
84 return (ntemp / 500) * 8;
85} 84}
86 85
87static inline int LM77_TEMP_FROM_REG(s16 reg) 86static inline int LM77_TEMP_FROM_REG(s16 reg)
@@ -175,6 +174,7 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *devattr,
175 if (err) 174 if (err)
176 return err; 175 return err;
177 176
177 val = clamp_val(val, LM77_TEMP_MIN, LM77_TEMP_MAX);
178 mutex_lock(&data->update_lock); 178 mutex_lock(&data->update_lock);
179 data->temp[nr] = val; 179 data->temp[nr] = val;
180 lm77_write_value(client, temp_regs[nr], LM77_TEMP_TO_REG(val)); 180 lm77_write_value(client, temp_regs[nr], LM77_TEMP_TO_REG(val));
@@ -192,15 +192,16 @@ static ssize_t set_temp_hyst(struct device *dev,
192{ 192{
193 struct lm77_data *data = dev_get_drvdata(dev); 193 struct lm77_data *data = dev_get_drvdata(dev);
194 struct i2c_client *client = data->client; 194 struct i2c_client *client = data->client;
195 unsigned long val; 195 long val;
196 int err; 196 int err;
197 197
198 err = kstrtoul(buf, 10, &val); 198 err = kstrtol(buf, 10, &val);
199 if (err) 199 if (err)
200 return err; 200 return err;
201 201
202 mutex_lock(&data->update_lock); 202 mutex_lock(&data->update_lock);
203 data->temp[t_hyst] = data->temp[t_crit] - val; 203 val = clamp_val(data->temp[t_crit] - val, LM77_TEMP_MIN, LM77_TEMP_MAX);
204 data->temp[t_hyst] = val;
204 lm77_write_value(client, LM77_REG_TEMP_HYST, 205 lm77_write_value(client, LM77_REG_TEMP_HYST,
205 LM77_TEMP_TO_REG(data->temp[t_hyst])); 206 LM77_TEMP_TO_REG(data->temp[t_hyst]));
206 mutex_unlock(&data->update_lock); 207 mutex_unlock(&data->update_lock);
diff --git a/drivers/hwmon/lm78.c b/drivers/hwmon/lm78.c
index 9efadfc851bc..759661c7d480 100644
--- a/drivers/hwmon/lm78.c
+++ b/drivers/hwmon/lm78.c
@@ -108,7 +108,7 @@ static inline int FAN_FROM_REG(u8 val, int div)
108 * TEMP: mC (-128C to +127C) 108 * TEMP: mC (-128C to +127C)
109 * REG: 1C/bit, two's complement 109 * REG: 1C/bit, two's complement
110 */ 110 */
111static inline s8 TEMP_TO_REG(int val) 111static inline s8 TEMP_TO_REG(long val)
112{ 112{
113 int nval = clamp_val(val, -128000, 127000) ; 113 int nval = clamp_val(val, -128000, 127000) ;
114 return nval < 0 ? (nval - 500) / 1000 : (nval + 500) / 1000; 114 return nval < 0 ? (nval - 500) / 1000 : (nval + 500) / 1000;
@@ -123,7 +123,6 @@ static inline int TEMP_FROM_REG(s8 val)
123 123
124struct lm78_data { 124struct lm78_data {
125 struct i2c_client *client; 125 struct i2c_client *client;
126 struct device *hwmon_dev;
127 struct mutex lock; 126 struct mutex lock;
128 enum chips type; 127 enum chips type;
129 128
@@ -468,7 +467,7 @@ static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7);
468static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11); 467static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11);
469static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4); 468static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4);
470 469
471static struct attribute *lm78_attributes[] = { 470static struct attribute *lm78_attrs[] = {
472 &sensor_dev_attr_in0_input.dev_attr.attr, 471 &sensor_dev_attr_in0_input.dev_attr.attr,
473 &sensor_dev_attr_in0_min.dev_attr.attr, 472 &sensor_dev_attr_in0_min.dev_attr.attr,
474 &sensor_dev_attr_in0_max.dev_attr.attr, 473 &sensor_dev_attr_in0_max.dev_attr.attr,
@@ -519,9 +518,7 @@ static struct attribute *lm78_attributes[] = {
519 NULL 518 NULL
520}; 519};
521 520
522static const struct attribute_group lm78_group = { 521ATTRIBUTE_GROUPS(lm78);
523 .attrs = lm78_attributes,
524};
525 522
526/* 523/*
527 * ISA related code 524 * ISA related code
@@ -533,19 +530,6 @@ static struct platform_device *pdev;
533 530
534static unsigned short isa_address = 0x290; 531static unsigned short isa_address = 0x290;
535 532
536/*
537 * I2C devices get this name attribute automatically, but for ISA devices
538 * we must create it by ourselves.
539 */
540static ssize_t show_name(struct device *dev, struct device_attribute
541 *devattr, char *buf)
542{
543 struct lm78_data *data = dev_get_drvdata(dev);
544
545 return sprintf(buf, "%s\n", data->name);
546}
547static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
548
549static struct lm78_data *lm78_data_if_isa(void) 533static struct lm78_data *lm78_data_if_isa(void)
550{ 534{
551 return pdev ? platform_get_drvdata(pdev) : NULL; 535 return pdev ? platform_get_drvdata(pdev) : NULL;
@@ -661,46 +645,23 @@ static int lm78_i2c_detect(struct i2c_client *client,
661static int lm78_i2c_probe(struct i2c_client *client, 645static int lm78_i2c_probe(struct i2c_client *client,
662 const struct i2c_device_id *id) 646 const struct i2c_device_id *id)
663{ 647{
648 struct device *dev = &client->dev;
649 struct device *hwmon_dev;
664 struct lm78_data *data; 650 struct lm78_data *data;
665 int err;
666 651
667 data = devm_kzalloc(&client->dev, sizeof(struct lm78_data), GFP_KERNEL); 652 data = devm_kzalloc(dev, sizeof(struct lm78_data), GFP_KERNEL);
668 if (!data) 653 if (!data)
669 return -ENOMEM; 654 return -ENOMEM;
670 655
671 i2c_set_clientdata(client, data);
672 data->client = client; 656 data->client = client;
673 data->type = id->driver_data; 657 data->type = id->driver_data;
674 658
675 /* Initialize the LM78 chip */ 659 /* Initialize the LM78 chip */
676 lm78_init_device(data); 660 lm78_init_device(data);
677 661
678 /* Register sysfs hooks */ 662 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
679 err = sysfs_create_group(&client->dev.kobj, &lm78_group); 663 data, lm78_groups);
680 if (err) 664 return PTR_ERR_OR_ZERO(hwmon_dev);
681 return err;
682
683 data->hwmon_dev = hwmon_device_register(&client->dev);
684 if (IS_ERR(data->hwmon_dev)) {
685 err = PTR_ERR(data->hwmon_dev);
686 goto error;
687 }
688
689 return 0;
690
691error:
692 sysfs_remove_group(&client->dev.kobj, &lm78_group);
693 return err;
694}
695
696static int lm78_i2c_remove(struct i2c_client *client)
697{
698 struct lm78_data *data = i2c_get_clientdata(client);
699
700 hwmon_device_unregister(data->hwmon_dev);
701 sysfs_remove_group(&client->dev.kobj, &lm78_group);
702
703 return 0;
704} 665}
705 666
706static const struct i2c_device_id lm78_i2c_id[] = { 667static const struct i2c_device_id lm78_i2c_id[] = {
@@ -716,7 +677,6 @@ static struct i2c_driver lm78_driver = {
716 .name = "lm78", 677 .name = "lm78",
717 }, 678 },
718 .probe = lm78_i2c_probe, 679 .probe = lm78_i2c_probe,
719 .remove = lm78_i2c_remove,
720 .id_table = lm78_i2c_id, 680 .id_table = lm78_i2c_id,
721 .detect = lm78_i2c_detect, 681 .detect = lm78_i2c_detect,
722 .address_list = normal_i2c, 682 .address_list = normal_i2c,
@@ -839,17 +799,18 @@ static struct lm78_data *lm78_update_device(struct device *dev)
839#ifdef CONFIG_ISA 799#ifdef CONFIG_ISA
840static int lm78_isa_probe(struct platform_device *pdev) 800static int lm78_isa_probe(struct platform_device *pdev)
841{ 801{
842 int err; 802 struct device *dev = &pdev->dev;
803 struct device *hwmon_dev;
843 struct lm78_data *data; 804 struct lm78_data *data;
844 struct resource *res; 805 struct resource *res;
845 806
846 /* Reserve the ISA region */ 807 /* Reserve the ISA region */
847 res = platform_get_resource(pdev, IORESOURCE_IO, 0); 808 res = platform_get_resource(pdev, IORESOURCE_IO, 0);
848 if (!devm_request_region(&pdev->dev, res->start + LM78_ADDR_REG_OFFSET, 809 if (!devm_request_region(dev, res->start + LM78_ADDR_REG_OFFSET,
849 2, "lm78")) 810 2, "lm78"))
850 return -EBUSY; 811 return -EBUSY;
851 812
852 data = devm_kzalloc(&pdev->dev, sizeof(struct lm78_data), GFP_KERNEL); 813 data = devm_kzalloc(dev, sizeof(struct lm78_data), GFP_KERNEL);
853 if (!data) 814 if (!data)
854 return -ENOMEM; 815 return -ENOMEM;
855 816
@@ -868,37 +829,9 @@ static int lm78_isa_probe(struct platform_device *pdev)
868 /* Initialize the LM78 chip */ 829 /* Initialize the LM78 chip */
869 lm78_init_device(data); 830 lm78_init_device(data);
870 831
871 /* Register sysfs hooks */ 832 hwmon_dev = devm_hwmon_device_register_with_groups(dev, data->name,
872 err = sysfs_create_group(&pdev->dev.kobj, &lm78_group); 833 data, lm78_groups);
873 if (err) 834 return PTR_ERR_OR_ZERO(hwmon_dev);
874 goto exit_remove_files;
875 err = device_create_file(&pdev->dev, &dev_attr_name);
876 if (err)
877 goto exit_remove_files;
878
879 data->hwmon_dev = hwmon_device_register(&pdev->dev);
880 if (IS_ERR(data->hwmon_dev)) {
881 err = PTR_ERR(data->hwmon_dev);
882 goto exit_remove_files;
883 }
884
885 return 0;
886
887 exit_remove_files:
888 sysfs_remove_group(&pdev->dev.kobj, &lm78_group);
889 device_remove_file(&pdev->dev, &dev_attr_name);
890 return err;
891}
892
893static int lm78_isa_remove(struct platform_device *pdev)
894{
895 struct lm78_data *data = platform_get_drvdata(pdev);
896
897 hwmon_device_unregister(data->hwmon_dev);
898 sysfs_remove_group(&pdev->dev.kobj, &lm78_group);
899 device_remove_file(&pdev->dev, &dev_attr_name);
900
901 return 0;
902} 835}
903 836
904static struct platform_driver lm78_isa_driver = { 837static struct platform_driver lm78_isa_driver = {
@@ -907,7 +840,6 @@ static struct platform_driver lm78_isa_driver = {
907 .name = "lm78", 840 .name = "lm78",
908 }, 841 },
909 .probe = lm78_isa_probe, 842 .probe = lm78_isa_probe,
910 .remove = lm78_isa_remove,
911}; 843};
912 844
913/* return 1 if a supported chip is found, 0 otherwise */ 845/* return 1 if a supported chip is found, 0 otherwise */
diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c
index b0129a54e1a6..2b4b419273fe 100644
--- a/drivers/hwmon/lm85.c
+++ b/drivers/hwmon/lm85.c
@@ -121,7 +121,6 @@ enum chips {
121#define EMC6D102_REG_EXTEND_ADC3 0x87 121#define EMC6D102_REG_EXTEND_ADC3 0x87
122#define EMC6D102_REG_EXTEND_ADC4 0x88 122#define EMC6D102_REG_EXTEND_ADC4 0x88
123 123
124
125/* 124/*
126 * Conversions. Rounding and limit checking is only done on the TO_REG 125 * Conversions. Rounding and limit checking is only done on the TO_REG
127 * variants. Note that you should be a bit careful with which arguments 126 * variants. Note that you should be a bit careful with which arguments
@@ -155,7 +154,7 @@ static inline u16 FAN_TO_REG(unsigned long val)
155 154
156/* Temperature is reported in .001 degC increments */ 155/* Temperature is reported in .001 degC increments */
157#define TEMP_TO_REG(val) \ 156#define TEMP_TO_REG(val) \
158 clamp_val(SCALE(val, 1000, 1), -127, 127) 157 DIV_ROUND_CLOSEST(clamp_val((val), -127000, 127000), 1000)
159#define TEMPEXT_FROM_REG(val, ext) \ 158#define TEMPEXT_FROM_REG(val, ext) \
160 SCALE(((val) << 4) + (ext), 16, 1000) 159 SCALE(((val) << 4) + (ext), 16, 1000)
161#define TEMP_FROM_REG(val) ((val) * 1000) 160#define TEMP_FROM_REG(val) ((val) * 1000)
@@ -189,7 +188,7 @@ static const int lm85_range_map[] = {
189 13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000 188 13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000
190}; 189};
191 190
192static int RANGE_TO_REG(int range) 191static int RANGE_TO_REG(long range)
193{ 192{
194 int i; 193 int i;
195 194
@@ -211,7 +210,7 @@ static const int adm1027_freq_map[8] = { /* 1 Hz */
211 11, 15, 22, 29, 35, 44, 59, 88 210 11, 15, 22, 29, 35, 44, 59, 88
212}; 211};
213 212
214static int FREQ_TO_REG(const int *map, int freq) 213static int FREQ_TO_REG(const int *map, unsigned long freq)
215{ 214{
216 int i; 215 int i;
217 216
@@ -303,7 +302,8 @@ struct lm85_autofan {
303 * The structure is dynamically allocated. 302 * The structure is dynamically allocated.
304 */ 303 */
305struct lm85_data { 304struct lm85_data {
306 struct device *hwmon_dev; 305 struct i2c_client *client;
306 const struct attribute_group *groups[6];
307 const int *freq_map; 307 const int *freq_map;
308 enum chips type; 308 enum chips type;
309 309
@@ -334,44 +334,235 @@ struct lm85_data {
334 struct lm85_zone zone[3]; 334 struct lm85_zone zone[3];
335}; 335};
336 336
337static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info); 337static int lm85_read_value(struct i2c_client *client, u8 reg)
338static int lm85_probe(struct i2c_client *client, 338{
339 const struct i2c_device_id *id); 339 int res;
340static int lm85_remove(struct i2c_client *client);
341 340
342static int lm85_read_value(struct i2c_client *client, u8 reg); 341 /* What size location is it? */
343static void lm85_write_value(struct i2c_client *client, u8 reg, int value); 342 switch (reg) {
344static struct lm85_data *lm85_update_device(struct device *dev); 343 case LM85_REG_FAN(0): /* Read WORD data */
344 case LM85_REG_FAN(1):
345 case LM85_REG_FAN(2):
346 case LM85_REG_FAN(3):
347 case LM85_REG_FAN_MIN(0):
348 case LM85_REG_FAN_MIN(1):
349 case LM85_REG_FAN_MIN(2):
350 case LM85_REG_FAN_MIN(3):
351 case LM85_REG_ALARM1: /* Read both bytes at once */
352 res = i2c_smbus_read_byte_data(client, reg) & 0xff;
353 res |= i2c_smbus_read_byte_data(client, reg + 1) << 8;
354 break;
355 default: /* Read BYTE data */
356 res = i2c_smbus_read_byte_data(client, reg);
357 break;
358 }
345 359
360 return res;
361}
346 362
347static const struct i2c_device_id lm85_id[] = { 363static void lm85_write_value(struct i2c_client *client, u8 reg, int value)
348 { "adm1027", adm1027 }, 364{
349 { "adt7463", adt7463 }, 365 switch (reg) {
350 { "adt7468", adt7468 }, 366 case LM85_REG_FAN(0): /* Write WORD data */
351 { "lm85", lm85 }, 367 case LM85_REG_FAN(1):
352 { "lm85b", lm85 }, 368 case LM85_REG_FAN(2):
353 { "lm85c", lm85 }, 369 case LM85_REG_FAN(3):
354 { "emc6d100", emc6d100 }, 370 case LM85_REG_FAN_MIN(0):
355 { "emc6d101", emc6d100 }, 371 case LM85_REG_FAN_MIN(1):
356 { "emc6d102", emc6d102 }, 372 case LM85_REG_FAN_MIN(2):
357 { "emc6d103", emc6d103 }, 373 case LM85_REG_FAN_MIN(3):
358 { "emc6d103s", emc6d103s }, 374 /* NOTE: ALARM is read only, so not included here */
359 { } 375 i2c_smbus_write_byte_data(client, reg, value & 0xff);
360}; 376 i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
361MODULE_DEVICE_TABLE(i2c, lm85_id); 377 break;
378 default: /* Write BYTE data */
379 i2c_smbus_write_byte_data(client, reg, value);
380 break;
381 }
382}
362 383
363static struct i2c_driver lm85_driver = { 384static struct lm85_data *lm85_update_device(struct device *dev)
364 .class = I2C_CLASS_HWMON, 385{
365 .driver = { 386 struct lm85_data *data = dev_get_drvdata(dev);
366 .name = "lm85", 387 struct i2c_client *client = data->client;
367 }, 388 int i;
368 .probe = lm85_probe, 389
369 .remove = lm85_remove, 390 mutex_lock(&data->update_lock);
370 .id_table = lm85_id, 391
371 .detect = lm85_detect, 392 if (!data->valid ||
372 .address_list = normal_i2c, 393 time_after(jiffies, data->last_reading + LM85_DATA_INTERVAL)) {
373}; 394 /* Things that change quickly */
395 dev_dbg(&client->dev, "Reading sensor values\n");
396
397 /*
398 * Have to read extended bits first to "freeze" the
399 * more significant bits that are read later.
400 * There are 2 additional resolution bits per channel and we
401 * have room for 4, so we shift them to the left.
402 */
403 if (data->type == adm1027 || data->type == adt7463 ||
404 data->type == adt7468) {
405 int ext1 = lm85_read_value(client,
406 ADM1027_REG_EXTEND_ADC1);
407 int ext2 = lm85_read_value(client,
408 ADM1027_REG_EXTEND_ADC2);
409 int val = (ext1 << 8) + ext2;
410
411 for (i = 0; i <= 4; i++)
412 data->in_ext[i] =
413 ((val >> (i * 2)) & 0x03) << 2;
414
415 for (i = 0; i <= 2; i++)
416 data->temp_ext[i] =
417 (val >> ((i + 4) * 2)) & 0x0c;
418 }
419
420 data->vid = lm85_read_value(client, LM85_REG_VID);
421
422 for (i = 0; i <= 3; ++i) {
423 data->in[i] =
424 lm85_read_value(client, LM85_REG_IN(i));
425 data->fan[i] =
426 lm85_read_value(client, LM85_REG_FAN(i));
427 }
428
429 if (!data->has_vid5)
430 data->in[4] = lm85_read_value(client, LM85_REG_IN(4));
431
432 if (data->type == adt7468)
433 data->cfg5 = lm85_read_value(client, ADT7468_REG_CFG5);
374 434
435 for (i = 0; i <= 2; ++i) {
436 data->temp[i] =
437 lm85_read_value(client, LM85_REG_TEMP(i));
438 data->pwm[i] =
439 lm85_read_value(client, LM85_REG_PWM(i));
440
441 if (IS_ADT7468_OFF64(data))
442 data->temp[i] -= 64;
443 }
444
445 data->alarms = lm85_read_value(client, LM85_REG_ALARM1);
446
447 if (data->type == emc6d100) {
448 /* Three more voltage sensors */
449 for (i = 5; i <= 7; ++i) {
450 data->in[i] = lm85_read_value(client,
451 EMC6D100_REG_IN(i));
452 }
453 /* More alarm bits */
454 data->alarms |= lm85_read_value(client,
455 EMC6D100_REG_ALARM3) << 16;
456 } else if (data->type == emc6d102 || data->type == emc6d103 ||
457 data->type == emc6d103s) {
458 /*
459 * Have to read LSB bits after the MSB ones because
460 * the reading of the MSB bits has frozen the
461 * LSBs (backward from the ADM1027).
462 */
463 int ext1 = lm85_read_value(client,
464 EMC6D102_REG_EXTEND_ADC1);
465 int ext2 = lm85_read_value(client,
466 EMC6D102_REG_EXTEND_ADC2);
467 int ext3 = lm85_read_value(client,
468 EMC6D102_REG_EXTEND_ADC3);
469 int ext4 = lm85_read_value(client,
470 EMC6D102_REG_EXTEND_ADC4);
471 data->in_ext[0] = ext3 & 0x0f;
472 data->in_ext[1] = ext4 & 0x0f;
473 data->in_ext[2] = ext4 >> 4;
474 data->in_ext[3] = ext3 >> 4;
475 data->in_ext[4] = ext2 >> 4;
476
477 data->temp_ext[0] = ext1 & 0x0f;
478 data->temp_ext[1] = ext2 & 0x0f;
479 data->temp_ext[2] = ext1 >> 4;
480 }
481
482 data->last_reading = jiffies;
483 } /* last_reading */
484
485 if (!data->valid ||
486 time_after(jiffies, data->last_config + LM85_CONFIG_INTERVAL)) {
487 /* Things that don't change often */
488 dev_dbg(&client->dev, "Reading config values\n");
489
490 for (i = 0; i <= 3; ++i) {
491 data->in_min[i] =
492 lm85_read_value(client, LM85_REG_IN_MIN(i));
493 data->in_max[i] =
494 lm85_read_value(client, LM85_REG_IN_MAX(i));
495 data->fan_min[i] =
496 lm85_read_value(client, LM85_REG_FAN_MIN(i));
497 }
498
499 if (!data->has_vid5) {
500 data->in_min[4] = lm85_read_value(client,
501 LM85_REG_IN_MIN(4));
502 data->in_max[4] = lm85_read_value(client,
503 LM85_REG_IN_MAX(4));
504 }
505
506 if (data->type == emc6d100) {
507 for (i = 5; i <= 7; ++i) {
508 data->in_min[i] = lm85_read_value(client,
509 EMC6D100_REG_IN_MIN(i));
510 data->in_max[i] = lm85_read_value(client,
511 EMC6D100_REG_IN_MAX(i));
512 }
513 }
514
515 for (i = 0; i <= 2; ++i) {
516 int val;
517
518 data->temp_min[i] =
519 lm85_read_value(client, LM85_REG_TEMP_MIN(i));
520 data->temp_max[i] =
521 lm85_read_value(client, LM85_REG_TEMP_MAX(i));
522
523 data->autofan[i].config =
524 lm85_read_value(client, LM85_REG_AFAN_CONFIG(i));
525 val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i));
526 data->pwm_freq[i] = val & 0x07;
527 data->zone[i].range = val >> 4;
528 data->autofan[i].min_pwm =
529 lm85_read_value(client, LM85_REG_AFAN_MINPWM(i));
530 data->zone[i].limit =
531 lm85_read_value(client, LM85_REG_AFAN_LIMIT(i));
532 data->zone[i].critical =
533 lm85_read_value(client, LM85_REG_AFAN_CRITICAL(i));
534
535 if (IS_ADT7468_OFF64(data)) {
536 data->temp_min[i] -= 64;
537 data->temp_max[i] -= 64;
538 data->zone[i].limit -= 64;
539 data->zone[i].critical -= 64;
540 }
541 }
542
543 if (data->type != emc6d103s) {
544 i = lm85_read_value(client, LM85_REG_AFAN_SPIKE1);
545 data->autofan[0].min_off = (i & 0x20) != 0;
546 data->autofan[1].min_off = (i & 0x40) != 0;
547 data->autofan[2].min_off = (i & 0x80) != 0;
548
549 i = lm85_read_value(client, LM85_REG_AFAN_HYST1);
550 data->zone[0].hyst = i >> 4;
551 data->zone[1].hyst = i & 0x0f;
552
553 i = lm85_read_value(client, LM85_REG_AFAN_HYST2);
554 data->zone[2].hyst = i >> 4;
555 }
556
557 data->last_config = jiffies;
558 } /* last_config */
559
560 data->valid = 1;
561
562 mutex_unlock(&data->update_lock);
563
564 return data;
565}
375 566
376/* 4 Fans */ 567/* 4 Fans */
377static ssize_t show_fan(struct device *dev, struct device_attribute *attr, 568static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
@@ -394,8 +585,8 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
394 const char *buf, size_t count) 585 const char *buf, size_t count)
395{ 586{
396 int nr = to_sensor_dev_attr(attr)->index; 587 int nr = to_sensor_dev_attr(attr)->index;
397 struct i2c_client *client = to_i2c_client(dev); 588 struct lm85_data *data = dev_get_drvdata(dev);
398 struct lm85_data *data = i2c_get_clientdata(client); 589 struct i2c_client *client = data->client;
399 unsigned long val; 590 unsigned long val;
400 int err; 591 int err;
401 592
@@ -460,6 +651,9 @@ static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr,
460 if (err) 651 if (err)
461 return err; 652 return err;
462 653
654 if (val > 255)
655 return -EINVAL;
656
463 data->vrm = val; 657 data->vrm = val;
464 return count; 658 return count;
465} 659}
@@ -515,8 +709,8 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
515 const char *buf, size_t count) 709 const char *buf, size_t count)
516{ 710{
517 int nr = to_sensor_dev_attr(attr)->index; 711 int nr = to_sensor_dev_attr(attr)->index;
518 struct i2c_client *client = to_i2c_client(dev); 712 struct lm85_data *data = dev_get_drvdata(dev);
519 struct lm85_data *data = i2c_get_clientdata(client); 713 struct i2c_client *client = data->client;
520 unsigned long val; 714 unsigned long val;
521 int err; 715 int err;
522 716
@@ -557,8 +751,8 @@ static ssize_t set_pwm_enable(struct device *dev, struct device_attribute
557 *attr, const char *buf, size_t count) 751 *attr, const char *buf, size_t count)
558{ 752{
559 int nr = to_sensor_dev_attr(attr)->index; 753 int nr = to_sensor_dev_attr(attr)->index;
560 struct i2c_client *client = to_i2c_client(dev); 754 struct lm85_data *data = dev_get_drvdata(dev);
561 struct lm85_data *data = i2c_get_clientdata(client); 755 struct i2c_client *client = data->client;
562 u8 config; 756 u8 config;
563 unsigned long val; 757 unsigned long val;
564 int err; 758 int err;
@@ -615,8 +809,8 @@ static ssize_t set_pwm_freq(struct device *dev,
615 struct device_attribute *attr, const char *buf, size_t count) 809 struct device_attribute *attr, const char *buf, size_t count)
616{ 810{
617 int nr = to_sensor_dev_attr(attr)->index; 811 int nr = to_sensor_dev_attr(attr)->index;
618 struct i2c_client *client = to_i2c_client(dev); 812 struct lm85_data *data = dev_get_drvdata(dev);
619 struct lm85_data *data = i2c_get_clientdata(client); 813 struct i2c_client *client = data->client;
620 unsigned long val; 814 unsigned long val;
621 int err; 815 int err;
622 816
@@ -682,8 +876,8 @@ static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
682 const char *buf, size_t count) 876 const char *buf, size_t count)
683{ 877{
684 int nr = to_sensor_dev_attr(attr)->index; 878 int nr = to_sensor_dev_attr(attr)->index;
685 struct i2c_client *client = to_i2c_client(dev); 879 struct lm85_data *data = dev_get_drvdata(dev);
686 struct lm85_data *data = i2c_get_clientdata(client); 880 struct i2c_client *client = data->client;
687 long val; 881 long val;
688 int err; 882 int err;
689 883
@@ -710,8 +904,8 @@ static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
710 const char *buf, size_t count) 904 const char *buf, size_t count)
711{ 905{
712 int nr = to_sensor_dev_attr(attr)->index; 906 int nr = to_sensor_dev_attr(attr)->index;
713 struct i2c_client *client = to_i2c_client(dev); 907 struct lm85_data *data = dev_get_drvdata(dev);
714 struct lm85_data *data = i2c_get_clientdata(client); 908 struct i2c_client *client = data->client;
715 long val; 909 long val;
716 int err; 910 int err;
717 911
@@ -766,8 +960,8 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
766 const char *buf, size_t count) 960 const char *buf, size_t count)
767{ 961{
768 int nr = to_sensor_dev_attr(attr)->index; 962 int nr = to_sensor_dev_attr(attr)->index;
769 struct i2c_client *client = to_i2c_client(dev); 963 struct lm85_data *data = dev_get_drvdata(dev);
770 struct lm85_data *data = i2c_get_clientdata(client); 964 struct i2c_client *client = data->client;
771 long val; 965 long val;
772 int err; 966 int err;
773 967
@@ -797,8 +991,8 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
797 const char *buf, size_t count) 991 const char *buf, size_t count)
798{ 992{
799 int nr = to_sensor_dev_attr(attr)->index; 993 int nr = to_sensor_dev_attr(attr)->index;
800 struct i2c_client *client = to_i2c_client(dev); 994 struct lm85_data *data = dev_get_drvdata(dev);
801 struct lm85_data *data = i2c_get_clientdata(client); 995 struct i2c_client *client = data->client;
802 long val; 996 long val;
803 int err; 997 int err;
804 998
@@ -843,8 +1037,8 @@ static ssize_t set_pwm_auto_channels(struct device *dev,
843 struct device_attribute *attr, const char *buf, size_t count) 1037 struct device_attribute *attr, const char *buf, size_t count)
844{ 1038{
845 int nr = to_sensor_dev_attr(attr)->index; 1039 int nr = to_sensor_dev_attr(attr)->index;
846 struct i2c_client *client = to_i2c_client(dev); 1040 struct lm85_data *data = dev_get_drvdata(dev);
847 struct lm85_data *data = i2c_get_clientdata(client); 1041 struct i2c_client *client = data->client;
848 long val; 1042 long val;
849 int err; 1043 int err;
850 1044
@@ -873,8 +1067,8 @@ static ssize_t set_pwm_auto_pwm_min(struct device *dev,
873 struct device_attribute *attr, const char *buf, size_t count) 1067 struct device_attribute *attr, const char *buf, size_t count)
874{ 1068{
875 int nr = to_sensor_dev_attr(attr)->index; 1069 int nr = to_sensor_dev_attr(attr)->index;
876 struct i2c_client *client = to_i2c_client(dev); 1070 struct lm85_data *data = dev_get_drvdata(dev);
877 struct lm85_data *data = i2c_get_clientdata(client); 1071 struct i2c_client *client = data->client;
878 unsigned long val; 1072 unsigned long val;
879 int err; 1073 int err;
880 1074
@@ -902,8 +1096,8 @@ static ssize_t set_pwm_auto_pwm_minctl(struct device *dev,
902 struct device_attribute *attr, const char *buf, size_t count) 1096 struct device_attribute *attr, const char *buf, size_t count)
903{ 1097{
904 int nr = to_sensor_dev_attr(attr)->index; 1098 int nr = to_sensor_dev_attr(attr)->index;
905 struct i2c_client *client = to_i2c_client(dev); 1099 struct lm85_data *data = dev_get_drvdata(dev);
906 struct lm85_data *data = i2c_get_clientdata(client); 1100 struct i2c_client *client = data->client;
907 u8 tmp; 1101 u8 tmp;
908 long val; 1102 long val;
909 int err; 1103 int err;
@@ -953,8 +1147,8 @@ static ssize_t set_temp_auto_temp_off(struct device *dev,
953 struct device_attribute *attr, const char *buf, size_t count) 1147 struct device_attribute *attr, const char *buf, size_t count)
954{ 1148{
955 int nr = to_sensor_dev_attr(attr)->index; 1149 int nr = to_sensor_dev_attr(attr)->index;
956 struct i2c_client *client = to_i2c_client(dev); 1150 struct lm85_data *data = dev_get_drvdata(dev);
957 struct lm85_data *data = i2c_get_clientdata(client); 1151 struct i2c_client *client = data->client;
958 int min; 1152 int min;
959 long val; 1153 long val;
960 int err; 1154 int err;
@@ -990,8 +1184,8 @@ static ssize_t set_temp_auto_temp_min(struct device *dev,
990 struct device_attribute *attr, const char *buf, size_t count) 1184 struct device_attribute *attr, const char *buf, size_t count)
991{ 1185{
992 int nr = to_sensor_dev_attr(attr)->index; 1186 int nr = to_sensor_dev_attr(attr)->index;
993 struct i2c_client *client = to_i2c_client(dev); 1187 struct lm85_data *data = dev_get_drvdata(dev);
994 struct lm85_data *data = i2c_get_clientdata(client); 1188 struct i2c_client *client = data->client;
995 long val; 1189 long val;
996 int err; 1190 int err;
997 1191
@@ -1029,8 +1223,8 @@ static ssize_t set_temp_auto_temp_max(struct device *dev,
1029 struct device_attribute *attr, const char *buf, size_t count) 1223 struct device_attribute *attr, const char *buf, size_t count)
1030{ 1224{
1031 int nr = to_sensor_dev_attr(attr)->index; 1225 int nr = to_sensor_dev_attr(attr)->index;
1032 struct i2c_client *client = to_i2c_client(dev); 1226 struct lm85_data *data = dev_get_drvdata(dev);
1033 struct lm85_data *data = i2c_get_clientdata(client); 1227 struct i2c_client *client = data->client;
1034 int min; 1228 int min;
1035 long val; 1229 long val;
1036 int err; 1230 int err;
@@ -1063,8 +1257,8 @@ static ssize_t set_temp_auto_temp_crit(struct device *dev,
1063 struct device_attribute *attr, const char *buf, size_t count) 1257 struct device_attribute *attr, const char *buf, size_t count)
1064{ 1258{
1065 int nr = to_sensor_dev_attr(attr)->index; 1259 int nr = to_sensor_dev_attr(attr)->index;
1066 struct i2c_client *client = to_i2c_client(dev); 1260 struct lm85_data *data = dev_get_drvdata(dev);
1067 struct lm85_data *data = i2c_get_clientdata(client); 1261 struct i2c_client *client = data->client;
1068 long val; 1262 long val;
1069 int err; 1263 int err;
1070 1264
@@ -1355,30 +1549,18 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info)
1355 return 0; 1549 return 0;
1356} 1550}
1357 1551
1358static void lm85_remove_files(struct i2c_client *client, struct lm85_data *data) 1552static int lm85_probe(struct i2c_client *client, const struct i2c_device_id *id)
1359{
1360 sysfs_remove_group(&client->dev.kobj, &lm85_group);
1361 if (data->type != emc6d103s) {
1362 sysfs_remove_group(&client->dev.kobj, &lm85_group_minctl);
1363 sysfs_remove_group(&client->dev.kobj, &lm85_group_temp_off);
1364 }
1365 if (!data->has_vid5)
1366 sysfs_remove_group(&client->dev.kobj, &lm85_group_in4);
1367 if (data->type == emc6d100)
1368 sysfs_remove_group(&client->dev.kobj, &lm85_group_in567);
1369}
1370
1371static int lm85_probe(struct i2c_client *client,
1372 const struct i2c_device_id *id)
1373{ 1553{
1554 struct device *dev = &client->dev;
1555 struct device *hwmon_dev;
1374 struct lm85_data *data; 1556 struct lm85_data *data;
1375 int err; 1557 int idx = 0;
1376 1558
1377 data = devm_kzalloc(&client->dev, sizeof(struct lm85_data), GFP_KERNEL); 1559 data = devm_kzalloc(dev, sizeof(struct lm85_data), GFP_KERNEL);
1378 if (!data) 1560 if (!data)
1379 return -ENOMEM; 1561 return -ENOMEM;
1380 1562
1381 i2c_set_clientdata(client, data); 1563 data->client = client;
1382 data->type = id->driver_data; 1564 data->type = id->driver_data;
1383 mutex_init(&data->update_lock); 1565 mutex_init(&data->update_lock);
1384 1566
@@ -1403,20 +1585,13 @@ static int lm85_probe(struct i2c_client *client,
1403 /* Initialize the LM85 chip */ 1585 /* Initialize the LM85 chip */
1404 lm85_init_client(client); 1586 lm85_init_client(client);
1405 1587
1406 /* Register sysfs hooks */ 1588 /* sysfs hooks */
1407 err = sysfs_create_group(&client->dev.kobj, &lm85_group); 1589 data->groups[idx++] = &lm85_group;
1408 if (err)
1409 return err;
1410 1590
1411 /* minctl and temp_off exist on all chips except emc6d103s */ 1591 /* minctl and temp_off exist on all chips except emc6d103s */
1412 if (data->type != emc6d103s) { 1592 if (data->type != emc6d103s) {
1413 err = sysfs_create_group(&client->dev.kobj, &lm85_group_minctl); 1593 data->groups[idx++] = &lm85_group_minctl;
1414 if (err) 1594 data->groups[idx++] = &lm85_group_temp_off;
1415 goto err_remove_files;
1416 err = sysfs_create_group(&client->dev.kobj,
1417 &lm85_group_temp_off);
1418 if (err)
1419 goto err_remove_files;
1420 } 1595 }
1421 1596
1422 /* 1597 /*
@@ -1429,271 +1604,44 @@ static int lm85_probe(struct i2c_client *client,
1429 data->has_vid5 = true; 1604 data->has_vid5 = true;
1430 } 1605 }
1431 1606
1432 if (!data->has_vid5) { 1607 if (!data->has_vid5)
1433 err = sysfs_create_group(&client->dev.kobj, &lm85_group_in4); 1608 data->groups[idx++] = &lm85_group_in4;
1434 if (err)
1435 goto err_remove_files;
1436 }
1437 1609
1438 /* The EMC6D100 has 3 additional voltage inputs */ 1610 /* The EMC6D100 has 3 additional voltage inputs */
1439 if (data->type == emc6d100) { 1611 if (data->type == emc6d100)
1440 err = sysfs_create_group(&client->dev.kobj, &lm85_group_in567); 1612 data->groups[idx++] = &lm85_group_in567;
1441 if (err)
1442 goto err_remove_files;
1443 }
1444
1445 data->hwmon_dev = hwmon_device_register(&client->dev);
1446 if (IS_ERR(data->hwmon_dev)) {
1447 err = PTR_ERR(data->hwmon_dev);
1448 goto err_remove_files;
1449 }
1450
1451 return 0;
1452
1453 /* Error out and cleanup code */
1454 err_remove_files:
1455 lm85_remove_files(client, data);
1456 return err;
1457}
1458
1459static int lm85_remove(struct i2c_client *client)
1460{
1461 struct lm85_data *data = i2c_get_clientdata(client);
1462 hwmon_device_unregister(data->hwmon_dev);
1463 lm85_remove_files(client, data);
1464 return 0;
1465}
1466
1467
1468static int lm85_read_value(struct i2c_client *client, u8 reg)
1469{
1470 int res;
1471
1472 /* What size location is it? */
1473 switch (reg) {
1474 case LM85_REG_FAN(0): /* Read WORD data */
1475 case LM85_REG_FAN(1):
1476 case LM85_REG_FAN(2):
1477 case LM85_REG_FAN(3):
1478 case LM85_REG_FAN_MIN(0):
1479 case LM85_REG_FAN_MIN(1):
1480 case LM85_REG_FAN_MIN(2):
1481 case LM85_REG_FAN_MIN(3):
1482 case LM85_REG_ALARM1: /* Read both bytes at once */
1483 res = i2c_smbus_read_byte_data(client, reg) & 0xff;
1484 res |= i2c_smbus_read_byte_data(client, reg + 1) << 8;
1485 break;
1486 default: /* Read BYTE data */
1487 res = i2c_smbus_read_byte_data(client, reg);
1488 break;
1489 }
1490
1491 return res;
1492}
1493 1613
1494static void lm85_write_value(struct i2c_client *client, u8 reg, int value) 1614 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
1495{ 1615 data, data->groups);
1496 switch (reg) { 1616 return PTR_ERR_OR_ZERO(hwmon_dev);
1497 case LM85_REG_FAN(0): /* Write WORD data */
1498 case LM85_REG_FAN(1):
1499 case LM85_REG_FAN(2):
1500 case LM85_REG_FAN(3):
1501 case LM85_REG_FAN_MIN(0):
1502 case LM85_REG_FAN_MIN(1):
1503 case LM85_REG_FAN_MIN(2):
1504 case LM85_REG_FAN_MIN(3):
1505 /* NOTE: ALARM is read only, so not included here */
1506 i2c_smbus_write_byte_data(client, reg, value & 0xff);
1507 i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
1508 break;
1509 default: /* Write BYTE data */
1510 i2c_smbus_write_byte_data(client, reg, value);
1511 break;
1512 }
1513} 1617}
1514 1618
1515static struct lm85_data *lm85_update_device(struct device *dev) 1619static const struct i2c_device_id lm85_id[] = {
1516{ 1620 { "adm1027", adm1027 },
1517 struct i2c_client *client = to_i2c_client(dev); 1621 { "adt7463", adt7463 },
1518 struct lm85_data *data = i2c_get_clientdata(client); 1622 { "adt7468", adt7468 },
1519 int i; 1623 { "lm85", lm85 },
1520 1624 { "lm85b", lm85 },
1521 mutex_lock(&data->update_lock); 1625 { "lm85c", lm85 },
1522 1626 { "emc6d100", emc6d100 },
1523 if (!data->valid || 1627 { "emc6d101", emc6d100 },
1524 time_after(jiffies, data->last_reading + LM85_DATA_INTERVAL)) { 1628 { "emc6d102", emc6d102 },
1525 /* Things that change quickly */ 1629 { "emc6d103", emc6d103 },
1526 dev_dbg(&client->dev, "Reading sensor values\n"); 1630 { "emc6d103s", emc6d103s },
1527 1631 { }
1528 /* 1632};
1529 * Have to read extended bits first to "freeze" the 1633MODULE_DEVICE_TABLE(i2c, lm85_id);
1530 * more significant bits that are read later.
1531 * There are 2 additional resolution bits per channel and we
1532 * have room for 4, so we shift them to the left.
1533 */
1534 if (data->type == adm1027 || data->type == adt7463 ||
1535 data->type == adt7468) {
1536 int ext1 = lm85_read_value(client,
1537 ADM1027_REG_EXTEND_ADC1);
1538 int ext2 = lm85_read_value(client,
1539 ADM1027_REG_EXTEND_ADC2);
1540 int val = (ext1 << 8) + ext2;
1541
1542 for (i = 0; i <= 4; i++)
1543 data->in_ext[i] =
1544 ((val >> (i * 2)) & 0x03) << 2;
1545
1546 for (i = 0; i <= 2; i++)
1547 data->temp_ext[i] =
1548 (val >> ((i + 4) * 2)) & 0x0c;
1549 }
1550
1551 data->vid = lm85_read_value(client, LM85_REG_VID);
1552
1553 for (i = 0; i <= 3; ++i) {
1554 data->in[i] =
1555 lm85_read_value(client, LM85_REG_IN(i));
1556 data->fan[i] =
1557 lm85_read_value(client, LM85_REG_FAN(i));
1558 }
1559
1560 if (!data->has_vid5)
1561 data->in[4] = lm85_read_value(client, LM85_REG_IN(4));
1562
1563 if (data->type == adt7468)
1564 data->cfg5 = lm85_read_value(client, ADT7468_REG_CFG5);
1565
1566 for (i = 0; i <= 2; ++i) {
1567 data->temp[i] =
1568 lm85_read_value(client, LM85_REG_TEMP(i));
1569 data->pwm[i] =
1570 lm85_read_value(client, LM85_REG_PWM(i));
1571
1572 if (IS_ADT7468_OFF64(data))
1573 data->temp[i] -= 64;
1574 }
1575
1576 data->alarms = lm85_read_value(client, LM85_REG_ALARM1);
1577
1578 if (data->type == emc6d100) {
1579 /* Three more voltage sensors */
1580 for (i = 5; i <= 7; ++i) {
1581 data->in[i] = lm85_read_value(client,
1582 EMC6D100_REG_IN(i));
1583 }
1584 /* More alarm bits */
1585 data->alarms |= lm85_read_value(client,
1586 EMC6D100_REG_ALARM3) << 16;
1587 } else if (data->type == emc6d102 || data->type == emc6d103 ||
1588 data->type == emc6d103s) {
1589 /*
1590 * Have to read LSB bits after the MSB ones because
1591 * the reading of the MSB bits has frozen the
1592 * LSBs (backward from the ADM1027).
1593 */
1594 int ext1 = lm85_read_value(client,
1595 EMC6D102_REG_EXTEND_ADC1);
1596 int ext2 = lm85_read_value(client,
1597 EMC6D102_REG_EXTEND_ADC2);
1598 int ext3 = lm85_read_value(client,
1599 EMC6D102_REG_EXTEND_ADC3);
1600 int ext4 = lm85_read_value(client,
1601 EMC6D102_REG_EXTEND_ADC4);
1602 data->in_ext[0] = ext3 & 0x0f;
1603 data->in_ext[1] = ext4 & 0x0f;
1604 data->in_ext[2] = ext4 >> 4;
1605 data->in_ext[3] = ext3 >> 4;
1606 data->in_ext[4] = ext2 >> 4;
1607
1608 data->temp_ext[0] = ext1 & 0x0f;
1609 data->temp_ext[1] = ext2 & 0x0f;
1610 data->temp_ext[2] = ext1 >> 4;
1611 }
1612
1613 data->last_reading = jiffies;
1614 } /* last_reading */
1615
1616 if (!data->valid ||
1617 time_after(jiffies, data->last_config + LM85_CONFIG_INTERVAL)) {
1618 /* Things that don't change often */
1619 dev_dbg(&client->dev, "Reading config values\n");
1620
1621 for (i = 0; i <= 3; ++i) {
1622 data->in_min[i] =
1623 lm85_read_value(client, LM85_REG_IN_MIN(i));
1624 data->in_max[i] =
1625 lm85_read_value(client, LM85_REG_IN_MAX(i));
1626 data->fan_min[i] =
1627 lm85_read_value(client, LM85_REG_FAN_MIN(i));
1628 }
1629
1630 if (!data->has_vid5) {
1631 data->in_min[4] = lm85_read_value(client,
1632 LM85_REG_IN_MIN(4));
1633 data->in_max[4] = lm85_read_value(client,
1634 LM85_REG_IN_MAX(4));
1635 }
1636
1637 if (data->type == emc6d100) {
1638 for (i = 5; i <= 7; ++i) {
1639 data->in_min[i] = lm85_read_value(client,
1640 EMC6D100_REG_IN_MIN(i));
1641 data->in_max[i] = lm85_read_value(client,
1642 EMC6D100_REG_IN_MAX(i));
1643 }
1644 }
1645
1646 for (i = 0; i <= 2; ++i) {
1647 int val;
1648
1649 data->temp_min[i] =
1650 lm85_read_value(client, LM85_REG_TEMP_MIN(i));
1651 data->temp_max[i] =
1652 lm85_read_value(client, LM85_REG_TEMP_MAX(i));
1653
1654 data->autofan[i].config =
1655 lm85_read_value(client, LM85_REG_AFAN_CONFIG(i));
1656 val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i));
1657 data->pwm_freq[i] = val & 0x07;
1658 data->zone[i].range = val >> 4;
1659 data->autofan[i].min_pwm =
1660 lm85_read_value(client, LM85_REG_AFAN_MINPWM(i));
1661 data->zone[i].limit =
1662 lm85_read_value(client, LM85_REG_AFAN_LIMIT(i));
1663 data->zone[i].critical =
1664 lm85_read_value(client, LM85_REG_AFAN_CRITICAL(i));
1665
1666 if (IS_ADT7468_OFF64(data)) {
1667 data->temp_min[i] -= 64;
1668 data->temp_max[i] -= 64;
1669 data->zone[i].limit -= 64;
1670 data->zone[i].critical -= 64;
1671 }
1672 }
1673
1674 if (data->type != emc6d103s) {
1675 i = lm85_read_value(client, LM85_REG_AFAN_SPIKE1);
1676 data->autofan[0].min_off = (i & 0x20) != 0;
1677 data->autofan[1].min_off = (i & 0x40) != 0;
1678 data->autofan[2].min_off = (i & 0x80) != 0;
1679
1680 i = lm85_read_value(client, LM85_REG_AFAN_HYST1);
1681 data->zone[0].hyst = i >> 4;
1682 data->zone[1].hyst = i & 0x0f;
1683
1684 i = lm85_read_value(client, LM85_REG_AFAN_HYST2);
1685 data->zone[2].hyst = i >> 4;
1686 }
1687
1688 data->last_config = jiffies;
1689 } /* last_config */
1690
1691 data->valid = 1;
1692
1693 mutex_unlock(&data->update_lock);
1694 1634
1695 return data; 1635static struct i2c_driver lm85_driver = {
1696} 1636 .class = I2C_CLASS_HWMON,
1637 .driver = {
1638 .name = "lm85",
1639 },
1640 .probe = lm85_probe,
1641 .id_table = lm85_id,
1642 .detect = lm85_detect,
1643 .address_list = normal_i2c,
1644};
1697 1645
1698module_i2c_driver(lm85_driver); 1646module_i2c_driver(lm85_driver);
1699 1647
diff --git a/drivers/hwmon/lm93.c b/drivers/hwmon/lm93.c
index 6c2df576f253..90bb04858117 100644
--- a/drivers/hwmon/lm93.c
+++ b/drivers/hwmon/lm93.c
@@ -207,7 +207,7 @@ struct block1_t {
207 * Client-specific data 207 * Client-specific data
208 */ 208 */
209struct lm93_data { 209struct lm93_data {
210 struct device *hwmon_dev; 210 struct i2c_client *client;
211 211
212 struct mutex update_lock; 212 struct mutex update_lock;
213 unsigned long last_updated; /* In jiffies */ 213 unsigned long last_updated; /* In jiffies */
@@ -919,8 +919,8 @@ static void lm93_read_block(struct i2c_client *client, u8 fbn, u8 *values)
919 919
920static struct lm93_data *lm93_update_device(struct device *dev) 920static struct lm93_data *lm93_update_device(struct device *dev)
921{ 921{
922 struct i2c_client *client = to_i2c_client(dev); 922 struct lm93_data *data = dev_get_drvdata(dev);
923 struct lm93_data *data = i2c_get_clientdata(client); 923 struct i2c_client *client = data->client;
924 const unsigned long interval = HZ + (HZ / 2); 924 const unsigned long interval = HZ + (HZ / 2);
925 925
926 mutex_lock(&data->update_lock); 926 mutex_lock(&data->update_lock);
@@ -1158,8 +1158,8 @@ static ssize_t store_in_min(struct device *dev, struct device_attribute *attr,
1158 const char *buf, size_t count) 1158 const char *buf, size_t count)
1159{ 1159{
1160 int nr = (to_sensor_dev_attr(attr))->index; 1160 int nr = (to_sensor_dev_attr(attr))->index;
1161 struct i2c_client *client = to_i2c_client(dev); 1161 struct lm93_data *data = dev_get_drvdata(dev);
1162 struct lm93_data *data = i2c_get_clientdata(client); 1162 struct i2c_client *client = data->client;
1163 int vccp = nr - 6; 1163 int vccp = nr - 6;
1164 long vid; 1164 long vid;
1165 unsigned long val; 1165 unsigned long val;
@@ -1239,8 +1239,8 @@ static ssize_t store_in_max(struct device *dev, struct device_attribute *attr,
1239 const char *buf, size_t count) 1239 const char *buf, size_t count)
1240{ 1240{
1241 int nr = (to_sensor_dev_attr(attr))->index; 1241 int nr = (to_sensor_dev_attr(attr))->index;
1242 struct i2c_client *client = to_i2c_client(dev); 1242 struct lm93_data *data = dev_get_drvdata(dev);
1243 struct lm93_data *data = i2c_get_clientdata(client); 1243 struct i2c_client *client = data->client;
1244 int vccp = nr - 6; 1244 int vccp = nr - 6;
1245 long vid; 1245 long vid;
1246 unsigned long val; 1246 unsigned long val;
@@ -1323,8 +1323,8 @@ static ssize_t store_temp_min(struct device *dev, struct device_attribute *attr,
1323 const char *buf, size_t count) 1323 const char *buf, size_t count)
1324{ 1324{
1325 int nr = (to_sensor_dev_attr(attr))->index; 1325 int nr = (to_sensor_dev_attr(attr))->index;
1326 struct i2c_client *client = to_i2c_client(dev); 1326 struct lm93_data *data = dev_get_drvdata(dev);
1327 struct lm93_data *data = i2c_get_clientdata(client); 1327 struct i2c_client *client = data->client;
1328 long val; 1328 long val;
1329 int err; 1329 int err;
1330 1330
@@ -1358,8 +1358,8 @@ static ssize_t store_temp_max(struct device *dev, struct device_attribute *attr,
1358 const char *buf, size_t count) 1358 const char *buf, size_t count)
1359{ 1359{
1360 int nr = (to_sensor_dev_attr(attr))->index; 1360 int nr = (to_sensor_dev_attr(attr))->index;
1361 struct i2c_client *client = to_i2c_client(dev); 1361 struct lm93_data *data = dev_get_drvdata(dev);
1362 struct lm93_data *data = i2c_get_clientdata(client); 1362 struct i2c_client *client = data->client;
1363 long val; 1363 long val;
1364 int err; 1364 int err;
1365 1365
@@ -1394,8 +1394,8 @@ static ssize_t store_temp_auto_base(struct device *dev,
1394 const char *buf, size_t count) 1394 const char *buf, size_t count)
1395{ 1395{
1396 int nr = (to_sensor_dev_attr(attr))->index; 1396 int nr = (to_sensor_dev_attr(attr))->index;
1397 struct i2c_client *client = to_i2c_client(dev); 1397 struct lm93_data *data = dev_get_drvdata(dev);
1398 struct lm93_data *data = i2c_get_clientdata(client); 1398 struct i2c_client *client = data->client;
1399 long val; 1399 long val;
1400 int err; 1400 int err;
1401 1401
@@ -1430,8 +1430,8 @@ static ssize_t store_temp_auto_boost(struct device *dev,
1430 const char *buf, size_t count) 1430 const char *buf, size_t count)
1431{ 1431{
1432 int nr = (to_sensor_dev_attr(attr))->index; 1432 int nr = (to_sensor_dev_attr(attr))->index;
1433 struct i2c_client *client = to_i2c_client(dev); 1433 struct lm93_data *data = dev_get_drvdata(dev);
1434 struct lm93_data *data = i2c_get_clientdata(client); 1434 struct i2c_client *client = data->client;
1435 long val; 1435 long val;
1436 int err; 1436 int err;
1437 1437
@@ -1469,8 +1469,8 @@ static ssize_t store_temp_auto_boost_hyst(struct device *dev,
1469 const char *buf, size_t count) 1469 const char *buf, size_t count)
1470{ 1470{
1471 int nr = (to_sensor_dev_attr(attr))->index; 1471 int nr = (to_sensor_dev_attr(attr))->index;
1472 struct i2c_client *client = to_i2c_client(dev); 1472 struct lm93_data *data = dev_get_drvdata(dev);
1473 struct lm93_data *data = i2c_get_clientdata(client); 1473 struct i2c_client *client = data->client;
1474 unsigned long val; 1474 unsigned long val;
1475 int err; 1475 int err;
1476 1476
@@ -1520,8 +1520,8 @@ static ssize_t store_temp_auto_offset(struct device *dev,
1520 struct sensor_device_attribute_2 *s_attr = to_sensor_dev_attr_2(attr); 1520 struct sensor_device_attribute_2 *s_attr = to_sensor_dev_attr_2(attr);
1521 int nr = s_attr->index; 1521 int nr = s_attr->index;
1522 int ofs = s_attr->nr; 1522 int ofs = s_attr->nr;
1523 struct i2c_client *client = to_i2c_client(dev); 1523 struct lm93_data *data = dev_get_drvdata(dev);
1524 struct lm93_data *data = i2c_get_clientdata(client); 1524 struct i2c_client *client = data->client;
1525 unsigned long val; 1525 unsigned long val;
1526 int err; 1526 int err;
1527 1527
@@ -1632,8 +1632,8 @@ static ssize_t store_temp_auto_pwm_min(struct device *dev,
1632 const char *buf, size_t count) 1632 const char *buf, size_t count)
1633{ 1633{
1634 int nr = (to_sensor_dev_attr(attr))->index; 1634 int nr = (to_sensor_dev_attr(attr))->index;
1635 struct i2c_client *client = to_i2c_client(dev); 1635 struct lm93_data *data = dev_get_drvdata(dev);
1636 struct lm93_data *data = i2c_get_clientdata(client); 1636 struct i2c_client *client = data->client;
1637 u8 reg, ctl4; 1637 u8 reg, ctl4;
1638 unsigned long val; 1638 unsigned long val;
1639 int err; 1639 int err;
@@ -1680,8 +1680,8 @@ static ssize_t store_temp_auto_offset_hyst(struct device *dev,
1680 const char *buf, size_t count) 1680 const char *buf, size_t count)
1681{ 1681{
1682 int nr = (to_sensor_dev_attr(attr))->index; 1682 int nr = (to_sensor_dev_attr(attr))->index;
1683 struct i2c_client *client = to_i2c_client(dev); 1683 struct lm93_data *data = dev_get_drvdata(dev);
1684 struct lm93_data *data = i2c_get_clientdata(client); 1684 struct i2c_client *client = data->client;
1685 u8 reg; 1685 u8 reg;
1686 unsigned long val; 1686 unsigned long val;
1687 int err; 1687 int err;
@@ -1741,8 +1741,8 @@ static ssize_t store_fan_min(struct device *dev, struct device_attribute *attr,
1741 const char *buf, size_t count) 1741 const char *buf, size_t count)
1742{ 1742{
1743 int nr = (to_sensor_dev_attr(attr))->index; 1743 int nr = (to_sensor_dev_attr(attr))->index;
1744 struct i2c_client *client = to_i2c_client(dev); 1744 struct lm93_data *data = dev_get_drvdata(dev);
1745 struct lm93_data *data = i2c_get_clientdata(client); 1745 struct i2c_client *client = data->client;
1746 unsigned long val; 1746 unsigned long val;
1747 int err; 1747 int err;
1748 1748
@@ -1824,8 +1824,8 @@ static ssize_t store_fan_smart_tach(struct device *dev,
1824 const char *buf, size_t count) 1824 const char *buf, size_t count)
1825{ 1825{
1826 int nr = (to_sensor_dev_attr(attr))->index; 1826 int nr = (to_sensor_dev_attr(attr))->index;
1827 struct i2c_client *client = to_i2c_client(dev); 1827 struct lm93_data *data = dev_get_drvdata(dev);
1828 struct lm93_data *data = i2c_get_clientdata(client); 1828 struct i2c_client *client = data->client;
1829 unsigned long val; 1829 unsigned long val;
1830 int err; 1830 int err;
1831 1831
@@ -1880,8 +1880,8 @@ static ssize_t store_pwm(struct device *dev, struct device_attribute *attr,
1880 const char *buf, size_t count) 1880 const char *buf, size_t count)
1881{ 1881{
1882 int nr = (to_sensor_dev_attr(attr))->index; 1882 int nr = (to_sensor_dev_attr(attr))->index;
1883 struct i2c_client *client = to_i2c_client(dev); 1883 struct lm93_data *data = dev_get_drvdata(dev);
1884 struct lm93_data *data = i2c_get_clientdata(client); 1884 struct i2c_client *client = data->client;
1885 u8 ctl2, ctl4; 1885 u8 ctl2, ctl4;
1886 unsigned long val; 1886 unsigned long val;
1887 int err; 1887 int err;
@@ -1928,8 +1928,8 @@ static ssize_t store_pwm_enable(struct device *dev,
1928 const char *buf, size_t count) 1928 const char *buf, size_t count)
1929{ 1929{
1930 int nr = (to_sensor_dev_attr(attr))->index; 1930 int nr = (to_sensor_dev_attr(attr))->index;
1931 struct i2c_client *client = to_i2c_client(dev); 1931 struct lm93_data *data = dev_get_drvdata(dev);
1932 struct lm93_data *data = i2c_get_clientdata(client); 1932 struct i2c_client *client = data->client;
1933 u8 ctl2; 1933 u8 ctl2;
1934 unsigned long val; 1934 unsigned long val;
1935 int err; 1935 int err;
@@ -2006,8 +2006,8 @@ static ssize_t store_pwm_freq(struct device *dev,
2006 const char *buf, size_t count) 2006 const char *buf, size_t count)
2007{ 2007{
2008 int nr = (to_sensor_dev_attr(attr))->index; 2008 int nr = (to_sensor_dev_attr(attr))->index;
2009 struct i2c_client *client = to_i2c_client(dev); 2009 struct lm93_data *data = dev_get_drvdata(dev);
2010 struct lm93_data *data = i2c_get_clientdata(client); 2010 struct i2c_client *client = data->client;
2011 u8 ctl4; 2011 u8 ctl4;
2012 unsigned long val; 2012 unsigned long val;
2013 int err; 2013 int err;
@@ -2046,8 +2046,8 @@ static ssize_t store_pwm_auto_channels(struct device *dev,
2046 const char *buf, size_t count) 2046 const char *buf, size_t count)
2047{ 2047{
2048 int nr = (to_sensor_dev_attr(attr))->index; 2048 int nr = (to_sensor_dev_attr(attr))->index;
2049 struct i2c_client *client = to_i2c_client(dev); 2049 struct lm93_data *data = dev_get_drvdata(dev);
2050 struct lm93_data *data = i2c_get_clientdata(client); 2050 struct i2c_client *client = data->client;
2051 unsigned long val; 2051 unsigned long val;
2052 int err; 2052 int err;
2053 2053
@@ -2087,8 +2087,8 @@ static ssize_t store_pwm_auto_spinup_min(struct device *dev,
2087 const char *buf, size_t count) 2087 const char *buf, size_t count)
2088{ 2088{
2089 int nr = (to_sensor_dev_attr(attr))->index; 2089 int nr = (to_sensor_dev_attr(attr))->index;
2090 struct i2c_client *client = to_i2c_client(dev); 2090 struct lm93_data *data = dev_get_drvdata(dev);
2091 struct lm93_data *data = i2c_get_clientdata(client); 2091 struct i2c_client *client = data->client;
2092 u8 ctl3, ctl4; 2092 u8 ctl3, ctl4;
2093 unsigned long val; 2093 unsigned long val;
2094 int err; 2094 int err;
@@ -2130,8 +2130,8 @@ static ssize_t store_pwm_auto_spinup_time(struct device *dev,
2130 const char *buf, size_t count) 2130 const char *buf, size_t count)
2131{ 2131{
2132 int nr = (to_sensor_dev_attr(attr))->index; 2132 int nr = (to_sensor_dev_attr(attr))->index;
2133 struct i2c_client *client = to_i2c_client(dev); 2133 struct lm93_data *data = dev_get_drvdata(dev);
2134 struct lm93_data *data = i2c_get_clientdata(client); 2134 struct i2c_client *client = data->client;
2135 u8 ctl3; 2135 u8 ctl3;
2136 unsigned long val; 2136 unsigned long val;
2137 int err; 2137 int err;
@@ -2168,8 +2168,8 @@ static ssize_t store_pwm_auto_prochot_ramp(struct device *dev,
2168 struct device_attribute *attr, 2168 struct device_attribute *attr,
2169 const char *buf, size_t count) 2169 const char *buf, size_t count)
2170{ 2170{
2171 struct i2c_client *client = to_i2c_client(dev); 2171 struct lm93_data *data = dev_get_drvdata(dev);
2172 struct lm93_data *data = i2c_get_clientdata(client); 2172 struct i2c_client *client = data->client;
2173 u8 ramp; 2173 u8 ramp;
2174 unsigned long val; 2174 unsigned long val;
2175 int err; 2175 int err;
@@ -2202,8 +2202,8 @@ static ssize_t store_pwm_auto_vrdhot_ramp(struct device *dev,
2202 struct device_attribute *attr, 2202 struct device_attribute *attr,
2203 const char *buf, size_t count) 2203 const char *buf, size_t count)
2204{ 2204{
2205 struct i2c_client *client = to_i2c_client(dev); 2205 struct lm93_data *data = dev_get_drvdata(dev);
2206 struct lm93_data *data = i2c_get_clientdata(client); 2206 struct i2c_client *client = data->client;
2207 u8 ramp; 2207 u8 ramp;
2208 unsigned long val; 2208 unsigned long val;
2209 int err; 2209 int err;
@@ -2270,8 +2270,8 @@ static ssize_t store_prochot_max(struct device *dev,
2270 const char *buf, size_t count) 2270 const char *buf, size_t count)
2271{ 2271{
2272 int nr = (to_sensor_dev_attr(attr))->index; 2272 int nr = (to_sensor_dev_attr(attr))->index;
2273 struct i2c_client *client = to_i2c_client(dev); 2273 struct lm93_data *data = dev_get_drvdata(dev);
2274 struct lm93_data *data = i2c_get_clientdata(client); 2274 struct i2c_client *client = data->client;
2275 unsigned long val; 2275 unsigned long val;
2276 int err; 2276 int err;
2277 2277
@@ -2308,8 +2308,8 @@ static ssize_t store_prochot_override(struct device *dev,
2308 const char *buf, size_t count) 2308 const char *buf, size_t count)
2309{ 2309{
2310 int nr = (to_sensor_dev_attr(attr))->index; 2310 int nr = (to_sensor_dev_attr(attr))->index;
2311 struct i2c_client *client = to_i2c_client(dev); 2311 struct lm93_data *data = dev_get_drvdata(dev);
2312 struct lm93_data *data = i2c_get_clientdata(client); 2312 struct i2c_client *client = data->client;
2313 unsigned long val; 2313 unsigned long val;
2314 int err; 2314 int err;
2315 2315
@@ -2351,8 +2351,8 @@ static ssize_t store_prochot_interval(struct device *dev,
2351 const char *buf, size_t count) 2351 const char *buf, size_t count)
2352{ 2352{
2353 int nr = (to_sensor_dev_attr(attr))->index; 2353 int nr = (to_sensor_dev_attr(attr))->index;
2354 struct i2c_client *client = to_i2c_client(dev); 2354 struct lm93_data *data = dev_get_drvdata(dev);
2355 struct lm93_data *data = i2c_get_clientdata(client); 2355 struct i2c_client *client = data->client;
2356 u8 tmp; 2356 u8 tmp;
2357 unsigned long val; 2357 unsigned long val;
2358 int err; 2358 int err;
@@ -2390,8 +2390,8 @@ static ssize_t store_prochot_override_duty_cycle(struct device *dev,
2390 struct device_attribute *attr, 2390 struct device_attribute *attr,
2391 const char *buf, size_t count) 2391 const char *buf, size_t count)
2392{ 2392{
2393 struct i2c_client *client = to_i2c_client(dev); 2393 struct lm93_data *data = dev_get_drvdata(dev);
2394 struct lm93_data *data = i2c_get_clientdata(client); 2394 struct i2c_client *client = data->client;
2395 unsigned long val; 2395 unsigned long val;
2396 int err; 2396 int err;
2397 2397
@@ -2423,8 +2423,8 @@ static ssize_t store_prochot_short(struct device *dev,
2423 struct device_attribute *attr, 2423 struct device_attribute *attr,
2424 const char *buf, size_t count) 2424 const char *buf, size_t count)
2425{ 2425{
2426 struct i2c_client *client = to_i2c_client(dev); 2426 struct lm93_data *data = dev_get_drvdata(dev);
2427 struct lm93_data *data = i2c_get_clientdata(client); 2427 struct i2c_client *client = data->client;
2428 unsigned long val; 2428 unsigned long val;
2429 int err; 2429 int err;
2430 2430
@@ -2631,9 +2631,7 @@ static struct attribute *lm93_attrs[] = {
2631 NULL 2631 NULL
2632}; 2632};
2633 2633
2634static struct attribute_group lm93_attr_grp = { 2634ATTRIBUTE_GROUPS(lm93);
2635 .attrs = lm93_attrs,
2636};
2637 2635
2638static void lm93_init_client(struct i2c_client *client) 2636static void lm93_init_client(struct i2c_client *client)
2639{ 2637{
@@ -2726,61 +2724,42 @@ static int lm93_detect(struct i2c_client *client, struct i2c_board_info *info)
2726static int lm93_probe(struct i2c_client *client, 2724static int lm93_probe(struct i2c_client *client,
2727 const struct i2c_device_id *id) 2725 const struct i2c_device_id *id)
2728{ 2726{
2727 struct device *dev = &client->dev;
2729 struct lm93_data *data; 2728 struct lm93_data *data;
2730 int err, func; 2729 struct device *hwmon_dev;
2730 int func;
2731 void (*update)(struct lm93_data *, struct i2c_client *); 2731 void (*update)(struct lm93_data *, struct i2c_client *);
2732 2732
2733 /* choose update routine based on bus capabilities */ 2733 /* choose update routine based on bus capabilities */
2734 func = i2c_get_functionality(client->adapter); 2734 func = i2c_get_functionality(client->adapter);
2735 if (((LM93_SMBUS_FUNC_FULL & func) == LM93_SMBUS_FUNC_FULL) && 2735 if (((LM93_SMBUS_FUNC_FULL & func) == LM93_SMBUS_FUNC_FULL) &&
2736 (!disable_block)) { 2736 (!disable_block)) {
2737 dev_dbg(&client->dev, "using SMBus block data transactions\n"); 2737 dev_dbg(dev, "using SMBus block data transactions\n");
2738 update = lm93_update_client_full; 2738 update = lm93_update_client_full;
2739 } else if ((LM93_SMBUS_FUNC_MIN & func) == LM93_SMBUS_FUNC_MIN) { 2739 } else if ((LM93_SMBUS_FUNC_MIN & func) == LM93_SMBUS_FUNC_MIN) {
2740 dev_dbg(&client->dev, 2740 dev_dbg(dev, "disabled SMBus block data transactions\n");
2741 "disabled SMBus block data transactions\n");
2742 update = lm93_update_client_min; 2741 update = lm93_update_client_min;
2743 } else { 2742 } else {
2744 dev_dbg(&client->dev, 2743 dev_dbg(dev, "detect failed, smbus byte and/or word data not supported!\n");
2745 "detect failed, smbus byte and/or word data not supported!\n");
2746 return -ENODEV; 2744 return -ENODEV;
2747 } 2745 }
2748 2746
2749 data = devm_kzalloc(&client->dev, sizeof(struct lm93_data), GFP_KERNEL); 2747 data = devm_kzalloc(dev, sizeof(struct lm93_data), GFP_KERNEL);
2750 if (!data) 2748 if (!data)
2751 return -ENOMEM; 2749 return -ENOMEM;
2752 i2c_set_clientdata(client, data);
2753 2750
2754 /* housekeeping */ 2751 /* housekeeping */
2752 data->client = client;
2755 data->update = update; 2753 data->update = update;
2756 mutex_init(&data->update_lock); 2754 mutex_init(&data->update_lock);
2757 2755
2758 /* initialize the chip */ 2756 /* initialize the chip */
2759 lm93_init_client(client); 2757 lm93_init_client(client);
2760 2758
2761 err = sysfs_create_group(&client->dev.kobj, &lm93_attr_grp); 2759 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
2762 if (err) 2760 data,
2763 return err; 2761 lm93_groups);
2764 2762 return PTR_ERR_OR_ZERO(hwmon_dev);
2765 /* Register hwmon driver class */
2766 data->hwmon_dev = hwmon_device_register(&client->dev);
2767 if (!IS_ERR(data->hwmon_dev))
2768 return 0;
2769
2770 err = PTR_ERR(data->hwmon_dev);
2771 dev_err(&client->dev, "error registering hwmon device.\n");
2772 sysfs_remove_group(&client->dev.kobj, &lm93_attr_grp);
2773 return err;
2774}
2775
2776static int lm93_remove(struct i2c_client *client)
2777{
2778 struct lm93_data *data = i2c_get_clientdata(client);
2779
2780 hwmon_device_unregister(data->hwmon_dev);
2781 sysfs_remove_group(&client->dev.kobj, &lm93_attr_grp);
2782
2783 return 0;
2784} 2763}
2785 2764
2786static const struct i2c_device_id lm93_id[] = { 2765static const struct i2c_device_id lm93_id[] = {
@@ -2796,7 +2775,6 @@ static struct i2c_driver lm93_driver = {
2796 .name = "lm93", 2775 .name = "lm93",
2797 }, 2776 },
2798 .probe = lm93_probe, 2777 .probe = lm93_probe,
2799 .remove = lm93_remove,
2800 .id_table = lm93_id, 2778 .id_table = lm93_id,
2801 .detect = lm93_detect, 2779 .detect = lm93_detect,
2802 .address_list = normal_i2c, 2780 .address_list = normal_i2c,
diff --git a/drivers/hwmon/ltc2945.c b/drivers/hwmon/ltc2945.c
index 3701b329b6ae..1b92e4f6e234 100644
--- a/drivers/hwmon/ltc2945.c
+++ b/drivers/hwmon/ltc2945.c
@@ -469,7 +469,7 @@ static struct attribute *ltc2945_attrs[] = {
469}; 469};
470ATTRIBUTE_GROUPS(ltc2945); 470ATTRIBUTE_GROUPS(ltc2945);
471 471
472static struct regmap_config ltc2945_regmap_config = { 472static const struct regmap_config ltc2945_regmap_config = {
473 .reg_bits = 8, 473 .reg_bits = 8,
474 .val_bits = 8, 474 .val_bits = 8,
475 .max_register = LTC2945_MIN_ADIN_THRES_L, 475 .max_register = LTC2945_MIN_ADIN_THRES_L,
diff --git a/drivers/hwmon/ltc4222.c b/drivers/hwmon/ltc4222.c
index 07c25653659f..88f747292816 100644
--- a/drivers/hwmon/ltc4222.c
+++ b/drivers/hwmon/ltc4222.c
@@ -186,7 +186,7 @@ static struct attribute *ltc4222_attrs[] = {
186}; 186};
187ATTRIBUTE_GROUPS(ltc4222); 187ATTRIBUTE_GROUPS(ltc4222);
188 188
189static struct regmap_config ltc4222_regmap_config = { 189static const struct regmap_config ltc4222_regmap_config = {
190 .reg_bits = 8, 190 .reg_bits = 8,
191 .val_bits = 8, 191 .val_bits = 8,
192 .max_register = LTC4222_ADC_CONTROL, 192 .max_register = LTC4222_ADC_CONTROL,
diff --git a/drivers/hwmon/ltc4260.c b/drivers/hwmon/ltc4260.c
index 453a250d9df5..afb09574b12c 100644
--- a/drivers/hwmon/ltc4260.c
+++ b/drivers/hwmon/ltc4260.c
@@ -150,7 +150,7 @@ static struct attribute *ltc4260_attrs[] = {
150}; 150};
151ATTRIBUTE_GROUPS(ltc4260); 151ATTRIBUTE_GROUPS(ltc4260);
152 152
153static struct regmap_config ltc4260_regmap_config = { 153static const struct regmap_config ltc4260_regmap_config = {
154 .reg_bits = 8, 154 .reg_bits = 8,
155 .val_bits = 8, 155 .val_bits = 8,
156 .max_register = LTC4260_ADIN, 156 .max_register = LTC4260_ADIN,
diff --git a/drivers/hwmon/max16065.c b/drivers/hwmon/max16065.c
index d4efc79d7b93..162401aaef71 100644
--- a/drivers/hwmon/max16065.c
+++ b/drivers/hwmon/max16065.c
@@ -642,10 +642,7 @@ static int max16065_probe(struct i2c_client *client,
642 642
643 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, 643 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
644 data, data->groups); 644 data, data->groups);
645 if (unlikely(IS_ERR(hwmon_dev))) 645 return PTR_ERR_OR_ZERO(hwmon_dev);
646 return PTR_ERR(hwmon_dev);
647
648 return 0;
649} 646}
650 647
651static const struct i2c_device_id max16065_id[] = { 648static const struct i2c_device_id max16065_id[] = {
diff --git a/drivers/hwmon/max1668.c b/drivers/hwmon/max1668.c
index e3ed0a5b6d94..7ca889910262 100644
--- a/drivers/hwmon/max1668.c
+++ b/drivers/hwmon/max1668.c
@@ -30,7 +30,7 @@
30#include <linux/mutex.h> 30#include <linux/mutex.h>
31 31
32/* Addresses to scan */ 32/* Addresses to scan */
33static unsigned short max1668_addr_list[] = { 33static const unsigned short max1668_addr_list[] = {
34 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END }; 34 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END };
35 35
36/* max1668 registers */ 36/* max1668 registers */
diff --git a/drivers/hwmon/max6639.c b/drivers/hwmon/max6639.c
index 70650de2cbd1..dac6d85f2fd9 100644
--- a/drivers/hwmon/max6639.c
+++ b/drivers/hwmon/max6639.c
@@ -35,7 +35,7 @@
35#include <linux/i2c/max6639.h> 35#include <linux/i2c/max6639.h>
36 36
37/* Addresses to scan */ 37/* Addresses to scan */
38static unsigned short normal_i2c[] = { 0x2c, 0x2e, 0x2f, I2C_CLIENT_END }; 38static const unsigned short normal_i2c[] = { 0x2c, 0x2e, 0x2f, I2C_CLIENT_END };
39 39
40/* The MAX6639 registers, valid channel numbers: 0, 1 */ 40/* The MAX6639 registers, valid channel numbers: 0, 1 */
41#define MAX6639_REG_TEMP(ch) (0x00 + (ch)) 41#define MAX6639_REG_TEMP(ch) (0x00 + (ch))
diff --git a/drivers/hwmon/max6697.c b/drivers/hwmon/max6697.c
index 7fd3eaf817f4..f03a71722849 100644
--- a/drivers/hwmon/max6697.c
+++ b/drivers/hwmon/max6697.c
@@ -495,15 +495,13 @@ static void max6697_get_config_of(struct device_node *node,
495 int len; 495 int len;
496 const __be32 *prop; 496 const __be32 *prop;
497 497
498 prop = of_get_property(node, "smbus-timeout-disable", &len); 498 pdata->smbus_timeout_disable =
499 if (prop) 499 of_property_read_bool(node, "smbus-timeout-disable");
500 pdata->smbus_timeout_disable = true; 500 pdata->extended_range_enable =
501 prop = of_get_property(node, "extended-range-enable", &len); 501 of_property_read_bool(node, "extended-range-enable");
502 if (prop) 502 pdata->beta_compensation =
503 pdata->extended_range_enable = true; 503 of_property_read_bool(node, "beta-compensation-enable");
504 prop = of_get_property(node, "beta-compensation-enable", &len); 504
505 if (prop)
506 pdata->beta_compensation = true;
507 prop = of_get_property(node, "alert-mask", &len); 505 prop = of_get_property(node, "alert-mask", &len);
508 if (prop && len == sizeof(u32)) 506 if (prop && len == sizeof(u32))
509 pdata->alert_mask = be32_to_cpu(prop[0]); 507 pdata->alert_mask = be32_to_cpu(prop[0]);
diff --git a/drivers/hwmon/nct6775.c b/drivers/hwmon/nct6775.c
index 59d9a3fc96b7..504cbddbdd90 100644
--- a/drivers/hwmon/nct6775.c
+++ b/drivers/hwmon/nct6775.c
@@ -735,7 +735,6 @@ struct nct6775_data {
735 enum kinds kind; 735 enum kinds kind;
736 const char *name; 736 const char *name;
737 737
738 int num_attr_groups;
739 const struct attribute_group *groups[6]; 738 const struct attribute_group *groups[6];
740 739
741 u16 reg_temp[5][NUM_TEMP]; /* 0=temp, 1=temp_over, 2=temp_hyst, 740 u16 reg_temp[5][NUM_TEMP]; /* 0=temp, 1=temp_over, 2=temp_hyst,
@@ -3276,6 +3275,7 @@ static int nct6775_probe(struct platform_device *pdev)
3276 u8 cr2a; 3275 u8 cr2a;
3277 struct attribute_group *group; 3276 struct attribute_group *group;
3278 struct device *hwmon_dev; 3277 struct device *hwmon_dev;
3278 int num_attr_groups = 0;
3279 3279
3280 res = platform_get_resource(pdev, IORESOURCE_IO, 0); 3280 res = platform_get_resource(pdev, IORESOURCE_IO, 0);
3281 if (!devm_request_region(&pdev->dev, res->start, IOREGION_LENGTH, 3281 if (!devm_request_region(&pdev->dev, res->start, IOREGION_LENGTH,
@@ -3907,29 +3907,29 @@ static int nct6775_probe(struct platform_device *pdev)
3907 if (IS_ERR(group)) 3907 if (IS_ERR(group))
3908 return PTR_ERR(group); 3908 return PTR_ERR(group);
3909 3909
3910 data->groups[data->num_attr_groups++] = group; 3910 data->groups[num_attr_groups++] = group;
3911 3911
3912 group = nct6775_create_attr_group(dev, &nct6775_in_template_group, 3912 group = nct6775_create_attr_group(dev, &nct6775_in_template_group,
3913 fls(data->have_in)); 3913 fls(data->have_in));
3914 if (IS_ERR(group)) 3914 if (IS_ERR(group))
3915 return PTR_ERR(group); 3915 return PTR_ERR(group);
3916 3916
3917 data->groups[data->num_attr_groups++] = group; 3917 data->groups[num_attr_groups++] = group;
3918 3918
3919 group = nct6775_create_attr_group(dev, &nct6775_fan_template_group, 3919 group = nct6775_create_attr_group(dev, &nct6775_fan_template_group,
3920 fls(data->has_fan)); 3920 fls(data->has_fan));
3921 if (IS_ERR(group)) 3921 if (IS_ERR(group))
3922 return PTR_ERR(group); 3922 return PTR_ERR(group);
3923 3923
3924 data->groups[data->num_attr_groups++] = group; 3924 data->groups[num_attr_groups++] = group;
3925 3925
3926 group = nct6775_create_attr_group(dev, &nct6775_temp_template_group, 3926 group = nct6775_create_attr_group(dev, &nct6775_temp_template_group,
3927 fls(data->have_temp)); 3927 fls(data->have_temp));
3928 if (IS_ERR(group)) 3928 if (IS_ERR(group))
3929 return PTR_ERR(group); 3929 return PTR_ERR(group);
3930 3930
3931 data->groups[data->num_attr_groups++] = group; 3931 data->groups[num_attr_groups++] = group;
3932 data->groups[data->num_attr_groups++] = &nct6775_group_other; 3932 data->groups[num_attr_groups++] = &nct6775_group_other;
3933 3933
3934 hwmon_dev = devm_hwmon_device_register_with_groups(dev, data->name, 3934 hwmon_dev = devm_hwmon_device_register_with_groups(dev, data->name,
3935 data, data->groups); 3935 data, data->groups);
@@ -4221,7 +4221,7 @@ static void __exit sensors_nct6775_exit(void)
4221} 4221}
4222 4222
4223MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>"); 4223MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");
4224MODULE_DESCRIPTION("NCT6775F/NCT6776F/NCT6779D driver"); 4224MODULE_DESCRIPTION("NCT6106D/NCT6775F/NCT6776F/NCT6779D/NCT6791D driver");
4225MODULE_LICENSE("GPL"); 4225MODULE_LICENSE("GPL");
4226 4226
4227module_init(sensors_nct6775_init); 4227module_init(sensors_nct6775_init);
diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c
index ae66f42c4d6d..bd410722cd4b 100644
--- a/drivers/hwmon/ntc_thermistor.c
+++ b/drivers/hwmon/ntc_thermistor.c
@@ -51,6 +51,7 @@ static const struct platform_device_id ntc_thermistor_id[] = {
51 { "ncp21wb473", TYPE_NCPXXWB473 }, 51 { "ncp21wb473", TYPE_NCPXXWB473 },
52 { "ncp03wb473", TYPE_NCPXXWB473 }, 52 { "ncp03wb473", TYPE_NCPXXWB473 },
53 { "ncp15wl333", TYPE_NCPXXWL333 }, 53 { "ncp15wl333", TYPE_NCPXXWL333 },
54 { "b57330v2103", TYPE_B57330V2103},
54 { }, 55 { },
55}; 56};
56 57
@@ -133,6 +134,47 @@ static const struct ntc_compensation ncpXXwl333[] = {
133 { .temp_c = 125, .ohm = 707 }, 134 { .temp_c = 125, .ohm = 707 },
134}; 135};
135 136
137/*
138 * The following compensation table is from the specification of EPCOS NTC
139 * Thermistors Datasheet
140 */
141static const struct ntc_compensation b57330v2103[] = {
142 { .temp_c = -40, .ohm = 190030 },
143 { .temp_c = -35, .ohm = 145360 },
144 { .temp_c = -30, .ohm = 112060 },
145 { .temp_c = -25, .ohm = 87041 },
146 { .temp_c = -20, .ohm = 68104 },
147 { .temp_c = -15, .ohm = 53665 },
148 { .temp_c = -10, .ohm = 42576 },
149 { .temp_c = -5, .ohm = 34001 },
150 { .temp_c = 0, .ohm = 27326 },
151 { .temp_c = 5, .ohm = 22096 },
152 { .temp_c = 10, .ohm = 17973 },
153 { .temp_c = 15, .ohm = 14703 },
154 { .temp_c = 20, .ohm = 12090 },
155 { .temp_c = 25, .ohm = 10000 },
156 { .temp_c = 30, .ohm = 8311 },
157 { .temp_c = 35, .ohm = 6941 },
158 { .temp_c = 40, .ohm = 5825 },
159 { .temp_c = 45, .ohm = 4911 },
160 { .temp_c = 50, .ohm = 4158 },
161 { .temp_c = 55, .ohm = 3536 },
162 { .temp_c = 60, .ohm = 3019 },
163 { .temp_c = 65, .ohm = 2588 },
164 { .temp_c = 70, .ohm = 2227 },
165 { .temp_c = 75, .ohm = 1924 },
166 { .temp_c = 80, .ohm = 1668 },
167 { .temp_c = 85, .ohm = 1451 },
168 { .temp_c = 90, .ohm = 1266 },
169 { .temp_c = 95, .ohm = 1108 },
170 { .temp_c = 100, .ohm = 973 },
171 { .temp_c = 105, .ohm = 857 },
172 { .temp_c = 110, .ohm = 757 },
173 { .temp_c = 115, .ohm = 671 },
174 { .temp_c = 120, .ohm = 596 },
175 { .temp_c = 125, .ohm = 531 },
176};
177
136struct ntc_data { 178struct ntc_data {
137 struct device *hwmon_dev; 179 struct device *hwmon_dev;
138 struct ntc_thermistor_platform_data *pdata; 180 struct ntc_thermistor_platform_data *pdata;
@@ -173,6 +215,8 @@ static const struct of_device_id ntc_match[] = {
173 .data = &ntc_thermistor_id[3] }, 215 .data = &ntc_thermistor_id[3] },
174 { .compatible = "murata,ncp15wl333", 216 { .compatible = "murata,ncp15wl333",
175 .data = &ntc_thermistor_id[4] }, 217 .data = &ntc_thermistor_id[4] },
218 { .compatible = "epcos,b57330v2103",
219 .data = &ntc_thermistor_id[5]},
176 220
177 /* Usage of vendor name "ntc" is deprecated */ 221 /* Usage of vendor name "ntc" is deprecated */
178 { .compatible = "ntc,ncp15wb473", 222 { .compatible = "ntc,ncp15wb473",
@@ -490,6 +534,10 @@ static int ntc_thermistor_probe(struct platform_device *pdev)
490 data->comp = ncpXXwl333; 534 data->comp = ncpXXwl333;
491 data->n_comp = ARRAY_SIZE(ncpXXwl333); 535 data->n_comp = ARRAY_SIZE(ncpXXwl333);
492 break; 536 break;
537 case TYPE_B57330V2103:
538 data->comp = b57330v2103;
539 data->n_comp = ARRAY_SIZE(b57330v2103);
540 break;
493 default: 541 default:
494 dev_err(&pdev->dev, "Unknown device type: %lu(%s)\n", 542 dev_err(&pdev->dev, "Unknown device type: %lu(%s)\n",
495 pdev_id->driver_data, pdev_id->name); 543 pdev_id->driver_data, pdev_id->name);
@@ -546,7 +594,7 @@ static struct platform_driver ntc_thermistor_driver = {
546 594
547module_platform_driver(ntc_thermistor_driver); 595module_platform_driver(ntc_thermistor_driver);
548 596
549MODULE_DESCRIPTION("NTC Thermistor Driver from Murata"); 597MODULE_DESCRIPTION("NTC Thermistor Driver");
550MODULE_AUTHOR("MyungJoo Ham <myungjoo.ham@samsung.com>"); 598MODULE_AUTHOR("MyungJoo Ham <myungjoo.ham@samsung.com>");
551MODULE_LICENSE("GPL"); 599MODULE_LICENSE("GPL");
552MODULE_ALIAS("platform:ntc-thermistor"); 600MODULE_ALIAS("platform:ntc-thermistor");
diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig
index 39cc63edfbb0..6e1e4935fc62 100644
--- a/drivers/hwmon/pmbus/Kconfig
+++ b/drivers/hwmon/pmbus/Kconfig
@@ -20,8 +20,7 @@ config SENSORS_PMBUS
20 help 20 help
21 If you say yes here you get hardware monitoring support for generic 21 If you say yes here you get hardware monitoring support for generic
22 PMBus devices, including but not limited to ADP4000, BMR453, BMR454, 22 PMBus devices, including but not limited to ADP4000, BMR453, BMR454,
23 MDT040, NCP4200, NCP4208, PDT003, PDT006, PDT012, UDT020, TPS40400, 23 MDT040, NCP4200, NCP4208, PDT003, PDT006, PDT012, UDT020, and TPS40400.
24 and TPS40422.
25 24
26 This driver can also be built as a module. If so, the module will 25 This driver can also be built as a module. If so, the module will
27 be called pmbus. 26 be called pmbus.
@@ -87,6 +86,16 @@ config SENSORS_MAX8688
87 This driver can also be built as a module. If so, the module will 86 This driver can also be built as a module. If so, the module will
88 be called max8688. 87 be called max8688.
89 88
89config SENSORS_TPS40422
90 tristate "TI TPS40422"
91 default n
92 help
93 If you say yes here you get hardware monitoring support for TI
94 TPS40422.
95
96 This driver can also be built as a module. If so, the module will
97 be called tps40422.
98
90config SENSORS_UCD9000 99config SENSORS_UCD9000
91 tristate "TI UCD90120, UCD90124, UCD9090, UCD90910" 100 tristate "TI UCD90120, UCD90124, UCD9090, UCD90910"
92 default n 101 default n
diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile
index 789376c85dbb..1454293e985c 100644
--- a/drivers/hwmon/pmbus/Makefile
+++ b/drivers/hwmon/pmbus/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_SENSORS_LTC2978) += ltc2978.o
10obj-$(CONFIG_SENSORS_MAX16064) += max16064.o 10obj-$(CONFIG_SENSORS_MAX16064) += max16064.o
11obj-$(CONFIG_SENSORS_MAX34440) += max34440.o 11obj-$(CONFIG_SENSORS_MAX34440) += max34440.o
12obj-$(CONFIG_SENSORS_MAX8688) += max8688.o 12obj-$(CONFIG_SENSORS_MAX8688) += max8688.o
13obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o
13obj-$(CONFIG_SENSORS_UCD9000) += ucd9000.o 14obj-$(CONFIG_SENSORS_UCD9000) += ucd9000.o
14obj-$(CONFIG_SENSORS_UCD9200) += ucd9200.o 15obj-$(CONFIG_SENSORS_UCD9200) += ucd9200.o
15obj-$(CONFIG_SENSORS_ZL6100) += zl6100.o 16obj-$(CONFIG_SENSORS_ZL6100) += zl6100.o
diff --git a/drivers/hwmon/pmbus/pmbus.c b/drivers/hwmon/pmbus/pmbus.c
index 7e91700131a7..554d0249dcde 100644
--- a/drivers/hwmon/pmbus/pmbus.c
+++ b/drivers/hwmon/pmbus/pmbus.c
@@ -193,7 +193,6 @@ static const struct i2c_device_id pmbus_id[] = {
193 {"pdt012", 1}, 193 {"pdt012", 1},
194 {"pmbus", 0}, 194 {"pmbus", 0},
195 {"tps40400", 1}, 195 {"tps40400", 1},
196 {"tps40422", 2},
197 {"udt020", 1}, 196 {"udt020", 1},
198 {} 197 {}
199}; 198};
diff --git a/drivers/hwmon/pmbus/tps40422.c b/drivers/hwmon/pmbus/tps40422.c
new file mode 100644
index 000000000000..32803825d47e
--- /dev/null
+++ b/drivers/hwmon/pmbus/tps40422.c
@@ -0,0 +1,64 @@
1/*
2 * Hardware monitoring driver for TI TPS40422
3 *
4 * Copyright (c) 2014 Nokia Solutions and Networks.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 */
16
17#include <linux/kernel.h>
18#include <linux/module.h>
19#include <linux/init.h>
20#include <linux/err.h>
21#include <linux/i2c.h>
22#include "pmbus.h"
23
24static struct pmbus_driver_info tps40422_info = {
25 .pages = 2,
26 .format[PSC_VOLTAGE_IN] = linear,
27 .format[PSC_VOLTAGE_OUT] = linear,
28 .format[PSC_TEMPERATURE] = linear,
29 .func[0] = PMBUS_HAVE_VOUT | PMBUS_HAVE_TEMP2
30 | PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_TEMP
31 | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT,
32 .func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_TEMP2
33 | PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_TEMP
34 | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT,
35};
36
37static int tps40422_probe(struct i2c_client *client,
38 const struct i2c_device_id *id)
39{
40 return pmbus_do_probe(client, id, &tps40422_info);
41}
42
43static const struct i2c_device_id tps40422_id[] = {
44 {"tps40422", 0},
45 {}
46};
47
48MODULE_DEVICE_TABLE(i2c, tps40422_id);
49
50/* This is the driver that will be inserted */
51static struct i2c_driver tps40422_driver = {
52 .driver = {
53 .name = "tps40422",
54 },
55 .probe = tps40422_probe,
56 .remove = pmbus_do_remove,
57 .id_table = tps40422_id,
58};
59
60module_i2c_driver(tps40422_driver);
61
62MODULE_AUTHOR("Zhu Laiwen <richard.zhu@nsn.com>");
63MODULE_DESCRIPTION("PMBus driver for TI TPS40422");
64MODULE_LICENSE("GPL");
diff --git a/drivers/hwmon/powr1220.c b/drivers/hwmon/powr1220.c
new file mode 100644
index 000000000000..3014e4ac741e
--- /dev/null
+++ b/drivers/hwmon/powr1220.c
@@ -0,0 +1,391 @@
1/*
2 * powr1220.c - Driver for the Lattice POWR1220 programmable power supply
3 * and monitor. Users can read all ADC inputs along with their labels
4 * using the sysfs nodes.
5 *
6 * Copyright (c) 2014 Echo360 http://www.echo360.com
7 * Scott Kanowitz <skanowitz@echo360.com> <scott.kanowitz@gmail.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 */
19
20#include <linux/module.h>
21#include <linux/init.h>
22#include <linux/slab.h>
23#include <linux/jiffies.h>
24#include <linux/i2c.h>
25#include <linux/hwmon.h>
26#include <linux/hwmon-sysfs.h>
27#include <linux/err.h>
28#include <linux/mutex.h>
29#include <linux/delay.h>
30
31#define ADC_STEP_MV 2
32#define ADC_MAX_LOW_MEASUREMENT_MV 2000
33
34enum powr1220_regs {
35 VMON_STATUS0,
36 VMON_STATUS1,
37 VMON_STATUS2,
38 OUTPUT_STATUS0,
39 OUTPUT_STATUS1,
40 OUTPUT_STATUS2,
41 INPUT_STATUS,
42 ADC_VALUE_LOW,
43 ADC_VALUE_HIGH,
44 ADC_MUX,
45 UES_BYTE0,
46 UES_BYTE1,
47 UES_BYTE2,
48 UES_BYTE3,
49 GP_OUTPUT1,
50 GP_OUTPUT2,
51 GP_OUTPUT3,
52 INPUT_VALUE,
53 RESET,
54 TRIM1_TRIM,
55 TRIM2_TRIM,
56 TRIM3_TRIM,
57 TRIM4_TRIM,
58 TRIM5_TRIM,
59 TRIM6_TRIM,
60 TRIM7_TRIM,
61 TRIM8_TRIM,
62 MAX_POWR1220_REGS
63};
64
65enum powr1220_adc_values {
66 VMON1,
67 VMON2,
68 VMON3,
69 VMON4,
70 VMON5,
71 VMON6,
72 VMON7,
73 VMON8,
74 VMON9,
75 VMON10,
76 VMON11,
77 VMON12,
78 VCCA,
79 VCCINP,
80 MAX_POWR1220_ADC_VALUES
81};
82
83struct powr1220_data {
84 struct i2c_client *client;
85 struct mutex update_lock;
86 bool adc_valid[MAX_POWR1220_ADC_VALUES];
87 /* the next value is in jiffies */
88 unsigned long adc_last_updated[MAX_POWR1220_ADC_VALUES];
89
90 /* values */
91 int adc_maxes[MAX_POWR1220_ADC_VALUES];
92 int adc_values[MAX_POWR1220_ADC_VALUES];
93};
94
95static const char * const input_names[] = {
96 [VMON1] = "vmon1",
97 [VMON2] = "vmon2",
98 [VMON3] = "vmon3",
99 [VMON4] = "vmon4",
100 [VMON5] = "vmon5",
101 [VMON6] = "vmon6",
102 [VMON7] = "vmon7",
103 [VMON8] = "vmon8",
104 [VMON9] = "vmon9",
105 [VMON10] = "vmon10",
106 [VMON11] = "vmon11",
107 [VMON12] = "vmon12",
108 [VCCA] = "vcca",
109 [VCCINP] = "vccinp",
110};
111
112/* Reads the specified ADC channel */
113static int powr1220_read_adc(struct device *dev, int ch_num)
114{
115 struct powr1220_data *data = dev_get_drvdata(dev);
116 int reading;
117 int result;
118 int adc_range = 0;
119
120 mutex_lock(&data->update_lock);
121
122 if (time_after(jiffies, data->adc_last_updated[ch_num] + HZ) ||
123 !data->adc_valid[ch_num]) {
124 /*
125 * figure out if we need to use the attenuator for
126 * high inputs or inputs that we don't yet have a measurement
127 * for. We dynamically set the attenuator depending on the
128 * max reading.
129 */
130 if (data->adc_maxes[ch_num] > ADC_MAX_LOW_MEASUREMENT_MV ||
131 data->adc_maxes[ch_num] == 0)
132 adc_range = 1 << 4;
133
134 /* set the attenuator and mux */
135 result = i2c_smbus_write_byte_data(data->client, ADC_MUX,
136 adc_range | ch_num);
137 if (result)
138 goto exit;
139
140 /*
141 * wait at least Tconvert time (200 us) for the
142 * conversion to complete
143 */
144 udelay(200);
145
146 /* get the ADC reading */
147 result = i2c_smbus_read_byte_data(data->client, ADC_VALUE_LOW);
148 if (result < 0)
149 goto exit;
150
151 reading = result >> 4;
152
153 /* get the upper half of the reading */
154 result = i2c_smbus_read_byte_data(data->client, ADC_VALUE_HIGH);
155 if (result < 0)
156 goto exit;
157
158 reading |= result << 4;
159
160 /* now convert the reading to a voltage */
161 reading *= ADC_STEP_MV;
162 data->adc_values[ch_num] = reading;
163 data->adc_valid[ch_num] = true;
164 data->adc_last_updated[ch_num] = jiffies;
165 result = reading;
166
167 if (reading > data->adc_maxes[ch_num])
168 data->adc_maxes[ch_num] = reading;
169 } else {
170 result = data->adc_values[ch_num];
171 }
172
173exit:
174 mutex_unlock(&data->update_lock);
175
176 return result;
177}
178
179/* Shows the voltage associated with the specified ADC channel */
180static ssize_t powr1220_show_voltage(struct device *dev,
181 struct device_attribute *dev_attr, char *buf)
182{
183 struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
184 int adc_val = powr1220_read_adc(dev, attr->index);
185
186 if (adc_val < 0)
187 return adc_val;
188
189 return sprintf(buf, "%d\n", adc_val);
190}
191
192/* Shows the maximum setting associated with the specified ADC channel */
193static ssize_t powr1220_show_max(struct device *dev,
194 struct device_attribute *dev_attr, char *buf)
195{
196 struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
197 struct powr1220_data *data = dev_get_drvdata(dev);
198
199 return sprintf(buf, "%d\n", data->adc_maxes[attr->index]);
200}
201
202/* Shows the label associated with the specified ADC channel */
203static ssize_t powr1220_show_label(struct device *dev,
204 struct device_attribute *dev_attr, char *buf)
205{
206 struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
207
208 return sprintf(buf, "%s\n", input_names[attr->index]);
209}
210
211static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, powr1220_show_voltage, NULL,
212 VMON1);
213static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, powr1220_show_voltage, NULL,
214 VMON2);
215static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, powr1220_show_voltage, NULL,
216 VMON3);
217static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, powr1220_show_voltage, NULL,
218 VMON4);
219static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, powr1220_show_voltage, NULL,
220 VMON5);
221static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, powr1220_show_voltage, NULL,
222 VMON6);
223static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, powr1220_show_voltage, NULL,
224 VMON7);
225static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, powr1220_show_voltage, NULL,
226 VMON8);
227static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, powr1220_show_voltage, NULL,
228 VMON9);
229static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, powr1220_show_voltage, NULL,
230 VMON10);
231static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, powr1220_show_voltage, NULL,
232 VMON11);
233static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, powr1220_show_voltage, NULL,
234 VMON12);
235static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, powr1220_show_voltage, NULL,
236 VCCA);
237static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, powr1220_show_voltage, NULL,
238 VCCINP);
239
240static SENSOR_DEVICE_ATTR(in0_highest, S_IRUGO, powr1220_show_max, NULL,
241 VMON1);
242static SENSOR_DEVICE_ATTR(in1_highest, S_IRUGO, powr1220_show_max, NULL,
243 VMON2);
244static SENSOR_DEVICE_ATTR(in2_highest, S_IRUGO, powr1220_show_max, NULL,
245 VMON3);
246static SENSOR_DEVICE_ATTR(in3_highest, S_IRUGO, powr1220_show_max, NULL,
247 VMON4);
248static SENSOR_DEVICE_ATTR(in4_highest, S_IRUGO, powr1220_show_max, NULL,
249 VMON5);
250static SENSOR_DEVICE_ATTR(in5_highest, S_IRUGO, powr1220_show_max, NULL,
251 VMON6);
252static SENSOR_DEVICE_ATTR(in6_highest, S_IRUGO, powr1220_show_max, NULL,
253 VMON7);
254static SENSOR_DEVICE_ATTR(in7_highest, S_IRUGO, powr1220_show_max, NULL,
255 VMON8);
256static SENSOR_DEVICE_ATTR(in8_highest, S_IRUGO, powr1220_show_max, NULL,
257 VMON9);
258static SENSOR_DEVICE_ATTR(in9_highest, S_IRUGO, powr1220_show_max, NULL,
259 VMON10);
260static SENSOR_DEVICE_ATTR(in10_highest, S_IRUGO, powr1220_show_max, NULL,
261 VMON11);
262static SENSOR_DEVICE_ATTR(in11_highest, S_IRUGO, powr1220_show_max, NULL,
263 VMON12);
264static SENSOR_DEVICE_ATTR(in12_highest, S_IRUGO, powr1220_show_max, NULL,
265 VCCA);
266static SENSOR_DEVICE_ATTR(in13_highest, S_IRUGO, powr1220_show_max, NULL,
267 VCCINP);
268
269static SENSOR_DEVICE_ATTR(in0_label, S_IRUGO, powr1220_show_label, NULL,
270 VMON1);
271static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, powr1220_show_label, NULL,
272 VMON2);
273static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, powr1220_show_label, NULL,
274 VMON3);
275static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, powr1220_show_label, NULL,
276 VMON4);
277static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, powr1220_show_label, NULL,
278 VMON5);
279static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, powr1220_show_label, NULL,
280 VMON6);
281static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, powr1220_show_label, NULL,
282 VMON7);
283static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, powr1220_show_label, NULL,
284 VMON8);
285static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, powr1220_show_label, NULL,
286 VMON9);
287static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, powr1220_show_label, NULL,
288 VMON10);
289static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, powr1220_show_label, NULL,
290 VMON11);
291static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, powr1220_show_label, NULL,
292 VMON12);
293static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, powr1220_show_label, NULL,
294 VCCA);
295static SENSOR_DEVICE_ATTR(in13_label, S_IRUGO, powr1220_show_label, NULL,
296 VCCINP);
297
298static struct attribute *powr1220_attrs[] = {
299 &sensor_dev_attr_in0_input.dev_attr.attr,
300 &sensor_dev_attr_in1_input.dev_attr.attr,
301 &sensor_dev_attr_in2_input.dev_attr.attr,
302 &sensor_dev_attr_in3_input.dev_attr.attr,
303 &sensor_dev_attr_in4_input.dev_attr.attr,
304 &sensor_dev_attr_in5_input.dev_attr.attr,
305 &sensor_dev_attr_in6_input.dev_attr.attr,
306 &sensor_dev_attr_in7_input.dev_attr.attr,
307 &sensor_dev_attr_in8_input.dev_attr.attr,
308 &sensor_dev_attr_in9_input.dev_attr.attr,
309 &sensor_dev_attr_in10_input.dev_attr.attr,
310 &sensor_dev_attr_in11_input.dev_attr.attr,
311 &sensor_dev_attr_in12_input.dev_attr.attr,
312 &sensor_dev_attr_in13_input.dev_attr.attr,
313
314 &sensor_dev_attr_in0_highest.dev_attr.attr,
315 &sensor_dev_attr_in1_highest.dev_attr.attr,
316 &sensor_dev_attr_in2_highest.dev_attr.attr,
317 &sensor_dev_attr_in3_highest.dev_attr.attr,
318 &sensor_dev_attr_in4_highest.dev_attr.attr,
319 &sensor_dev_attr_in5_highest.dev_attr.attr,
320 &sensor_dev_attr_in6_highest.dev_attr.attr,
321 &sensor_dev_attr_in7_highest.dev_attr.attr,
322 &sensor_dev_attr_in8_highest.dev_attr.attr,
323 &sensor_dev_attr_in9_highest.dev_attr.attr,
324 &sensor_dev_attr_in10_highest.dev_attr.attr,
325 &sensor_dev_attr_in11_highest.dev_attr.attr,
326 &sensor_dev_attr_in12_highest.dev_attr.attr,
327 &sensor_dev_attr_in13_highest.dev_attr.attr,
328
329 &sensor_dev_attr_in0_label.dev_attr.attr,
330 &sensor_dev_attr_in1_label.dev_attr.attr,
331 &sensor_dev_attr_in2_label.dev_attr.attr,
332 &sensor_dev_attr_in3_label.dev_attr.attr,
333 &sensor_dev_attr_in4_label.dev_attr.attr,
334 &sensor_dev_attr_in5_label.dev_attr.attr,
335 &sensor_dev_attr_in6_label.dev_attr.attr,
336 &sensor_dev_attr_in7_label.dev_attr.attr,
337 &sensor_dev_attr_in8_label.dev_attr.attr,
338 &sensor_dev_attr_in9_label.dev_attr.attr,
339 &sensor_dev_attr_in10_label.dev_attr.attr,
340 &sensor_dev_attr_in11_label.dev_attr.attr,
341 &sensor_dev_attr_in12_label.dev_attr.attr,
342 &sensor_dev_attr_in13_label.dev_attr.attr,
343
344 NULL
345};
346
347ATTRIBUTE_GROUPS(powr1220);
348
349static int powr1220_probe(struct i2c_client *client,
350 const struct i2c_device_id *id)
351{
352 struct powr1220_data *data;
353 struct device *hwmon_dev;
354
355 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
356 return -ENODEV;
357
358 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
359 if (!data)
360 return -ENOMEM;
361
362 mutex_init(&data->update_lock);
363 data->client = client;
364
365 hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev,
366 client->name, data, powr1220_groups);
367
368 return PTR_ERR_OR_ZERO(hwmon_dev);
369}
370
371static const struct i2c_device_id powr1220_ids[] = {
372 { "powr1220", 0, },
373 { }
374};
375
376MODULE_DEVICE_TABLE(i2c, powr1220_ids);
377
378static struct i2c_driver powr1220_driver = {
379 .class = I2C_CLASS_HWMON,
380 .driver = {
381 .name = "powr1220",
382 },
383 .probe = powr1220_probe,
384 .id_table = powr1220_ids,
385};
386
387module_i2c_driver(powr1220_driver);
388
389MODULE_AUTHOR("Scott Kanowitz");
390MODULE_DESCRIPTION("POWR1220 driver");
391MODULE_LICENSE("GPL");
diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c
new file mode 100644
index 000000000000..823c877a1ec0
--- /dev/null
+++ b/drivers/hwmon/pwm-fan.c
@@ -0,0 +1,193 @@
1/*
2 * pwm-fan.c - Hwmon driver for fans connected to PWM lines.
3 *
4 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
5 *
6 * Author: Kamil Debski <k.debski@samsung.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 */
18
19#include <linux/hwmon.h>
20#include <linux/hwmon-sysfs.h>
21#include <linux/module.h>
22#include <linux/mutex.h>
23#include <linux/of.h>
24#include <linux/platform_device.h>
25#include <linux/pwm.h>
26#include <linux/sysfs.h>
27
28#define MAX_PWM 255
29
30struct pwm_fan_ctx {
31 struct mutex lock;
32 struct pwm_device *pwm;
33 unsigned char pwm_value;
34};
35
36static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
37 const char *buf, size_t count)
38{
39 struct pwm_fan_ctx *ctx = dev_get_drvdata(dev);
40 unsigned long pwm, duty;
41 ssize_t ret;
42
43 if (kstrtoul(buf, 10, &pwm) || pwm > MAX_PWM)
44 return -EINVAL;
45
46 mutex_lock(&ctx->lock);
47
48 if (ctx->pwm_value == pwm)
49 goto exit_set_pwm_no_change;
50
51 if (pwm == 0) {
52 pwm_disable(ctx->pwm);
53 goto exit_set_pwm;
54 }
55
56 duty = DIV_ROUND_UP(pwm * (ctx->pwm->period - 1), MAX_PWM);
57 ret = pwm_config(ctx->pwm, duty, ctx->pwm->period);
58 if (ret)
59 goto exit_set_pwm_err;
60
61 if (ctx->pwm_value == 0) {
62 ret = pwm_enable(ctx->pwm);
63 if (ret)
64 goto exit_set_pwm_err;
65 }
66
67exit_set_pwm:
68 ctx->pwm_value = pwm;
69exit_set_pwm_no_change:
70 ret = count;
71exit_set_pwm_err:
72 mutex_unlock(&ctx->lock);
73 return ret;
74}
75
76static ssize_t show_pwm(struct device *dev,
77 struct device_attribute *attr, char *buf)
78{
79 struct pwm_fan_ctx *ctx = dev_get_drvdata(dev);
80
81 return sprintf(buf, "%u\n", ctx->pwm_value);
82}
83
84
85static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm, set_pwm, 0);
86
87static struct attribute *pwm_fan_attrs[] = {
88 &sensor_dev_attr_pwm1.dev_attr.attr,
89 NULL,
90};
91
92ATTRIBUTE_GROUPS(pwm_fan);
93
94static int pwm_fan_probe(struct platform_device *pdev)
95{
96 struct device *hwmon;
97 struct pwm_fan_ctx *ctx;
98 int duty_cycle;
99 int ret;
100
101 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
102 if (!ctx)
103 return -ENOMEM;
104
105 mutex_init(&ctx->lock);
106
107 ctx->pwm = devm_of_pwm_get(&pdev->dev, pdev->dev.of_node, NULL);
108 if (IS_ERR(ctx->pwm)) {
109 dev_err(&pdev->dev, "Could not get PWM\n");
110 return PTR_ERR(ctx->pwm);
111 }
112
113 platform_set_drvdata(pdev, ctx);
114
115 /* Set duty cycle to maximum allowed */
116 duty_cycle = ctx->pwm->period - 1;
117 ctx->pwm_value = MAX_PWM;
118
119 ret = pwm_config(ctx->pwm, duty_cycle, ctx->pwm->period);
120 if (ret) {
121 dev_err(&pdev->dev, "Failed to configure PWM\n");
122 return ret;
123 }
124
125 /* Enbale PWM output */
126 ret = pwm_enable(ctx->pwm);
127 if (ret) {
128 dev_err(&pdev->dev, "Failed to enable PWM\n");
129 return ret;
130 }
131
132 hwmon = devm_hwmon_device_register_with_groups(&pdev->dev, "pwmfan",
133 ctx, pwm_fan_groups);
134 if (IS_ERR(hwmon)) {
135 dev_err(&pdev->dev, "Failed to register hwmon device\n");
136 pwm_disable(ctx->pwm);
137 return PTR_ERR(hwmon);
138 }
139 return 0;
140}
141
142static int pwm_fan_remove(struct platform_device *pdev)
143{
144 struct pwm_fan_ctx *ctx = platform_get_drvdata(pdev);
145
146 if (ctx->pwm_value)
147 pwm_disable(ctx->pwm);
148 return 0;
149}
150
151#ifdef CONFIG_PM_SLEEP
152static int pwm_fan_suspend(struct device *dev)
153{
154 struct pwm_fan_ctx *ctx = dev_get_drvdata(dev);
155
156 if (ctx->pwm_value)
157 pwm_disable(ctx->pwm);
158 return 0;
159}
160
161static int pwm_fan_resume(struct device *dev)
162{
163 struct pwm_fan_ctx *ctx = dev_get_drvdata(dev);
164
165 if (ctx->pwm_value)
166 return pwm_enable(ctx->pwm);
167 return 0;
168}
169#endif
170
171static SIMPLE_DEV_PM_OPS(pwm_fan_pm, pwm_fan_suspend, pwm_fan_resume);
172
173static struct of_device_id of_pwm_fan_match[] = {
174 { .compatible = "pwm-fan", },
175 {},
176};
177
178static struct platform_driver pwm_fan_driver = {
179 .probe = pwm_fan_probe,
180 .remove = pwm_fan_remove,
181 .driver = {
182 .name = "pwm-fan",
183 .pm = &pwm_fan_pm,
184 .of_match_table = of_pwm_fan_match,
185 },
186};
187
188module_platform_driver(pwm_fan_driver);
189
190MODULE_AUTHOR("Kamil Debski <k.debski@samsung.com>");
191MODULE_ALIAS("platform:pwm-fan");
192MODULE_DESCRIPTION("PWM FAN driver");
193MODULE_LICENSE("GPL");
diff --git a/drivers/hwmon/sht21.c b/drivers/hwmon/sht21.c
index 2e9f9570b6f8..84cdb1cf0fb4 100644
--- a/drivers/hwmon/sht21.c
+++ b/drivers/hwmon/sht21.c
@@ -45,7 +45,7 @@
45 * @humidity: cached humidity measurement value 45 * @humidity: cached humidity measurement value
46 */ 46 */
47struct sht21 { 47struct sht21 {
48 struct device *hwmon_dev; 48 struct i2c_client *client;
49 struct mutex lock; 49 struct mutex lock;
50 char valid; 50 char valid;
51 unsigned long last_update; 51 unsigned long last_update;
@@ -85,14 +85,15 @@ static inline int sht21_rh_ticks_to_per_cent_mille(int ticks)
85 85
86/** 86/**
87 * sht21_update_measurements() - get updated measurements from device 87 * sht21_update_measurements() - get updated measurements from device
88 * @client: I2C client device 88 * @dev: device
89 * 89 *
90 * Returns 0 on success, else negative errno. 90 * Returns 0 on success, else negative errno.
91 */ 91 */
92static int sht21_update_measurements(struct i2c_client *client) 92static int sht21_update_measurements(struct device *dev)
93{ 93{
94 int ret = 0; 94 int ret = 0;
95 struct sht21 *sht21 = i2c_get_clientdata(client); 95 struct sht21 *sht21 = dev_get_drvdata(dev);
96 struct i2c_client *client = sht21->client;
96 97
97 mutex_lock(&sht21->lock); 98 mutex_lock(&sht21->lock);
98 /* 99 /*
@@ -133,9 +134,10 @@ static ssize_t sht21_show_temperature(struct device *dev,
133 struct device_attribute *attr, 134 struct device_attribute *attr,
134 char *buf) 135 char *buf)
135{ 136{
136 struct i2c_client *client = to_i2c_client(dev); 137 struct sht21 *sht21 = dev_get_drvdata(dev);
137 struct sht21 *sht21 = i2c_get_clientdata(client); 138 int ret;
138 int ret = sht21_update_measurements(client); 139
140 ret = sht21_update_measurements(dev);
139 if (ret < 0) 141 if (ret < 0)
140 return ret; 142 return ret;
141 return sprintf(buf, "%d\n", sht21->temperature); 143 return sprintf(buf, "%d\n", sht21->temperature);
@@ -154,9 +156,10 @@ static ssize_t sht21_show_humidity(struct device *dev,
154 struct device_attribute *attr, 156 struct device_attribute *attr,
155 char *buf) 157 char *buf)
156{ 158{
157 struct i2c_client *client = to_i2c_client(dev); 159 struct sht21 *sht21 = dev_get_drvdata(dev);
158 struct sht21 *sht21 = i2c_get_clientdata(client); 160 int ret;
159 int ret = sht21_update_measurements(client); 161
162 ret = sht21_update_measurements(dev);
160 if (ret < 0) 163 if (ret < 0)
161 return ret; 164 return ret;
162 return sprintf(buf, "%d\n", sht21->humidity); 165 return sprintf(buf, "%d\n", sht21->humidity);
@@ -168,30 +171,20 @@ static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, sht21_show_temperature,
168static SENSOR_DEVICE_ATTR(humidity1_input, S_IRUGO, sht21_show_humidity, 171static SENSOR_DEVICE_ATTR(humidity1_input, S_IRUGO, sht21_show_humidity,
169 NULL, 0); 172 NULL, 0);
170 173
171static struct attribute *sht21_attributes[] = { 174static struct attribute *sht21_attrs[] = {
172 &sensor_dev_attr_temp1_input.dev_attr.attr, 175 &sensor_dev_attr_temp1_input.dev_attr.attr,
173 &sensor_dev_attr_humidity1_input.dev_attr.attr, 176 &sensor_dev_attr_humidity1_input.dev_attr.attr,
174 NULL 177 NULL
175}; 178};
176 179
177static const struct attribute_group sht21_attr_group = { 180ATTRIBUTE_GROUPS(sht21);
178 .attrs = sht21_attributes,
179};
180 181
181/**
182 * sht21_probe() - probe device
183 * @client: I2C client device
184 * @id: device ID
185 *
186 * Called by the I2C core when an entry in the ID table matches a
187 * device's name.
188 * Returns 0 on success.
189 */
190static int sht21_probe(struct i2c_client *client, 182static int sht21_probe(struct i2c_client *client,
191 const struct i2c_device_id *id) 183 const struct i2c_device_id *id)
192{ 184{
185 struct device *dev = &client->dev;
186 struct device *hwmon_dev;
193 struct sht21 *sht21; 187 struct sht21 *sht21;
194 int err;
195 188
196 if (!i2c_check_functionality(client->adapter, 189 if (!i2c_check_functionality(client->adapter,
197 I2C_FUNC_SMBUS_WORD_DATA)) { 190 I2C_FUNC_SMBUS_WORD_DATA)) {
@@ -200,47 +193,17 @@ static int sht21_probe(struct i2c_client *client,
200 return -ENODEV; 193 return -ENODEV;
201 } 194 }
202 195
203 sht21 = devm_kzalloc(&client->dev, sizeof(*sht21), GFP_KERNEL); 196 sht21 = devm_kzalloc(dev, sizeof(*sht21), GFP_KERNEL);
204 if (!sht21) 197 if (!sht21)
205 return -ENOMEM; 198 return -ENOMEM;
206 199
207 i2c_set_clientdata(client, sht21); 200 sht21->client = client;
208 201
209 mutex_init(&sht21->lock); 202 mutex_init(&sht21->lock);
210 203
211 err = sysfs_create_group(&client->dev.kobj, &sht21_attr_group); 204 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
212 if (err) { 205 sht21, sht21_groups);
213 dev_dbg(&client->dev, "could not create sysfs files\n"); 206 return PTR_ERR_OR_ZERO(hwmon_dev);
214 return err;
215 }
216 sht21->hwmon_dev = hwmon_device_register(&client->dev);
217 if (IS_ERR(sht21->hwmon_dev)) {
218 dev_dbg(&client->dev, "unable to register hwmon device\n");
219 err = PTR_ERR(sht21->hwmon_dev);
220 goto fail_remove_sysfs;
221 }
222
223 dev_info(&client->dev, "initialized\n");
224
225 return 0;
226
227fail_remove_sysfs:
228 sysfs_remove_group(&client->dev.kobj, &sht21_attr_group);
229 return err;
230}
231
232/**
233 * sht21_remove() - remove device
234 * @client: I2C client device
235 */
236static int sht21_remove(struct i2c_client *client)
237{
238 struct sht21 *sht21 = i2c_get_clientdata(client);
239
240 hwmon_device_unregister(sht21->hwmon_dev);
241 sysfs_remove_group(&client->dev.kobj, &sht21_attr_group);
242
243 return 0;
244} 207}
245 208
246/* Device ID table */ 209/* Device ID table */
@@ -253,7 +216,6 @@ MODULE_DEVICE_TABLE(i2c, sht21_id);
253static struct i2c_driver sht21_driver = { 216static struct i2c_driver sht21_driver = {
254 .driver.name = "sht21", 217 .driver.name = "sht21",
255 .probe = sht21_probe, 218 .probe = sht21_probe,
256 .remove = sht21_remove,
257 .id_table = sht21_id, 219 .id_table = sht21_id,
258}; 220};
259 221
diff --git a/drivers/hwmon/sis5595.c b/drivers/hwmon/sis5595.c
index 3532026e25da..bf1d7893d51c 100644
--- a/drivers/hwmon/sis5595.c
+++ b/drivers/hwmon/sis5595.c
@@ -159,7 +159,7 @@ static inline int TEMP_FROM_REG(s8 val)
159{ 159{
160 return val * 830 + 52120; 160 return val * 830 + 52120;
161} 161}
162static inline s8 TEMP_TO_REG(int val) 162static inline s8 TEMP_TO_REG(long val)
163{ 163{
164 int nval = clamp_val(val, -54120, 157530) ; 164 int nval = clamp_val(val, -54120, 157530) ;
165 return nval < 0 ? (nval - 5212 - 415) / 830 : (nval - 5212 + 415) / 830; 165 return nval < 0 ? (nval - 5212 - 415) / 830 : (nval - 5212 + 415) / 830;
diff --git a/drivers/hwmon/smm665.c b/drivers/hwmon/smm665.c
index 4ef5802df6d8..627c9c3a8255 100644
--- a/drivers/hwmon/smm665.c
+++ b/drivers/hwmon/smm665.c
@@ -140,7 +140,7 @@ enum chips { smm465, smm665, smm665c, smm764, smm766 };
140struct smm665_data { 140struct smm665_data {
141 enum chips type; 141 enum chips type;
142 int conversion_time; /* ADC conversion time */ 142 int conversion_time; /* ADC conversion time */
143 struct device *hwmon_dev; 143 struct i2c_client *client;
144 struct mutex update_lock; 144 struct mutex update_lock;
145 bool valid; 145 bool valid;
146 unsigned long last_updated; /* in jiffies */ 146 unsigned long last_updated; /* in jiffies */
@@ -239,8 +239,8 @@ static int smm665_read_adc(struct smm665_data *data, int adc)
239 239
240static struct smm665_data *smm665_update_device(struct device *dev) 240static struct smm665_data *smm665_update_device(struct device *dev)
241{ 241{
242 struct i2c_client *client = to_i2c_client(dev); 242 struct smm665_data *data = dev_get_drvdata(dev);
243 struct smm665_data *data = i2c_get_clientdata(client); 243 struct i2c_client *client = data->client;
244 struct smm665_data *ret = data; 244 struct smm665_data *ret = data;
245 245
246 mutex_lock(&data->update_lock); 246 mutex_lock(&data->update_lock);
@@ -315,32 +315,28 @@ static int smm665_convert(u16 adcval, int index)
315 315
316static int smm665_get_min(struct device *dev, int index) 316static int smm665_get_min(struct device *dev, int index)
317{ 317{
318 struct i2c_client *client = to_i2c_client(dev); 318 struct smm665_data *data = dev_get_drvdata(dev);
319 struct smm665_data *data = i2c_get_clientdata(client);
320 319
321 return data->alarm_min_limit[index]; 320 return data->alarm_min_limit[index];
322} 321}
323 322
324static int smm665_get_max(struct device *dev, int index) 323static int smm665_get_max(struct device *dev, int index)
325{ 324{
326 struct i2c_client *client = to_i2c_client(dev); 325 struct smm665_data *data = dev_get_drvdata(dev);
327 struct smm665_data *data = i2c_get_clientdata(client);
328 326
329 return data->alarm_max_limit[index]; 327 return data->alarm_max_limit[index];
330} 328}
331 329
332static int smm665_get_lcrit(struct device *dev, int index) 330static int smm665_get_lcrit(struct device *dev, int index)
333{ 331{
334 struct i2c_client *client = to_i2c_client(dev); 332 struct smm665_data *data = dev_get_drvdata(dev);
335 struct smm665_data *data = i2c_get_clientdata(client);
336 333
337 return data->critical_min_limit[index]; 334 return data->critical_min_limit[index];
338} 335}
339 336
340static int smm665_get_crit(struct device *dev, int index) 337static int smm665_get_crit(struct device *dev, int index)
341{ 338{
342 struct i2c_client *client = to_i2c_client(dev); 339 struct smm665_data *data = dev_get_drvdata(dev);
343 struct smm665_data *data = i2c_get_clientdata(client);
344 340
345 return data->critical_max_limit[index]; 341 return data->critical_max_limit[index];
346} 342}
@@ -486,7 +482,7 @@ SMM665_ATTR(temp1, crit_alarm, SMM665_FAULT_TEMP);
486 * Finally, construct an array of pointers to members of the above objects, 482 * Finally, construct an array of pointers to members of the above objects,
487 * as required for sysfs_create_group() 483 * as required for sysfs_create_group()
488 */ 484 */
489static struct attribute *smm665_attributes[] = { 485static struct attribute *smm665_attrs[] = {
490 &sensor_dev_attr_in1_input.dev_attr.attr, 486 &sensor_dev_attr_in1_input.dev_attr.attr,
491 &sensor_dev_attr_in1_min.dev_attr.attr, 487 &sensor_dev_attr_in1_min.dev_attr.attr,
492 &sensor_dev_attr_in1_max.dev_attr.attr, 488 &sensor_dev_attr_in1_max.dev_attr.attr,
@@ -567,15 +563,14 @@ static struct attribute *smm665_attributes[] = {
567 NULL, 563 NULL,
568}; 564};
569 565
570static const struct attribute_group smm665_group = { 566ATTRIBUTE_GROUPS(smm665);
571 .attrs = smm665_attributes,
572};
573 567
574static int smm665_probe(struct i2c_client *client, 568static int smm665_probe(struct i2c_client *client,
575 const struct i2c_device_id *id) 569 const struct i2c_device_id *id)
576{ 570{
577 struct i2c_adapter *adapter = client->adapter; 571 struct i2c_adapter *adapter = client->adapter;
578 struct smm665_data *data; 572 struct smm665_data *data;
573 struct device *hwmon_dev;
579 int i, ret; 574 int i, ret;
580 575
581 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA 576 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA
@@ -592,6 +587,7 @@ static int smm665_probe(struct i2c_client *client,
592 i2c_set_clientdata(client, data); 587 i2c_set_clientdata(client, data);
593 mutex_init(&data->update_lock); 588 mutex_init(&data->update_lock);
594 589
590 data->client = client;
595 data->type = id->driver_data; 591 data->type = id->driver_data;
596 data->cmdreg = i2c_new_dummy(adapter, (client->addr & ~SMM665_REGMASK) 592 data->cmdreg = i2c_new_dummy(adapter, (client->addr & ~SMM665_REGMASK)
597 | SMM665_CMDREG_BASE); 593 | SMM665_CMDREG_BASE);
@@ -662,21 +658,16 @@ static int smm665_probe(struct i2c_client *client,
662 data->alarm_max_limit[i] = smm665_convert(val, i); 658 data->alarm_max_limit[i] = smm665_convert(val, i);
663 } 659 }
664 660
665 /* Register sysfs hooks */ 661 hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev,
666 ret = sysfs_create_group(&client->dev.kobj, &smm665_group); 662 client->name, data,
667 if (ret) 663 smm665_groups);
664 if (IS_ERR(hwmon_dev)) {
665 ret = PTR_ERR(hwmon_dev);
668 goto out_unregister; 666 goto out_unregister;
669
670 data->hwmon_dev = hwmon_device_register(&client->dev);
671 if (IS_ERR(data->hwmon_dev)) {
672 ret = PTR_ERR(data->hwmon_dev);
673 goto out_remove_group;
674 } 667 }
675 668
676 return 0; 669 return 0;
677 670
678out_remove_group:
679 sysfs_remove_group(&client->dev.kobj, &smm665_group);
680out_unregister: 671out_unregister:
681 i2c_unregister_device(data->cmdreg); 672 i2c_unregister_device(data->cmdreg);
682 return ret; 673 return ret;
@@ -687,9 +678,6 @@ static int smm665_remove(struct i2c_client *client)
687 struct smm665_data *data = i2c_get_clientdata(client); 678 struct smm665_data *data = i2c_get_clientdata(client);
688 679
689 i2c_unregister_device(data->cmdreg); 680 i2c_unregister_device(data->cmdreg);
690 hwmon_device_unregister(data->hwmon_dev);
691 sysfs_remove_group(&client->dev.kobj, &smm665_group);
692
693 return 0; 681 return 0;
694} 682}
695 683
diff --git a/drivers/hwmon/smsc47m1.c b/drivers/hwmon/smsc47m1.c
index 23a22c4eee51..d7485659acc5 100644
--- a/drivers/hwmon/smsc47m1.c
+++ b/drivers/hwmon/smsc47m1.c
@@ -142,11 +142,6 @@ struct smsc47m1_sio_data {
142 u8 activate; /* Remember initial device state */ 142 u8 activate; /* Remember initial device state */
143}; 143};
144 144
145
146static int __exit smsc47m1_remove(struct platform_device *pdev);
147static struct smsc47m1_data *smsc47m1_update_device(struct device *dev,
148 int init);
149
150static inline int smsc47m1_read_value(struct smsc47m1_data *data, u8 reg) 145static inline int smsc47m1_read_value(struct smsc47m1_data *data, u8 reg)
151{ 146{
152 return inb_p(data->addr + reg); 147 return inb_p(data->addr + reg);
@@ -158,13 +153,54 @@ static inline void smsc47m1_write_value(struct smsc47m1_data *data, u8 reg,
158 outb_p(value, data->addr + reg); 153 outb_p(value, data->addr + reg);
159} 154}
160 155
161static struct platform_driver smsc47m1_driver = { 156static struct smsc47m1_data *smsc47m1_update_device(struct device *dev,
162 .driver = { 157 int init)
163 .owner = THIS_MODULE, 158{
164 .name = DRVNAME, 159 struct smsc47m1_data *data = dev_get_drvdata(dev);
165 }, 160
166 .remove = __exit_p(smsc47m1_remove), 161 mutex_lock(&data->update_lock);
167}; 162
163 if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || init) {
164 int i, fan_nr;
165 fan_nr = data->type == smsc47m2 ? 3 : 2;
166
167 for (i = 0; i < fan_nr; i++) {
168 data->fan[i] = smsc47m1_read_value(data,
169 SMSC47M1_REG_FAN[i]);
170 data->fan_preload[i] = smsc47m1_read_value(data,
171 SMSC47M1_REG_FAN_PRELOAD[i]);
172 data->pwm[i] = smsc47m1_read_value(data,
173 SMSC47M1_REG_PWM[i]);
174 }
175
176 i = smsc47m1_read_value(data, SMSC47M1_REG_FANDIV);
177 data->fan_div[0] = (i >> 4) & 0x03;
178 data->fan_div[1] = i >> 6;
179
180 data->alarms = smsc47m1_read_value(data,
181 SMSC47M1_REG_ALARM) >> 6;
182 /* Clear alarms if needed */
183 if (data->alarms)
184 smsc47m1_write_value(data, SMSC47M1_REG_ALARM, 0xC0);
185
186 if (fan_nr >= 3) {
187 data->fan_div[2] = (smsc47m1_read_value(data,
188 SMSC47M2_REG_FANDIV3) >> 4) & 0x03;
189 data->alarms |= (smsc47m1_read_value(data,
190 SMSC47M2_REG_ALARM6) & 0x40) >> 4;
191 /* Clear alarm if needed */
192 if (data->alarms & 0x04)
193 smsc47m1_write_value(data,
194 SMSC47M2_REG_ALARM6,
195 0x40);
196 }
197
198 data->last_updated = jiffies;
199 }
200
201 mutex_unlock(&data->update_lock);
202 return data;
203}
168 204
169static ssize_t get_fan(struct device *dev, struct device_attribute 205static ssize_t get_fan(struct device *dev, struct device_attribute
170 *devattr, char *buf) 206 *devattr, char *buf)
@@ -811,54 +847,13 @@ static int __exit smsc47m1_remove(struct platform_device *pdev)
811 return 0; 847 return 0;
812} 848}
813 849
814static struct smsc47m1_data *smsc47m1_update_device(struct device *dev, 850static struct platform_driver smsc47m1_driver = {
815 int init) 851 .driver = {
816{ 852 .owner = THIS_MODULE,
817 struct smsc47m1_data *data = dev_get_drvdata(dev); 853 .name = DRVNAME,
818 854 },
819 mutex_lock(&data->update_lock); 855 .remove = __exit_p(smsc47m1_remove),
820 856};
821 if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || init) {
822 int i, fan_nr;
823 fan_nr = data->type == smsc47m2 ? 3 : 2;
824
825 for (i = 0; i < fan_nr; i++) {
826 data->fan[i] = smsc47m1_read_value(data,
827 SMSC47M1_REG_FAN[i]);
828 data->fan_preload[i] = smsc47m1_read_value(data,
829 SMSC47M1_REG_FAN_PRELOAD[i]);
830 data->pwm[i] = smsc47m1_read_value(data,
831 SMSC47M1_REG_PWM[i]);
832 }
833
834 i = smsc47m1_read_value(data, SMSC47M1_REG_FANDIV);
835 data->fan_div[0] = (i >> 4) & 0x03;
836 data->fan_div[1] = i >> 6;
837
838 data->alarms = smsc47m1_read_value(data,
839 SMSC47M1_REG_ALARM) >> 6;
840 /* Clear alarms if needed */
841 if (data->alarms)
842 smsc47m1_write_value(data, SMSC47M1_REG_ALARM, 0xC0);
843
844 if (fan_nr >= 3) {
845 data->fan_div[2] = (smsc47m1_read_value(data,
846 SMSC47M2_REG_FANDIV3) >> 4) & 0x03;
847 data->alarms |= (smsc47m1_read_value(data,
848 SMSC47M2_REG_ALARM6) & 0x40) >> 4;
849 /* Clear alarm if needed */
850 if (data->alarms & 0x04)
851 smsc47m1_write_value(data,
852 SMSC47M2_REG_ALARM6,
853 0x40);
854 }
855
856 data->last_updated = jiffies;
857 }
858
859 mutex_unlock(&data->update_lock);
860 return data;
861}
862 857
863static int __init smsc47m1_device_add(unsigned short address, 858static int __init smsc47m1_device_add(unsigned short address,
864 const struct smsc47m1_sio_data *sio_data) 859 const struct smsc47m1_sio_data *sio_data)
diff --git a/drivers/hwmon/smsc47m192.c b/drivers/hwmon/smsc47m192.c
index 34b9a601ad07..6ac7cda72d4c 100644
--- a/drivers/hwmon/smsc47m192.c
+++ b/drivers/hwmon/smsc47m192.c
@@ -95,7 +95,8 @@ static inline int TEMP_FROM_REG(s8 val)
95} 95}
96 96
97struct smsc47m192_data { 97struct smsc47m192_data {
98 struct device *hwmon_dev; 98 struct i2c_client *client;
99 const struct attribute_group *groups[3];
99 struct mutex update_lock; 100 struct mutex update_lock;
100 char valid; /* !=0 if following fields are valid */ 101 char valid; /* !=0 if following fields are valid */
101 unsigned long last_updated; /* In jiffies */ 102 unsigned long last_updated; /* In jiffies */
@@ -112,30 +113,69 @@ struct smsc47m192_data {
112 u8 vrm; 113 u8 vrm;
113}; 114};
114 115
115static int smsc47m192_probe(struct i2c_client *client, 116static struct smsc47m192_data *smsc47m192_update_device(struct device *dev)
116 const struct i2c_device_id *id); 117{
117static int smsc47m192_detect(struct i2c_client *client, 118 struct smsc47m192_data *data = dev_get_drvdata(dev);
118 struct i2c_board_info *info); 119 struct i2c_client *client = data->client;
119static int smsc47m192_remove(struct i2c_client *client); 120 int i, config;
120static struct smsc47m192_data *smsc47m192_update_device(struct device *dev);
121 121
122static const struct i2c_device_id smsc47m192_id[] = { 122 mutex_lock(&data->update_lock);
123 { "smsc47m192", 0 },
124 { }
125};
126MODULE_DEVICE_TABLE(i2c, smsc47m192_id);
127 123
128static struct i2c_driver smsc47m192_driver = { 124 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
129 .class = I2C_CLASS_HWMON, 125 || !data->valid) {
130 .driver = { 126 u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR);
131 .name = "smsc47m192", 127
132 }, 128 dev_dbg(&client->dev, "Starting smsc47m192 update\n");
133 .probe = smsc47m192_probe, 129
134 .remove = smsc47m192_remove, 130 for (i = 0; i <= 7; i++) {
135 .id_table = smsc47m192_id, 131 data->in[i] = i2c_smbus_read_byte_data(client,
136 .detect = smsc47m192_detect, 132 SMSC47M192_REG_IN(i));
137 .address_list = normal_i2c, 133 data->in_min[i] = i2c_smbus_read_byte_data(client,
138}; 134 SMSC47M192_REG_IN_MIN(i));
135 data->in_max[i] = i2c_smbus_read_byte_data(client,
136 SMSC47M192_REG_IN_MAX(i));
137 }
138 for (i = 0; i < 3; i++) {
139 data->temp[i] = i2c_smbus_read_byte_data(client,
140 SMSC47M192_REG_TEMP[i]);
141 data->temp_max[i] = i2c_smbus_read_byte_data(client,
142 SMSC47M192_REG_TEMP_MAX[i]);
143 data->temp_min[i] = i2c_smbus_read_byte_data(client,
144 SMSC47M192_REG_TEMP_MIN[i]);
145 }
146 for (i = 1; i < 3; i++)
147 data->temp_offset[i] = i2c_smbus_read_byte_data(client,
148 SMSC47M192_REG_TEMP_OFFSET(i));
149 /*
150 * first offset is temp_offset[0] if SFR bit 4 is set,
151 * temp_offset[1] otherwise
152 */
153 if (sfr & 0x10) {
154 data->temp_offset[0] = data->temp_offset[1];
155 data->temp_offset[1] = 0;
156 } else
157 data->temp_offset[0] = 0;
158
159 data->vid = i2c_smbus_read_byte_data(client, SMSC47M192_REG_VID)
160 & 0x0f;
161 config = i2c_smbus_read_byte_data(client,
162 SMSC47M192_REG_CONFIG);
163 if (config & 0x20)
164 data->vid |= (i2c_smbus_read_byte_data(client,
165 SMSC47M192_REG_VID4) & 0x01) << 4;
166 data->alarms = i2c_smbus_read_byte_data(client,
167 SMSC47M192_REG_ALARM1) |
168 (i2c_smbus_read_byte_data(client,
169 SMSC47M192_REG_ALARM2) << 8);
170
171 data->last_updated = jiffies;
172 data->valid = 1;
173 }
174
175 mutex_unlock(&data->update_lock);
176
177 return data;
178}
139 179
140/* Voltages */ 180/* Voltages */
141static ssize_t show_in(struct device *dev, struct device_attribute *attr, 181static ssize_t show_in(struct device *dev, struct device_attribute *attr,
@@ -170,8 +210,8 @@ static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
170{ 210{
171 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 211 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
172 int nr = sensor_attr->index; 212 int nr = sensor_attr->index;
173 struct i2c_client *client = to_i2c_client(dev); 213 struct smsc47m192_data *data = dev_get_drvdata(dev);
174 struct smsc47m192_data *data = i2c_get_clientdata(client); 214 struct i2c_client *client = data->client;
175 unsigned long val; 215 unsigned long val;
176 int err; 216 int err;
177 217
@@ -192,8 +232,8 @@ static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
192{ 232{
193 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 233 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
194 int nr = sensor_attr->index; 234 int nr = sensor_attr->index;
195 struct i2c_client *client = to_i2c_client(dev); 235 struct smsc47m192_data *data = dev_get_drvdata(dev);
196 struct smsc47m192_data *data = i2c_get_clientdata(client); 236 struct i2c_client *client = data->client;
197 unsigned long val; 237 unsigned long val;
198 int err; 238 int err;
199 239
@@ -259,8 +299,8 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
259{ 299{
260 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 300 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
261 int nr = sensor_attr->index; 301 int nr = sensor_attr->index;
262 struct i2c_client *client = to_i2c_client(dev); 302 struct smsc47m192_data *data = dev_get_drvdata(dev);
263 struct smsc47m192_data *data = i2c_get_clientdata(client); 303 struct i2c_client *client = data->client;
264 long val; 304 long val;
265 int err; 305 int err;
266 306
@@ -281,8 +321,8 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
281{ 321{
282 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 322 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
283 int nr = sensor_attr->index; 323 int nr = sensor_attr->index;
284 struct i2c_client *client = to_i2c_client(dev); 324 struct smsc47m192_data *data = dev_get_drvdata(dev);
285 struct smsc47m192_data *data = i2c_get_clientdata(client); 325 struct i2c_client *client = data->client;
286 long val; 326 long val;
287 int err; 327 int err;
288 328
@@ -312,8 +352,8 @@ static ssize_t set_temp_offset(struct device *dev, struct device_attribute
312{ 352{
313 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 353 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
314 int nr = sensor_attr->index; 354 int nr = sensor_attr->index;
315 struct i2c_client *client = to_i2c_client(dev); 355 struct smsc47m192_data *data = dev_get_drvdata(dev);
316 struct smsc47m192_data *data = i2c_get_clientdata(client); 356 struct i2c_client *client = data->client;
317 u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR); 357 u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR);
318 long val; 358 long val;
319 int err; 359 int err;
@@ -552,124 +592,50 @@ static int smsc47m192_detect(struct i2c_client *client,
552static int smsc47m192_probe(struct i2c_client *client, 592static int smsc47m192_probe(struct i2c_client *client,
553 const struct i2c_device_id *id) 593 const struct i2c_device_id *id)
554{ 594{
595 struct device *dev = &client->dev;
596 struct device *hwmon_dev;
555 struct smsc47m192_data *data; 597 struct smsc47m192_data *data;
556 int config; 598 int config;
557 int err;
558 599
559 data = devm_kzalloc(&client->dev, sizeof(struct smsc47m192_data), 600 data = devm_kzalloc(dev, sizeof(struct smsc47m192_data), GFP_KERNEL);
560 GFP_KERNEL);
561 if (!data) 601 if (!data)
562 return -ENOMEM; 602 return -ENOMEM;
563 603
564 i2c_set_clientdata(client, data); 604 data->client = client;
565 data->vrm = vid_which_vrm(); 605 data->vrm = vid_which_vrm();
566 mutex_init(&data->update_lock); 606 mutex_init(&data->update_lock);
567 607
568 /* Initialize the SMSC47M192 chip */ 608 /* Initialize the SMSC47M192 chip */
569 smsc47m192_init_client(client); 609 smsc47m192_init_client(client);
570 610
571 /* Register sysfs hooks */ 611 /* sysfs hooks */
572 err = sysfs_create_group(&client->dev.kobj, &smsc47m192_group); 612 data->groups[0] = &smsc47m192_group;
573 if (err)
574 return err;
575
576 /* Pin 110 is either in4 (+12V) or VID4 */ 613 /* Pin 110 is either in4 (+12V) or VID4 */
577 config = i2c_smbus_read_byte_data(client, SMSC47M192_REG_CONFIG); 614 config = i2c_smbus_read_byte_data(client, SMSC47M192_REG_CONFIG);
578 if (!(config & 0x20)) { 615 if (!(config & 0x20))
579 err = sysfs_create_group(&client->dev.kobj, 616 data->groups[1] = &smsc47m192_group_in4;
580 &smsc47m192_group_in4);
581 if (err)
582 goto exit_remove_files;
583 }
584
585 data->hwmon_dev = hwmon_device_register(&client->dev);
586 if (IS_ERR(data->hwmon_dev)) {
587 err = PTR_ERR(data->hwmon_dev);
588 goto exit_remove_files;
589 }
590
591 return 0;
592
593exit_remove_files:
594 sysfs_remove_group(&client->dev.kobj, &smsc47m192_group);
595 sysfs_remove_group(&client->dev.kobj, &smsc47m192_group_in4);
596 return err;
597}
598
599static int smsc47m192_remove(struct i2c_client *client)
600{
601 struct smsc47m192_data *data = i2c_get_clientdata(client);
602
603 hwmon_device_unregister(data->hwmon_dev);
604 sysfs_remove_group(&client->dev.kobj, &smsc47m192_group);
605 sysfs_remove_group(&client->dev.kobj, &smsc47m192_group_in4);
606 617
607 return 0; 618 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
619 data, data->groups);
620 return PTR_ERR_OR_ZERO(hwmon_dev);
608} 621}
609 622
610static struct smsc47m192_data *smsc47m192_update_device(struct device *dev) 623static const struct i2c_device_id smsc47m192_id[] = {
611{ 624 { "smsc47m192", 0 },
612 struct i2c_client *client = to_i2c_client(dev); 625 { }
613 struct smsc47m192_data *data = i2c_get_clientdata(client); 626};
614 int i, config; 627MODULE_DEVICE_TABLE(i2c, smsc47m192_id);
615
616 mutex_lock(&data->update_lock);
617
618 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
619 || !data->valid) {
620 u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR);
621
622 dev_dbg(&client->dev, "Starting smsc47m192 update\n");
623
624 for (i = 0; i <= 7; i++) {
625 data->in[i] = i2c_smbus_read_byte_data(client,
626 SMSC47M192_REG_IN(i));
627 data->in_min[i] = i2c_smbus_read_byte_data(client,
628 SMSC47M192_REG_IN_MIN(i));
629 data->in_max[i] = i2c_smbus_read_byte_data(client,
630 SMSC47M192_REG_IN_MAX(i));
631 }
632 for (i = 0; i < 3; i++) {
633 data->temp[i] = i2c_smbus_read_byte_data(client,
634 SMSC47M192_REG_TEMP[i]);
635 data->temp_max[i] = i2c_smbus_read_byte_data(client,
636 SMSC47M192_REG_TEMP_MAX[i]);
637 data->temp_min[i] = i2c_smbus_read_byte_data(client,
638 SMSC47M192_REG_TEMP_MIN[i]);
639 }
640 for (i = 1; i < 3; i++)
641 data->temp_offset[i] = i2c_smbus_read_byte_data(client,
642 SMSC47M192_REG_TEMP_OFFSET(i));
643 /*
644 * first offset is temp_offset[0] if SFR bit 4 is set,
645 * temp_offset[1] otherwise
646 */
647 if (sfr & 0x10) {
648 data->temp_offset[0] = data->temp_offset[1];
649 data->temp_offset[1] = 0;
650 } else
651 data->temp_offset[0] = 0;
652
653 data->vid = i2c_smbus_read_byte_data(client, SMSC47M192_REG_VID)
654 & 0x0f;
655 config = i2c_smbus_read_byte_data(client,
656 SMSC47M192_REG_CONFIG);
657 if (config & 0x20)
658 data->vid |= (i2c_smbus_read_byte_data(client,
659 SMSC47M192_REG_VID4) & 0x01) << 4;
660 data->alarms = i2c_smbus_read_byte_data(client,
661 SMSC47M192_REG_ALARM1) |
662 (i2c_smbus_read_byte_data(client,
663 SMSC47M192_REG_ALARM2) << 8);
664
665 data->last_updated = jiffies;
666 data->valid = 1;
667 }
668
669 mutex_unlock(&data->update_lock);
670 628
671 return data; 629static struct i2c_driver smsc47m192_driver = {
672} 630 .class = I2C_CLASS_HWMON,
631 .driver = {
632 .name = "smsc47m192",
633 },
634 .probe = smsc47m192_probe,
635 .id_table = smsc47m192_id,
636 .detect = smsc47m192_detect,
637 .address_list = normal_i2c,
638};
673 639
674module_i2c_driver(smsc47m192_driver); 640module_i2c_driver(smsc47m192_driver);
675 641
diff --git a/drivers/hwmon/thmc50.c b/drivers/hwmon/thmc50.c
index db288db7d3e9..6a0ee903127e 100644
--- a/drivers/hwmon/thmc50.c
+++ b/drivers/hwmon/thmc50.c
@@ -68,7 +68,8 @@ static const u8 THMC50_REG_TEMP_DEFAULT[] = { 0x17, 0x18, 0x18 };
68 68
69/* Each client has this additional data */ 69/* Each client has this additional data */
70struct thmc50_data { 70struct thmc50_data {
71 struct device *hwmon_dev; 71 struct i2c_client *client;
72 const struct attribute_group *groups[3];
72 73
73 struct mutex update_lock; 74 struct mutex update_lock;
74 enum chips type; 75 enum chips type;
@@ -85,32 +86,47 @@ struct thmc50_data {
85 u8 alarms; 86 u8 alarms;
86}; 87};
87 88
88static int thmc50_detect(struct i2c_client *client, 89static struct thmc50_data *thmc50_update_device(struct device *dev)
89 struct i2c_board_info *info); 90{
90static int thmc50_probe(struct i2c_client *client, 91 struct thmc50_data *data = dev_get_drvdata(dev);
91 const struct i2c_device_id *id); 92 struct i2c_client *client = data->client;
92static int thmc50_remove(struct i2c_client *client); 93 int timeout = HZ / 5 + (data->type == thmc50 ? HZ : 0);
93static void thmc50_init_client(struct i2c_client *client);
94static struct thmc50_data *thmc50_update_device(struct device *dev);
95 94
96static const struct i2c_device_id thmc50_id[] = { 95 mutex_lock(&data->update_lock);
97 { "adm1022", adm1022 },
98 { "thmc50", thmc50 },
99 { }
100};
101MODULE_DEVICE_TABLE(i2c, thmc50_id);
102 96
103static struct i2c_driver thmc50_driver = { 97 if (time_after(jiffies, data->last_updated + timeout)
104 .class = I2C_CLASS_HWMON, 98 || !data->valid) {
105 .driver = { 99
106 .name = "thmc50", 100 int temps = data->has_temp3 ? 3 : 2;
107 }, 101 int i;
108 .probe = thmc50_probe, 102 int prog = i2c_smbus_read_byte_data(client, THMC50_REG_CONF);
109 .remove = thmc50_remove, 103
110 .id_table = thmc50_id, 104 prog &= THMC50_REG_CONF_PROGRAMMED;
111 .detect = thmc50_detect, 105
112 .address_list = normal_i2c, 106 for (i = 0; i < temps; i++) {
113}; 107 data->temp_input[i] = i2c_smbus_read_byte_data(client,
108 THMC50_REG_TEMP[i]);
109 data->temp_max[i] = i2c_smbus_read_byte_data(client,
110 THMC50_REG_TEMP_MAX[i]);
111 data->temp_min[i] = i2c_smbus_read_byte_data(client,
112 THMC50_REG_TEMP_MIN[i]);
113 data->temp_critical[i] =
114 i2c_smbus_read_byte_data(client,
115 prog ? THMC50_REG_TEMP_CRITICAL[i]
116 : THMC50_REG_TEMP_DEFAULT[i]);
117 }
118 data->analog_out =
119 i2c_smbus_read_byte_data(client, THMC50_REG_ANALOG_OUT);
120 data->alarms =
121 i2c_smbus_read_byte_data(client, THMC50_REG_INTR);
122 data->last_updated = jiffies;
123 data->valid = 1;
124 }
125
126 mutex_unlock(&data->update_lock);
127
128 return data;
129}
114 130
115static ssize_t show_analog_out(struct device *dev, 131static ssize_t show_analog_out(struct device *dev,
116 struct device_attribute *attr, char *buf) 132 struct device_attribute *attr, char *buf)
@@ -123,8 +139,8 @@ static ssize_t set_analog_out(struct device *dev,
123 struct device_attribute *attr, 139 struct device_attribute *attr,
124 const char *buf, size_t count) 140 const char *buf, size_t count)
125{ 141{
126 struct i2c_client *client = to_i2c_client(dev); 142 struct thmc50_data *data = dev_get_drvdata(dev);
127 struct thmc50_data *data = i2c_get_clientdata(client); 143 struct i2c_client *client = data->client;
128 int config; 144 int config;
129 unsigned long tmp; 145 unsigned long tmp;
130 int err; 146 int err;
@@ -177,8 +193,8 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
177 const char *buf, size_t count) 193 const char *buf, size_t count)
178{ 194{
179 int nr = to_sensor_dev_attr(attr)->index; 195 int nr = to_sensor_dev_attr(attr)->index;
180 struct i2c_client *client = to_i2c_client(dev); 196 struct thmc50_data *data = dev_get_drvdata(dev);
181 struct thmc50_data *data = i2c_get_clientdata(client); 197 struct i2c_client *client = data->client;
182 long val; 198 long val;
183 int err; 199 int err;
184 200
@@ -206,8 +222,8 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
206 const char *buf, size_t count) 222 const char *buf, size_t count)
207{ 223{
208 int nr = to_sensor_dev_attr(attr)->index; 224 int nr = to_sensor_dev_attr(attr)->index;
209 struct i2c_client *client = to_i2c_client(dev); 225 struct thmc50_data *data = dev_get_drvdata(dev);
210 struct thmc50_data *data = i2c_get_clientdata(client); 226 struct i2c_client *client = data->client;
211 long val; 227 long val;
212 int err; 228 int err;
213 229
@@ -355,67 +371,9 @@ static int thmc50_detect(struct i2c_client *client,
355 return 0; 371 return 0;
356} 372}
357 373
358static int thmc50_probe(struct i2c_client *client, 374static void thmc50_init_client(struct thmc50_data *data)
359 const struct i2c_device_id *id)
360{
361 struct thmc50_data *data;
362 int err;
363
364 data = devm_kzalloc(&client->dev, sizeof(struct thmc50_data),
365 GFP_KERNEL);
366 if (!data)
367 return -ENOMEM;
368
369 i2c_set_clientdata(client, data);
370 data->type = id->driver_data;
371 mutex_init(&data->update_lock);
372
373 thmc50_init_client(client);
374
375 /* Register sysfs hooks */
376 err = sysfs_create_group(&client->dev.kobj, &thmc50_group);
377 if (err)
378 return err;
379
380 /* Register ADM1022 sysfs hooks */
381 if (data->has_temp3) {
382 err = sysfs_create_group(&client->dev.kobj, &temp3_group);
383 if (err)
384 goto exit_remove_sysfs_thmc50;
385 }
386
387 /* Register a new directory entry with module sensors */
388 data->hwmon_dev = hwmon_device_register(&client->dev);
389 if (IS_ERR(data->hwmon_dev)) {
390 err = PTR_ERR(data->hwmon_dev);
391 goto exit_remove_sysfs;
392 }
393
394 return 0;
395
396exit_remove_sysfs:
397 if (data->has_temp3)
398 sysfs_remove_group(&client->dev.kobj, &temp3_group);
399exit_remove_sysfs_thmc50:
400 sysfs_remove_group(&client->dev.kobj, &thmc50_group);
401 return err;
402}
403
404static int thmc50_remove(struct i2c_client *client)
405{ 375{
406 struct thmc50_data *data = i2c_get_clientdata(client); 376 struct i2c_client *client = data->client;
407
408 hwmon_device_unregister(data->hwmon_dev);
409 sysfs_remove_group(&client->dev.kobj, &thmc50_group);
410 if (data->has_temp3)
411 sysfs_remove_group(&client->dev.kobj, &temp3_group);
412
413 return 0;
414}
415
416static void thmc50_init_client(struct i2c_client *client)
417{
418 struct thmc50_data *data = i2c_get_clientdata(client);
419 int config; 377 int config;
420 378
421 data->analog_out = i2c_smbus_read_byte_data(client, 379 data->analog_out = i2c_smbus_read_byte_data(client,
@@ -433,48 +391,54 @@ static void thmc50_init_client(struct i2c_client *client)
433 i2c_smbus_write_byte_data(client, THMC50_REG_CONF, config); 391 i2c_smbus_write_byte_data(client, THMC50_REG_CONF, config);
434} 392}
435 393
436static struct thmc50_data *thmc50_update_device(struct device *dev) 394static int thmc50_probe(struct i2c_client *client,
395 const struct i2c_device_id *id)
437{ 396{
438 struct i2c_client *client = to_i2c_client(dev); 397 struct device *dev = &client->dev;
439 struct thmc50_data *data = i2c_get_clientdata(client); 398 struct thmc50_data *data;
440 int timeout = HZ / 5 + (data->type == thmc50 ? HZ : 0); 399 struct device *hwmon_dev;
400 int idx = 0;
441 401
442 mutex_lock(&data->update_lock); 402 data = devm_kzalloc(dev, sizeof(struct thmc50_data), GFP_KERNEL);
403 if (!data)
404 return -ENOMEM;
443 405
444 if (time_after(jiffies, data->last_updated + timeout) 406 data->client = client;
445 || !data->valid) { 407 data->type = id->driver_data;
408 mutex_init(&data->update_lock);
446 409
447 int temps = data->has_temp3 ? 3 : 2; 410 thmc50_init_client(data);
448 int i;
449 int prog = i2c_smbus_read_byte_data(client, THMC50_REG_CONF);
450 411
451 prog &= THMC50_REG_CONF_PROGRAMMED; 412 /* sysfs hooks */
413 data->groups[idx++] = &thmc50_group;
452 414
453 for (i = 0; i < temps; i++) { 415 /* Register additional ADM1022 sysfs hooks */
454 data->temp_input[i] = i2c_smbus_read_byte_data(client, 416 if (data->has_temp3)
455 THMC50_REG_TEMP[i]); 417 data->groups[idx++] = &temp3_group;
456 data->temp_max[i] = i2c_smbus_read_byte_data(client,
457 THMC50_REG_TEMP_MAX[i]);
458 data->temp_min[i] = i2c_smbus_read_byte_data(client,
459 THMC50_REG_TEMP_MIN[i]);
460 data->temp_critical[i] =
461 i2c_smbus_read_byte_data(client,
462 prog ? THMC50_REG_TEMP_CRITICAL[i]
463 : THMC50_REG_TEMP_DEFAULT[i]);
464 }
465 data->analog_out =
466 i2c_smbus_read_byte_data(client, THMC50_REG_ANALOG_OUT);
467 data->alarms =
468 i2c_smbus_read_byte_data(client, THMC50_REG_INTR);
469 data->last_updated = jiffies;
470 data->valid = 1;
471 }
472
473 mutex_unlock(&data->update_lock);
474 418
475 return data; 419 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
420 data, data->groups);
421 return PTR_ERR_OR_ZERO(hwmon_dev);
476} 422}
477 423
424static const struct i2c_device_id thmc50_id[] = {
425 { "adm1022", adm1022 },
426 { "thmc50", thmc50 },
427 { }
428};
429MODULE_DEVICE_TABLE(i2c, thmc50_id);
430
431static struct i2c_driver thmc50_driver = {
432 .class = I2C_CLASS_HWMON,
433 .driver = {
434 .name = "thmc50",
435 },
436 .probe = thmc50_probe,
437 .id_table = thmc50_id,
438 .detect = thmc50_detect,
439 .address_list = normal_i2c,
440};
441
478module_i2c_driver(thmc50_driver); 442module_i2c_driver(thmc50_driver);
479 443
480MODULE_AUTHOR("Krzysztof Helt <krzysztof.h1@wp.pl>"); 444MODULE_AUTHOR("Krzysztof Helt <krzysztof.h1@wp.pl>");
diff --git a/drivers/hwmon/tmp103.c b/drivers/hwmon/tmp103.c
new file mode 100644
index 000000000000..c74d2da389d9
--- /dev/null
+++ b/drivers/hwmon/tmp103.c
@@ -0,0 +1,206 @@
1/*
2 * Texas Instruments TMP103 SMBus temperature sensor driver
3 * Copyright (C) 2014 Heiko Schocher <hs@denx.de>
4 *
5 * Based on:
6 * Texas Instruments TMP102 SMBus temperature sensor driver
7 *
8 * Copyright (C) 2010 Steven King <sfking@fdwdc.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 */
21
22#include <linux/module.h>
23#include <linux/init.h>
24#include <linux/slab.h>
25#include <linux/i2c.h>
26#include <linux/hwmon.h>
27#include <linux/hwmon-sysfs.h>
28#include <linux/err.h>
29#include <linux/mutex.h>
30#include <linux/device.h>
31#include <linux/jiffies.h>
32#include <linux/regmap.h>
33
34#define TMP103_TEMP_REG 0x00
35#define TMP103_CONF_REG 0x01
36#define TMP103_TLOW_REG 0x02
37#define TMP103_THIGH_REG 0x03
38
39#define TMP103_CONF_M0 0x01
40#define TMP103_CONF_M1 0x02
41#define TMP103_CONF_LC 0x04
42#define TMP103_CONF_FL 0x08
43#define TMP103_CONF_FH 0x10
44#define TMP103_CONF_CR0 0x20
45#define TMP103_CONF_CR1 0x40
46#define TMP103_CONF_ID 0x80
47#define TMP103_CONF_SD (TMP103_CONF_M1)
48#define TMP103_CONF_SD_MASK (TMP103_CONF_M0 | TMP103_CONF_M1)
49
50#define TMP103_CONFIG (TMP103_CONF_CR1 | TMP103_CONF_M1)
51#define TMP103_CONFIG_MASK (TMP103_CONF_CR0 | TMP103_CONF_CR1 | \
52 TMP103_CONF_M0 | TMP103_CONF_M1)
53
54static inline int tmp103_reg_to_mc(s8 val)
55{
56 return val * 1000;
57}
58
59static inline u8 tmp103_mc_to_reg(int val)
60{
61 return DIV_ROUND_CLOSEST(val, 1000);
62}
63
64static ssize_t tmp103_show_temp(struct device *dev,
65 struct device_attribute *attr,
66 char *buf)
67{
68 struct sensor_device_attribute *sda = to_sensor_dev_attr(attr);
69 struct regmap *regmap = dev_get_drvdata(dev);
70 unsigned int regval;
71 int ret;
72
73 ret = regmap_read(regmap, sda->index, &regval);
74 if (ret < 0)
75 return ret;
76
77 return sprintf(buf, "%d\n", tmp103_reg_to_mc(regval));
78}
79
80static ssize_t tmp103_set_temp(struct device *dev,
81 struct device_attribute *attr,
82 const char *buf, size_t count)
83{
84 struct sensor_device_attribute *sda = to_sensor_dev_attr(attr);
85 struct regmap *regmap = dev_get_drvdata(dev);
86 long val;
87 int ret;
88
89 if (kstrtol(buf, 10, &val) < 0)
90 return -EINVAL;
91
92 val = clamp_val(val, -55000, 127000);
93 ret = regmap_write(regmap, sda->index, tmp103_mc_to_reg(val));
94 return ret ? ret : count;
95}
96
97static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tmp103_show_temp, NULL ,
98 TMP103_TEMP_REG);
99
100static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, tmp103_show_temp,
101 tmp103_set_temp, TMP103_TLOW_REG);
102
103static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, tmp103_show_temp,
104 tmp103_set_temp, TMP103_THIGH_REG);
105
106static struct attribute *tmp103_attrs[] = {
107 &sensor_dev_attr_temp1_input.dev_attr.attr,
108 &sensor_dev_attr_temp1_min.dev_attr.attr,
109 &sensor_dev_attr_temp1_max.dev_attr.attr,
110 NULL
111};
112ATTRIBUTE_GROUPS(tmp103);
113
114static bool tmp103_regmap_is_volatile(struct device *dev, unsigned int reg)
115{
116 return reg == TMP103_TEMP_REG;
117}
118
119static const struct regmap_config tmp103_regmap_config = {
120 .reg_bits = 8,
121 .val_bits = 8,
122 .max_register = TMP103_THIGH_REG,
123 .volatile_reg = tmp103_regmap_is_volatile,
124};
125
126static int tmp103_probe(struct i2c_client *client,
127 const struct i2c_device_id *id)
128{
129 struct device *dev = &client->dev;
130 struct device *hwmon_dev;
131 struct regmap *regmap;
132 int ret;
133
134 if (!i2c_check_functionality(client->adapter,
135 I2C_FUNC_SMBUS_BYTE_DATA)) {
136 dev_err(&client->dev,
137 "adapter doesn't support SMBus byte transactions\n");
138 return -ENODEV;
139 }
140
141 regmap = devm_regmap_init_i2c(client, &tmp103_regmap_config);
142 if (IS_ERR(regmap)) {
143 dev_err(dev, "failed to allocate register map\n");
144 return PTR_ERR(regmap);
145 }
146
147 ret = regmap_update_bits(regmap, TMP103_CONF_REG, TMP103_CONFIG_MASK,
148 TMP103_CONFIG);
149 if (ret < 0) {
150 dev_err(&client->dev, "error writing config register\n");
151 return ret;
152 }
153
154 i2c_set_clientdata(client, regmap);
155 hwmon_dev = hwmon_device_register_with_groups(dev, client->name,
156 regmap, tmp103_groups);
157 return PTR_ERR_OR_ZERO(hwmon_dev);
158}
159
160#ifdef CONFIG_PM
161static int tmp103_suspend(struct device *dev)
162{
163 struct regmap *regmap = dev_get_drvdata(dev);
164
165 return regmap_update_bits(regmap, TMP103_CONF_REG,
166 TMP103_CONF_SD_MASK, 0);
167}
168
169static int tmp103_resume(struct device *dev)
170{
171 struct regmap *regmap = dev_get_drvdata(dev);
172
173 return regmap_update_bits(regmap, TMP103_CONF_REG,
174 TMP103_CONF_SD_MASK, TMP103_CONF_SD);
175}
176
177static const struct dev_pm_ops tmp103_dev_pm_ops = {
178 .suspend = tmp103_suspend,
179 .resume = tmp103_resume,
180};
181
182#define TMP103_DEV_PM_OPS (&tmp103_dev_pm_ops)
183#else
184#define TMP103_DEV_PM_OPS NULL
185#endif /* CONFIG_PM */
186
187static const struct i2c_device_id tmp103_id[] = {
188 { "tmp103", 0 },
189 { }
190};
191MODULE_DEVICE_TABLE(i2c, tmp103_id);
192
193static struct i2c_driver tmp103_driver = {
194 .driver = {
195 .name = "tmp103",
196 .pm = TMP103_DEV_PM_OPS,
197 },
198 .probe = tmp103_probe,
199 .id_table = tmp103_id,
200};
201
202module_i2c_driver(tmp103_driver);
203
204MODULE_AUTHOR("Heiko Schocher <hs@denx.de>");
205MODULE_DESCRIPTION("Texas Instruments TMP103 temperature sensor driver");
206MODULE_LICENSE("GPL");
diff --git a/drivers/hwmon/tmp421.c b/drivers/hwmon/tmp421.c
index 7bab7a9bedc6..85d48d80822a 100644
--- a/drivers/hwmon/tmp421.c
+++ b/drivers/hwmon/tmp421.c
@@ -13,15 +13,11 @@
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details. 15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */ 16 */
21 17
22/* 18/*
23 * Driver for the Texas Instruments TMP421 SMBus temperature sensor IC. 19 * Driver for the Texas Instruments TMP421 SMBus temperature sensor IC.
24 * Supported models: TMP421, TMP422, TMP423 20 * Supported models: TMP421, TMP422, TMP423, TMP441, TMP442
25 */ 21 */
26 22
27#include <linux/module.h> 23#include <linux/module.h>
@@ -39,9 +35,10 @@
39static const unsigned short normal_i2c[] = { 0x2a, 0x4c, 0x4d, 0x4e, 0x4f, 35static const unsigned short normal_i2c[] = { 0x2a, 0x4c, 0x4d, 0x4e, 0x4f,
40 I2C_CLIENT_END }; 36 I2C_CLIENT_END };
41 37
42enum chips { tmp421, tmp422, tmp423 }; 38enum chips { tmp421, tmp422, tmp423, tmp441, tmp442 };
43 39
44/* The TMP421 registers */ 40/* The TMP421 registers */
41#define TMP421_STATUS_REG 0x08
45#define TMP421_CONFIG_REG_1 0x09 42#define TMP421_CONFIG_REG_1 0x09
46#define TMP421_CONVERSION_RATE_REG 0x0B 43#define TMP421_CONVERSION_RATE_REG 0x0B
47#define TMP421_MANUFACTURER_ID_REG 0xFE 44#define TMP421_MANUFACTURER_ID_REG 0xFE
@@ -59,11 +56,15 @@ static const u8 TMP421_TEMP_LSB[4] = { 0x10, 0x11, 0x12, 0x13 };
59#define TMP421_DEVICE_ID 0x21 56#define TMP421_DEVICE_ID 0x21
60#define TMP422_DEVICE_ID 0x22 57#define TMP422_DEVICE_ID 0x22
61#define TMP423_DEVICE_ID 0x23 58#define TMP423_DEVICE_ID 0x23
59#define TMP441_DEVICE_ID 0x41
60#define TMP442_DEVICE_ID 0x42
62 61
63static const struct i2c_device_id tmp421_id[] = { 62static const struct i2c_device_id tmp421_id[] = {
64 { "tmp421", 2 }, 63 { "tmp421", 2 },
65 { "tmp422", 3 }, 64 { "tmp422", 3 },
66 { "tmp423", 4 }, 65 { "tmp423", 4 },
66 { "tmp441", 2 },
67 { "tmp442", 3 },
67 { } 68 { }
68}; 69};
69MODULE_DEVICE_TABLE(i2c, tmp421_id); 70MODULE_DEVICE_TABLE(i2c, tmp421_id);
@@ -234,7 +235,9 @@ static int tmp421_detect(struct i2c_client *client,
234{ 235{
235 enum chips kind; 236 enum chips kind;
236 struct i2c_adapter *adapter = client->adapter; 237 struct i2c_adapter *adapter = client->adapter;
237 const char *names[] = { "TMP421", "TMP422", "TMP423" }; 238 const char * const names[] = { "TMP421", "TMP422", "TMP423",
239 "TMP441", "TMP442" };
240 int addr = client->addr;
238 u8 reg; 241 u8 reg;
239 242
240 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 243 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
@@ -244,17 +247,37 @@ static int tmp421_detect(struct i2c_client *client,
244 if (reg != TMP421_MANUFACTURER_ID) 247 if (reg != TMP421_MANUFACTURER_ID)
245 return -ENODEV; 248 return -ENODEV;
246 249
250 reg = i2c_smbus_read_byte_data(client, TMP421_CONVERSION_RATE_REG);
251 if (reg & 0xf8)
252 return -ENODEV;
253
254 reg = i2c_smbus_read_byte_data(client, TMP421_STATUS_REG);
255 if (reg & 0x7f)
256 return -ENODEV;
257
247 reg = i2c_smbus_read_byte_data(client, TMP421_DEVICE_ID_REG); 258 reg = i2c_smbus_read_byte_data(client, TMP421_DEVICE_ID_REG);
248 switch (reg) { 259 switch (reg) {
249 case TMP421_DEVICE_ID: 260 case TMP421_DEVICE_ID:
250 kind = tmp421; 261 kind = tmp421;
251 break; 262 break;
252 case TMP422_DEVICE_ID: 263 case TMP422_DEVICE_ID:
264 if (addr == 0x2a)
265 return -ENODEV;
253 kind = tmp422; 266 kind = tmp422;
254 break; 267 break;
255 case TMP423_DEVICE_ID: 268 case TMP423_DEVICE_ID:
269 if (addr != 0x4c && addr != 0x4d)
270 return -ENODEV;
256 kind = tmp423; 271 kind = tmp423;
257 break; 272 break;
273 case TMP441_DEVICE_ID:
274 kind = tmp441;
275 break;
276 case TMP442_DEVICE_ID:
277 if (addr != 0x4c && addr != 0x4d)
278 return -ENODEV;
279 kind = tmp442;
280 break;
258 default: 281 default:
259 return -ENODEV; 282 return -ENODEV;
260 } 283 }
@@ -305,5 +328,5 @@ static struct i2c_driver tmp421_driver = {
305module_i2c_driver(tmp421_driver); 328module_i2c_driver(tmp421_driver);
306 329
307MODULE_AUTHOR("Andre Prendel <andre.prendel@gmx.de>"); 330MODULE_AUTHOR("Andre Prendel <andre.prendel@gmx.de>");
308MODULE_DESCRIPTION("Texas Instruments TMP421/422/423 temperature sensor driver"); 331MODULE_DESCRIPTION("Texas Instruments TMP421/422/423/441/442 temperature sensor driver");
309MODULE_LICENSE("GPL"); 332MODULE_LICENSE("GPL");
diff --git a/drivers/hwmon/twl4030-madc-hwmon.c b/drivers/hwmon/twl4030-madc-hwmon.c
index 6c6d440bb2dd..9a0e2b8e8b94 100644
--- a/drivers/hwmon/twl4030-madc-hwmon.c
+++ b/drivers/hwmon/twl4030-madc-hwmon.c
@@ -74,7 +74,7 @@ static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, madc_read, NULL, 11);
74static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, madc_read, NULL, 12); 74static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, madc_read, NULL, 12);
75static SENSOR_DEVICE_ATTR(in15_input, S_IRUGO, madc_read, NULL, 15); 75static SENSOR_DEVICE_ATTR(in15_input, S_IRUGO, madc_read, NULL, 15);
76 76
77static struct attribute *twl4030_madc_attributes[] = { 77static struct attribute *twl4030_madc_attrs[] = {
78 &sensor_dev_attr_in0_input.dev_attr.attr, 78 &sensor_dev_attr_in0_input.dev_attr.attr,
79 &sensor_dev_attr_temp1_input.dev_attr.attr, 79 &sensor_dev_attr_temp1_input.dev_attr.attr,
80 &sensor_dev_attr_in2_input.dev_attr.attr, 80 &sensor_dev_attr_in2_input.dev_attr.attr,
@@ -91,46 +91,20 @@ static struct attribute *twl4030_madc_attributes[] = {
91 &sensor_dev_attr_in15_input.dev_attr.attr, 91 &sensor_dev_attr_in15_input.dev_attr.attr,
92 NULL 92 NULL
93}; 93};
94 94ATTRIBUTE_GROUPS(twl4030_madc);
95static const struct attribute_group twl4030_madc_group = {
96 .attrs = twl4030_madc_attributes,
97};
98 95
99static int twl4030_madc_hwmon_probe(struct platform_device *pdev) 96static int twl4030_madc_hwmon_probe(struct platform_device *pdev)
100{ 97{
101 int ret;
102 struct device *hwmon; 98 struct device *hwmon;
103 99
104 ret = sysfs_create_group(&pdev->dev.kobj, &twl4030_madc_group); 100 hwmon = devm_hwmon_device_register_with_groups(&pdev->dev,
105 if (ret) 101 "twl4030_madc", NULL,
106 goto err_sysfs; 102 twl4030_madc_groups);
107 hwmon = hwmon_device_register(&pdev->dev); 103 return PTR_ERR_OR_ZERO(hwmon);
108 if (IS_ERR(hwmon)) {
109 dev_err(&pdev->dev, "hwmon_device_register failed.\n");
110 ret = PTR_ERR(hwmon);
111 goto err_reg;
112 }
113
114 return 0;
115
116err_reg:
117 sysfs_remove_group(&pdev->dev.kobj, &twl4030_madc_group);
118err_sysfs:
119
120 return ret;
121}
122
123static int twl4030_madc_hwmon_remove(struct platform_device *pdev)
124{
125 hwmon_device_unregister(&pdev->dev);
126 sysfs_remove_group(&pdev->dev.kobj, &twl4030_madc_group);
127
128 return 0;
129} 104}
130 105
131static struct platform_driver twl4030_madc_hwmon_driver = { 106static struct platform_driver twl4030_madc_hwmon_driver = {
132 .probe = twl4030_madc_hwmon_probe, 107 .probe = twl4030_madc_hwmon_probe,
133 .remove = twl4030_madc_hwmon_remove,
134 .driver = { 108 .driver = {
135 .name = "twl4030_madc_hwmon", 109 .name = "twl4030_madc_hwmon",
136 .owner = THIS_MODULE, 110 .owner = THIS_MODULE,
diff --git a/drivers/hwmon/w83791d.c b/drivers/hwmon/w83791d.c
index bdcf2dce5ec4..cb3765fec98c 100644
--- a/drivers/hwmon/w83791d.c
+++ b/drivers/hwmon/w83791d.c
@@ -249,19 +249,16 @@ static u8 fan_to_reg(long rpm, int div)
249 * the bottom 7 bits will always be zero 249 * the bottom 7 bits will always be zero
250 */ 250 */
251#define TEMP23_FROM_REG(val) ((val) / 128 * 500) 251#define TEMP23_FROM_REG(val) ((val) / 128 * 500)
252#define TEMP23_TO_REG(val) ((val) <= -128000 ? 0x8000 : \ 252#define TEMP23_TO_REG(val) (DIV_ROUND_CLOSEST(clamp_val((val), -128000, \
253 (val) >= 127500 ? 0x7F80 : \ 253 127500), 500) * 128)
254 (val) < 0 ? ((val) - 250) / 500 * 128 : \
255 ((val) + 250) / 500 * 128)
256 254
257/* for thermal cruise target temp, 7-bits, LSB = 1 degree Celsius */ 255/* for thermal cruise target temp, 7-bits, LSB = 1 degree Celsius */
258#define TARGET_TEMP_TO_REG(val) ((val) < 0 ? 0 : \ 256#define TARGET_TEMP_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val((val), 0, 127000), \
259 (val) >= 127000 ? 127 : \ 257 1000)
260 ((val) + 500) / 1000)
261 258
262/* for thermal cruise temp tolerance, 4-bits, LSB = 1 degree Celsius */ 259/* for thermal cruise temp tolerance, 4-bits, LSB = 1 degree Celsius */
263#define TOL_TEMP_TO_REG(val) ((val) >= 15000 ? 15 : \ 260#define TOL_TEMP_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val((val), 0, 15000), \
264 ((val) + 500) / 1000) 261 1000)
265 262
266#define BEEP_MASK_TO_REG(val) ((val) & 0xffffff) 263#define BEEP_MASK_TO_REG(val) ((val) & 0xffffff)
267#define BEEP_MASK_FROM_REG(val) ((val) & 0xffffff) 264#define BEEP_MASK_FROM_REG(val) ((val) & 0xffffff)
diff --git a/drivers/hwmon/w83l786ng.c b/drivers/hwmon/w83l786ng.c
index 32487c19cbfc..330299613d38 100644
--- a/drivers/hwmon/w83l786ng.c
+++ b/drivers/hwmon/w83l786ng.c
@@ -124,7 +124,7 @@ DIV_TO_REG(long val)
124} 124}
125 125
126struct w83l786ng_data { 126struct w83l786ng_data {
127 struct device *hwmon_dev; 127 struct i2c_client *client;
128 struct mutex update_lock; 128 struct mutex update_lock;
129 char valid; /* !=0 if following fields are valid */ 129 char valid; /* !=0 if following fields are valid */
130 unsigned long last_updated; /* In jiffies */ 130 unsigned long last_updated; /* In jiffies */
@@ -148,32 +148,6 @@ struct w83l786ng_data {
148 u8 tolerance[2]; 148 u8 tolerance[2];
149}; 149};
150 150
151static int w83l786ng_probe(struct i2c_client *client,
152 const struct i2c_device_id *id);
153static int w83l786ng_detect(struct i2c_client *client,
154 struct i2c_board_info *info);
155static int w83l786ng_remove(struct i2c_client *client);
156static void w83l786ng_init_client(struct i2c_client *client);
157static struct w83l786ng_data *w83l786ng_update_device(struct device *dev);
158
159static const struct i2c_device_id w83l786ng_id[] = {
160 { "w83l786ng", 0 },
161 { }
162};
163MODULE_DEVICE_TABLE(i2c, w83l786ng_id);
164
165static struct i2c_driver w83l786ng_driver = {
166 .class = I2C_CLASS_HWMON,
167 .driver = {
168 .name = "w83l786ng",
169 },
170 .probe = w83l786ng_probe,
171 .remove = w83l786ng_remove,
172 .id_table = w83l786ng_id,
173 .detect = w83l786ng_detect,
174 .address_list = normal_i2c,
175};
176
177static u8 151static u8
178w83l786ng_read_value(struct i2c_client *client, u8 reg) 152w83l786ng_read_value(struct i2c_client *client, u8 reg)
179{ 153{
@@ -186,6 +160,77 @@ w83l786ng_write_value(struct i2c_client *client, u8 reg, u8 value)
186 return i2c_smbus_write_byte_data(client, reg, value); 160 return i2c_smbus_write_byte_data(client, reg, value);
187} 161}
188 162
163static struct w83l786ng_data *w83l786ng_update_device(struct device *dev)
164{
165 struct w83l786ng_data *data = dev_get_drvdata(dev);
166 struct i2c_client *client = data->client;
167 int i, j;
168 u8 reg_tmp, pwmcfg;
169
170 mutex_lock(&data->update_lock);
171 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
172 || !data->valid) {
173 dev_dbg(&client->dev, "Updating w83l786ng data.\n");
174
175 /* Update the voltages measured value and limits */
176 for (i = 0; i < 3; i++) {
177 data->in[i] = w83l786ng_read_value(client,
178 W83L786NG_REG_IN(i));
179 data->in_min[i] = w83l786ng_read_value(client,
180 W83L786NG_REG_IN_MIN(i));
181 data->in_max[i] = w83l786ng_read_value(client,
182 W83L786NG_REG_IN_MAX(i));
183 }
184
185 /* Update the fan counts and limits */
186 for (i = 0; i < 2; i++) {
187 data->fan[i] = w83l786ng_read_value(client,
188 W83L786NG_REG_FAN(i));
189 data->fan_min[i] = w83l786ng_read_value(client,
190 W83L786NG_REG_FAN_MIN(i));
191 }
192
193 /* Update the fan divisor */
194 reg_tmp = w83l786ng_read_value(client, W83L786NG_REG_FAN_DIV);
195 data->fan_div[0] = reg_tmp & 0x07;
196 data->fan_div[1] = (reg_tmp >> 4) & 0x07;
197
198 pwmcfg = w83l786ng_read_value(client, W83L786NG_REG_FAN_CFG);
199 for (i = 0; i < 2; i++) {
200 data->pwm_mode[i] =
201 ((pwmcfg >> W83L786NG_PWM_MODE_SHIFT[i]) & 1)
202 ? 0 : 1;
203 data->pwm_enable[i] =
204 ((pwmcfg >> W83L786NG_PWM_ENABLE_SHIFT[i]) & 3) + 1;
205 data->pwm[i] =
206 (w83l786ng_read_value(client, W83L786NG_REG_PWM[i])
207 & 0x0f) * 0x11;
208 }
209
210
211 /* Update the temperature sensors */
212 for (i = 0; i < 2; i++) {
213 for (j = 0; j < 3; j++) {
214 data->temp[i][j] = w83l786ng_read_value(client,
215 W83L786NG_REG_TEMP[i][j]);
216 }
217 }
218
219 /* Update Smart Fan I/II tolerance */
220 reg_tmp = w83l786ng_read_value(client, W83L786NG_REG_TOLERANCE);
221 data->tolerance[0] = reg_tmp & 0x0f;
222 data->tolerance[1] = (reg_tmp >> 4) & 0x0f;
223
224 data->last_updated = jiffies;
225 data->valid = 1;
226
227 }
228
229 mutex_unlock(&data->update_lock);
230
231 return data;
232}
233
189/* following are the sysfs callback functions */ 234/* following are the sysfs callback functions */
190#define show_in_reg(reg) \ 235#define show_in_reg(reg) \
191static ssize_t \ 236static ssize_t \
@@ -207,8 +252,8 @@ store_in_##reg(struct device *dev, struct device_attribute *attr, \
207 const char *buf, size_t count) \ 252 const char *buf, size_t count) \
208{ \ 253{ \
209 int nr = to_sensor_dev_attr(attr)->index; \ 254 int nr = to_sensor_dev_attr(attr)->index; \
210 struct i2c_client *client = to_i2c_client(dev); \ 255 struct w83l786ng_data *data = dev_get_drvdata(dev); \
211 struct w83l786ng_data *data = i2c_get_clientdata(client); \ 256 struct i2c_client *client = data->client; \
212 unsigned long val; \ 257 unsigned long val; \
213 int err = kstrtoul(buf, 10, &val); \ 258 int err = kstrtoul(buf, 10, &val); \
214 if (err) \ 259 if (err) \
@@ -260,8 +305,8 @@ store_fan_min(struct device *dev, struct device_attribute *attr,
260 const char *buf, size_t count) 305 const char *buf, size_t count)
261{ 306{
262 int nr = to_sensor_dev_attr(attr)->index; 307 int nr = to_sensor_dev_attr(attr)->index;
263 struct i2c_client *client = to_i2c_client(dev); 308 struct w83l786ng_data *data = dev_get_drvdata(dev);
264 struct w83l786ng_data *data = i2c_get_clientdata(client); 309 struct i2c_client *client = data->client;
265 unsigned long val; 310 unsigned long val;
266 int err; 311 int err;
267 312
@@ -298,8 +343,8 @@ store_fan_div(struct device *dev, struct device_attribute *attr,
298 const char *buf, size_t count) 343 const char *buf, size_t count)
299{ 344{
300 int nr = to_sensor_dev_attr(attr)->index; 345 int nr = to_sensor_dev_attr(attr)->index;
301 struct i2c_client *client = to_i2c_client(dev); 346 struct w83l786ng_data *data = dev_get_drvdata(dev);
302 struct w83l786ng_data *data = i2c_get_clientdata(client); 347 struct i2c_client *client = data->client;
303 348
304 unsigned long min; 349 unsigned long min;
305 u8 tmp_fan_div; 350 u8 tmp_fan_div;
@@ -389,8 +434,8 @@ store_temp(struct device *dev, struct device_attribute *attr,
389 to_sensor_dev_attr_2(attr); 434 to_sensor_dev_attr_2(attr);
390 int nr = sensor_attr->nr; 435 int nr = sensor_attr->nr;
391 int index = sensor_attr->index; 436 int index = sensor_attr->index;
392 struct i2c_client *client = to_i2c_client(dev); 437 struct w83l786ng_data *data = dev_get_drvdata(dev);
393 struct w83l786ng_data *data = i2c_get_clientdata(client); 438 struct i2c_client *client = data->client;
394 long val; 439 long val;
395 int err; 440 int err;
396 441
@@ -444,8 +489,8 @@ store_pwm_mode(struct device *dev, struct device_attribute *attr,
444 const char *buf, size_t count) 489 const char *buf, size_t count)
445{ 490{
446 int nr = to_sensor_dev_attr(attr)->index; 491 int nr = to_sensor_dev_attr(attr)->index;
447 struct i2c_client *client = to_i2c_client(dev); 492 struct w83l786ng_data *data = dev_get_drvdata(dev);
448 struct w83l786ng_data *data = i2c_get_clientdata(client); 493 struct i2c_client *client = data->client;
449 u8 reg; 494 u8 reg;
450 unsigned long val; 495 unsigned long val;
451 int err; 496 int err;
@@ -472,8 +517,8 @@ store_pwm(struct device *dev, struct device_attribute *attr,
472 const char *buf, size_t count) 517 const char *buf, size_t count)
473{ 518{
474 int nr = to_sensor_dev_attr(attr)->index; 519 int nr = to_sensor_dev_attr(attr)->index;
475 struct i2c_client *client = to_i2c_client(dev); 520 struct w83l786ng_data *data = dev_get_drvdata(dev);
476 struct w83l786ng_data *data = i2c_get_clientdata(client); 521 struct i2c_client *client = data->client;
477 unsigned long val; 522 unsigned long val;
478 int err; 523 int err;
479 524
@@ -496,8 +541,8 @@ store_pwm_enable(struct device *dev, struct device_attribute *attr,
496 const char *buf, size_t count) 541 const char *buf, size_t count)
497{ 542{
498 int nr = to_sensor_dev_attr(attr)->index; 543 int nr = to_sensor_dev_attr(attr)->index;
499 struct i2c_client *client = to_i2c_client(dev); 544 struct w83l786ng_data *data = dev_get_drvdata(dev);
500 struct w83l786ng_data *data = i2c_get_clientdata(client); 545 struct i2c_client *client = data->client;
501 u8 reg; 546 u8 reg;
502 unsigned long val; 547 unsigned long val;
503 int err; 548 int err;
@@ -552,8 +597,8 @@ store_tolerance(struct device *dev, struct device_attribute *attr,
552 const char *buf, size_t count) 597 const char *buf, size_t count)
553{ 598{
554 int nr = to_sensor_dev_attr(attr)->index; 599 int nr = to_sensor_dev_attr(attr)->index;
555 struct i2c_client *client = to_i2c_client(dev); 600 struct w83l786ng_data *data = dev_get_drvdata(dev);
556 struct w83l786ng_data *data = i2c_get_clientdata(client); 601 struct i2c_client *client = data->client;
557 u8 tol_tmp, tol_mask; 602 u8 tol_tmp, tol_mask;
558 unsigned long val; 603 unsigned long val;
559 int err; 604 int err;
@@ -608,7 +653,7 @@ static struct sensor_device_attribute sda_tolerance[] = {
608#define TOLERANCE_UNIT_ATTRS(X) \ 653#define TOLERANCE_UNIT_ATTRS(X) \
609 &sda_tolerance[X].dev_attr.attr 654 &sda_tolerance[X].dev_attr.attr
610 655
611static struct attribute *w83l786ng_attributes[] = { 656static struct attribute *w83l786ng_attrs[] = {
612 IN_UNIT_ATTRS(0), 657 IN_UNIT_ATTRS(0),
613 IN_UNIT_ATTRS(1), 658 IN_UNIT_ATTRS(1),
614 IN_UNIT_ATTRS(2), 659 IN_UNIT_ATTRS(2),
@@ -623,9 +668,7 @@ static struct attribute *w83l786ng_attributes[] = {
623 NULL 668 NULL
624}; 669};
625 670
626static const struct attribute_group w83l786ng_group = { 671ATTRIBUTE_GROUPS(w83l786ng);
627 .attrs = w83l786ng_attributes,
628};
629 672
630static int 673static int
631w83l786ng_detect(struct i2c_client *client, struct i2c_board_info *info) 674w83l786ng_detect(struct i2c_client *client, struct i2c_board_info *info)
@@ -662,20 +705,33 @@ w83l786ng_detect(struct i2c_client *client, struct i2c_board_info *info)
662 return 0; 705 return 0;
663} 706}
664 707
708static void w83l786ng_init_client(struct i2c_client *client)
709{
710 u8 tmp;
711
712 if (reset)
713 w83l786ng_write_value(client, W83L786NG_REG_CONFIG, 0x80);
714
715 /* Start monitoring */
716 tmp = w83l786ng_read_value(client, W83L786NG_REG_CONFIG);
717 if (!(tmp & 0x01))
718 w83l786ng_write_value(client, W83L786NG_REG_CONFIG, tmp | 0x01);
719}
720
665static int 721static int
666w83l786ng_probe(struct i2c_client *client, const struct i2c_device_id *id) 722w83l786ng_probe(struct i2c_client *client, const struct i2c_device_id *id)
667{ 723{
668 struct device *dev = &client->dev; 724 struct device *dev = &client->dev;
669 struct w83l786ng_data *data; 725 struct w83l786ng_data *data;
670 int i, err = 0; 726 struct device *hwmon_dev;
727 int i;
671 u8 reg_tmp; 728 u8 reg_tmp;
672 729
673 data = devm_kzalloc(&client->dev, sizeof(struct w83l786ng_data), 730 data = devm_kzalloc(dev, sizeof(struct w83l786ng_data), GFP_KERNEL);
674 GFP_KERNEL);
675 if (!data) 731 if (!data)
676 return -ENOMEM; 732 return -ENOMEM;
677 733
678 i2c_set_clientdata(client, data); 734 data->client = client;
679 mutex_init(&data->update_lock); 735 mutex_init(&data->update_lock);
680 736
681 /* Initialize the chip */ 737 /* Initialize the chip */
@@ -692,121 +748,28 @@ w83l786ng_probe(struct i2c_client *client, const struct i2c_device_id *id)
692 data->fan_div[0] = reg_tmp & 0x07; 748 data->fan_div[0] = reg_tmp & 0x07;
693 data->fan_div[1] = (reg_tmp >> 4) & 0x07; 749 data->fan_div[1] = (reg_tmp >> 4) & 0x07;
694 750
695 /* Register sysfs hooks */ 751 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
696 err = sysfs_create_group(&client->dev.kobj, &w83l786ng_group); 752 data,
697 if (err) 753 w83l786ng_groups);
698 goto exit_remove; 754 return PTR_ERR_OR_ZERO(hwmon_dev);
699
700 data->hwmon_dev = hwmon_device_register(dev);
701 if (IS_ERR(data->hwmon_dev)) {
702 err = PTR_ERR(data->hwmon_dev);
703 goto exit_remove;
704 }
705
706 return 0;
707
708 /* Unregister sysfs hooks */
709
710exit_remove:
711 sysfs_remove_group(&client->dev.kobj, &w83l786ng_group);
712 return err;
713}
714
715static int
716w83l786ng_remove(struct i2c_client *client)
717{
718 struct w83l786ng_data *data = i2c_get_clientdata(client);
719
720 hwmon_device_unregister(data->hwmon_dev);
721 sysfs_remove_group(&client->dev.kobj, &w83l786ng_group);
722
723 return 0;
724} 755}
725 756
726static void 757static const struct i2c_device_id w83l786ng_id[] = {
727w83l786ng_init_client(struct i2c_client *client) 758 { "w83l786ng", 0 },
728{ 759 { }
729 u8 tmp; 760};
730 761MODULE_DEVICE_TABLE(i2c, w83l786ng_id);
731 if (reset)
732 w83l786ng_write_value(client, W83L786NG_REG_CONFIG, 0x80);
733
734 /* Start monitoring */
735 tmp = w83l786ng_read_value(client, W83L786NG_REG_CONFIG);
736 if (!(tmp & 0x01))
737 w83l786ng_write_value(client, W83L786NG_REG_CONFIG, tmp | 0x01);
738}
739
740static struct w83l786ng_data *w83l786ng_update_device(struct device *dev)
741{
742 struct i2c_client *client = to_i2c_client(dev);
743 struct w83l786ng_data *data = i2c_get_clientdata(client);
744 int i, j;
745 u8 reg_tmp, pwmcfg;
746
747 mutex_lock(&data->update_lock);
748 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
749 || !data->valid) {
750 dev_dbg(&client->dev, "Updating w83l786ng data.\n");
751
752 /* Update the voltages measured value and limits */
753 for (i = 0; i < 3; i++) {
754 data->in[i] = w83l786ng_read_value(client,
755 W83L786NG_REG_IN(i));
756 data->in_min[i] = w83l786ng_read_value(client,
757 W83L786NG_REG_IN_MIN(i));
758 data->in_max[i] = w83l786ng_read_value(client,
759 W83L786NG_REG_IN_MAX(i));
760 }
761
762 /* Update the fan counts and limits */
763 for (i = 0; i < 2; i++) {
764 data->fan[i] = w83l786ng_read_value(client,
765 W83L786NG_REG_FAN(i));
766 data->fan_min[i] = w83l786ng_read_value(client,
767 W83L786NG_REG_FAN_MIN(i));
768 }
769
770 /* Update the fan divisor */
771 reg_tmp = w83l786ng_read_value(client, W83L786NG_REG_FAN_DIV);
772 data->fan_div[0] = reg_tmp & 0x07;
773 data->fan_div[1] = (reg_tmp >> 4) & 0x07;
774
775 pwmcfg = w83l786ng_read_value(client, W83L786NG_REG_FAN_CFG);
776 for (i = 0; i < 2; i++) {
777 data->pwm_mode[i] =
778 ((pwmcfg >> W83L786NG_PWM_MODE_SHIFT[i]) & 1)
779 ? 0 : 1;
780 data->pwm_enable[i] =
781 ((pwmcfg >> W83L786NG_PWM_ENABLE_SHIFT[i]) & 3) + 1;
782 data->pwm[i] =
783 (w83l786ng_read_value(client, W83L786NG_REG_PWM[i])
784 & 0x0f) * 0x11;
785 }
786
787
788 /* Update the temperature sensors */
789 for (i = 0; i < 2; i++) {
790 for (j = 0; j < 3; j++) {
791 data->temp[i][j] = w83l786ng_read_value(client,
792 W83L786NG_REG_TEMP[i][j]);
793 }
794 }
795
796 /* Update Smart Fan I/II tolerance */
797 reg_tmp = w83l786ng_read_value(client, W83L786NG_REG_TOLERANCE);
798 data->tolerance[0] = reg_tmp & 0x0f;
799 data->tolerance[1] = (reg_tmp >> 4) & 0x0f;
800
801 data->last_updated = jiffies;
802 data->valid = 1;
803
804 }
805
806 mutex_unlock(&data->update_lock);
807 762
808 return data; 763static struct i2c_driver w83l786ng_driver = {
809} 764 .class = I2C_CLASS_HWMON,
765 .driver = {
766 .name = "w83l786ng",
767 },
768 .probe = w83l786ng_probe,
769 .id_table = w83l786ng_id,
770 .detect = w83l786ng_detect,
771 .address_list = normal_i2c,
772};
810 773
811module_i2c_driver(w83l786ng_driver); 774module_i2c_driver(w83l786ng_driver);
812 775
diff --git a/drivers/hwmon/wm831x-hwmon.c b/drivers/hwmon/wm831x-hwmon.c
index df6ceaf8d58a..3e6a3195cd11 100644
--- a/drivers/hwmon/wm831x-hwmon.c
+++ b/drivers/hwmon/wm831x-hwmon.c
@@ -29,17 +29,6 @@
29#include <linux/mfd/wm831x/core.h> 29#include <linux/mfd/wm831x/core.h>
30#include <linux/mfd/wm831x/auxadc.h> 30#include <linux/mfd/wm831x/auxadc.h>
31 31
32struct wm831x_hwmon {
33 struct wm831x *wm831x;
34 struct device *classdev;
35};
36
37static ssize_t show_name(struct device *dev,
38 struct device_attribute *attr, char *buf)
39{
40 return sprintf(buf, "wm831x\n");
41}
42
43static const char * const input_names[] = { 32static const char * const input_names[] = {
44 [WM831X_AUX_SYSVDD] = "SYSVDD", 33 [WM831X_AUX_SYSVDD] = "SYSVDD",
45 [WM831X_AUX_USB] = "USB", 34 [WM831X_AUX_USB] = "USB",
@@ -50,15 +39,14 @@ static const char * const input_names[] = {
50 [WM831X_AUX_BATT_TEMP] = "Battery", 39 [WM831X_AUX_BATT_TEMP] = "Battery",
51}; 40};
52 41
53
54static ssize_t show_voltage(struct device *dev, 42static ssize_t show_voltage(struct device *dev,
55 struct device_attribute *attr, char *buf) 43 struct device_attribute *attr, char *buf)
56{ 44{
57 struct wm831x_hwmon *hwmon = dev_get_drvdata(dev); 45 struct wm831x *wm831x = dev_get_drvdata(dev);
58 int channel = to_sensor_dev_attr(attr)->index; 46 int channel = to_sensor_dev_attr(attr)->index;
59 int ret; 47 int ret;
60 48
61 ret = wm831x_auxadc_read_uv(hwmon->wm831x, channel); 49 ret = wm831x_auxadc_read_uv(wm831x, channel);
62 if (ret < 0) 50 if (ret < 0)
63 return ret; 51 return ret;
64 52
@@ -68,11 +56,11 @@ static ssize_t show_voltage(struct device *dev,
68static ssize_t show_chip_temp(struct device *dev, 56static ssize_t show_chip_temp(struct device *dev,
69 struct device_attribute *attr, char *buf) 57 struct device_attribute *attr, char *buf)
70{ 58{
71 struct wm831x_hwmon *hwmon = dev_get_drvdata(dev); 59 struct wm831x *wm831x = dev_get_drvdata(dev);
72 int channel = to_sensor_dev_attr(attr)->index; 60 int channel = to_sensor_dev_attr(attr)->index;
73 int ret; 61 int ret;
74 62
75 ret = wm831x_auxadc_read(hwmon->wm831x, channel); 63 ret = wm831x_auxadc_read(wm831x, channel);
76 if (ret < 0) 64 if (ret < 0)
77 return ret; 65 return ret;
78 66
@@ -100,8 +88,6 @@ static ssize_t show_label(struct device *dev,
100 static SENSOR_DEVICE_ATTR(in##id##_label, S_IRUGO, show_label, \ 88 static SENSOR_DEVICE_ATTR(in##id##_label, S_IRUGO, show_label, \
101 NULL, name) 89 NULL, name)
102 90
103static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
104
105WM831X_VOLTAGE(0, WM831X_AUX_AUX1); 91WM831X_VOLTAGE(0, WM831X_AUX_AUX1);
106WM831X_VOLTAGE(1, WM831X_AUX_AUX2); 92WM831X_VOLTAGE(1, WM831X_AUX_AUX2);
107WM831X_VOLTAGE(2, WM831X_AUX_AUX3); 93WM831X_VOLTAGE(2, WM831X_AUX_AUX3);
@@ -126,9 +112,7 @@ static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_voltage, NULL,
126static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, show_label, NULL, 112static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, show_label, NULL,
127 WM831X_AUX_BATT_TEMP); 113 WM831X_AUX_BATT_TEMP);
128 114
129static struct attribute *wm831x_attributes[] = { 115static struct attribute *wm831x_attrs[] = {
130 &dev_attr_name.attr,
131
132 &sensor_dev_attr_in0_input.dev_attr.attr, 116 &sensor_dev_attr_in0_input.dev_attr.attr,
133 &sensor_dev_attr_in1_input.dev_attr.attr, 117 &sensor_dev_attr_in1_input.dev_attr.attr,
134 &sensor_dev_attr_in2_input.dev_attr.attr, 118 &sensor_dev_attr_in2_input.dev_attr.attr,
@@ -153,55 +137,21 @@ static struct attribute *wm831x_attributes[] = {
153 NULL 137 NULL
154}; 138};
155 139
156static const struct attribute_group wm831x_attr_group = { 140ATTRIBUTE_GROUPS(wm831x);
157 .attrs = wm831x_attributes,
158};
159 141
160static int wm831x_hwmon_probe(struct platform_device *pdev) 142static int wm831x_hwmon_probe(struct platform_device *pdev)
161{ 143{
162 struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent); 144 struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
163 struct wm831x_hwmon *hwmon; 145 struct device *hwmon_dev;
164 int ret;
165
166 hwmon = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_hwmon),
167 GFP_KERNEL);
168 if (!hwmon)
169 return -ENOMEM;
170
171 hwmon->wm831x = wm831x;
172
173 ret = sysfs_create_group(&pdev->dev.kobj, &wm831x_attr_group);
174 if (ret)
175 return ret;
176
177 hwmon->classdev = hwmon_device_register(&pdev->dev);
178 if (IS_ERR(hwmon->classdev)) {
179 ret = PTR_ERR(hwmon->classdev);
180 goto err_sysfs;
181 }
182
183 platform_set_drvdata(pdev, hwmon);
184
185 return 0;
186
187err_sysfs:
188 sysfs_remove_group(&pdev->dev.kobj, &wm831x_attr_group);
189 return ret;
190}
191
192static int wm831x_hwmon_remove(struct platform_device *pdev)
193{
194 struct wm831x_hwmon *hwmon = platform_get_drvdata(pdev);
195
196 hwmon_device_unregister(hwmon->classdev);
197 sysfs_remove_group(&pdev->dev.kobj, &wm831x_attr_group);
198 146
199 return 0; 147 hwmon_dev = devm_hwmon_device_register_with_groups(&pdev->dev, "wm831x",
148 wm831x,
149 wm831x_groups);
150 return PTR_ERR_OR_ZERO(hwmon_dev);
200} 151}
201 152
202static struct platform_driver wm831x_hwmon_driver = { 153static struct platform_driver wm831x_hwmon_driver = {
203 .probe = wm831x_hwmon_probe, 154 .probe = wm831x_hwmon_probe,
204 .remove = wm831x_hwmon_remove,
205 .driver = { 155 .driver = {
206 .name = "wm831x-hwmon", 156 .name = "wm831x-hwmon",
207 .owner = THIS_MODULE, 157 .owner = THIS_MODULE,
diff --git a/drivers/hwmon/wm8350-hwmon.c b/drivers/hwmon/wm8350-hwmon.c
index 64bf75c9442b..90e3d918e597 100644
--- a/drivers/hwmon/wm8350-hwmon.c
+++ b/drivers/hwmon/wm8350-hwmon.c
@@ -28,19 +28,12 @@
28#include <linux/mfd/wm8350/core.h> 28#include <linux/mfd/wm8350/core.h>
29#include <linux/mfd/wm8350/comparator.h> 29#include <linux/mfd/wm8350/comparator.h>
30 30
31static ssize_t show_name(struct device *dev,
32 struct device_attribute *attr, char *buf)
33{
34 return sprintf(buf, "wm8350\n");
35}
36
37static const char * const input_names[] = { 31static const char * const input_names[] = {
38 [WM8350_AUXADC_USB] = "USB", 32 [WM8350_AUXADC_USB] = "USB",
39 [WM8350_AUXADC_LINE] = "Line", 33 [WM8350_AUXADC_LINE] = "Line",
40 [WM8350_AUXADC_BATT] = "Battery", 34 [WM8350_AUXADC_BATT] = "Battery",
41}; 35};
42 36
43
44static ssize_t show_voltage(struct device *dev, 37static ssize_t show_voltage(struct device *dev,
45 struct device_attribute *attr, char *buf) 38 struct device_attribute *attr, char *buf)
46{ 39{
@@ -68,15 +61,11 @@ static ssize_t show_label(struct device *dev,
68 static SENSOR_DEVICE_ATTR(in##id##_label, S_IRUGO, show_label, \ 61 static SENSOR_DEVICE_ATTR(in##id##_label, S_IRUGO, show_label, \
69 NULL, name) 62 NULL, name)
70 63
71static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
72
73WM8350_NAMED_VOLTAGE(0, WM8350_AUXADC_USB); 64WM8350_NAMED_VOLTAGE(0, WM8350_AUXADC_USB);
74WM8350_NAMED_VOLTAGE(1, WM8350_AUXADC_BATT); 65WM8350_NAMED_VOLTAGE(1, WM8350_AUXADC_BATT);
75WM8350_NAMED_VOLTAGE(2, WM8350_AUXADC_LINE); 66WM8350_NAMED_VOLTAGE(2, WM8350_AUXADC_LINE);
76 67
77static struct attribute *wm8350_attributes[] = { 68static struct attribute *wm8350_attrs[] = {
78 &dev_attr_name.attr,
79
80 &sensor_dev_attr_in0_input.dev_attr.attr, 69 &sensor_dev_attr_in0_input.dev_attr.attr,
81 &sensor_dev_attr_in0_label.dev_attr.attr, 70 &sensor_dev_attr_in0_label.dev_attr.attr,
82 &sensor_dev_attr_in1_input.dev_attr.attr, 71 &sensor_dev_attr_in1_input.dev_attr.attr,
@@ -87,46 +76,21 @@ static struct attribute *wm8350_attributes[] = {
87 NULL, 76 NULL,
88}; 77};
89 78
90static const struct attribute_group wm8350_attr_group = { 79ATTRIBUTE_GROUPS(wm8350);
91 .attrs = wm8350_attributes,
92};
93 80
94static int wm8350_hwmon_probe(struct platform_device *pdev) 81static int wm8350_hwmon_probe(struct platform_device *pdev)
95{ 82{
96 struct wm8350 *wm8350 = platform_get_drvdata(pdev); 83 struct wm8350 *wm8350 = platform_get_drvdata(pdev);
97 int ret; 84 struct device *hwmon_dev;
98
99 ret = sysfs_create_group(&pdev->dev.kobj, &wm8350_attr_group);
100 if (ret)
101 goto err;
102
103 wm8350->hwmon.classdev = hwmon_device_register(&pdev->dev);
104 if (IS_ERR(wm8350->hwmon.classdev)) {
105 ret = PTR_ERR(wm8350->hwmon.classdev);
106 goto err_group;
107 }
108
109 return 0;
110
111err_group:
112 sysfs_remove_group(&pdev->dev.kobj, &wm8350_attr_group);
113err:
114 return ret;
115}
116
117static int wm8350_hwmon_remove(struct platform_device *pdev)
118{
119 struct wm8350 *wm8350 = platform_get_drvdata(pdev);
120
121 hwmon_device_unregister(wm8350->hwmon.classdev);
122 sysfs_remove_group(&pdev->dev.kobj, &wm8350_attr_group);
123 85
124 return 0; 86 hwmon_dev = devm_hwmon_device_register_with_groups(&pdev->dev, "wm8350",
87 wm8350,
88 wm8350_groups);
89 return PTR_ERR_OR_ZERO(hwmon_dev);
125} 90}
126 91
127static struct platform_driver wm8350_hwmon_driver = { 92static struct platform_driver wm8350_hwmon_driver = {
128 .probe = wm8350_hwmon_probe, 93 .probe = wm8350_hwmon_probe,
129 .remove = wm8350_hwmon_remove,
130 .driver = { 94 .driver = {
131 .name = "wm8350-hwmon", 95 .name = "wm8350-hwmon",
132 .owner = THIS_MODULE, 96 .owner = THIS_MODULE,
diff --git a/include/linux/platform_data/ntc_thermistor.h b/include/linux/platform_data/ntc_thermistor.h
index c7285b575462..0a6de4ca4930 100644
--- a/include/linux/platform_data/ntc_thermistor.h
+++ b/include/linux/platform_data/ntc_thermistor.h
@@ -26,6 +26,7 @@ struct iio_channel;
26enum ntc_thermistor_type { 26enum ntc_thermistor_type {
27 TYPE_NCPXXWB473, 27 TYPE_NCPXXWB473,
28 TYPE_NCPXXWL333, 28 TYPE_NCPXXWL333,
29 TYPE_B57330V2103,
29}; 30};
30 31
31struct ntc_thermistor_platform_data { 32struct ntc_thermistor_platform_data {