You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'sound-4.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound updates from Takashi Iwai:
"After a heavy storm by syzkaller in 4.5 cycle, we have relatively few
changes in the core at this time while a lot of changes are found in
the driver side, unsurprisingly. Below are some highlights:
ALSA core:
- A few more hardening in ALSA timer codes
- An extension of sequencer API for advertising the card / pid
- Small fixes in compress-offload and jack layers
HD-audio:
- Dynamic PCM assignment in HDMI/DP codec; preparation for upcoming
DP-MST support
- Lots of code refactoring for sharing with ASoC SKL driver
- Regression fixes for Intel HDMI/DP
- Fixups for CX20724 codec, Lenovo AiO
USB-audio:
- Add quirk_alias option to make quirk debugging easier
- Fixes for possible Oops by malformed firmware
Firewire:
- Add support for FW-1804 in tascam driver
- Improvements / changes in card registration, multi stream handling,
etc for DICE
- Lots of code refactoring
ASoC:
- Enhancements of still ongoing topology API
- Lots of commits for Intel Skylake support including HDMI support
- A few Intel Atom driver updates for recent devices
- Lots of improvements to the Renesas drivers
- Capture support for Qualcomm drivers
- Support for TI DaVinci DRA7xxx devices
- New machine drivers for Freescale systems with Cirrus CODECs,
Mediatek systems with RT5650 CODECs
- New CPU drivers for Allwinner S/PDIF controllers
- New CODEC drivers for Maxim MAX9867 and MAX98926 and Realtek RT5514"
* tag 'sound-4.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (291 commits)
ALSA: hda - Fix mutex deadlock at HDMI/DP hotplug
ALSA: ctl: change return value in compatibility layer so that it's the same value in core implementation
ALSA: mixart: silence an uninitialized variable warning
ALSA: usb-audio: Add sanity checks for endpoint accesses
ALSA: usb-audio: Minor code cleanup in create_fixed_stream_quirk()
ALSA: usb-audio: Fix NULL dereference in create_fixed_stream_quirk()
ALSA: hda - Limit i915 HDMI binding only for HSW and later
ALSA: hda - Fix unconditional GPIO toggle via automute
ALSA: mixart: silence unitialized variable warnings
ALSA: hda - Fixes double fault in nvhdmi_chmap_cea_alloc_validate_get_type
ALSA: intel8x0: Add clock quirk entry for AD1981B on IBM ThinkPad X41.
ALSA: hda - Add new GPU codec ID 0x10de0082 to snd-hda
ASoC: rsnd: add simplified module explanation
ASoC: hdac_hdmi: Add broxton device ID
ASoC: Intel: Bxtn: Add Broxton PCI ID
ASoC: Intel: Skylake: Move Skylake dsp ops & loader ops
ASoC: Intel: add dmabuffer to common sst_dsp
ASoC: Intel: Skylake: Unstatify skl_dsp_enable_core
ASoC: Intel: Skylake: Fix whitepsace issues
ASoC: Intel: Skylake: Move module id defines
...
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
Analog Devices ADAU1361/ADAU1461/ADAU1761/ADAU1961/ADAU1381/ADAU1781
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible: Should contain one of the following:
|
||||
"adi,adau1361"
|
||||
"adi,adau1461"
|
||||
"adi,adau1761"
|
||||
"adi,adau1961"
|
||||
"adi,adau1381"
|
||||
"adi,adau1781"
|
||||
|
||||
- reg: The i2c address. Value depends on the state of ADDR0
|
||||
and ADDR1, as wired in hardware.
|
||||
|
||||
Examples:
|
||||
#include <dt-bindings/sound/adau17x1.h>
|
||||
|
||||
i2c_bus {
|
||||
adau1361@38 {
|
||||
compatible = "adi,adau1761";
|
||||
reg = <0x38>;
|
||||
};
|
||||
};
|
||||
@@ -24,6 +24,9 @@ The compatible list for this generic sound card currently:
|
||||
|
||||
"fsl,imx-audio-cs42888"
|
||||
|
||||
"fsl,imx-audio-cs427x"
|
||||
(compatible with CS4271 and CS4272)
|
||||
|
||||
"fsl,imx-audio-wm8962"
|
||||
(compatible with Documentation/devicetree/bindings/sound/imx-audio-wm8962.txt)
|
||||
|
||||
@@ -63,6 +66,12 @@ Optional properties:
|
||||
- audio-asrc : The phandle of ASRC. It can be absent if there's no
|
||||
need to add ASRC support via DPCM.
|
||||
|
||||
Optional unless SSI is selected as a CPU DAI:
|
||||
|
||||
- mux-int-port : The internal port of the i.MX audio muxer (AUDMUX)
|
||||
|
||||
- mux-ext-port : The external port of the i.MX audio muxer
|
||||
|
||||
Example:
|
||||
sound-cs42888 {
|
||||
compatible = "fsl,imx-audio-cs42888";
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
max9867 codec
|
||||
|
||||
This device supports I2C mode only.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : "maxim,max9867"
|
||||
- reg : The chip select number on the I2C bus
|
||||
|
||||
Example:
|
||||
|
||||
&i2c {
|
||||
max9867: max9867@0x18 {
|
||||
compatible = "maxim,max9867";
|
||||
reg = <0x18>;
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,32 @@
|
||||
max98926 audio CODEC
|
||||
|
||||
This device supports I2C.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : "maxim,max98926"
|
||||
|
||||
- vmon-slot-no : slot number used to send voltage information
|
||||
or in inteleave mode this will be used as
|
||||
interleave slot.
|
||||
|
||||
- imon-slot-no : slot number used to send current information
|
||||
|
||||
- interleave-mode : When using two MAX98926 in a system it is
|
||||
possible to create ADC data that that will
|
||||
overflow the frame size. Digital Audio Interleave
|
||||
mode provides a means to output VMON and IMON data
|
||||
from two devices on a single DOUT line when running
|
||||
smaller frames sizes such as 32 BCLKS per LRCLK or
|
||||
48 BCLKS per LRCLK.
|
||||
|
||||
- reg : the I2C address of the device for I2C
|
||||
|
||||
Example:
|
||||
|
||||
codec: max98926@1a {
|
||||
compatible = "maxim,max98926";
|
||||
vmon-slot-no = <0>;
|
||||
imon-slot-no = <2>;
|
||||
reg = <0x1a>;
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
MT8173 with RT5650 RT5514 CODECS
|
||||
|
||||
Required properties:
|
||||
- compatible : "mediatek,mt8173-rt5650-rt5514"
|
||||
- mediatek,audio-codec: the phandles of rt5650 and rt5514 codecs
|
||||
- mediatek,platform: the phandle of MT8173 ASoC platform
|
||||
|
||||
Example:
|
||||
|
||||
sound {
|
||||
compatible = "mediatek,mt8173-rt5650-rt5514";
|
||||
mediatek,audio-codec = <&rt5650 &rt5514>;
|
||||
mediatek,platform = <&afe>;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
MT8173 with RT5650 CODECS
|
||||
|
||||
Required properties:
|
||||
- compatible : "mediatek,mt8173-rt5650"
|
||||
- mediatek,audio-codec: the phandles of rt5650 codecs
|
||||
- mediatek,platform: the phandle of MT8173 ASoC platform
|
||||
|
||||
Example:
|
||||
|
||||
sound {
|
||||
compatible = "mediatek,mt8173-rt5650";
|
||||
mediatek,audio-codec = <&rt5650>;
|
||||
mediatek,platform = <&afe>;
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Texas Instruments pcm179x DT bindings
|
||||
|
||||
This driver supports the SPI bus.
|
||||
This driver supports both the I2C and SPI bus.
|
||||
|
||||
Required properties:
|
||||
|
||||
@@ -9,6 +9,11 @@ Required properties:
|
||||
For required properties on SPI, please consult
|
||||
Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||
|
||||
Required properties on I2C:
|
||||
|
||||
- reg: the I2C address
|
||||
|
||||
|
||||
Examples:
|
||||
|
||||
codec_spi: 1792a@0 {
|
||||
@@ -16,3 +21,7 @@ Examples:
|
||||
spi-max-frequency = <600000>;
|
||||
};
|
||||
|
||||
codec_i2c: 1792a@4c {
|
||||
compatible = "ti,pcm1792a";
|
||||
reg = <0x4c>;
|
||||
};
|
||||
|
||||
@@ -1,6 +1,337 @@
|
||||
Renesas R-Car sound
|
||||
|
||||
=============================================
|
||||
* Modules
|
||||
=============================================
|
||||
|
||||
Renesas R-Car sound is constructed from below modules
|
||||
(for Gen2 or later)
|
||||
|
||||
SCU : Sampling Rate Converter Unit
|
||||
- SRC : Sampling Rate Converter
|
||||
- CMD
|
||||
- CTU : Channel Transfer Unit
|
||||
- MIX : Mixer
|
||||
- DVC : Digital Volume and Mute Function
|
||||
SSIU : Serial Sound Interface Unit
|
||||
SSI : Serial Sound Interface
|
||||
|
||||
See detail of each module's channels, connection, limitation on datasheet
|
||||
|
||||
=============================================
|
||||
* Multi channel
|
||||
=============================================
|
||||
|
||||
Multi channel is supported by Multi-SSI, or TDM-SSI.
|
||||
|
||||
Multi-SSI : 6ch case, you can use stereo x 3 SSI
|
||||
TDM-SSI : 6ch case, you can use TDM
|
||||
|
||||
=============================================
|
||||
* Enable/Disable each modules
|
||||
=============================================
|
||||
|
||||
See datasheet to check SRC/CTU/MIX/DVC connect-limitation.
|
||||
DT controls enabling/disabling module.
|
||||
${LINUX}/arch/arm/boot/dts/r8a7790-lager.dts can be good example.
|
||||
This is example of
|
||||
|
||||
Playback: [MEM] -> [SRC2] -> [DVC0] -> [SSIU0/SSI0] -> [codec]
|
||||
Capture: [MEM] <- [DVC1] <- [SRC3] <- [SSIU1/SSI1] <- [codec]
|
||||
|
||||
&rcar_sound {
|
||||
...
|
||||
rcar_sound,dai {
|
||||
dai0 {
|
||||
playback = <&ssi0 &src2 &dvc0>;
|
||||
capture = <&ssi1 &src3 &dvc1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
You can use below.
|
||||
${LINUX}/arch/arm/boot/dts/r8a7790.dts can be good example.
|
||||
|
||||
&src0 &ctu00 &mix0 &dvc0 &ssi0
|
||||
&src1 &ctu01 &mix1 &dvc1 &ssi1
|
||||
&src2 &ctu02 &ssi2
|
||||
&src3 &ctu03 &ssi3
|
||||
&src4 &ssi4
|
||||
&src5 &ctu10 &ssi5
|
||||
&src6 &ctu11 &ssi6
|
||||
&src7 &ctu12 &ssi7
|
||||
&src8 &ctu13 &ssi8
|
||||
&src9 &ssi9
|
||||
|
||||
=============================================
|
||||
* SRC (Sampling Rate Converter)
|
||||
=============================================
|
||||
|
||||
[xx]Hz [yy]Hz
|
||||
------> [SRC] ------>
|
||||
|
||||
SRC can convert [xx]Hz to [yy]Hz. Then, it has below 2 modes
|
||||
|
||||
Asynchronous mode: input data / output data are based on different clocks.
|
||||
you can use this mode on Playback / Capture
|
||||
Synchronous mode: input data / output data are based on same clocks.
|
||||
This mode will be used if system doesn't have its input clock,
|
||||
for example digital TV case.
|
||||
you can use this mode on Playback
|
||||
|
||||
------------------
|
||||
** Asynchronous mode
|
||||
------------------
|
||||
|
||||
You need to use "renesas,rsrc-card" sound card for it.
|
||||
example)
|
||||
|
||||
sound {
|
||||
compatible = "renesas,rsrc-card";
|
||||
...
|
||||
/*
|
||||
* SRC Asynchronous mode setting
|
||||
* Playback:
|
||||
* All input data will be converted to 48kHz
|
||||
* Capture:
|
||||
* Inputed 48kHz data will be converted to
|
||||
* system specified Hz
|
||||
*/
|
||||
convert-rate = <48000>;
|
||||
...
|
||||
cpu {
|
||||
sound-dai = <&rcar_sound>;
|
||||
};
|
||||
codec {
|
||||
...
|
||||
};
|
||||
};
|
||||
|
||||
------------------
|
||||
** Synchronous mode
|
||||
------------------
|
||||
|
||||
> amixer set "SRC Out Rate" on
|
||||
> aplay xxxx.wav
|
||||
> amixer set "SRC Out Rate" 48000
|
||||
> amixer set "SRC Out Rate" 44100
|
||||
|
||||
=============================================
|
||||
* CTU (Channel Transfer Unit)
|
||||
=============================================
|
||||
|
||||
[xx]ch [yy]ch
|
||||
------> [CTU] -------->
|
||||
|
||||
CTU can convert [xx]ch to [yy]ch, or exchange outputed channel.
|
||||
CTU conversion needs matrix settings.
|
||||
For more detail information, see below
|
||||
|
||||
Renesas R-Car datasheet
|
||||
- Sampling Rate Converter Unit (SCU)
|
||||
- SCU Operation
|
||||
- CMD Block
|
||||
- Functional Blocks in CMD
|
||||
|
||||
Renesas R-Car datasheet
|
||||
- Sampling Rate Converter Unit (SCU)
|
||||
- Register Description
|
||||
- CTUn Scale Value exx Register (CTUn_SVxxR)
|
||||
|
||||
${LINUX}/sound/soc/sh/rcar/ctu.c
|
||||
- comment of header
|
||||
|
||||
You need to use "renesas,rsrc-card" sound card for it.
|
||||
example)
|
||||
|
||||
sound {
|
||||
compatible = "renesas,rsrc-card";
|
||||
...
|
||||
/*
|
||||
* CTU setting
|
||||
* All input data will be converted to 2ch
|
||||
* as output data
|
||||
*/
|
||||
convert-channels = <2>;
|
||||
...
|
||||
cpu {
|
||||
sound-dai = <&rcar_sound>;
|
||||
};
|
||||
codec {
|
||||
...
|
||||
};
|
||||
};
|
||||
|
||||
Ex) Exchange output channel
|
||||
Input -> Output
|
||||
1ch -> 0ch
|
||||
0ch -> 1ch
|
||||
|
||||
example of using matrix
|
||||
output 0ch = (input 0ch x 0) + (input 1ch x 1)
|
||||
output 1ch = (input 0ch x 1) + (input 1ch x 0)
|
||||
|
||||
amixer set "CTU Reset" on
|
||||
amixer set "CTU Pass" 9,10
|
||||
amixer set "CTU SV0" 0,4194304
|
||||
amixer set "CTU SV1" 4194304,0
|
||||
|
||||
example of changing connection
|
||||
amixer set "CTU Reset" on
|
||||
amixer set "CTU Pass" 2,1
|
||||
|
||||
=============================================
|
||||
* MIX (Mixer)
|
||||
=============================================
|
||||
|
||||
MIX merges 2 sounds path. You can see 2 sound interface on system,
|
||||
and these sounds will be merged by MIX.
|
||||
|
||||
aplay -D plughw:0,0 xxxx.wav &
|
||||
aplay -D plughw:0,1 yyyy.wav
|
||||
|
||||
You need to use "renesas,rsrc-card" sound card for it.
|
||||
Ex)
|
||||
[MEM] -> [SRC1] -> [CTU02] -+-> [MIX0] -> [DVC0] -> [SSI0]
|
||||
|
|
||||
[MEM] -> [SRC2] -> [CTU03] -+
|
||||
|
||||
sound {
|
||||
compatible = "renesas,rsrc-card";
|
||||
...
|
||||
cpu@0 {
|
||||
sound-dai = <&rcar_sound 0>;
|
||||
};
|
||||
cpu@1 {
|
||||
sound-dai = <&rcar_sound 1>;
|
||||
};
|
||||
codec {
|
||||
...
|
||||
};
|
||||
};
|
||||
|
||||
&rcar_sound {
|
||||
...
|
||||
rcar_sound,dai {
|
||||
dai0 {
|
||||
playback = <&src1 &ctu02 &mix0 &dvc0 &ssi0>;
|
||||
};
|
||||
dai1 {
|
||||
playback = <&src2 &ctu03 &mix0 &dvc0 &ssi0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
=============================================
|
||||
* DVC (Digital Volume and Mute Function)
|
||||
=============================================
|
||||
|
||||
DVC controls Playback/Capture volume.
|
||||
|
||||
Playback Volume
|
||||
amixer set "DVC Out" 100%
|
||||
|
||||
Capture Volume
|
||||
amixer set "DVC In" 100%
|
||||
|
||||
Playback Mute
|
||||
amixer set "DVC Out Mute" on
|
||||
|
||||
Capture Mute
|
||||
amixer set "DVC In Mute" on
|
||||
|
||||
Volume Ramp
|
||||
amixer set "DVC Out Ramp Up Rate" "0.125 dB/64 steps"
|
||||
amixer set "DVC Out Ramp Down Rate" "0.125 dB/512 steps"
|
||||
amixer set "DVC Out Ramp" on
|
||||
aplay xxx.wav &
|
||||
amixer set "DVC Out" 80% // Volume Down
|
||||
amixer set "DVC Out" 100% // Volume Up
|
||||
|
||||
=============================================
|
||||
* SSIU (Serial Sound Interface Unit)
|
||||
=============================================
|
||||
|
||||
There is no DT settings for SSIU, because SSIU will be automatically
|
||||
selected via SSI.
|
||||
SSIU can avoid some under/over run error, because it has some buffer.
|
||||
But you can't use it if SSI was PIO mode.
|
||||
In DMA mode, you can select not to use SSIU by using "no-busif" on DT.
|
||||
|
||||
&ssi0 {
|
||||
no-busif;
|
||||
};
|
||||
|
||||
=============================================
|
||||
* SSI (Serial Sound Interface)
|
||||
=============================================
|
||||
|
||||
** PIO mode
|
||||
|
||||
You can use PIO mode which is for connection check by using.
|
||||
Note: The system will drop non-SSI modules in PIO mode
|
||||
even though if DT is selecting other modules.
|
||||
|
||||
&ssi0 {
|
||||
pio-transfer
|
||||
};
|
||||
|
||||
** DMA mode without SSIU
|
||||
|
||||
You can use DMA without SSIU.
|
||||
Note: under/over run, or noise are likely to occur
|
||||
|
||||
&ssi0 {
|
||||
no-busif;
|
||||
};
|
||||
|
||||
** PIN sharing
|
||||
|
||||
Each SSI can share WS pin. It is based on platform.
|
||||
This is example if SSI1 want to share WS pin with SSI0
|
||||
|
||||
&ssi1 {
|
||||
shared-pin;
|
||||
};
|
||||
|
||||
** Multi-SSI
|
||||
|
||||
You can use Multi-SSI.
|
||||
This is example of SSI0/SSI1/SSI2 (= for 6ch)
|
||||
|
||||
&rcar_sound {
|
||||
...
|
||||
rcar_sound,dai {
|
||||
dai0 {
|
||||
playback = <&ssi0 &ssi1 &ssi2 &src0 &dvc0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
** TDM-SSI
|
||||
|
||||
You can use TDM with SSI.
|
||||
This is example of TDM 6ch.
|
||||
Driver can automatically switches TDM <-> stereo mode in this case.
|
||||
|
||||
rsnd_tdm: sound {
|
||||
compatible = "simple-audio-card";
|
||||
...
|
||||
simple-audio-card,cpu {
|
||||
/* system can use TDM 6ch */
|
||||
dai-tdm-slot-num = <6>;
|
||||
sound-dai = <&rcar_sound>;
|
||||
};
|
||||
simple-audio-card,codec {
|
||||
...
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
=============================================
|
||||
Required properties:
|
||||
=============================================
|
||||
|
||||
- compatible : "renesas,rcar_sound-<soctype>", fallbacks
|
||||
"renesas,rcar_sound-gen1" if generation1, and
|
||||
"renesas,rcar_sound-gen2" if generation2
|
||||
@@ -64,7 +395,10 @@ DAI subnode properties:
|
||||
- playback : list of playback modules
|
||||
- capture : list of capture modules
|
||||
|
||||
|
||||
=============================================
|
||||
Example:
|
||||
=============================================
|
||||
|
||||
rcar_sound: sound@ec500000 {
|
||||
#sound-dai-cells = <1>;
|
||||
@@ -250,7 +584,9 @@ rcar_sound: sound@ec500000 {
|
||||
};
|
||||
};
|
||||
|
||||
=============================================
|
||||
Example: simple sound card
|
||||
=============================================
|
||||
|
||||
rsnd_ak4643: sound {
|
||||
compatible = "simple-audio-card";
|
||||
@@ -290,7 +626,9 @@ Example: simple sound card
|
||||
shared-pin;
|
||||
};
|
||||
|
||||
=============================================
|
||||
Example: simple sound card for TDM
|
||||
=============================================
|
||||
|
||||
rsnd_tdm: sound {
|
||||
compatible = "simple-audio-card";
|
||||
@@ -309,7 +647,9 @@ Example: simple sound card for TDM
|
||||
};
|
||||
};
|
||||
|
||||
=============================================
|
||||
Example: simple sound card for Multi channel
|
||||
=============================================
|
||||
|
||||
&rcar_sound {
|
||||
pinctrl-0 = <&sound_pins &sound_clk_pins>;
|
||||
|
||||
@@ -30,6 +30,7 @@ Optional subnode properties:
|
||||
- frame-inversion : bool property. Add this if the
|
||||
dai-link uses frame clock inversion.
|
||||
- convert-rate : platform specified sampling rate convert
|
||||
- convert-channels : platform specified converted channel size (2 - 8 ch)
|
||||
- audio-prefix : see audio-routing
|
||||
- audio-routing : A list of the connections between audio components.
|
||||
Each entry is a pair of strings, the first being the connection's sink,
|
||||
|
||||
@@ -9,6 +9,7 @@ Required properties:
|
||||
- "rockchip,rk3066-i2s": for rk3066
|
||||
- "rockchip,rk3188-i2s", "rockchip,rk3066-i2s": for rk3188
|
||||
- "rockchip,rk3288-i2s", "rockchip,rk3066-i2s": for rk3288
|
||||
- "rockchip,rk3399-i2s", "rockchip,rk3066-i2s": for rk3399
|
||||
- reg: physical base address of the controller and length of memory mapped
|
||||
region.
|
||||
- interrupts: should contain the I2S interrupt.
|
||||
|
||||
@@ -7,8 +7,12 @@ a fibre cable.
|
||||
Required properties:
|
||||
|
||||
- compatible: should be one of the following:
|
||||
- "rockchip,rk3288-spdif", "rockchip,rk3188-spdif" or
|
||||
"rockchip,rk3066-spdif"
|
||||
- "rockchip,rk3066-spdif"
|
||||
- "rockchip,rk3188-spdif"
|
||||
- "rockchip,rk3288-spdif"
|
||||
- "rockchip,rk3366-spdif"
|
||||
- "rockchip,rk3368-spdif"
|
||||
- "rockchip,rk3399-spdif"
|
||||
- reg: physical base address of the controller and length of memory mapped
|
||||
region.
|
||||
- interrupts: should contain the SPDIF interrupt.
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
RT5514 audio CODEC
|
||||
|
||||
This device supports I2C only.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : "realtek,rt5514".
|
||||
|
||||
- reg : The I2C address of the device.
|
||||
|
||||
Pins on the device (for linking into audio routes) for RT5514:
|
||||
|
||||
* DMIC1L
|
||||
* DMIC1R
|
||||
* DMIC2L
|
||||
* DMIC2R
|
||||
* AMICL
|
||||
* AMICR
|
||||
|
||||
Example:
|
||||
|
||||
codec: rt5514@57 {
|
||||
compatible = "realtek,rt5514";
|
||||
reg = <0x57>;
|
||||
};
|
||||
@@ -8,6 +8,12 @@ Required properties:
|
||||
|
||||
- reg : The I2C address of the device.
|
||||
|
||||
Optional properties:
|
||||
|
||||
- clocks: The phandle of the master clock to the CODEC.
|
||||
|
||||
- clock-names: Should be "mclk".
|
||||
|
||||
Pins on the device (for linking into audio routes) for RT5616:
|
||||
|
||||
* IN1P
|
||||
|
||||
@@ -12,6 +12,9 @@ Required properties:
|
||||
|
||||
Optional properties:
|
||||
|
||||
- clocks: The phandle of the master clock to the CODEC
|
||||
- clock-names: Should be "mclk"
|
||||
|
||||
- realtek,in1-differential
|
||||
- realtek,in2-differential
|
||||
- realtek,in3-differential
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
Allwinner Sony/Philips Digital Interface Format (S/PDIF) Controller
|
||||
|
||||
The Allwinner S/PDIF audio block is a transceiver that allows the
|
||||
processor to receive and transmit digital audio via an coaxial cable or
|
||||
a fibre cable.
|
||||
For now only playback is supported.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : should be one of the following:
|
||||
- "allwinner,sun4i-a10-spdif": for the Allwinner A10 SoC
|
||||
|
||||
- reg : Offset and length of the register set for the device.
|
||||
|
||||
- interrupts : Contains the spdif interrupt.
|
||||
|
||||
- dmas : Generic dma devicetree binding as described in
|
||||
Documentation/devicetree/bindings/dma/dma.txt.
|
||||
|
||||
- dma-names : Two dmas have to be defined, "tx" and "rx".
|
||||
|
||||
- clocks : Contains an entry for each entry in clock-names.
|
||||
|
||||
- clock-names : Includes the following entries:
|
||||
"apb" clock for the spdif bus.
|
||||
"spdif" clock for spdif controller.
|
||||
|
||||
Example:
|
||||
|
||||
spdif: spdif@01c21000 {
|
||||
compatible = "allwinner,sun4i-a10-spdif";
|
||||
reg = <0x01c21000 0x40>;
|
||||
interrupts = <13>;
|
||||
clocks = <&apb0_gates 1>, <&spdif_clk>;
|
||||
clock-names = "apb", "spdif";
|
||||
dmas = <&dma 0 2>, <&dma 0 2>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "okay";
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
Texas Intstruments ADS117x ADC
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : "ti,ads1174" or "ti,ads1178"
|
||||
|
||||
Example:
|
||||
|
||||
ads1178 {
|
||||
compatible = "ti,ads1178";
|
||||
};
|
||||
@@ -1910,6 +1910,12 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
- Default: 0x0000
|
||||
ignore_ctl_error - Ignore any USB-controller regarding mixer
|
||||
interface (default: no)
|
||||
autoclock - Enable auto-clock selection for UAC2 devices
|
||||
(default: yes)
|
||||
quirk_alias - Quirk alias list, pass strings like
|
||||
"0123abcd:5678beef", which applies the existing
|
||||
quirk for the device 5678:beef to a new device
|
||||
0123:abcd.
|
||||
|
||||
This module supports multiple devices, autoprobe and hotplugging.
|
||||
|
||||
@@ -1919,6 +1925,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
NB: ignore_ctl_error=1 may help when you get an error at accessing
|
||||
the mixer element such as URB error -22. This happens on some
|
||||
buggy USB device or the controller.
|
||||
NB: quirk_alias option is provided only for testing / development.
|
||||
If you want to have a proper support, contact to upstream for
|
||||
adding the matching quirk in the driver code statically.
|
||||
|
||||
Module snd-usb-caiaq
|
||||
--------------------
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
To support DP MST audio, HD Audio hdmi codec driver introduces virtual pin
|
||||
and dynamic pcm assignment.
|
||||
|
||||
Virtual pin is an extension of per_pin. The most difference of DP MST
|
||||
from legacy is that DP MST introduces device entry. Each pin can contain
|
||||
several device entries. Each device entry behaves as a pin.
|
||||
|
||||
As each pin may contain several device entries and each codec may contain
|
||||
several pins, if we use one pcm per per_pin, there will be many PCMs.
|
||||
The new solution is to create a few PCMs and to dynamically bind pcm to
|
||||
per_pin. Driver uses spec->dyn_pcm_assign flag to indicate whether to use
|
||||
the new solution.
|
||||
|
||||
PCM
|
||||
===
|
||||
To be added
|
||||
|
||||
|
||||
Jack
|
||||
====
|
||||
|
||||
Presume:
|
||||
- MST must be dyn_pcm_assign, and it is acomp (for Intel scenario);
|
||||
- NON-MST may or may not be dyn_pcm_assign, it can be acomp or !acomp;
|
||||
|
||||
So there are the following scenarios:
|
||||
a. MST (&& dyn_pcm_assign && acomp)
|
||||
b. NON-MST && dyn_pcm_assign && acomp
|
||||
c. NON-MST && !dyn_pcm_assign && !acomp
|
||||
|
||||
Below discussion will ignore MST and NON-MST difference as it doesn't
|
||||
impact on jack handling too much.
|
||||
|
||||
Driver uses struct hdmi_pcm pcm[] array in hdmi_spec and snd_jack is
|
||||
a member of hdmi_pcm. Each pin has one struct hdmi_pcm * pcm pointer.
|
||||
|
||||
For !dyn_pcm_assign, per_pin->pcm will assigned to spec->pcm[n] statically.
|
||||
|
||||
For dyn_pcm_assign, per_pin->pcm will assigned to spec->pcm[n]
|
||||
when monitor is hotplugged.
|
||||
|
||||
|
||||
Build Jack
|
||||
----------
|
||||
|
||||
- dyn_pcm_assign
|
||||
Will not use hda_jack but use snd_jack in spec->pcm_rec[pcm_idx].jack directly.
|
||||
|
||||
- !dyn_pcm_assign
|
||||
Use hda_jack and assign spec->pcm_rec[pcm_idx].jack = jack->jack statically.
|
||||
|
||||
|
||||
Unsolicited Event Enabling
|
||||
--------------------------
|
||||
Enable unsolicited event if !acomp.
|
||||
|
||||
|
||||
Monitor Hotplug Event Handling
|
||||
------------------------------
|
||||
- acomp
|
||||
pin_eld_notify() -> check_presence_and_report() -> hdmi_present_sense() ->
|
||||
sync_eld_via_acomp().
|
||||
Use directly snd_jack_report() on spec->pcm_rec[pcm_idx].jack for
|
||||
both dyn_pcm_assign and !dyn_pcm_assign
|
||||
|
||||
- !acomp
|
||||
Hdmi_unsol_event() -> hdmi_intrinsic_event() -> check_presence_and_report() ->
|
||||
hdmi_present_sense() -> hdmi_prepsent_sense_via_verbs()
|
||||
Use directly snd_jack_report() on spec->pcm_rec[pcm_idx].jack for dyn_pcm_assign.
|
||||
Use hda_jack mechanism to handle jack events.
|
||||
|
||||
|
||||
Others to be added later
|
||||
========================
|
||||
@@ -34,6 +34,7 @@ struct ssc_device *ssc_request(unsigned int ssc_num)
|
||||
if (ssc->pdev->dev.of_node) {
|
||||
if (of_alias_get_id(ssc->pdev->dev.of_node, "ssc")
|
||||
== ssc_num) {
|
||||
ssc->pdev->id = ssc_num;
|
||||
ssc_valid = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -403,6 +403,18 @@ static inline int drm_eld_size(const uint8_t *eld)
|
||||
return DRM_ELD_HEADER_BLOCK_SIZE + eld[DRM_ELD_BASELINE_ELD_LEN] * 4;
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_eld_get_conn_type - Get device type hdmi/dp connected
|
||||
* @eld: pointer to an ELD memory structure
|
||||
*
|
||||
* The caller need to use %DRM_ELD_CONN_TYPE_HDMI or %DRM_ELD_CONN_TYPE_DP to
|
||||
* identify the display type connected.
|
||||
*/
|
||||
static inline u8 drm_eld_get_conn_type(const uint8_t *eld)
|
||||
{
|
||||
return eld[DRM_ELD_SAD_COUNT_CONN_TYPE] & DRM_ELD_CONN_TYPE_MASK;
|
||||
}
|
||||
|
||||
struct edid *drm_do_get_edid(struct drm_connector *connector,
|
||||
int (*get_edid_block)(void *data, u8 *buf, unsigned int block,
|
||||
size_t len),
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user