Commit 22629b6d authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'hwmon-for-linus-v4.3' of...

Merge tag 'hwmon-for-linus-v4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Pull hwmon updates from Guenter Roeck:
 "Notable changes:

   - added support for LTM4675, LTC3886, LTC2980, LTM2987, LTC2975,
     LTC3887, LTC3882, MAX20751, ADM1293, and ADM1294 to PMBus drivers
   - added support for IT8732F to it87 driver
   - added support for AMD Carrizo to fam15h_power driver
   - added support for various new attributes to nct7802 driver
   - added support for F81866 and F71868 to f71882fg driver"

* tag 'hwmon-for-linus-v4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: (45 commits)
  hwmon: (fam15h_power) Add ratio of Tsample to the PTSC period
  hwmon: (fam15h_power) Add documentation for new processors support
  hwmon: (fam15h_power) Update running_avg_capture bit field to 28
  hwmon: (fam15h_power) Rename fam15h_power_is_internal_node0 function
  hwmon: (fam15h_power) Add support for AMD Carrizo
  hwmon: (ltc2978) Add support for LTM4675
  hwmon: (ltc2978) Add polling for chips requiring it
  hwmon: (pmbus) Enable PEC if the controller supports it
  hwmon: (pmbus) Use BIT macro
  hwmon: (ltc2978) Add support for LTC3886
  hwmon: (ltc2978) Add support for LTC2980 and LTM2987
  hwmon: (ltc2978) Add missing chip IDs for LTC2978 and LTC3882
  hwmon: (ltc2978) Use correct ID mask to detect all chips
  hwmon: (ltc2978) Introduce helper functions for min and max values
  hwmon: (ltc2978) Introduce feature flags
  hwmon: (pmbus) Convert command register definitions to enum
  hwmon: (ltc2978) Add support for LTC2975
  hwmon: (ltc2978) Add support for LTC3887
  hwmon: (ltc2978) Add additional chip IDs for LTM4676 and LTM4676A
  hwmon: (ltc2978) Add support for LTC3882
  ...
