Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da2577fe authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull sound updates from Takashi Iwai:
 "We had again a busy development cycle with many new drivers as well as
  lots of core improvements / cleanups. Let's go for highlights:

  ALSA core:

   - PCM locking scheme was refactored for reducing a global rwlock

   - PCM suspend is handled in the device type PM ops now; lots of
     explicit calls were reduced by this action

   - Cleanups about PCM buffer preallocation calls

   - Kill NULL device object in memory allocations

   - Lots of procfs API cleanups

  ASoC core:

   - Support for only powering up channels that are actively being used

   - Cleanups / fixes of topology API

  ASoC drivers:

   - MediaTek BTCVSD for a Bluetooth radio chip, which is the first such
     driver we've had upstream!

   - Quite a few improvements to simplify the generic card drivers,
     especially the merge of the SCU cards into the main generic drivers

   - Lots of fixes for probing on Intel systems to follow more standard
     styles

   - A big refresh and cleanup of the Samsung drivers

   - New drivers: Asahi Kasei Microdevices AK4497, Cirrus Logic CS4341
     and CS35L26, Google ChromeOS embedded controllers, Ingenic JZ4725B,
     MediaTek BTCVSD, MT8183 and MT6358, NXP MICFIL, Rockchip RK3328,
     Spreadtrum DMA controllers, Qualcomm WCD9335, Xilinx S/PDIF and PCM
     formatters

  ALSA drivers:

   - Improvements of Tegra HD-audio controller driver for supporting new
     chips

   - HD-audio codec quirks for ALC294 S4 resume, ASUS laptop, Chrome
     headset button support and Dell workstations

   - Improved DSD support on USB-audio

   - Quirk for MOTU MicroBook II USB-audio

   - Support for Fireface UCX support and Solid State Logic Duende
     Classic/Mini"

* tag 'sound-5.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (461 commits)
  ALSA: usb-audio: Add quirk for MOTU MicroBook II
  ASoC: stm32: i2s: skip useless write in slave mode
  ASoC: stm32: i2s: fix race condition in irq handler
  ASoC: stm32: i2s: remove useless callback
  ASoC: stm32: i2s: fix dma configuration
  ASoC: stm32: i2s: fix stream count management
  ASoC: stm32: i2s: fix 16 bit format support
  ASoC: stm32: i2s: fix IRQ clearing
  ASoC: qcom: Kconfig: fix dependency for sdm845
  ASoC: Intel: Boards: Add Maxim98373 support
  ASoC: rsnd: gen: fix SSI9 4/5/6/7 busif related register address
  ALSA: firewire-motu: fix construction of PCM frame for capture direction
  ALSA: bebob: use more identical mod_alias for Saffire Pro 10 I/O against Liquid Saffire 56
  ALSA: hda: Extend i915 component bind timeout
  ASoC: wm_adsp: Improve logging messages
  ASoC: wm_adsp: Add support for multiple compressed buffers
  ASoC: wm_adsp: Refactor compress stream initialisation
  ASoC: wm_adsp: Reorder some functions for improved clarity
  ASoC: wm_adsp: Factor out stripping padding from ADSP data
  ASoC: cs35l36: Fix an IS_ERR() vs NULL checking bug
  ...
parents 542d0e58 a634090a
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -17,12 +17,18 @@ Required properties:
                Documentation/devicetree/bindings/regulator/regulator.txt

Optional properties:
 - reset-gpio:  the reset pin for the chip, for more details consult
 - reset-gpios: the reset pin for the chip, for more details consult
                Documentation/devicetree/bindings/gpio/gpio.txt

 - DVDD-supply: supply voltage for the digital core, please consult
                Documentation/devicetree/bindings/regulator/regulator.txt

- adi,micbias: configures the voltage setting for the MICBIAS pin.
		Select 0/1/2/3/4/5/6/7/8 to specify MICBIAS voltage
		5V/5.5V/6V/6.5V/7V/7.5V/8V/8.5V/9V
		If not specified the default value will be "7" meaning 8.5 Volts.
		This property is only valid for the ADAU1977

For required properties on SPI, please consult
Documentation/devicetree/bindings/spi/spi-bus.txt

@@ -40,7 +46,8 @@ Examples:
		AVDD-supply = <&regulator>;
		DVDD-supply = <&regulator_digital>;

		reset_gpio = <&gpio 10 GPIO_ACTIVE_LOW>;
		adi,micbias = <3>;
		reset-gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
	};

	adau1977_i2c: adau1977@11 {
@@ -50,5 +57,5 @@ Examples:
		AVDD-supply = <&regulator>;
		DVDD-supply = <&regulator_digital>;

		reset_gpio = <&gpio 10 GPIO_ACTIVE_LOW>;
		reset-gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
	};
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ This device supports I2C mode.

Required properties:

- compatible : "asahi-kasei,ak4458"
- compatible : "asahi-kasei,ak4458" or "asahi-kasei,ak4497"
- reg : The I2C address of the device for I2C

Optional properties:
+0 −123
Original line number Diff line number Diff line
Audio-Graph-SCU-Card:

Audio-Graph-SCU-Card is "Audio-Graph-Card" + "ALSA DPCM".

