Revision 8e37395c3a5dceff62a5010ebbbc107f4145935c authored by Linus Torvalds on 20 October 2021, 16:13:22 UTC, committed by Linus Torvalds on 20 October 2021, 16:13:22 UTC
Pull sound fixes from Takashi Iwai:
 "Again it became bigger than wished, unfortunately, as this contains
  quite a few ASoC fixes that came up a bit late. It also includes yet
  more HD- and USB-audio quirks: I decided to merge them now, as those
  are for stable, and we'll need them sooner or later.

  Although the volumes are a bit high, all changes are device-specific
  (and reasonably small) fixes, so it should be safe for the late rc"

* tag 'sound-5.15-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: usb-audio: Fix microphone sound on Jieli webcam.
  ALSA: hda/realtek: Fixes HP Spectre x360 15-eb1xxx speakers
  ALSA: usb-audio: Provide quirk for Sennheiser GSP670 Headset
  ALSA: hda/realtek: Add quirk for Clevo PC50HS
  ALSA: usb-audio: add Schiit Hel device to quirk table
  ASoC: wm8960: Fix clock configuration on slave mode
  ASoC: cs42l42: Ensure 0dB full scale volume is used for headsets
  ASoC: soc-core: fix null-ptr-deref in snd_soc_del_component_unlocked()
  ASoC: codec: wcd938x: Add irq config support
  ASoC: DAPM: Fix missing kctl change notifications
  ASoC: Intel: bytcht_es8316: Utilize dev_err_probe() to avoid log saturation
  ASoC: Intel: bytcht_es8316: Switch to use gpiod_get_optional()
  ASoC: Intel: bytcht_es8316: Use temporary variable for struct device
  ASoC: Intel: bytcht_es8316: Get platform data via dev_get_platdata()
  ASoC: wcd938x: Fix jack detection issue
  ASoC: nau8824: Fix headphone vs headset, button-press detection no longer working
  ASoC: cs4341: Add SPI device ID table
  ASoC: pcm179x: Add missing entries SPI to device ID table
  ASoC: fsl_xcvr: Fix channel swap issue with ARC
  ASoC: pcm512x: Mend accesses to the I2S_1 and I2S_2 registers
2 parent s 6da52de + 2966492
Raw File
adt7475.rst
Kernel driver adt7475
=====================

Supported chips:

  * Analog Devices ADT7473

    Prefix: 'adt7473'

    Addresses scanned: I2C 0x2C, 0x2D, 0x2E

    Datasheet: Publicly available at the On Semiconductors website

  * Analog Devices ADT7475

    Prefix: 'adt7475'

    Addresses scanned: I2C 0x2E

    Datasheet: Publicly available at the On Semiconductors website

  * Analog Devices ADT7476

    Prefix: 'adt7476'

    Addresses scanned: I2C 0x2C, 0x2D, 0x2E

    Datasheet: Publicly available at the On Semiconductors website

  * Analog Devices ADT7490

    Prefix: 'adt7490'

    Addresses scanned: I2C 0x2C, 0x2D, 0x2E

    Datasheet: Publicly available at the On Semiconductors website

Authors:
	- Jordan Crouse
	- Hans de Goede
	- Darrick J. Wong (documentation)
	- Jean Delvare


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

This driver implements support for the Analog Devices ADT7473, ADT7475,
ADT7476 and ADT7490 chip family. The ADT7473 and ADT7475 differ only in
minor details. The ADT7476 has additional features, including extra voltage
measurement inputs and VID support. The ADT7490 also has additional
features, including extra voltage measurement inputs and PECI support. All
the supported chips will be collectively designed by the name "ADT747x" in
the rest of this document.

The ADT747x uses the 2-wire interface compatible with the SMBus 2.0
specification. Using an analog to digital converter it measures three (3)
temperatures and two (2) or more voltages. It has four (4) 16-bit counters
for measuring fan speed. There are three (3) PWM outputs that can be used
to control fan speed.

A sophisticated control system for the PWM outputs is designed into the
ADT747x that allows fan speed to be adjusted automatically based on any of the
three temperature sensors. Each PWM output is individually adjustable and
programmable. Once configured, the ADT747x will adjust the PWM outputs in
response to the measured temperatures without further host intervention.
This feature can also be disabled for manual control of the PWM's.

Each of the measured inputs (voltage, temperature, fan speed) has
corresponding high/low limit values. The ADT747x will signal an ALARM if
any measured value exceeds either limit.

The ADT747x samples all inputs continuously. The driver will not read
the registers more often than once every other second. Further,
configuration data is only read once per minute.

Chip Differences Summary
------------------------

ADT7473:
  * 2 voltage inputs
  * system acoustics optimizations (not implemented)

ADT7475:
  * 2 voltage inputs

ADT7476:
  * 5 voltage inputs
  * VID support

ADT7490:
  * 6 voltage inputs
  * 1 Imon input (not implemented)
  * PECI support (not implemented)
  * 2 GPIO pins (not implemented)
  * system acoustics optimizations (not implemented)

Sysfs Mapping
-------------

==== =========== =========== ========= ==========
in   ADT7490     ADT7476     ADT7475   ADT7473
==== =========== =========== ========= ==========
in0  2.5VIN (22) 2.5VIN (22) -         -
in1  VCCP   (23) VCCP   (23) VCCP (14) VCCP (14)
in2  VCC    (4)  VCC    (4)  VCC  (4)  VCC  (3)
in3  5VIN   (20) 5VIN   (20)
in4  12VIN  (21) 12VIN  (21)
in5  VTT    (8)
==== =========== =========== ========= ==========

Special Features
----------------

The ADT747x has a 10-bit ADC and can therefore measure temperatures
with a resolution of 0.25 degree Celsius. Temperature readings can be
configured either for two's complement format or "Offset 64" format,
wherein 64 is subtracted from the raw value to get the temperature value.

The datasheet is very detailed and describes a procedure for determining
an optimal configuration for the automatic PWM control.

Fan Speed Control
-----------------

The driver exposes two trip points per PWM channel.

- point1: Set the PWM speed at the lower temperature bound
- point2: Set the PWM speed at the higher temperature bound

The ADT747x will scale the PWM linearly between the lower and higher PWM
speed when the temperature is between the two temperature boundaries.
Temperature boundaries are associated to temperature channels rather than
PWM outputs, and a given PWM output can be controlled by several temperature
channels. As a result, the ADT747x may compute more than one PWM value
for a channel at a given time, in which case the maximum value (fastest
fan speed) is applied. PWM values range from 0 (off) to 255 (full speed).

Fan speed may be set to maximum when the temperature sensor associated with
the PWM control exceeds temp#_max.

At Tmin - hysteresis the PWM output can either be off (0% duty cycle) or at the
minimum (i.e. auto_point1_pwm). This behaviour can be configured using the
`pwm[1-*]_stall_disable sysfs attribute`. A value of 0 means the fans will shut
off. A value of 1 means the fans will run at auto_point1_pwm.

The responsiveness of the ADT747x to temperature changes can be configured.
This allows smoothing of the fan speed transition. To set the transition time
set the value in ms in the `temp[1-*]_smoothing` sysfs attribute.

Notes
-----

The nVidia binary driver presents an ADT7473 chip via an on-card i2c bus.
Unfortunately, they fail to set the i2c adapter class, so this driver may
fail to find the chip until the nvidia driver is patched.
back to top