Commit 3d9e3501 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull hwmon updates from Guenter Roeck:

 - Add support for Texas Instruments TMP512/513

 - Add support for LTC2947

 - Add support for BEL PFE1100 and PFE3000

 - Various minor improvements and fixes

* tag 'hwmon-for-v5.5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  dell-smm-hwmon: Add documentation
  hwmon: (dell-smm) Add support for disabling automatic BIOS fan control
  hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.
  dt-bindings: hwmon: Add TMP512/513
  docs: hwmon: Document bel-pfe pmbus driver
  hwmon: (pmbus) add driver for BEL PFE1100 and PFE3000
  dt-bindings: hwmon: Add ltc2947 documentation
  hwmon: Add support for ltc2947
  hwmon: (ina3221) Add summation feature support
  hwmon: (tmp421) Allow reading at 2Hz instead of 0.5Hz
  hwmon: (w83793d) remove redundant assignment to variable res
  hwmon: (pmbus/ibm-cffps) Add version detection capability
  dt-bindings: hwmon: Document ibm,cffps compatible string
  hwmon: abituguru: make array probe_order static, makes object smaller
  hwmon: (applesmc) switch to using input device polling mode
  hwmon: (aspeed-pwm-tacho) Use devm_platform_ioremap_resource() in aspeed_pwm_tacho_probe()
  hwmon: (pmbus/ibm-cffps) Fix LED blink behavior
  hwmon: (pmbus/ibm-cffps) Switch LEDs to blocking brightness call
parents 00074a70 4a1288f1
Loading
Loading
Loading
Loading
+104 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/bindings/hwmon/adi,ltc2947.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Analog Devices LTC2947 high precision power and energy monitor

maintainers:
  - Nuno Sá <nuno.sa@analog.com>

description: |
  Analog Devices LTC2947 high precision power and energy monitor over SPI or I2C.

  https://www.analog.com/media/en/technical-documentation/data-sheets/LTC2947.pdf

properties:
  compatible:
    enum:
      - adi,ltc2947

  reg:
    maxItems: 1

  clocks:
    description:
      The LTC2947 uses either a trimmed internal oscillator or an external clock
      as the time base for determining the integration period to represent time,
      charge and energy. When an external clock is used, this property must be
      set accordingly.
    maxItems: 1

  adi,accumulator-ctl-pol:
    description:
      This property controls the polarity of current that is accumulated to
      calculate charge and energy so that, they can be only accumulated for
      positive current for example. Since there are two sets of registers for
      the accumulated values, this entry can also have two items which sets
      energy1/charge1 and energy2/charger2 respectively. Check table 12 of the
      datasheet for more information on the supported options.
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32-array
      - minItems: 2
        maxItems: 2
        items:
          enum: [0, 1, 2, 3]
          default: 0

  adi,accumulation-deadband-microamp:
    description:
      This property controls the Accumulation Dead band which allows to set the
      level of current below which no accumulation takes place.
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
    maximum: 255
    default: 0

  adi,gpio-out-pol:
    description:
      This property controls the GPIO polarity. Setting it to one makes the GPIO
      active high, setting it to zero makets it active low. When this property
      is present, the GPIO is automatically configured as output and set to
      control a fan as a function of measured temperature.
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
    enum: [0, 1]
    default: 0

  adi,gpio-in-accum:
    description:
      When set, this property sets the GPIO as input. It is then used to control
      the accumulation of charge, energy and time. This function can be
      enabled/configured separately for each of the two sets of accumulation
      registers. Check table 13 of the datasheet for more information on the
      supported options. This property cannot be used together with
      adi,gpio-out-pol.
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32-array
      - minItems: 2
        maxItems: 2
        items:
          enum: [0, 1, 2]
          default: 0

required:
  - compatible
  - reg


examples:
  - |
    spi {
           #address-cells = <1>;
           #size-cells = <0>;

           ltc2947_spi: ltc2947@0 {
                   compatible = "adi,ltc2947";
                   reg = <0>;
                   /* accumulation takes place always for energ1/charge1. */
                   /* accumulation only on positive current for energy2/charge2. */
                   adi,accumulator-ctl-pol = <0 1>;
           };
    };
...
+3 −0
Original line number Diff line number Diff line
@@ -5,6 +5,9 @@ Required properties:
 - compatible				: Must be one of the following:
						"ibm,cffps1"
						"ibm,cffps2"
						or "ibm,cffps" if the system
						must support any version of the
						power supply
 - reg = < I2C bus address >;		: Address of the power supply on the
					  I2C bus.

+93 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---

$id: http://devicetree.org/schemas/hwmon/ti,tmp513.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: TMP513/512 system monitor sensor

maintainers:
  - Eric Tremblay <etremblay@distech-controls.com>

description: |
  The TMP512 (dual-channel) and TMP513 (triple-channel) are system monitors
  that include remote sensors, a local temperature sensor, and a high-side
  current shunt monitor. These system monitors have the capability of measuring
  remote temperatures, on-chip temperatures, and system voltage/power/current
  consumption.

  Datasheets:
  http://www.ti.com/lit/gpn/tmp513
  http://www.ti.com/lit/gpn/tmp512


properties:
  compatible:
    enum:
      - ti,tmp512
      - ti,tmp513

  reg:
    maxItems: 1

  shunt-resistor-micro-ohms:
    description: |
      If 0, the calibration process will be skiped and the current and power
      measurement engine will not work. Temperature and voltage measurement
      will continue to work. The shunt value also need to respect:
      rshunt <= pga-gain * 40 * 1000 * 1000.
      If not, it's not possible to compute a valid calibration value.
    default: 1000

  ti,pga-gain:
    description: |
      The gain value for the PGA function. This is 8, 4, 2 or 1.
      The PGA gain affect the shunt voltage range.
      The range will be equal to: pga-gain * 40mV
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
    enum: [1, 2, 4, 8]
    default: 8

  ti,bus-range-microvolt:
    description: |
      This is the operating range of the bus voltage in microvolt
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
    enum: [16000000, 32000000]
    default: 32000000

  ti,nfactor:
    description: |
      Array of three(TMP513) or two(TMP512) n-Factor value for each remote
      temperature channel.
      See datasheet Table 11 for n-Factor range list and value interpretation.
    allOf:
      - $ref: /schemas/types.yaml#definitions/uint32-array
      - minItems: 2
        maxItems: 3
        items:
          default: 0x00
          minimum: 0x00
          maximum: 0xFF

required:
  - compatible
  - reg

examples:
  - |
    i2c {
          #address-cells = <1>;
          #size-cells = <0>;

          tmp513@5c {
              compatible = "ti,tmp513";
              reg = <0x5C>;
              shunt-resistor-micro-ohms = <330000>;
              ti,bus-range-microvolt = <32000000>;
              ti,pga-gain = <8>;
              ti,nfactor = <0x1 0xF3 0x00>;
          };
    };
+112 −0
Original line number Diff line number Diff line
Kernel driver bel-pfe
======================

Supported chips:

  * BEL PFE1100

    Prefixes: 'pfe1100'

    Addresses scanned: -

    Datasheet: https://www.belfuse.com/resources/datasheets/powersolutions/ds-bps-pfe1100-12-054xa.pdf

  * BEL PFE3000

    Prefixes: 'pfe3000'

    Addresses scanned: -

    Datasheet: https://www.belfuse.com/resources/datasheets/powersolutions/ds-bps-pfe3000-series.pdf

Author: Tao Ren <rentao.bupt@gmail.com>


Description
-----------

This driver supports hardware monitoring for below power supply devices
which support PMBus Protocol:

  * BEL PFE1100

    1100 Watt AC to DC power-factor-corrected (PFC) power supply.
    PMBus Communication Manual is not publicly available.

  * BEL PFE3000

    3000 Watt AC/DC power-factor-corrected (PFC) and DC-DC power supply.
    PMBus Communication Manual is not publicly available.

The driver is a client driver to the core PMBus driver. Please see
Documentation/hwmon/pmbus.rst 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.rst for
details.

Example: the following will load the driver for an PFE3000 at address 0x20
on I2C bus #1::

	$ modprobe bel-pfe
	$ echo pfe3000 0x20 > /sys/bus/i2c/devices/i2c-1/new_device


Platform data support
---------------------

The driver supports standard PMBus driver platform data.


Sysfs entries
-------------

======================= =======================================================
curr1_label		"iin"
curr1_input		Measured input current
curr1_max               Input current max value
curr1_max_alarm         Input current max alarm

curr[2-3]_label		"iout[1-2]"
curr[2-3]_input		Measured output current
curr[2-3]_max           Output current max value
curr[2-3]_max_alarm     Output current max alarm

fan[1-2]_input          Fan 1 and 2 speed in RPM
fan1_target             Set fan speed reference for both fans

in1_label		"vin"
in1_input		Measured input voltage
in1_crit		Input voltage critical max value
in1_crit_alarm		Input voltage critical max alarm
in1_lcrit               Input voltage critical min value
in1_lcrit_alarm         Input voltage critical min alarm
in1_max                 Input voltage max value
in1_max_alarm           Input voltage max alarm

in2_label               "vcap"
in2_input               Hold up capacitor voltage

in[3-8]_label		"vout[1-3,5-7]"
in[3-8]_input		Measured output voltage
in[3-4]_alarm           vout[1-2] output voltage alarm

power[1-2]_label	"pin[1-2]"
power[1-2]_input        Measured input power
power[1-2]_alarm	Input power high alarm

power[3-4]_label	"pout[1-2]"
power[3-4]_input	Measured output power

temp[1-3]_input		Measured temperature
temp[1-3]_alarm         Temperature alarm
======================= =======================================================

.. note::

    - curr3, fan2, vout[2-7], vcap, pin2, pout2 and temp3 attributes only
      exist for PFE3000.
+164 −0
Original line number Diff line number Diff line
.. SPDX-License-Identifier: GPL-2.0-or-later

.. include:: <isonum.txt>

Kernel driver dell-smm-hwmon
============================

:Copyright: |copy| 2002-2005 Massimo Dal Zotto <dz@debian.org>
:Copyright: |copy| 2019 Giovanni Mascellani <gio@debian.org>

Description
-----------

On many Dell laptops the System Management Mode (SMM) BIOS can be
queried for the status of fans and temperature sensors.  Userspace
utilities like ``sensors`` can be used to return the readings. The
userspace suite `i8kutils`__ can also be used to read the sensors and
automatically adjust fan speed (please notice that it currently uses
the deprecated ``/proc/i8k`` interface).

 __ https://github.com/vitorafsr/i8kutils

``sysfs`` interface
-------------------

Temperature sensors and fans can be queried and set via the standard
``hwmon`` interface on ``sysfs``, under the directory
``/sys/class/hwmon/hwmonX`` for some value of ``X`` (search for the
``X`` such that ``/sys/class/hwmon/hwmonX/name`` has content
``dell_smm``). A number of other attributes can be read or written:

=============================== ======= =======================================
Name				Perm	Description
=============================== ======= =======================================
fan[1-3]_input                  RO      Fan speed in RPM.
fan[1-3]_label                  RO      Fan label.
pwm[1-3]                        RW      Control the fan PWM duty-cycle.
pwm1_enable                     WO      Enable or disable automatic BIOS fan
                                        control (not supported on all laptops,
                                        see below for details).
temp[1-10]_input                RO      Temperature reading in milli-degrees
                                        Celsius.
temp[1-10]_label                RO      Temperature sensor label.
=============================== ======= =======================================

Disabling automatic BIOS fan control
------------------------------------

On some laptops the BIOS automatically sets fan speed every few
seconds. Therefore the fan speed set by mean of this driver is quickly
overwritten.

There is experimental support for disabling automatic BIOS fan
control, at least on laptops where the corresponding SMM command is
known, by writing the value ``1`` in the attribute ``pwm1_enable``
(writing ``2`` enables automatic BIOS control again). Even if you have
more than one fan, all of them are set to either enabled or disabled
automatic fan control at the same time and, notwithstanding the name,
``pwm1_enable`` sets automatic control for all fans.

If ``pwm1_enable`` is not available, then it means that SMM codes for
enabling and disabling automatic BIOS fan control are not whitelisted
for your hardware. It is possible that codes that work for other
laptops actually work for yours as well, or that you have to discover
new codes.

Check the list ``i8k_whitelist_fan_control`` in file
``drivers/hwmon/dell-smm-hwmon.c`` in the kernel tree: as a first
attempt you can try to add your machine and use an already-known code
pair. If, after recompiling the kernel, you see that ``pwm1_enable``
is present and works (i.e., you can manually control the fan speed),
then please submit your finding as a kernel patch, so that other users
can benefit from it. Please see
:ref:`Documentation/process/submitting-patches.rst <submittingpatches>`
for information on submitting patches.

If no known code works on your machine, you need to resort to do some
probing, because unfortunately Dell does not publish datasheets for
its SMM. You can experiment with the code in `this repository`__ to
probe the BIOS on your machine and discover the appropriate codes.

 __ https://github.com/clopez/dellfan/

Again, when you find new codes, we'd be happy to have your patches!

Module parameters
-----------------

* force:bool
                   Force loading without checking for supported
                   models. (default: 0)

* ignore_dmi:bool
                   Continue probing hardware even if DMI data does not
                   match. (default: 0)

* restricted:bool
                   Allow fan control only to processes with the
                   ``CAP_SYS_ADMIN`` capability set or processes run
                   as root when using the legacy ``/proc/i8k``
                   interface. In this case normal users will be able
                   to read temperature and fan status but not to
                   control the fan.  If your notebook is shared with
                   other users and you don't trust them you may want
                   to use this option. (default: 1, only available
                   with ``CONFIG_I8K``)

* power_status:bool
                   Report AC status in ``/proc/i8k``. (default: 0,
                   only available with ``CONFIG_I8K``)

* fan_mult:uint
                   Factor to multiply fan speed with. (default:
                   autodetect)

* fan_max:uint
                   Maximum configurable fan speed. (default:
                   autodetect)

Legacy ``/proc`` interface
--------------------------

.. warning:: This interface is obsolete and deprecated and should not
             used in new applications. This interface is only
             available when kernel is compiled with option
             ``CONFIG_I8K``.

The information provided by the kernel driver can be accessed by
simply reading the ``/proc/i8k`` file. For example::

    $ cat /proc/i8k
    1.0 A17 2J59L02 52 2 1 8040 6420 1 2

The fields read from ``/proc/i8k`` are::

    1.0 A17 2J59L02 52 2 1 8040 6420 1 2
    |   |   |       |  | | |    |    | |
    |   |   |       |  | | |    |    | +------- 10. buttons status
    |   |   |       |  | | |    |    +--------- 9.  AC status
    |   |   |       |  | | |    +-------------- 8.  fan0 RPM
    |   |   |       |  | | +------------------- 7.  fan1 RPM
    |   |   |       |  | +--------------------- 6.  fan0 status
    |   |   |       |  +----------------------- 5.  fan1 status
    |   |   |       +-------------------------- 4.  temp0 reading (Celsius)
    |   |   +---------------------------------- 3.  Dell service tag (later known as 'serial number')
    |   +-------------------------------------- 2.  BIOS version
    +------------------------------------------ 1.  /proc/i8k format version

A negative value, for example -22, indicates that the BIOS doesn't
return the corresponding information. This is normal on some
models/BIOSes.

For performance reasons the ``/proc/i8k`` doesn't report by default
the AC status since this SMM call takes a long time to execute and is
not really needed.  If you want to see the ac status in ``/proc/i8k``
you must explictitly enable this option by passing the
``power_status=1`` parameter to insmod. If AC status is not
available -1 is printed instead.

The driver provides also an ioctl interface which can be used to
obtain the same information and to control the fan status. The ioctl
interface can be accessed from C programs or from shell using the
i8kctl utility. See the source file of ``i8kutils`` for more
information on how to use the ioctl interface.
Loading