It is based on common bindings for device graphs.
see ${LINUX}/Documentation/devicetree/bindings/graph.txt

Basically, Audio-Graph-SCU-Card property is same as
Simple-Card / Simple-SCU-Card / Audio-Graph-Card.
see ${LINUX}/Documentation/devicetree/bindings/sound/simple-card.txt
    ${LINUX}/Documentation/devicetree/bindings/sound/simple-scu-card.txt
    ${LINUX}/Documentation/devicetree/bindings/sound/audio-graph-card.txt

Below are same as Simple-Card / Audio-Graph-Card.

- label
- dai-format
- frame-master
- bitclock-master
- bitclock-inversion
- frame-inversion
- dai-tdm-slot-num
- dai-tdm-slot-width
- clocks / system-clock-frequency

Below are same as Simple-SCU-Card.

- convert-rate
- convert-channels
- prefix
- routing

Required properties:

- compatible				: "audio-graph-scu-card";
- dais					: list of CPU DAI port{s}

Example 1. Sampling Rate Conversion

	sound_card {
		compatible = "audio-graph-scu-card";

		label = "sound-card";
		prefix = "codec";
		routing = "codec Playback", "DAI0 Playback",
			  "DAI0 Capture",   "codec Capture";
		convert-rate = <48000>;

		dais = <&cpu_port>;
	};

	audio-codec {
		...

		port {
			codec_endpoint: endpoint {
				remote-endpoint = <&cpu_endpoint>;
			};
		};
	};

	dai-controller {
		...
		cpu_port: port {
			cpu_endpoint: endpoint {
				remote-endpoint = <&codec_endpoint>;

				dai-format = "left_j";
				...
			};
		};
	};

Example 2. 2 CPU 1 Codec (Mixing)

	sound_card {
		compatible = "audio-graph-scu-card";

		label = "sound-card";
		routing = "codec Playback", "DAI0 Playback",
			  "codec Playback", "DAI1 Playback",
			  "DAI0 Capture",   "codec Capture";

		dais = <&cpu_port0
			&cpu_port1>;
	};

	audio-codec {
		...

		audio-graph-card,prefix = "codec";
		audio-graph-card,convert-rate = <48000>;
		port {
			codec_endpoint0: endpoint {
				remote-endpoint = <&cpu_endpoint0>;
			};
			codec_endpoint1: endpoint {
				remote-endpoint = <&cpu_endpoint1>;
			};
		};
	};

	dai-controller {
		...
		ports {
			cpu_port0: port {
				cpu_endpoint0: endpoint {
					remote-endpoint = <&codec_endpoint0>;

					dai-format = "left_j";
					...
				};
			};
			cpu_port1: port {
				cpu_endpoint1: endpoint {
					remote-endpoint = <&codec_endpoint1>;

					dai-format = "left_j";
					...
				};
			};
		};
	};
+168 −0
Original line number Diff line number Diff line
CS35L36 Speaker Amplifier

Required properties:

  - compatible : "cirrus,cs35l36"

  - reg : the I2C address of the device for I2C

  - VA-supply, VP-supply : power supplies for the device,
  as covered in
  Documentation/devicetree/bindings/regulator/regulator.txt.

  - cirrus,boost-ctl-millivolt : Boost Voltage Value.  Configures the boost
  converter's output voltage in mV. The range is from 2550mV to 12000mV with
  increments of 50mV.
  (Default) VP

  - cirrus,boost-peak-milliamp : Boost-converter peak current limit in mA.
  Configures the peak current by monitoring the current through the boost FET.
  Range starts at 1600mA and goes to a maximum of 4500mA with increments of
  50mA.
  (Default) 4.50 Amps

  - cirrus,boost-ind-nanohenry : Inductor estimation LBST reference value.
  Seeds the digital boost converter's inductor estimation block with the initial
  inductance value to reference.

  1000 = 1uH (Default)
  1200 = 1.2uH