parents c8192ba4 1ed32160
* LM70/TMP121/LM71/LM74 thermometer.
Required properties:
- compatible: one of
"ti,lm70"
"ti,tmp121"
"ti,lm71"
"ti,lm74"
See Documentation/devicetree/bindings/spi/spi-bus.txt for more required and
optional properties.
Example:
spi_master {
temperature-sensor@0 {
compatible = "ti,lm70";
reg = <0>;
spi-max-frequency = <1000000>;
};
};
...@@ -3,10 +3,16 @@ ltc2978 ...@@ -3,10 +3,16 @@ ltc2978
Required properties: Required properties:
- compatible: should contain one of: - compatible: should contain one of:
* "lltc,ltc2974" * "lltc,ltc2974"
* "lltc,ltc2975"
* "lltc,ltc2977" * "lltc,ltc2977"
* "lltc,ltc2978" * "lltc,ltc2978"
* "lltc,ltc2980"
* "lltc,ltc3880" * "lltc,ltc3880"
* "lltc,ltc3882"
* "lltc,ltc3883" * "lltc,ltc3883"
* "lltc,ltc3886"
* "lltc,ltc3887"
* "lltc,ltm2987"
* "lltc,ltm4676" * "lltc,ltm4676"
- reg: I2C slave address - reg: I2C slave address
...@@ -17,10 +23,10 @@ Optional properties: ...@@ -17,10 +23,10 @@ Optional properties:
standard binding for regulators; see regulator.txt. standard binding for regulators; see regulator.txt.
Valid names of regulators depend on number of supplies supported per device: Valid names of regulators depend on number of supplies supported per device:
* ltc2974 : vout0 - vout3 * ltc2974, ltc2975 : vout0 - vout3
* ltc2977 : vout0 - vout7 * ltc2977, ltc2980, ltm2987 : vout0 - vout7
* ltc2978 : vout0 - vout7 * ltc2978 : vout0 - vout7
* ltc3880 : vout0 - vout1 * ltc3880, ltc3882, ltc3886 : vout0 - vout1
* ltc3883 : vout0 * ltc3883 : vout0
* ltm4676 : vout0 - vout1 * ltm4676 : vout0 - vout1
......
...@@ -14,6 +14,10 @@ Supported chips: ...@@ -14,6 +14,10 @@ Supported chips:
Prefix: 'adm1276' Prefix: 'adm1276'
Addresses scanned: - Addresses scanned: -
Datasheet: www.analog.com/static/imported-files/data_sheets/ADM1276.pdf Datasheet: www.analog.com/static/imported-files/data_sheets/ADM1276.pdf
* Analog Devices ADM1293/ADM1294
Prefix: 'adm1293', 'adm1294'
Addresses scanned: -
Datasheet: http://www.analog.com/media/en/technical-documentation/data-sheets/ADM1293_1294.pdf
Author: Guenter Roeck <linux@roeck-us.net> Author: Guenter Roeck <linux@roeck-us.net>
...@@ -22,12 +26,12 @@ Description ...@@ -22,12 +26,12 @@ Description
----------- -----------
This driver supports hardware montoring for Analog Devices ADM1075, ADM1275, This driver supports hardware montoring for Analog Devices ADM1075, ADM1275,
and ADM1276 Hot-Swap Controller and Digital Power Monitor. ADM1276, ADM1293, and ADM1294 Hot-Swap Controller and Digital Power Monitors.
ADM1075, ADM1275, and ADM1276 are hot-swap controllers that allow a circuit ADM1075, ADM1275, ADM1276, ADM1293, and ADM1294 are hot-swap controllers that
board to be removed from or inserted into a live backplane. They also feature allow a circuit board to be removed from or inserted into a live backplane.
current and voltage readback via an integrated 12-bit analog-to-digital They also feature current and voltage readback via an integrated 12
converter (ADC), accessed using a PMBus interface. bit analog-to-digital converter (ADC), accessed using a PMBus interface.
The driver is a client driver to the core PMBus driver. Please see The driver is a client driver to the core PMBus driver. Please see
Documentation/hwmon/pmbus for details on PMBus client drivers. Documentation/hwmon/pmbus for details on PMBus client drivers.
...@@ -58,16 +62,16 @@ Sysfs entries ...@@ -58,16 +62,16 @@ Sysfs entries
The following attributes are supported. Limits are read-write, history reset The following attributes are supported. Limits are read-write, history reset
attributes are write-only, all other attributes are read-only. attributes are write-only, all other attributes are read-only.
in1_label "vin1" or "vout1" depending on chip variant and inX_label "vin1" or "vout1" depending on chip variant and
configuration. On ADM1075, vout1 reports the voltage on configuration. On ADM1075, ADM1293, and ADM1294,
the VAUX pin. vout1 reports the voltage on the VAUX pin.
in1_input Measured voltage. inX_input Measured voltage.
in1_min Minimum Voltage. inX_min Minimum Voltage.
in1_max Maximum voltage. inX_max Maximum voltage.
in1_min_alarm Voltage low alarm. inX_min_alarm Voltage low alarm.
in1_max_alarm Voltage high alarm. inX_max_alarm Voltage high alarm.
in1_highest Historical maximum voltage. inX_highest Historical maximum voltage.
in1_reset_history Write any value to reset history. inX_reset_history Write any value to reset history.
curr1_label "iout1" curr1_label "iout1"
curr1_input Measured current. curr1_input Measured current.
...@@ -86,7 +90,9 @@ curr1_reset_history Write any value to reset history. ...@@ -86,7 +90,9 @@ curr1_reset_history Write any value to reset history.
power1_label "pin1" power1_label "pin1"
power1_input Input power. power1_input Input power.
power1_input_lowest Lowest observed input power. ADM1293 and ADM1294 only.
power1_input_highest Highest observed input power.
power1_reset_history Write any value to reset history. power1_reset_history Write any value to reset history.
Power attributes are supported on ADM1075 and ADM1276 Power attributes are supported on ADM1075, ADM1276,
only. ADM1293, and ADM1294.
...@@ -3,12 +3,13 @@ Kernel driver fam15h_power ...@@ -3,12 +3,13 @@ Kernel driver fam15h_power
Supported chips: Supported chips:
* AMD Family 15h Processors * AMD Family 15h Processors
* AMD Family 16h Processors
Prefix: 'fam15h_power' Prefix: 'fam15h_power'
Addresses scanned: PCI space Addresses scanned: PCI space
Datasheets: Datasheets:
BIOS and Kernel Developer's Guide (BKDG) For AMD Family 15h Processors BIOS and Kernel Developer's Guide (BKDG) For AMD Family 15h Processors
(not yet published) BIOS and Kernel Developer's Guide (BKDG) For AMD Family 16h Processors
Author: Andreas Herrmann <herrmann.der.user@googlemail.com> Author: Andreas Herrmann <herrmann.der.user@googlemail.com>
...@@ -16,10 +17,11 @@ Description ...@@ -16,10 +17,11 @@ Description
----------- -----------
This driver permits reading of registers providing power information This driver permits reading of registers providing power information
of AMD Family 15h processors. of AMD Family 15h and 16h processors.
For AMD Family 15h processors the following power values can be For AMD Family 15h and 16h processors the following power values can
calculated using different processor northbridge function registers: be calculated using different processor northbridge function
registers:
* BasePwrWatts: Specifies in watts the maximum amount of power * BasePwrWatts: Specifies in watts the maximum amount of power
consumed by the processor for NB and logic external to the core. consumed by the processor for NB and logic external to the core.
......
...@@ -38,6 +38,10 @@ Supported chips: ...@@ -38,6 +38,10 @@ Supported chips:
Prefix: 'it8728' Prefix: 'it8728'
Addresses scanned: from Super I/O config space (8 I/O ports) Addresses scanned: from Super I/O config space (8 I/O ports)
Datasheet: Not publicly available Datasheet: Not publicly available
* IT8732F
Prefix: 'it8732'
Addresses scanned: from Super I/O config space (8 I/O ports)
Datasheet: Not publicly available
* IT8771E * IT8771E
Prefix: 'it8771' Prefix: 'it8771'
Addresses scanned: from Super I/O config space (8 I/O ports) Addresses scanned: from Super I/O config space (8 I/O ports)
...@@ -111,9 +115,9 @@ Description ...@@ -111,9 +115,9 @@ Description
----------- -----------
This driver implements support for the IT8603E, IT8620E, IT8623E, IT8705F, This driver implements support for the IT8603E, IT8620E, IT8623E, IT8705F,
IT8712F, IT8716F, IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E, IT8712F, IT8716F, IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8732F,
IT8771E, IT8772E, IT8781F, IT8782F, IT8783E/F, IT8786E, IT8790E, and SiS950 IT8758E, IT8771E, IT8772E, IT8781F, IT8782F, IT8783E/F, IT8786E, IT8790E, and
chips. SiS950 chips.
These chips are 'Super I/O chips', supporting floppy disks, infrared ports, These chips are 'Super I/O chips', supporting floppy disks, infrared ports,
joysticks and other miscellaneous stuff. For hardware monitoring, they joysticks and other miscellaneous stuff. For hardware monitoring, they
...@@ -137,10 +141,10 @@ The IT8716F, IT8718F, IT8720F, IT8721F/IT8758E and later IT8712F revisions ...@@ -137,10 +141,10 @@ The IT8716F, IT8718F, IT8720F, IT8721F/IT8758E and later IT8712F revisions
have support for 2 additional fans. The additional fans are supported by the have support for 2 additional fans. The additional fans are supported by the
driver. driver.
The IT8716F, IT8718F, IT8720F, IT8721F/IT8758E, IT8781F, IT8782F, IT8783E/F, The IT8716F, IT8718F, IT8720F, IT8721F/IT8758E, IT8732F, IT8781F, IT8782F,
and late IT8712F and IT8705F also have optional 16-bit tachometer counters IT8783E/F, and late IT8712F and IT8705F also have optional 16-bit tachometer
for fans 1 to 3. This is better (no more fan clock divider mess) but not counters for fans 1 to 3. This is better (no more fan clock divider mess) but
compatible with the older chips and revisions. The 16-bit tachometer mode not compatible with the older chips and revisions. The 16-bit tachometer mode
is enabled by the driver when one of the above chips is detected. is enabled by the driver when one of the above chips is detected.
The IT8726F is just bit enhanced IT8716F with additional hardware The IT8726F is just bit enhanced IT8716F with additional hardware
...@@ -159,6 +163,9 @@ IT8728F. It only supports 16-bit fan mode. ...@@ -159,6 +163,9 @@ IT8728F. It only supports 16-bit fan mode.
The IT8790E supports up to 3 fans. 16-bit fan mode is always enabled. The IT8790E supports up to 3 fans. 16-bit fan mode is always enabled.
The IT8732F supports a closed-loop mode for fan control, but this is not
currently implemented by the driver.
Temperatures are measured in degrees Celsius. An alarm is triggered once Temperatures are measured in degrees Celsius. An alarm is triggered once
when the Overtemperature Shutdown limit is crossed. when the Overtemperature Shutdown limit is crossed.
...@@ -173,12 +180,14 @@ is done. ...@@ -173,12 +180,14 @@ is done.
Voltage sensors (also known as IN sensors) report their values in volts. An Voltage sensors (also known as IN sensors) report their values in volts. An
alarm is triggered if the voltage has crossed a programmable minimum or alarm is triggered if the voltage has crossed a programmable minimum or
maximum limit. Note that minimum in this case always means 'closest to maximum limit. Note that minimum in this case always means 'closest to
zero'; this is important for negative voltage measurements. All voltage zero'; this is important for negative voltage measurements. On most chips, all
inputs can measure voltages between 0 and 4.08 volts, with a resolution of voltage inputs can measure voltages between 0 and 4.08 volts, with a resolution
0.016 volt (except IT8603E, IT8721F/IT8758E and IT8728F: 0.012 volt.) The of 0.016 volt. IT8603E, IT8721F/IT8758E and IT8728F can measure between 0 and
battery voltage in8 does not have limit registers. 3.06 volts, with a resolution of 0.012 volt. IT8732F can measure between 0 and
2.8 volts with a resolution of 0.0109 volt. The battery voltage in8 does not
On the IT8603E, IT8721F/IT8758E, IT8781F, IT8782F, and IT8783E/F, some have limit registers.
On the IT8603E, IT8721F/IT8758E, IT8732F, IT8781F, IT8782F, and IT8783E/F, some
voltage inputs are internal and scaled inside the chip: voltage inputs are internal and scaled inside the chip:
* in3 (optional) * in3 (optional)
* in7 (optional for IT8781F, IT8782F, and IT8783E/F) * in7 (optional for IT8781F, IT8782F, and IT8783E/F)
......
...@@ -6,6 +6,10 @@ Supported chips: ...@@ -6,6 +6,10 @@ Supported chips:
Prefix: 'ltc2974' Prefix: 'ltc2974'
Addresses scanned: - Addresses scanned: -
Datasheet: http://www.linear.com/product/ltc2974 Datasheet: http://www.linear.com/product/ltc2974
* Linear Technology LTC2975
Prefix: 'ltc2975'
Addresses scanned: -
Datasheet: http://www.linear.com/product/ltc2975
* Linear Technology LTC2977 * Linear Technology LTC2977
Prefix: 'ltc2977' Prefix: 'ltc2977'
Addresses scanned: - Addresses scanned: -
...@@ -15,14 +19,38 @@ Supported chips: ...@@ -15,14 +19,38 @@ Supported chips:
Addresses scanned: - Addresses scanned: -
Datasheet: http://www.linear.com/product/ltc2978 Datasheet: http://www.linear.com/product/ltc2978
http://www.linear.com/product/ltc2978a http://www.linear.com/product/ltc2978a
* Linear Technology LTC2980
Prefix: 'ltc2980'
Addresses scanned: -
Datasheet: http://www.linear.com/product/ltc2980
* Linear Technology LTC3880 * Linear Technology LTC3880
Prefix: 'ltc3880' Prefix: 'ltc3880'
Addresses scanned: - Addresses scanned: -
Datasheet: http://www.linear.com/product/ltc3880 Datasheet: http://www.linear.com/product/ltc3880
* Linear Technology LTC3882
Prefix: 'ltc3882'
Addresses scanned: -
Datasheet: http://www.linear.com/product/ltc3882
* Linear Technology LTC3883 * Linear Technology LTC3883
Prefix: 'ltc3883' Prefix: 'ltc3883'
Addresses scanned: - Addresses scanned: -
Datasheet: http://www.linear.com/product/ltc3883 Datasheet: http://www.linear.com/product/ltc3883
* Linear Technology LTC3886
Prefix: 'ltc3886'
Addresses scanned: -
Datasheet: http://www.linear.com/product/ltc3886
* Linear Technology LTC3887
Prefix: 'ltc3887'
Addresses scanned: -
Datasheet: http://www.linear.com/product/ltc3887
* Linear Technology LTM2987
Prefix: 'ltm2987'
Addresses scanned: -
Datasheet: http://www.linear.com/product/ltm2987
* Linear Technology LTM4675
Prefix: 'ltm4675'
Addresses scanned: -
Datasheet: http://www.linear.com/product/ltm4675
* Linear Technology LTM4676 * Linear Technology LTM4676
Prefix: 'ltm4676' Prefix: 'ltm4676'
Addresses scanned: - Addresses scanned: -
...@@ -34,11 +62,20 @@ Author: Guenter Roeck <linux@roeck-us.net> ...@@ -34,11 +62,20 @@ Author: Guenter Roeck <linux@roeck-us.net>
Description Description
----------- -----------
LTC2974 is a quad digital power supply manager. LTC2978 is an octal power supply LTC2974 and LTC2975 are quad digital power supply managers.
monitor. LTC2977 is a pin compatible replacement for LTC2978. LTC3880 is a dual LTC2978 is an octal power supply monitor.
output poly-phase step-down DC/DC controller. LTC3883 is a single phase LTC2977 is a pin compatible replacement for LTC2978.
step-down DC/DC controller. LTM4676 is a dual 13A or single 26A uModule LTC2980 is a 16-channel Power System Manager, consisting of two LTC2977
regulator. in a single die. The chip is instantiated and reported as two separate chips
on two different I2C bus addresses.
LTC3880, LTC3882, LTC3886, and LTC3887 are dual output poly-phase step-down
DC/DC controllers.
LTC3883 is a single phase step-down DC/DC controller.
LTM2987 is a 16-channel Power System Manager with two LTC2977 plus
additional components on a single die. The chip is instantiated and reported
as two separate chips on two different I2C bus addresses.
LTM4675 is a dual 9A or single 18A μModule regulator
LTM4676 is a dual 13A or single 26A uModule regulator.
Usage Notes Usage Notes
...@@ -61,26 +98,32 @@ in1_label "vin" ...@@ -61,26 +98,32 @@ in1_label "vin"
in1_input Measured input voltage. in1_input Measured input voltage.
in1_min Minimum input voltage. in1_min Minimum input voltage.
in1_max Maximum input voltage. in1_max Maximum input voltage.
LTC2974, LTC2977, and LTC2978 only. LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
LTM2987 only.
in1_lcrit Critical minimum input voltage. in1_lcrit Critical minimum input voltage.
LTC2974, LTC2977, and LTC2978 only. LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
LTM2987 only.
in1_crit Critical maximum input voltage. in1_crit Critical maximum input voltage.
in1_min_alarm Input voltage low alarm. in1_min_alarm Input voltage low alarm.
in1_max_alarm Input voltage high alarm. in1_max_alarm Input voltage high alarm.
LTC2974, LTC2977, and LTC2978 only. LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
LTM2987 only.
in1_lcrit_alarm Input voltage critical low alarm. in1_lcrit_alarm Input voltage critical low alarm.
LTC2974, LTC2977, and LTC2978 only. LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
LTM2987 only.
in1_crit_alarm Input voltage critical high alarm. in1_crit_alarm Input voltage critical high alarm.
in1_lowest Lowest input voltage. in1_lowest Lowest input voltage.
LTC2974, LTC2977, and LTC2978 only. LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
LTM2987 only.
in1_highest Highest input voltage. in1_highest Highest input voltage.
in1_reset_history Reset input voltage history. in1_reset_history Reset input voltage history.
in[N]_label "vout[1-8]". in[N]_label "vout[1-8]".
LTC2974: N=2-5 LTC2974, LTC2975: N=2-5
LTC2977: N=2-9 LTC2977, LTC2980, LTM2987: N=2-9
LTC2978: N=2-9 LTC2978: N=2-9
LTC3880, LTM4676: N=2-3 LTC3880, LTC3882, LTC23886 LTC3887, LTM4675, LTM4676:
N=2-3
LTC3883: N=2 LTC3883: N=2
in[N]_input Measured output voltage. in[N]_input Measured output voltage.
in[N]_min Minimum output voltage. in[N]_min Minimum output voltage.
...@@ -91,67 +134,78 @@ in[N]_min_alarm Output voltage low alarm. ...@@ -91,67 +134,78 @@ in[N]_min_alarm Output voltage low alarm.
in[N]_max_alarm Output voltage high alarm. in[N]_max_alarm Output voltage high alarm.
in[N]_lcrit_alarm Output voltage critical low alarm. in[N]_lcrit_alarm Output voltage critical low alarm.
in[N]_crit_alarm Output voltage critical high alarm. in[N]_crit_alarm Output voltage critical high alarm.
in[N]_lowest Lowest output voltage. LTC2974 and LTC2978 only. in[N]_lowest Lowest output voltage. LTC2974, LTC2975,
and LTC2978 only.
in[N]_highest Highest output voltage. in[N]_highest Highest output voltage.
in[N]_reset_history Reset output voltage history. in[N]_reset_history Reset output voltage history.
temp[N]_input Measured temperature. temp[N]_input Measured temperature.
On LTC2974, temp[1-4] report external temperatures, On LTC2974 and LTC2975, temp[1-4] report external
and temp5 reports the chip temperature. temperatures, and temp5 reports the chip temperature.
On LTC2977 and LTC2978, only one temperature measurement On LTC2977, LTC2980, LTC2978, and LTM2987, only one
is supported and reports the chip temperature. temperature measurement is supported and reports
On LTC3880 and LTM4676, temp1 and temp2 report external the chip temperature.
temperatures, and temp3 reports the chip temperature. On LTC3880, LTC3882, LTC3887, LTM4675, and LTM4676,
temp1 and temp2 report external temperatures, and temp3
reports the chip temperature.
On LTC3883, temp1 reports an external temperature, On LTC3883, temp1 reports an external temperature,
and temp2 reports the chip temperature. and temp2 reports the chip temperature.
temp[N]_min Mimimum temperature. LTC2974, LCT2977, and LTC2978 only. temp[N]_min Mimimum temperature. LTC2974, LCT2977, LTM2980, LTC2978,
and LTM2987 only.
temp[N]_max Maximum temperature. temp[N]_max Maximum temperature.
temp[N]_lcrit Critical low temperature. temp[N]_lcrit Critical low temperature.
temp[N]_crit Critical high temperature. temp[N]_crit Critical high temperature.
temp[N]_min_alarm Temperature low alarm. temp[N]_min_alarm Temperature low alarm.
LTC2974, LTC2977, and LTC2978 only. LTC2974, LTC2975, LTC2977, LTM2980, LTC2978, and
LTM2987 only.
temp[N]_max_alarm Temperature high alarm. temp[N]_max_alarm Temperature high alarm.
temp[N]_lcrit_alarm Temperature critical low alarm. temp[N]_lcrit_alarm Temperature critical low alarm.
temp[N]_crit_alarm Temperature critical high alarm. temp[N]_crit_alarm Temperature critical high alarm.
temp[N]_lowest Lowest measured temperature. temp[N]_lowest Lowest measured temperature.
LTC2974, LTC2977, and LTC2978 only. LTC2974, LTC2975, LTC2977, LTM2980, LTC2978, and
Not supported for chip temperature sensor on LTC2974. LTM2987 only.
Not supported for chip temperature sensor on LTC2974 and
LTC2975.
temp[N]_highest Highest measured temperature. Not supported for chip temp[N]_highest Highest measured temperature. Not supported for chip
temperature sensor on LTC2974. temperature sensor on LTC2974 and LTC2975.
temp[N]_reset_history Reset temperature history. Not supported for chip temp[N]_reset_history Reset temperature history. Not supported for chip
temperature sensor on LTC2974. temperature sensor on LTC2974 and LTC2975.
power1_label "pin". LTC3883 only. power1_label "pin". LTC3883 and LTC3886 only.
power1_input Measured input power. power1_input Measured input power.
power[N]_label "pout[1-4]". power[N]_label "pout[1-4]".
LTC2974: N=1-4 LTC2974, LTC2975: N=1-4
LTC2977: Not supported LTC2977, LTC2980, LTM2987: Not supported
LTC2978: Not supported LTC2978: Not supported
LTC3880, LTM4676: N=1-2 LTC3880, LTC3882, LTC3886, LTC3887, LTM4675, LTM4676:
N=1-2
LTC3883: N=2 LTC3883: N=2
power[N]_input Measured output power. power[N]_input Measured output power.
curr1_label "iin". LTC3880, LTC3883, and LTM4676 only. curr1_label "iin". LTC3880, LTC3883, LTC3886, LTC3887, LTM4675,
and LTM4676 only.
curr1_input Measured input current. curr1_input Measured input current.
curr1_max Maximum input current. curr1_max Maximum input current.
curr1_max_alarm Input current high alarm. curr1_max_alarm Input current high alarm.
curr1_highest Highest input current. LTC3883 only. curr1_highest Highest input current. LTC3883 and LTC3886 only.
curr1_reset_history Reset input current history. LTC3883 only. curr1_reset_history Reset input current history. LTC3883 and LTC3886 only.
curr[N]_label "iout[1-4]". curr[N]_label "iout[1-4]".
LTC2974: N=1-4 LTC2974, LTC2975: N=1-4
LTC2977: not supported LTC2977, LTC2980, LTM2987: not supported
LTC2978: not supported LTC2978: not supported
LTC3880, LTM4676: N=2-3 LTC3880, LTC3882, LTC3886, LTC3887, LTM4675, LTM4676:
N=2-3
LTC3883: N=2 LTC3883: N=2
curr[N]_input Measured output current. curr[N]_input Measured output current.
curr[N]_max Maximum output current. curr[N]_max Maximum output current.
curr[N]_crit Critical high output current. curr[N]_crit Critical high output current.
curr[N]_lcrit Critical low output current. LTC2974 only. curr[N]_lcrit Critical low output current. LTC2974 and LTC2975 only.
curr[N]_max_alarm Output current high alarm. curr[N]_max_alarm Output current high alarm.
curr[N]_crit_alarm Output current critical high alarm. curr[N]_crit_alarm Output current critical high alarm.
curr[N]_lcrit_alarm Output current critical low alarm. LTC2974 only. curr[N]_lcrit_alarm Output current critical low alarm.
curr[N]_lowest Lowest output current. LTC2974 only. LTC2974 and LTC2975 only.
curr[N]_lowest Lowest output current. LTC2974 and LTC2975 only.
curr[N]_highest Highest output current. curr[N]_highest Highest output current.
curr[N]_reset_history Reset output current history. curr[N]_reset_history Reset output current history.
Kernel driver max20751
======================
Supported chips:
* maxim MAX20751
Prefix: 'max20751'
Addresses scanned: -
Datasheet: http://datasheets.maximintegrated.com/en/ds/MAX20751.pdf
Application note: http://pdfserv.maximintegrated.com/en/an/AN5941.pdf
Author: Guenter Roeck <linux@roeck-us.net>
Description
-----------
This driver supports MAX20751 Multiphase Master with PMBus Interface
and Internal Buck Converter.
The driver is a client driver to the core PMBus driver.
Please see Documentation/hwmon/pmbus for details on PMBus client drivers.
Usage Notes
-----------
This driver does not auto-detect devices. You will have to instantiate the
devices explicitly. Please see Documentation/i2c/instantiating-devices for
details.
Platform data support
---------------------
The driver supports standard PMBus driver platform data.
Sysfs entries
-------------
The following attributes are supported.
in1_label "vin1"
in1_input Measured voltage.
in1_min Minimum input voltage.
in1_max Maximum input voltage.
in1_lcrit Critical minimum input voltage.
in1_crit Critical maximum input voltage.
in1_min_alarm Input voltage low alarm.
in1_lcrit_alarm Input voltage critical low alarm.
in1_min_alarm Input voltage low alarm.
in1_max_alarm Input voltage high alarm.
in2_label "vout1"
in2_input Measured voltage.
in2_min Minimum output voltage.
in2_max Maximum output voltage.
in2_lcrit Critical minimum output voltage.
in2_crit Critical maximum output voltage.
in2_min_alarm Output voltage low alarm.
in2_lcrit_alarm Output voltage critical low alarm.
in2_min_alarm Output voltage low alarm.
in2_max_alarm Output voltage high alarm.
curr1_input Measured output current.
curr1_label "iout1"
curr1_max Maximum output current.
curr1_alarm Current high alarm.
temp1_input Measured temperature.
temp1_max Maximum temperature.
temp1_crit Critical high temperature.
temp1_max_alarm Chip temperature high alarm.
temp1_crit_alarm Chip temperature critical high alarm.
power1_input Output power.
power1_label "pout1"
...@@ -17,8 +17,7 @@ This driver implements support for the Nuvoton NCT7802Y hardware monitoring ...@@ -17,8 +17,7 @@ This driver implements support for the Nuvoton NCT7802Y hardware monitoring
chip. NCT7802Y supports 6 temperature sensors, 5 voltage sensors, and 3 fan chip. NCT7802Y supports 6 temperature sensors, 5 voltage sensors, and 3 fan
speed sensors. speed sensors.
The chip also supports intelligent fan speed control. This functionality is Smart Fan™ speed control is available via pwmX_auto_point attributes.
not currently supported by the driver.
Tested Boards and BIOS Versions Tested Boards and BIOS Versions
------------------------------- -------------------------------
......
...@@ -23,11 +23,15 @@ Supported chips: ...@@ -23,11 +23,15 @@ Supported chips:
http://www.lineagepower.com/oem/pdf/PDT012A0X.pdf http://www.lineagepower.com/oem/pdf/PDT012A0X.pdf
http://www.lineagepower.com/oem/pdf/UDT020A0X.pdf http://www.lineagepower.com/oem/pdf/UDT020A0X.pdf
http://www.lineagepower.com/oem/pdf/MDT040A0X.pdf http://www.lineagepower.com/oem/pdf/MDT040A0X.pdf
* Texas Instruments TPS40400 * Texas Instruments TPS40400, TPS544B20, TPS544B25, TPS544C20, TPS544C25
Prefixes: 'tps40400' Prefixes: 'tps40400', 'tps544b20', 'tps544b25', 'tps544c20', 'tps544c25'
Addresses scanned: - Addresses scanned: -
Datasheets: Datasheets:
http://www.ti.com/lit/gpn/tps40400 http://www.ti.com/lit/gpn/tps40400
http://www.ti.com/lit/gpn/tps544b20
http://www.ti.com/lit/gpn/tps544b25
http://www.ti.com/lit/gpn/tps544c20
http://www.ti.com/lit/gpn/tps544c25
* Generic PMBus devices * Generic PMBus devices
Prefix: 'pmbus' Prefix: 'pmbus'
Addresses scanned: - Addresses scanned: -
......
...@@ -6549,6 +6549,13 @@ S: Maintained ...@@ -6549,6 +6549,13 @@ S: Maintained
F: Documentation/hwmon/max16065 F: Documentation/hwmon/max16065
F: drivers/hwmon/max16065.c F: drivers/hwmon/max16065.c
MAX20751 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net>
L: lm-sensors@lm-sensors.org
S: Maintained
F: Documentation/hwmon/max20751
F: drivers/hwmon/max20751.c
MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
M: "Hans J. Koch" <hjk@hansjkoch.de> M: "Hans J. Koch" <hjk@hansjkoch.de>
L: lm-sensors@lm-sensors.org L: lm-sensors@lm-sensors.org
......
...@@ -609,8 +609,8 @@ config SENSORS_IT87 ...@@ -609,8 +609,8 @@ config SENSORS_IT87
depends on !PPC depends on !PPC
select HWMON_VID select HWMON_VID
help help
If you say yes here you get support for ITE IT8705F, IT8712F, If you say yes here you get support for ITE IT8705F, IT8712F, IT8716F,
IT8716F, IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8758E, IT8718F, IT8720F, IT8721F, IT8726F, IT8728F, IT8732F, IT8758E,
IT8771E, IT8772E, IT8781F, IT8782F, IT8783E/F, IT8786E, IT8790E, IT8771E, IT8772E, IT8781F, IT8782F, IT8783E/F, IT8786E, IT8790E,
IT8603E, IT8620E, and IT8623E sensor chips, and the SiS950 clone. IT8603E, IT8620E, and IT8623E sensor chips, and the SiS950 clone.
......
This diff is collapsed.
...@@ -46,6 +46,7 @@ struct fam15h_power_data { ...@@ -46,6 +46,7 @@ struct fam15h_power_data {
unsigned int tdp_to_watts; unsigned int tdp_to_watts;
unsigned int base_tdp; unsigned int base_tdp;
unsigned int processor_pwr_watts; unsigned int processor_pwr_watts;
unsigned int cpu_pwr_sample_ratio;
}; };
static ssize_t show_power(struct device *dev, static ssize_t show_power(struct device *dev,
...@@ -59,8 +60,19 @@ static ssize_t show_power(struct device *dev, ...@@ -59,8 +60,19 @@ static ssize_t show_power(struct device *dev,
pci_bus_read_config_dword(f4->bus, PCI_DEVFN(PCI_SLOT(f4->devfn), 5), pci_bus_read_config_dword(f4->bus, PCI_DEVFN(PCI_SLOT(f4->devfn), 5),
REG_TDP_RUNNING_AVERAGE, &val); REG_TDP_RUNNING_AVERAGE, &val);
running_avg_capture = (val >> 4) & 0x3fffff;
running_avg_capture = sign_extend32(running_avg_capture, 21); /*
* On Carrizo and later platforms, TdpRunAvgAccCap bit field
* is extended to 4:31 from 4:25.
*/
if (boot_cpu_data.x86 == 0x15 && boot_cpu_data.x86_model >= 0x60) {
running_avg_capture = val >> 4;
running_avg_capture = sign_extend32(running_avg_capture, 27);
} else {
running_avg_capture = (val >> 4) & 0x3fffff;
running_avg_capture = sign_extend32(running_avg_capture, 21);
}
running_avg_range = (val & 0xf) + 1; running_avg_range = (val & 0xf) + 1;
pci_bus_read_config_dword(f4->bus, PCI_DEVFN(PCI_SLOT(f4->devfn), 5), pci_bus_read_config_dword(f4->bus, PCI_DEVFN(PCI_SLOT(f4->devfn), 5),
...@@ -117,7 +129,7 @@ static const struct attribute_group fam15h_power_group = { ...@@ -117,7 +129,7 @@ static const struct attribute_group fam15h_power_group = {
}; };
__ATTRIBUTE_GROUPS(fam15h_power); __ATTRIBUTE_GROUPS(fam15h_power);
static bool fam15h_power_is_internal_node0(struct pci_dev *f4) static bool should_load_on_this_node(struct pci_dev *f4)
{ {
u32 val; u32 val;
...@@ -177,7 +189,7 @@ static int fam15h_power_resume(struct pci_dev *pdev) ...@@ -177,7 +189,7 @@ static int fam15h_power_resume(struct pci_dev *pdev)
static void fam15h_power_init_data(struct pci_dev *f4, static void fam15h_power_init_data(struct pci_dev *f4,
struct fam15h_power_data *data) struct fam15h_power_data *data)
{ {
u32 val; u32 val, eax, ebx, ecx, edx;
u64 tmp; u64 tmp;
pci_read_config_dword(f4, REG_PROCESSOR_TDP, &val); pci_read_config_dword(f4, REG_PROCESSOR_TDP, &val);
...@@ -198,6 +210,19 @@ static void fam15h_power_init_data(struct pci_dev *f4, ...@@ -198,6 +210,19 @@ static void fam15h_power_init_data(struct pci_dev *f4,
/* convert to microWatt */ /* convert to microWatt */
data->processor_pwr_watts = (tmp * 15625) >> 10; data->processor_pwr_watts = (tmp * 15625) >> 10;
cpuid(0x80000007, &eax, &ebx, &ecx, &edx);
/* CPUID Fn8000_0007:EDX[12] indicates to support accumulated power */
if (!(edx & BIT(12)))
return;
/*
* determine the ratio of the compute unit power accumulator
* sample period to the PTSC counter period by executing CPUID
* Fn8000_0007:ECX
*/
data->cpu_pwr_sample_ratio = ecx;
} }
static int fam15h_power_probe(struct pci_dev *pdev, static int fam15h_power_probe(struct pci_dev *pdev,
...@@ -214,7 +239,7 @@ static int fam15h_power_probe(struct pci_dev *pdev, ...@@ -214,7 +239,7 @@ static int fam15h_power_probe(struct pci_dev *pdev,
*/ */
tweak_runavg_range(pdev); tweak_runavg_range(pdev);
if (!fam15h_power_is_internal_node0(pdev)) if (!should_load_on_this_node(pdev))
return -ENODEV; return -ENODEV;
data = devm_kzalloc(dev, sizeof(struct fam15h_power_data), GFP_KERNEL); data = devm_kzalloc(dev, sizeof(struct fam15h_power_data), GFP_KERNEL);
...@@ -233,6 +258,7 @@ static int fam15h_power_probe(struct pci_dev *pdev, ...@@ -233,6 +258,7 @@ static int fam15h_power_probe(struct pci_dev *pdev,
static const struct pci_device_id fam15h_power_id_table[] = { static const struct pci_device_id fam15h_power_id_table[] = {
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F4) }, { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F4) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M30H_NB_F4) }, { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M30H_NB_F4) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M60H_NB_F4) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F4) }, { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F4) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F4) }, { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F4) },
{} {}
......
...@@ -1113,7 +1113,6 @@ static int g762_remove(struct i2c_client *client) ...@@ -1113,7 +1113,6 @@ static int g762_remove(struct i2c_client *client)
static struct i2c_driver g762_driver = { static struct i2c_driver g762_driver = {
.driver = { .driver = {
.name = DRVNAME, .name = DRVNAME,
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(g762_dt_match), .of_match_table = of_match_ptr(g762_dt_match),
}, },
.probe = g762_probe, .probe = g762_probe,
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
* IT8721F Super I/O chip w/LPC interface * IT8721F Super I/O chip w/LPC interface
* IT8726F Super I/O chip w/LPC interface * IT8726F Super I/O chip w/LPC interface
* IT8728F Super I/O chip w/LPC interface * IT8728F Super I/O chip w/LPC interface
* IT8732F Super I/O chip w/LPC interface
* IT8758E Super I/O chip w/LPC interface * IT8758E Super I/O chip w/LPC interface
* IT8771E Super I/O chip w/LPC interface * IT8771E Super I/O chip w/LPC interface
* IT8772E Super I/O chip w/LPC interface * IT8772E Super I/O chip w/LPC interface
...@@ -69,8 +70,9 @@ ...@@ -69,8 +70,9 @@
#define DRVNAME "it87" #define DRVNAME "it87"
enum chips { it87, it8712, it8716, it8718, it8720, it8721, it8728, it8771, enum chips { it87, it8712, it8716, it8718, it8720, it8721, it8728, it8732,
it8772, it8781, it8782, it8783, it8786, it8790, it8603, it8620 }; it8771, it8772, it8781, it8782, it8783, it8786, it8790, it8603,
it8620 };
static unsigned short force_id; static unsigned short force_id;
module_param(force_id, ushort, 0); module_param(force_id, ushort, 0);
...@@ -148,6 +150,7 @@ static inline void superio_exit(void) ...@@ -148,6 +150,7 @@ static inline void superio_exit(void)
#define IT8721F_DEVID 0x8721 #define IT8721F_DEVID 0x8721
#define IT8726F_DEVID 0x8726 #define IT8726F_DEVID 0x8726
#define IT8728F_DEVID 0x8728 #define IT8728F_DEVID 0x8728
#define IT8732F_DEVID 0x8732
#define IT8771E_DEVID 0x8771 #define IT8771E_DEVID 0x8771
#define IT8772E_DEVID 0x8772 #define IT8772E_DEVID 0x8772
#define IT8781F_DEVID 0x8781 #define IT8781F_DEVID 0x8781
...@@ -265,6 +268,7 @@ struct it87_devices { ...@@ -265,6 +268,7 @@ struct it87_devices {
#define FEAT_VID (1 << 9) /* Set if chip supports VID */ #define FEAT_VID (1 << 9) /* Set if chip supports VID */
#define FEAT_IN7_INTERNAL (1 << 10) /* Set if in7 is internal */ #define FEAT_IN7_INTERNAL (1 << 10) /* Set if in7 is internal */
#define FEAT_SIX_FANS (1 << 11) /* Supports six fans */ #define FEAT_SIX_FANS (1 << 11) /* Supports six fans */
#define FEAT_10_9MV_ADC (1 << 12)
static const struct it87_devices it87_devices[] = { static const struct it87_devices it87_devices[] = {
[it87] = { [it87] = {
...@@ -315,6 +319,15 @@ static const struct it87_devices it87_devices[] = { ...@@ -315,6 +319,15 @@ static const struct it87_devices it87_devices[] = {
| FEAT_IN7_INTERNAL, | FEAT_IN7_INTERNAL,
.peci_mask = 0x07, .peci_mask = 0x07,
}, },
[it8732] = {
.name = "it8732",
.suffix = "F",
.features = FEAT_NEWER_AUTOPWM | FEAT_16BIT_FANS
| FEAT_TEMP_OFFSET | FEAT_TEMP_OLD_PECI | FEAT_TEMP_PECI
| FEAT_10_9MV_ADC | FEAT_IN7_INTERNAL,
.peci_mask = 0x07,
.old_peci_mask = 0x02, /* Actually reports PCH */
},
[it8771] = { [it8771] = {
.name = "it8771", .name = "it8771",
.suffix = "E", .suffix = "E",
...@@ -391,6 +404,7 @@ static const struct it87_devices it87_devices[] = { ...@@ -391,6 +404,7 @@ static const struct it87_devices it87_devices[] = {
#define has_16bit_fans(data) ((data)->features & FEAT_16BIT_FANS) #define has_16bit_fans(data) ((data)->features & FEAT_16BIT_FANS)
#define has_12mv_adc(data) ((data)->features & FEAT_12MV_ADC) #define has_12mv_adc(data) ((data)->features & FEAT_12MV_ADC)
#define has_10_9mv_adc(data) ((data)->features & FEAT_10_9MV_ADC)
#define has_newer_autopwm(data) ((data)->features & FEAT_NEWER_AUTOPWM) #define has_newer_autopwm(data) ((data)->features & FEAT_NEWER_AUTOPWM)
#define has_old_autopwm(data) ((data)->features & FEAT_OLD_AUTOPWM) #define has_old_autopwm(data) ((data)->features & FEAT_OLD_AUTOPWM)
#define has_temp_offset(data) ((data)->features & FEAT_TEMP_OFFSET) #define has_temp_offset(data) ((data)->features & FEAT_TEMP_OFFSET)
...@@ -475,7 +489,14 @@ struct it87_data { ...@@ -475,7 +489,14 @@ struct it87_data {
static int adc_lsb(const struct it87_data *data, int nr) static int adc_lsb(const struct it87_data *data, int nr)
{ {
int lsb = has_12mv_adc(data) ? 12 : 16; int lsb;
if (has_12mv_adc(data))
lsb = 120;
else if (has_10_9mv_adc(data))
lsb = 109;
else
lsb = 160;
if (data->in_scaled & (1 << nr)) if (data->in_scaled & (1 << nr))
lsb <<= 1; lsb <<= 1;
return lsb; return lsb;
...@@ -483,13 +504,13 @@ static int adc_lsb(const struct it87_data *data, int nr) ...@@ -483,13 +504,13 @@ static int adc_lsb(const struct it87_data *data, int nr)
static u8 in_to_reg(const struct it87_data *data, int nr, long val) static u8 in_to_reg(const struct it87_data *data, int nr, long val)
{ {
val = DIV_ROUND_CLOSEST(val, adc_lsb(data, nr)); val = DIV_ROUND_CLOSEST(val * 10, adc_lsb(data, nr));
return clamp_val(val, 0, 255); return clamp_val(val, 0, 255);
} }
static int in_from_reg(const struct it87_data *data, int nr, int val) static int in_from_reg(const struct it87_data *data, int nr, int val)
{ {
return val * adc_lsb(data, nr); return DIV_ROUND_CLOSEST(val * adc_lsb(data, nr), 10);
} }
static inline u8 FAN_TO_REG(long rpm, int div) static inline u8 FAN_TO_REG(long rpm, int div)
...@@ -1515,9 +1536,14 @@ static ssize_t show_label(struct device *dev, struct device_attribute *attr, ...@@ -1515,9 +1536,14 @@ static ssize_t show_label(struct device *dev, struct device_attribute *attr,
}; };
struct it87_data *data = dev_get_drvdata(dev); struct it87_data *data = dev_get_drvdata(dev);
int nr = to_sensor_dev_attr(attr)->index; int nr = to_sensor_dev_attr(attr)->index;
const char *label;
return sprintf(buf, "%s\n", has_12mv_adc(data) ? labels_it8721[nr] if (has_12mv_adc(data) || has_10_9mv_adc(data))
: labels[nr]); label = labels_it8721[nr];
else
label = labels[nr];
return sprintf(buf, "%s\n", label);
} }
static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_label, NULL, 0); static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_label, NULL, 0);
static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_label, NULL, 1); static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_label, NULL, 1);
...@@ -1853,6 +1879,9 @@ static int __init it87_find(unsigned short *address, ...@@ -1853,6 +1879,9 @@ static int __init it87_find(unsigned short *address,
case IT8728F_DEVID: case IT8728F_DEVID:
sio_data->type = it8728; sio_data->type = it8728;
break; break;
case IT8732F_DEVID:
sio_data->type = it8732;
break;
case IT8771E_DEVID: case IT8771E_DEVID:
sio_data->type = it8771; sio_data->type = it8771;
break; break;
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include <linux/mod_devicetable.h> #include <linux/mod_devicetable.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/of_device.h>
#define DRVNAME "lm70" #define DRVNAME "lm70"
...@@ -130,11 +131,41 @@ ATTRIBUTE_GROUPS(lm70); ...@@ -130,11 +131,41 @@ ATTRIBUTE_GROUPS(lm70);
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
#ifdef CONFIG_OF
static const struct of_device_id lm70_of_ids[] = {
{
.compatible = "ti,lm70",
.data = (void *) LM70_CHIP_LM70,
},
{
.compatible = "ti,tmp121",
.data = (void *) LM70_CHIP_TMP121,
},
{
.compatible = "ti,lm71",
.data = (void *) LM70_CHIP_LM71,
},
{
.compatible = "ti,lm74",
.data = (void *) LM70_CHIP_LM74,
},
{},
};
MODULE_DEVICE_TABLE(of, lm70_of_ids);
#endif
static int lm70_probe(struct spi_device *spi) static int lm70_probe(struct spi_device *spi)
{ {
int chip = spi_get_device_id(spi)->driver_data; const struct of_device_id *match;
struct device *hwmon_dev; struct device *hwmon_dev;
struct lm70 *p_lm70; struct lm70 *p_lm70;
int chip;
match = of_match_device(lm70_of_ids, &spi->dev);
if (match)
chip = (int)(uintptr_t)match->data;
else
chip = spi_get_device_id(spi)->driver_data;
/* signaling is SPI_MODE_0 */ /* signaling is SPI_MODE_0 */
if (spi->mode & (SPI_CPOL | SPI_CPHA)) if (spi->mode & (SPI_CPOL | SPI_CPHA))
...@@ -169,6 +200,7 @@ static struct spi_driver lm70_driver = { ...@@ -169,6 +200,7 @@ static struct spi_driver lm70_driver = {
.driver = { .driver = {
.name = "lm70", .name = "lm70",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.of_match_table = of_match_ptr(lm70_of_ids),
}, },
.id_table = lm70_ids, .id_table = lm70_ids,
.probe = lm70_probe, .probe = lm70_probe,
......
This diff is collapsed.
...@@ -20,7 +20,8 @@ config SENSORS_PMBUS ...@@ -20,7 +20,8 @@ config SENSORS_PMBUS
help help
If you say yes here you get hardware monitoring support for generic If you say yes here you get hardware monitoring support for generic
PMBus devices, including but not limited to ADP4000, BMR453, BMR454, PMBus devices, including but not limited to ADP4000, BMR453, BMR454,
MDT040, NCP4200, NCP4208, PDT003, PDT006, PDT012, UDT020, and TPS40400. MDT040, NCP4200, NCP4208, PDT003, PDT006, PDT012, TPS40400, TPS544B20,
TPS544B25, TPS544C20, TPS544C25, and UDT020.
This driver can also be built as a module. If so, the module will This driver can also be built as a module. If so, the module will
be called pmbus. be called pmbus.
...@@ -30,8 +31,8 @@ config SENSORS_ADM1275 ...@@ -30,8 +31,8 @@ config SENSORS_ADM1275
default n default n
help help
If you say yes here you get hardware monitoring support for Analog If you say yes here you get hardware monitoring support for Analog
Devices ADM1075, ADM1275, and ADM1276 Hot-Swap Controller and Digital Devices ADM1075, ADM1275, ADM1276, ADM1293, and ADM1294 Hot-Swap
Power Monitors. Controller and Digital Power Monitors.
This driver can also be built as a module. If so, the module will This driver can also be built as a module. If so, the module will
be called adm1275. be called adm1275.
...@@ -51,7 +52,8 @@ config SENSORS_LTC2978 ...@@ -51,7 +52,8 @@ config SENSORS_LTC2978
default n default n
help help
If you say yes here you get hardware monitoring support for Linear If you say yes here you get hardware monitoring support for Linear
Technology LTC2974, LTC2977, LTC2978, LTC3880, LTC3883, and LTM4676. Technology LTC2974, LTC2975, LTC2977, LTC2978, LTC2980, LTC3880,
LTC3883, LTC3886, LTC3887, LTCM2987, LTM4675, and LTM4676.
This driver can also be built as a module. If so, the module will This driver can also be built as a module. If so, the module will
be called ltc2978. be called ltc2978.
...@@ -73,6 +75,16 @@ config SENSORS_MAX16064 ...@@ -73,6 +75,16 @@ config SENSORS_MAX16064
This driver can also be built as a module. If so, the module will This driver can also be built as a module. If so, the module will
be called max16064. be called max16064.
config SENSORS_MAX20751
tristate "Maxim MAX20751"
default n
help
If you say yes here you get hardware monitoring support for Maxim
MAX20751.
This driver can also be built as a module. If so, the module will
be called max20751.
config SENSORS_MAX34440 config SENSORS_MAX34440
tristate "Maxim MAX34440 and compatibles" tristate "Maxim MAX34440 and compatibles"
default n default n
......
...@@ -8,6 +8,7 @@ obj-$(CONFIG_SENSORS_ADM1275) += adm1275.o ...@@ -8,6 +8,7 @@ obj-$(CONFIG_SENSORS_ADM1275) += adm1275.o
obj-$(CONFIG_SENSORS_LM25066) += lm25066.o obj-$(CONFIG_SENSORS_LM25066) += lm25066.o
obj-$(CONFIG_SENSORS_LTC2978) += ltc2978.o obj-$(CONFIG_SENSORS_LTC2978) += ltc2978.o
obj-$(CONFIG_SENSORS_MAX16064) += max16064.o obj-$(CONFIG_SENSORS_MAX16064) += max16064.o
obj-$(CONFIG_SENSORS_MAX20751) += max20751.o
obj-$(CONFIG_SENSORS_MAX34440) += max34440.o obj-$(CONFIG_SENSORS_MAX34440) += max34440.o
obj-$(CONFIG_SENSORS_MAX8688) += max8688.o obj-$(CONFIG_SENSORS_MAX8688) += max8688.o
obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o
......
This diff is collapsed.
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/bitops.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -42,15 +43,15 @@ enum chips { lm25056, lm25063, lm25066, lm5064, lm5066 }; ...@@ -42,15 +43,15 @@ enum chips { lm25056, lm25063, lm25066, lm5064, lm5066 };
#define LM25066_READ_AVG_IIN 0xde #define LM25066_READ_AVG_IIN 0xde
#define LM25066_READ_AVG_PIN 0xdf #define LM25066_READ_AVG_PIN 0xdf
#define LM25066_DEV_SETUP_CL (1 << 4) /* Current limit */ #define LM25066_DEV_SETUP_CL BIT(4) /* Current limit */
/* LM25056 only */ /* LM25056 only */
#define LM25056_VAUX_OV_WARN_LIMIT 0xe3 #define LM25056_VAUX_OV_WARN_LIMIT 0xe3
#define LM25056_VAUX_UV_WARN_LIMIT 0xe4 #define LM25056_VAUX_UV_WARN_LIMIT 0xe4
#define LM25056_MFR_STS_VAUX_OV_WARN (1 << 1) #define LM25056_MFR_STS_VAUX_OV_WARN BIT(1)
#define LM25056_MFR_STS_VAUX_UV_WARN (1 << 0) #define LM25056_MFR_STS_VAUX_UV_WARN BIT(0)
/* LM25063 only */ /* LM25063 only */
......
This diff is collapsed.
/*
* Hardware monitoring driver for Maxim MAX20751
*
* Copyright (c) 2015 Guenter Roeck
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/err.h>
#include <linux/i2c.h>
#include "pmbus.h"
static struct pmbus_driver_info max20751_info = {
.pages = 1,
.format[PSC_VOLTAGE_IN] = linear,
.format[PSC_VOLTAGE_OUT] = vid,
.vrm_version = vr12,
.format[PSC_TEMPERATURE] = linear,
.format[PSC_CURRENT_OUT] = linear,
.format[PSC_POWER] = linear,
.func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT |
PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT |
PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP |
PMBUS_HAVE_POUT,
};
static int max20751_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
return pmbus_do_probe(client, id, &max20751_info);
}
static const struct i2c_device_id max20751_id[] = {
{"max20751", 0},
{}
};
MODULE_DEVICE_TABLE(i2c, max20751_id);
static struct i2c_driver max20751_driver = {
.driver = {
.name = "max20751",
},
.probe = max20751_probe,
.remove = pmbus_do_remove,
.id_table = max20751_id,
};
module_i2c_driver(max20751_driver);
MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");
MODULE_DESCRIPTION("PMBus driver for Maxim MAX20751");
MODULE_LICENSE("GPL");
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/bitops.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -38,10 +39,10 @@ enum chips { max34440, max34441, max34446, max34460, max34461 }; ...@@ -38,10 +39,10 @@ enum chips { max34440, max34441, max34446, max34460, max34461 };
#define MAX34446_MFR_IOUT_AVG 0xe2 #define MAX34446_MFR_IOUT_AVG 0xe2
#define MAX34446_MFR_TEMPERATURE_AVG 0xe3 #define MAX34446_MFR_TEMPERATURE_AVG 0xe3
#define MAX34440_STATUS_OC_WARN (1 << 0) #define MAX34440_STATUS_OC_WARN BIT(0)
#define MAX34440_STATUS_OC_FAULT (1 << 1) #define MAX34440_STATUS_OC_FAULT BIT(1)
#define MAX34440_STATUS_OT_FAULT (1 << 5) #define MAX34440_STATUS_OT_FAULT BIT(5)
#define MAX34440_STATUS_OT_WARN (1 << 6) #define MAX34440_STATUS_OT_WARN BIT(6)
struct max34440_data { struct max34440_data {
int id; int id;
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/bitops.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -30,15 +31,15 @@ ...@@ -30,15 +31,15 @@
#define MAX8688_MFR_TEMPERATURE_PEAK 0xd6 #define MAX8688_MFR_TEMPERATURE_PEAK 0xd6
#define MAX8688_MFG_STATUS 0xd8 #define MAX8688_MFG_STATUS 0xd8
#define MAX8688_STATUS_OC_FAULT (1 << 4) #define MAX8688_STATUS_OC_FAULT BIT(4)
#define MAX8688_STATUS_OV_FAULT (1 << 5) #define MAX8688_STATUS_OV_FAULT BIT(5)
#define MAX8688_STATUS_OV_WARNING (1 << 8) #define MAX8688_STATUS_OV_WARNING BIT(8)
#define MAX8688_STATUS_UV_FAULT (1 << 9) #define MAX8688_STATUS_UV_FAULT BIT(9)
#define MAX8688_STATUS_UV_WARNING (1 << 10) #define MAX8688_STATUS_UV_WARNING BIT(10)
#define MAX8688_STATUS_UC_FAULT (1 << 11) #define MAX8688_STATUS_UC_FAULT BIT(11)
#define MAX8688_STATUS_OC_WARNING (1 << 12) #define MAX8688_STATUS_OC_WARNING BIT(12)
#define MAX8688_STATUS_OT_FAULT (1 << 13) #define MAX8688_STATUS_OT_FAULT BIT(13)
#define MAX8688_STATUS_OT_WARNING (1 << 14) #define MAX8688_STATUS_OT_WARNING BIT(14)
static int max8688_read_word_data(struct i2c_client *client, int page, int reg) static int max8688_read_word_data(struct i2c_client *client, int page, int reg)
{ {
......
...@@ -129,6 +129,7 @@ static int pmbus_identify(struct i2c_client *client, ...@@ -129,6 +129,7 @@ static int pmbus_identify(struct i2c_client *client,
break; break;
case 1: case 1:
info->format[PSC_VOLTAGE_OUT] = vid; info->format[PSC_VOLTAGE_OUT] = vid;
info->vrm_version = vr11;
break; break;
case 2: case 2:
info->format[PSC_VOLTAGE_OUT] = direct; info->format[PSC_VOLTAGE_OUT] = direct;
...@@ -193,6 +194,10 @@ static const struct i2c_device_id pmbus_id[] = { ...@@ -193,6 +194,10 @@ static const struct i2c_device_id pmbus_id[] = {
{"pdt012", 1}, {"pdt012", 1},
{"pmbus", 0}, {"pmbus", 0},
{"tps40400", 1}, {"tps40400", 1},
{"tps544b20", 1},
{"tps544b25", 1},
{"tps544c20", 1},
{"tps544c25", 1},
{"udt020", 1}, {"udt020", 1},
{} {}
}; };
......
This diff is collapsed.
...@@ -515,16 +515,24 @@ static long pmbus_reg2data_direct(struct pmbus_data *data, ...@@ -515,16 +515,24 @@ static long pmbus_reg2data_direct(struct pmbus_data *data,
/* /*
* Convert VID sensor values to milli- or micro-units * Convert VID sensor values to milli- or micro-units
* depending on sensor type. * depending on sensor type.
* We currently only support VR11.
*/ */
static long pmbus_reg2data_vid(struct pmbus_data *data, static long pmbus_reg2data_vid(struct pmbus_data *data,
struct pmbus_sensor *sensor) struct pmbus_sensor *sensor)
{ {
long val = sensor->data; long val = sensor->data;
long rv = 0;
if (val < 0x02 || val > 0xb2) switch (data->info->vrm_version) {
return 0; case vr11:
return DIV_ROUND_CLOSEST(160000 - (val - 2) * 625, 100); if (val >= 0x02 && val <= 0xb2)
rv = DIV_ROUND_CLOSEST(160000 - (val - 2) * 625, 100);
break;
case vr12:
if (val >= 0x01)
rv = 250 + (val - 1) * 5;
break;
}
return rv;
} }
static long pmbus_reg2data(struct pmbus_data *data, struct pmbus_sensor *sensor) static long pmbus_reg2data(struct pmbus_data *data, struct pmbus_sensor *sensor)
...@@ -1328,6 +1336,10 @@ static const struct pmbus_limit_attr pin_limit_attrs[] = { ...@@ -1328,6 +1336,10 @@ static const struct pmbus_limit_attr pin_limit_attrs[] = {
.reg = PMBUS_VIRT_READ_PIN_AVG, .reg = PMBUS_VIRT_READ_PIN_AVG,
.update = true, .update = true,
.attr = "average", .attr = "average",
}, {
.reg = PMBUS_VIRT_READ_PIN_MIN,
.update = true,
.attr = "input_lowest",
}, { }, {
.reg = PMBUS_VIRT_READ_PIN_MAX, .reg = PMBUS_VIRT_READ_PIN_MAX,
.update = true, .update = true,
...@@ -1358,6 +1370,10 @@ static const struct pmbus_limit_attr pout_limit_attrs[] = { ...@@ -1358,6 +1370,10 @@ static const struct pmbus_limit_attr pout_limit_attrs[] = {
.reg = PMBUS_VIRT_READ_POUT_AVG, .reg = PMBUS_VIRT_READ_POUT_AVG,
.update = true, .update = true,
.attr = "average", .attr = "average",
}, {
.reg = PMBUS_VIRT_READ_POUT_MIN,
.update = true,
.attr = "input_lowest",
}, { }, {
.reg = PMBUS_VIRT_READ_POUT_MAX, .reg = PMBUS_VIRT_READ_POUT_MAX,
.update = true, .update = true,
...@@ -1735,6 +1751,11 @@ static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data, ...@@ -1735,6 +1751,11 @@ static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data,
} }
} }
/* Enable PEC if the controller supports it */
ret = i2c_smbus_read_byte_data(client, PMBUS_CAPABILITY);
if (ret >= 0 && (ret & PB_CAPABILITY_ERROR_CHECK))
client->flags |= I2C_CLIENT_PEC;
pmbus_clear_faults(client); pmbus_clear_faults(client);
if (info->identify) { if (info->identify) {
...@@ -1796,7 +1817,7 @@ static int pmbus_regulator_disable(struct regulator_dev *rdev) ...@@ -1796,7 +1817,7 @@ static int pmbus_regulator_disable(struct regulator_dev *rdev)
return _pmbus_regulator_on_off(rdev, 0); return _pmbus_regulator_on_off(rdev, 0);
} }
struct regulator_ops pmbus_regulator_ops = { const struct regulator_ops pmbus_regulator_ops = {
.enable = pmbus_regulator_enable, .enable = pmbus_regulator_enable,
.disable = pmbus_regulator_disable, .disable = pmbus_regulator_disable,
.is_enabled = pmbus_regulator_is_enabled, .is_enabled = pmbus_regulator_is_enabled,
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <linux/bitops.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -44,16 +45,16 @@ struct zl6100_data { ...@@ -44,16 +45,16 @@ struct zl6100_data {
#define ZL6100_MFR_CONFIG 0xd0 #define ZL6100_MFR_CONFIG 0xd0
#define ZL6100_DEVICE_ID 0xe4 #define ZL6100_DEVICE_ID 0xe4
#define ZL6100_MFR_XTEMP_ENABLE (1 << 7) #define ZL6100_MFR_XTEMP_ENABLE BIT(7)
#define MFR_VMON_OV_FAULT_LIMIT 0xf5 #define MFR_VMON_OV_FAULT_LIMIT 0xf5
#define MFR_VMON_UV_FAULT_LIMIT 0xf6 #define MFR_VMON_UV_FAULT_LIMIT 0xf6
#define MFR_READ_VMON 0xf7 #define MFR_READ_VMON 0xf7
#define VMON_UV_WARNING (1 << 5) #define VMON_UV_WARNING BIT(5)
#define VMON_OV_WARNING (1 << 4) #define VMON_OV_WARNING BIT(4)
#define VMON_UV_FAULT (1 << 1) #define VMON_UV_FAULT BIT(1)
#define VMON_OV_FAULT (1 << 0) #define VMON_OV_FAULT BIT(0)
#define ZL6100_WAIT_TIME 1000 /* uS */ #define ZL6100_WAIT_TIME 1000 /* uS */
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <linux/regulator/consumer.h> #include <linux/regulator/consumer.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/bitrev.h>
/* Commands */ /* Commands */
#define SHT15_MEASURE_TEMP 0x03 #define SHT15_MEASURE_TEMP 0x03
...@@ -172,19 +173,6 @@ struct sht15_data { ...@@ -172,19 +173,6 @@ struct sht15_data {
atomic_t interrupt_handled; atomic_t interrupt_handled;
}; };
/**
* sht15_reverse() - reverse a byte
* @byte: byte to reverse.
*/
static u8 sht15_reverse(u8 byte)
{
u8 i, c;
for (c = 0, i = 0; i < 8; i++)
c |= (!!(byte & (1 << i))) << (7 - i);
return c;
}
/** /**
* sht15_crc8() - compute crc8 * sht15_crc8() - compute crc8
* @data: sht15 specific data. * @data: sht15 specific data.
...@@ -196,7 +184,7 @@ static u8 sht15_crc8(struct sht15_data *data, ...@@ -196,7 +184,7 @@ static u8 sht15_crc8(struct sht15_data *data,
const u8 *value, const u8 *value,
int len) int len)
{ {
u8 crc = sht15_reverse(data->val_status & 0x0F); u8 crc = bitrev8(data->val_status & 0x0F);
while (len--) { while (len--) {
crc = sht15_crc8_table[*value ^ crc]; crc = sht15_crc8_table[*value ^ crc];
...@@ -477,7 +465,7 @@ static int sht15_update_status(struct sht15_data *data) ...@@ -477,7 +465,7 @@ static int sht15_update_status(struct sht15_data *data)
if (data->checksumming) { if (data->checksumming) {
sht15_ack(data); sht15_ack(data);
dev_checksum = sht15_reverse(sht15_read_byte(data)); dev_checksum = bitrev8(sht15_read_byte(data));
checksum_vals[0] = SHT15_READ_STATUS; checksum_vals[0] = SHT15_READ_STATUS;
checksum_vals[1] = status; checksum_vals[1] = status;
data->checksum_ok = (sht15_crc8(data, checksum_vals, 2) data->checksum_ok = (sht15_crc8(data, checksum_vals, 2)
...@@ -864,7 +852,7 @@ static void sht15_bh_read_data(struct work_struct *work_s) ...@@ -864,7 +852,7 @@ static void sht15_bh_read_data(struct work_struct *work_s)
*/ */
if (sht15_ack(data)) if (sht15_ack(data))
goto wakeup; goto wakeup;
dev_checksum = sht15_reverse(sht15_read_byte(data)); dev_checksum = bitrev8(sht15_read_byte(data));
checksum_vals[0] = (data->state == SHT15_READING_TEMP) ? checksum_vals[0] = (data->state == SHT15_READING_TEMP) ?
SHT15_MEASURE_TEMP : SHT15_MEASURE_RH; SHT15_MEASURE_TEMP : SHT15_MEASURE_RH;
checksum_vals[1] = (u8) (val >> 8); checksum_vals[1] = (u8) (val >> 8);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment