Commit 46576fa3 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull hwmon updates from Guenter Roeck:
 "New drivers:
   - Lenovo Yoga/Legion fan monitoring (yogafan)
   - LattePanda Sigma EC
   - Infineon XDP720 eFuse
   - Microchip MCP998X

  New device support:
   - TI INA234
   - Infineon XDPE1A2G5B/7B
   - Renesas RAA228942 and RAA228943 (isl68137)
   - Delta Q54SN120A1 and Q54SW120A7 (pmbus)
   - TI TMP110 and TMP113 (tmp102)
   - Sony APS-379 (pmbus)
   - ITE IT8689E (it87)
   - ASUS ROG STRIX Z790-H, X470-F, and CROSSHAIR X670E (asus-ec-sensors)
   - GPD Win 5 (gpd-fan)

  Modernization and Cleanups:
   - Convert asus_atk0110 and acpi_power_meter ACPI drivers to platform
     drivers
   - Remove i2c_match_id() usage in many PMBus drivers
   - Use guard() for mutex protection in pmbus_core
   - Replace sprintf() with sysfs_emit() in ads7871, emc1403, max6650,
     ads7828, max31722, and tc74
   - Various markup and documentation improvements for yogafan and
     ltc4282

  Bug fixes:
   - Fix use-after-free and missing usb_kill_urb on disconnect in powerz
     driver
   - Avoid cacheline sharing for DMA buffer in powerz driver
   - Fix integer overflow in power calculation on 32-bit in isl28022
     driver
   - Fix bugs in pt5161l_read_block_data()
   - Propagate SPI errors and fix incorrect error codes in ads7871
     driver
   - Fix i2c_smbus_write_byte_data wrapper argument type in max31785
     driver

  Device tree bindings:
   - Convert npcm750-pwm-fan to DT schema
   - Add bindings for Infineon XDP720, Microchip MCP998X, Sony APS-379,
     Renesas RAA228942/3, Delta Q54SN120A1/7, XDPE1A2G5B/7B, Aosong
     AHT10/20, DHT20, and TI INA234
   - Adapt moortec,mr75203 bindings for T-Head TH1520"

* tag 'hwmon-for-v7.1' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: (82 commits)
  hwmon: (ina233) Don't check for specific errors when parsing properties
  hwmon: (isl28022) Don't check for specific errors when parsing properties
  hwmon: (pmbus/tps25990) Don't check for specific errors when parsing properties
  hwmon: (nct6683) Add customer ID for ASRock B650I Lightning WiFi
  hwmon:(pmbus/xdp720) Add support for efuse xdp720
  dt-bindings: hwmon/pmbus: Add Infineon XDP720
  hwmon: add support for MCP998X
  dt-bindings: hwmon: add support for MCP998X
  hwmon: (powerz) Avoid cacheline sharing for DMA buffer
  hwmon: (isl28022) Fix integer overflow in power calculation on 32-bit
  hwmon: (pt5161l) Fix bugs in pt5161l_read_block_data()
  hwmon: (powerz) Fix missing usb_kill_urb() on signal interrupt
  hwmon: (powerz) Fix use-after-free on USB disconnect
  hwmon: pmbus: Add support for Sony APS-379
  dt-bindings: trivial-devices: Add sony,aps-379
  hwmon: (yogafan) various markup improvements
  hwmon: (sparx5) Make it selectable for ARCH_LAN969X
  hwmon: (tmp102) add support for update interval
  hwmon: (yogafan) fix markup warning
  hwmon: (yogafan) Add support for Lenovo Yoga/Legion fan monitoring
  ...
parents 405f6584 fb447217
Loading
Loading
Loading
Loading
+0 −105
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright (C) 2020 BAIKAL ELECTRONICS, JSC
%YAML 1.2
---
$id: http://devicetree.org/schemas/hwmon/baikal,bt1-pvt.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Baikal-T1 PVT Sensor

maintainers:
  - Serge Semin <fancer.lancer@gmail.com>

description: |
  Baikal-T1 SoC provides an embedded process, voltage and temperature
  sensor to monitor an internal SoC environment (chip temperature, supply
  voltage and process monitor) and on time detect critical situations,
  which may cause the system instability and even damages. The IP-block
  is based on the Analog Bits PVT sensor, but is equipped with a dedicated
  control wrapper, which provides a MMIO registers-based access to the
  sensor core functionality (APB3-bus based) and exposes an additional
  functions like thresholds/data ready interrupts, its status and masks,
  measurements timeout. Its internal structure is depicted on the next
  diagram:

     Analog Bits core                     Bakal-T1 PVT control block
  +--------------------+                  +------------------------+
  | Temperature sensor |-+         +------| Sensors control        |
  |--------------------| |<---En---|      |------------------------|
  | Voltage sensor     |-|<--Mode--| +--->| Sampled data           |
  |--------------------| |<--Trim--+ |    |------------------------|
  | Low-Vt sensor      |-|           | +--| Thresholds comparator  |
  |--------------------| |---Data----| |  |------------------------|
  | High-Vt sensor     |-|           | +->| Interrupts status      |
  |--------------------| |--Valid--+-+ |  |------------------------|
  | Standard-Vt sensor |-+         +---+--| Interrupts mask        |
  +--------------------+                  |------------------------|
           ^                              | Interrupts timeout     |
           |                              +------------------------+
           |                                        ^  ^
  Rclk-----+----------------------------------------+  |
  APB3-------------------------------------------------+

  This bindings describes the external Baikal-T1 PVT control interfaces
  like MMIO registers space, interrupt request number and clocks source.
  These are then used by the corresponding hwmon device driver to
  implement the sysfs files-based access to the sensors functionality.

properties:
  compatible:
    const: baikal,bt1-pvt

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    items:
      - description: PVT reference clock
      - description: APB3 interface clock

  clock-names:
    items:
      - const: ref
      - const: pclk

  "#thermal-sensor-cells":
    description: Baikal-T1 can be referenced as the CPU thermal-sensor
    const: 0

  baikal,pvt-temp-offset-millicelsius:
    description: |
      Temperature sensor trimming factor. It can be used to manually adjust the
      temperature measurements within 7.130 degrees Celsius.
    default: 0
    minimum: 0
    maximum: 7130

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - clock-names

examples:
  - |
    #include <dt-bindings/interrupt-controller/mips-gic.h>

    pvt@1f200000 {
      compatible = "baikal,bt1-pvt";
      reg = <0x1f200000 0x1000>;
      #thermal-sensor-cells = <0>;

      interrupts = <GIC_SHARED 31 IRQ_TYPE_LEVEL_HIGH>;

      baikal,pvt-temp-offset-millicelsius = <1000>;

      clocks = <&ccu_sys>, <&ccu_sys>;
      clock-names = "ref", "pclk";
    };
...
+237 −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/microchip,mcp9982.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Microchip MCP998X/33 and MCP998XD/33D Temperature Monitor

maintainers:
  - Victor Duicu <victor.duicu@microchip.com>

description: |
  The MCP998X/33 and MCP998XD/33D family is a high-accuracy 2-wire
  multichannel automotive temperature monitor.
  The datasheet can be found here:
    https://ww1.microchip.com/downloads/aemDocuments/documents/MSLD/ProductDocuments/DataSheets/MCP998X-Family-Data-Sheet-DS20006827.pdf

properties:
  compatible:
    enum:
      - microchip,mcp9933
      - microchip,mcp9933d
      - microchip,mcp9982
      - microchip,mcp9982d
      - microchip,mcp9983
      - microchip,mcp9983d
      - microchip,mcp9984
      - microchip,mcp9984d
      - microchip,mcp9985
      - microchip,mcp9985d

  reg:
    maxItems: 1

  interrupts:
    minItems: 1
    maxItems: 2

  interrupt-names:
    description:
      The chip family has three different interrupt pins divided among them.
      The chips without "D" have alert-therm and therm-addr.
      The chips with "D" have alert-therm and sys-shtdwn.
    minItems: 1
    items:
      - enum: [alert-therm, therm-addr, sys-shtdwn]
      - enum: [therm-addr, sys-shtdwn]

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  microchip,enable-anti-parallel:
    description:
      Enable anti-parallel diode mode operation.
      MCP9984/84D/85/85D and MCP9933/33D support reading two external diodes
      in anti-parallel connection on the same set of pins.
    type: boolean

  microchip,parasitic-res-on-channel1-2:
    description:
      Indicates that the chip and the diodes/transistors are sufficiently far
      apart that a parasitic resistance is added to the wires, which can affect
      the measurements. Due to the anti-parallel diode connections, channels
      1 and 2 are affected together.
    type: boolean

  microchip,parasitic-res-on-channel3-4:
    description:
      Indicates that the chip and the diodes/transistors are sufficiently far
      apart that a parasitic resistance is added to the wires, which can affect
      the measurements. Due to the anti-parallel diode connections, channels
      3 and 4 are affected together.
    type: boolean

  microchip,power-state:
    description:
      The chip can be set in Run state or Standby state. In Run state the ADC
      is converting on all channels at the programmed conversion rate.
      In Standby state the host must initiate a conversion cycle by writing
      to the One-Shot register.
      True value sets Run state.
      Chips with "D" in the name can only be set in Run mode.
    type: boolean

  vdd-supply: true

patternProperties:
  "^channel@[1-4]$":
    description:
      Represents the external temperature channels to which
      a remote diode is connected.
    type: object

    properties:
      reg:
        items:
          maxItems: 1

      label:
        description: Unique name to identify which channel this is.

    required:
      - reg

    additionalProperties: false

required:
  - compatible
  - reg
  - vdd-supply

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - microchip,mcp9982d
              - microchip,mcp9983d
              - microchip,mcp9984d
              - microchip,mcp9985d
              - microchip,mcp9933d
    then:
      properties:
        interrupt-names:
          items:
            enum:
              - alert-therm
              - sys-shtdwn
      required:
        - microchip,power-state
        - microchip,parasitic-res-on-channel1-2
    else:
      properties:
        microchip,power-state: true
        interrupt-names:
          items:
            enum:
              - alert-therm
              - therm-addr

  - if:
      properties:
        compatible:
          contains:
            enum:
              - microchip,mcp9983d
              - microchip,mcp9984d
              - microchip,mcp9985d
    then:
      required:
        - microchip,parasitic-res-on-channel3-4

  - if:
      properties:
        compatible:
          contains:
            enum:
              - microchip,mcp9982
              - microchip,mcp9982d
    then:
      properties:
        microchip,enable-anti-parallel: false
      patternProperties:
        "^channel@[2-4]$": false

  - if:
      properties:
        compatible:
          contains:
            enum:
              - microchip,mcp9983
              - microchip,mcp9983d
    then:
      properties:
        microchip,enable-anti-parallel: false
      patternProperties:
        "^channel@[3-4]$": false

  - if:
      properties:
        compatible:
          contains:
            enum:
              - microchip,mcp9933
              - microchip,mcp9933d
    then:
      patternProperties:
        "^channel@[3-4]$": false

  - if:
      properties:
        compatible:
          contains:
            enum:
              - microchip,mcp9984
              - microchip,mcp9984d
    then:
      properties:
        channel@4: false

additionalProperties: false

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

        temperature-sensor@4c {
            compatible = "microchip,mcp9985";
            reg = <0x4c>;

            #address-cells = <1>;
            #size-cells = <0>;

            microchip,enable-anti-parallel;
            microchip,parasitic-res-on-channel1-2;
            microchip,parasitic-res-on-channel3-4;
            vdd-supply = <&vdd>;

            channel@1 {
                reg = <1>;
                label = "Room Temperature";
            };

            channel@2 {
                reg = <2>;
                label = "GPU Temperature";
            };
        };
    };

...
+2 −2
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ properties:
      G coefficient for temperature equation.
      Default for series 5 = 60000
      Default for series 6 = 57400
    multipleOf: 100
    multipleOf: 10
    minimum: 1000
    $ref: /schemas/types.yaml#/definitions/uint32

@@ -131,7 +131,7 @@ properties:
      J coefficient for temperature equation.
      Default for series 5 = -100
      Default for series 6 = 0
    multipleOf: 100
    multipleOf: 10
    maximum: 0
    $ref: /schemas/types.yaml#/definitions/int32

+0 −88
Original line number Diff line number Diff line
Nuvoton NPCM PWM and Fan Tacho controller device

The Nuvoton BMC NPCM7XX supports 8 Pulse-width modulation (PWM)
controller outputs and 16 Fan tachometer controller inputs.

The Nuvoton BMC NPCM8XX supports 12 Pulse-width modulation (PWM)
controller outputs and 16 Fan tachometer controller inputs.

Required properties for pwm-fan node
- #address-cells : should be 1.
- #size-cells	: should be 0.
- compatible	: "nuvoton,npcm750-pwm-fan" for Poleg NPCM7XX.
				: "nuvoton,npcm845-pwm-fan" for Arbel NPCM8XX.
- reg			: specifies physical base address and size of the registers.
- reg-names	: must contain:
					* "pwm" for the PWM registers.
					* "fan" for the Fan registers.
- clocks		: phandle of reference clocks.
- clock-names	: must contain
					* "pwm" for PWM controller operating clock.
					* "fan" for Fan controller operating clock.
- interrupts	: contain the Fan interrupts with flags for falling edge.
- pinctrl-names	: a pinctrl state named "default" must be defined.
- pinctrl-0	: phandle referencing pin configuration of the PWM and Fan
					controller ports.

fan subnode format:
===================
Under fan subnode can be upto 8 child nodes, each child node representing a fan.
Each fan subnode must have one PWM channel and at least one Fan tach channel.

For PWM channel can be configured cooling-levels to create cooling device.
Cooling device could be bound to a thermal zone for the thermal control.

Required properties for each child node:
- reg : specify the PWM output channel.
	integer value in the range 0 through 7, that represent
	the PWM channel number that used.

- fan-tach-ch : specify the Fan tach input channel.
		integer value in the range 0 through 15, that represent
		the fan tach channel number that used.

		At least one Fan tach input channel is required

Optional property for each child node:
- cooling-levels: PWM duty cycle values in a range from 0 to 255
                  which correspond to thermal cooling states.

Examples:

pwm_fan:pwm-fan-controller@103000 {
	#address-cells = <1>;
	#size-cells = <0>;
	compatible = "nuvoton,npcm750-pwm-fan";
	reg = <0x103000 0x2000>,
		<0x180000 0x8000>;
	reg-names = "pwm", "fan";
	clocks = <&clk NPCM7XX_CLK_APB3>,
		<&clk NPCM7XX_CLK_APB4>;
	clock-names = "pwm","fan";
	interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
			<GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
	pinctrl-names = "default";
	pinctrl-0 = <&pwm0_pins &pwm1_pins &pwm2_pins
			&fanin0_pins &fanin1_pins &fanin2_pins
			&fanin3_pins &fanin4_pins>;
	fan@0 {
		reg = <0x00>;
		fan-tach-ch = /bits/ 8 <0x00 0x01>;
		cooling-levels = <127 255>;
	};
	fan@1 {
		reg = <0x01>;
		fan-tach-ch = /bits/ 8 <0x02 0x03>;
	};
	fan@2 {
		reg = <0x02>;
		fan-tach-ch = /bits/ 8 <0x04>;
	};

};
+139 −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/hwmon/nuvoton,npcm750-pwm-fan.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Nuvoton NPCM7xx/NPCM8xx PWM and Fan Tach Controller

maintainers:
  - Tomer Maimon <tmaimon77@gmail.com>

description:
  The NPCM7xx/NPCM8xx family includes a PWM and Fan Tachometer controller.
  The controller provides up to 8 (NPCM7xx) or 12 (NPCM8xx) PWM channels and up
  to 16 tachometer inputs. It is used for fan speed control and monitoring.

properties:
  compatible:
    enum:
      - nuvoton,npcm750-pwm-fan
      - nuvoton,npcm845-pwm-fan

  reg:
    maxItems: 2
    description: Register addresses for PWM and Fan Tach units.

  reg-names:
    items:
      - const: pwm
      - const: fan

  clocks:
    maxItems: 2
    description: Clocks for the PWM and Fan Tach modules.

  clock-names:
    items:
      - const: pwm
      - const: fan

  interrupts:
    description:
      Contains the Fan interrupts with flags for falling edge.
      For NPCM7XX, 8 interrupt lines are expected (one per PWM channel).
      For NPCM8XX, 12 interrupt lines are expected (one per PWM channel).

    minItems: 8
    maxItems: 12

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

patternProperties:
  "^fan@[0-9a-f]+$":
    type: object
    $ref: fan-common.yaml#
    unevaluatedProperties: false

    properties:
      reg:
        description:
          Specify the PWM output channel. Integer value in the range 0-7 for
          NPCM7XX or 0-11 for NPCM8XX, representing the PWM channel number.

        maximum: 11

      fan-tach-ch:
        $ref: /schemas/types.yaml#/definitions/uint8-array
        description:
          The tach channel(s) used for the fan.
          Integer values in the range 0-15.

        items:
          maximum: 15

      cooling-levels:
        description:
          PWM duty cycle values in a range from 0 to 255 which
          correspond to thermal cooling states. This property enables
          thermal zone integration for automatic fan speed control
          based on temperature.

        items:
          maximum: 255

    required:
      - reg
      - fan-tach-ch

required:
  - compatible
  - reg
  - reg-names
  - clocks
  - clock-names
  - interrupts

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/nuvoton,npcm7xx-clock.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    pwm_fan: pwm-fan@103000 {
        compatible = "nuvoton,npcm750-pwm-fan";
        #address-cells = <1>;
        #size-cells = <0>;

        reg = <0x103000 0x2000>, <0x180000 0x8000>;
        reg-names = "pwm", "fan";

        clocks = <&clk NPCM7XX_CLK_APB3>, <&clk NPCM7XX_CLK_APB4>;
        clock-names = "pwm", "fan";

        interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pwm0_pins &fanin0_pins>;

        fan@0 {
            reg = <0>;
            fan-tach-ch = <0 1>;
            cooling-levels = <64 128 192 255>;
        };

        fan@1 {
            reg = <1>;
            fan-tach-ch = <2>;
        };
    };
Loading