Optional properties:
  - cirrus,multi-amp-mode : Boolean to determine if there are more than
  one amplifier in the system. If more than one it is best to Hi-Z the ASP
  port to prevent bus contention on the output signal

  - cirrus,boost-ctl-select : Boost conerter control source selection.
  Selects the source of the BST_CTL target VBST voltage for the boost
  converter to generate.
  0x00 - Control Port Value
  0x01 - Class H Tracking (Default)
  0x10 - MultiDevice Sync Value

  - cirrus,amp-pcm-inv : Boolean to determine Amplifier will invert incoming
  PCM data

  - cirrus,imon-pol-inv : Boolean to determine Amplifier will invert the
  polarity of outbound IMON feedback data

  - cirrus,vmon-pol-inv : Boolean to determine Amplifier will invert the
  polarity of outbound VMON feedback data

  - cirrus,dcm-mode-enable : Boost converter automatic DCM Mode enable.
  This enables the digital boost converter to operate in a low power
  (Discontinuous Conduction) mode during low loading conditions.

  - cirrus,weak-fet-disable : Boolean : The strength of the output drivers is
  reduced when operating in a Weak-FET Drive Mode and must not be used to drive
  a large load.

  - cirrus,classh-wk-fet-delay :  Weak-FET entry delay. Controls the delay
  (in ms) before the Class H algorithm switches to the weak-FET voltage
  (after the audio falls and remains below the value specified in WKFET_AMP_THLD).

  0 = 0ms
  1 = 5ms
  2 = 10ms
  3 = 50ms
  4 = 100ms (Default)
  5 = 200ms
  6 = 500ms
  7 = 1000ms

  - cirrus,classh-weak-fet-thld-millivolt : Weak-FET amplifier drive threshold.
  Configures the signal threshold at which the PWM output stage enters
  weak-FET operation. The range is 50mV to 700mV in 50mV increments.

  - cirrus,temp-warn-threshold :  Amplifier overtemperature warning threshold.
  Configures the threshold at which the overtemperature warning condition occurs.
  When the threshold is met, the overtemperature warning attenuation is applied
  and the TEMP_WARN_EINT interrupt status bit is set.
  If TEMP_WARN_MASK = 0, INTb is asserted.

  0 = 105C
  1 = 115C
  2 = 125C (Default)
  3 = 135C

  - cirrus,irq-drive-select : Selects the driver type of the selected interrupt
  output.

  0 = Open-drain
  1 = Push-pull (Default)

  - cirrus,irq-gpio-select : Selects the pin to serve as the programmable
  interrupt output.

  0 = PDM_DATA / SWIRE_SD / INT (Default)
  1 = GPIO

Optional properties for the "cirrus,vpbr-config" Sub-node

  - cirrus,vpbr-en : VBST brownout prevention enable. Configures whether the
  VBST brownout prevention algorithm is enabled or disabled.

  0 = VBST brownout prevention disabled (default)
  1 = VBST brownout prevention enabled

  See Section 7.31.1 VPBR Config for configuration options & further details

  - cirrus,vpbr-thld : Initial VPBR threshold. Configures the VP brownout
  threshold voltage

  - cirrus,cirrus,vpbr-atk-rate : Attenuation attack step rate. Configures the
  amount delay between consecutive volume attenuation steps when a brownout
  condition is present and the VP brownout condition is in an attacking state.

  - cirrus,vpbr-atk-vol : VP brownout prevention step size. Configures the VP
  brownout prevention attacking attenuation step size when operating in either
  digital volume or analog gain modes.

  - cirrus,vpbr-max-attn : Maximum attenuation that the VP brownout prevention
  can apply to the audio signal.

  - cirrus,vpbr-wait : Configures the delay time between a brownout condition
  no longer being present and the VP brownout prevention entering an attenuation
  release state.

  - cirrus,vpbr-rel-rate : Attenuation release step rate. Configures the delay
  between consecutive volume attenuation release steps when a brownout condition
  is not longer present and the VP brownout is in an attenuation release state.

  - cirrus,vpbr-mute-en : During the attack state, if the vpbr-max-attn value
  is reached, the error condition still remains, and this bit is set, the audio
  is muted.

Example:

cs35l36: cs35l36@40 {
	compatible = "cirrus,cs35l36";
	reg = <0x40>;
	VA-supply = <&dummy_vreg>;
	VP-supply = <&dummy_vreg>;
	reset-gpios = <&gpio0 54 0>;
	interrupt-parent = <&gpio8>;
	interrupts = <3 IRQ_TYPE_LEVEL_LOW>;

	cirrus,boost-ind-nanohenry = <1000>;
	cirrus,boost-ctl-millivolt = <10000>;
	cirrus,boost-peak-milliamp = <4500>;
	cirrus,boost-ctl-select = <0x00>;
	cirrus,weak-fet-delay = <0x04>;
	cirrus,weak-fet-thld = <0x01>;
	cirrus,temp-warn-threshold = <0x01>;
	cirrus,multi-amp-mode;
	cirrus,irq-drive-select = <0x01>;
	cirrus,irq-gpio-select = <0x01>;

	cirrus,vpbr-config {
		cirrus,vpbr-en = <0x00>;
		cirrus,vpbr-thld = <0x05>;
		cirrus,vpbr-atk-rate = <0x02>;
		cirrus,vpbr-atk-vol = <0x01>;
		cirrus,vpbr-max-attn = <0x09>;
		cirrus,vpbr-wait = <0x01>;
		cirrus,vpbr-rel-rate = <0x05>;
		cirrus,vpbr-mute-en = <0x00>;
	};
};
+22 −0
Original line number Diff line number Diff line
Cirrus Logic CS4341 audio DAC

This device supports both I2C and SPI (configured with pin strapping
on the board).

Required properties:
  - compatible: "cirrus,cs4341a"
  - reg : the I2C address of the device for I2C, the chip select
          number for SPI.

For required properties on I2C-bus, please consult
Documentation/devicetree/bindings/i2c/i2c.txt
For required properties on SPI-bus, please consult
Documentation/devicetree/bindings/spi/spi-bus.txt

Example:
	codec: cs4341@0 {
		#sound-dai-cells = <0>;
		compatible = "cirrus,cs4341a";
		reg = <0>;
		spi-max-frequency = <6000000>;
	};
Loading