mirror of
https://github.com/a52xq-dev/kernel.git
synced 2026-10-18 21:58:11 +07:00
sound updates for 3.18-rc1
This time it's a relatively calm update batch, but the amount isn't
too small in the end. Here we go over some highlights:
- ALSA core
- One major change is the support of nonatomic PCM operations.
This allows the trigger and other callbacks to call schedule(),
which would be useful for mailbox type communications. Already
some drivers (Digigram ones) have been converted to use together
with threaded irqs as an example.
- Improvement / fixes of DSD PCM format support
- HD-audio
- Large volume of rewrites are found in Realtek codec driver for
converting Dell and HP quirks to generic forms.
- Inverted dmic code cleanup from David.
- Realtek COEF access has been optimized.
- Now HD-audio jack infrastructure allows multiple callbacks, which
fixes / simplifies the jack-dependent power controls on STAC/IDT
and VIA codecs.
- Many additional device-specific fixups as usual
- A few deadcode cleanups, CA0132 code cleanup, etc.
- ASoC
- More componentization work from Lars-Peter, this time mainly
cleaning up the suspend and bias level transition callbacks.
- Real system support for the Intel drivers and a bunch of fixes
and enhancements for the associated CODEC drivers, this is going
to need a lot quirks over time due to the lack of any firmware
description of the boards.
- Jack detect support for simple card from Dylan Reid.
- A bunch of small fixes and enhancements for the Freescale
drivers.
- New drivers for Analog Devices SSM4567, Cirrus Logic CS35L32,
Everest Semiconductor ES8328 and Freescale cards using the ASRC
in newer i.MX processors.
- A few simple-card fixes, mostly cleanups but also a fix for
- interaction between GPIO 0 and simple-card.
- Misc
- Virtuoso / Oxygen updates by Clemens
- USB-audio: Yamaha MOTIF XF MIDI port name fixes
- Conversion of kernel messages to standard dev_*() in ctxfi
driver.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABAgAGBQJUNrU8AAoJEGwxgFQ9KSmkxZYQAI7DgkrCx2S1dIHij99jtJGz
FjhFSO/x8Jj0lgXkoCLRHXFgtq3iYjbyS9s0aokIpvAewD9SreVE977DsMqqZVJz
9FPOkv4keuxyJZ46mxJpYswDeazCjEYNFVbkYHhwsCiiyce8HyWMpe38tWrQfwSV
loJYbnEfjpTxFc4JPaQK3pIICRofQCZJonWv20K25pm7L8yG29jtqFsMQWjDCONb
ZVNwnvW61gl6ouuHincGGqVtj8pmkgKlU0l0bMgRNflRqRusrpQdobW56OEoM13H
Tq7xMp5Yxzg7j9sM/QzL+VAksHc1u1aBzg8XZKXjk9PsmH26h1gq98W2BDKQkMzF
U7MQaUks4x+apJcVVDoi5+15AOsyGoxNq9ahc0fe4ADTMSe94or78GaKptWMR+NK
pA2pX2zwvool4TYj+AtcK8SNwfVeBjSua9eNnNpaNTKuwPIX6Vch0O6jaEbQZSaC
92JYhqiC6HsW5tbhN3afTmeHxelBCpQfWPLVtgEl/eIhY3B72/1ZXWCCqwY+Ur8E
D3OCtuAjFnzvzr/gdHZWEnMu3HGt/xqOMVE0EHTQWokQpX2E3IF724YcttAzQakw
wS1ppeWSO5l+TkplqcqurEA7Bq1mN6bO/q9UK+iduIiYmvtNI3fDPTlXXy2SxRUz
QuIEpsIKuZFFumFksQd9
=S4IQ
-----END PGP SIGNATURE-----
Merge tag 'sound-3.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound updates from Takashi Iwai:
"This time it's a relatively calm update batch, but the amount isn't
too small in the end. Here we go over some highlights:
ALSA core:
- One major change is the support of nonatomic PCM operations. This
allows the trigger and other callbacks to call schedule(), which
would be useful for mailbox type communications. Already some
drivers (Digigram ones) have been converted to use together with
threaded irqs as an example.
- Improvement / fixes of DSD PCM format support
HD-audio:
- Large volume of rewrites are found in Realtek codec driver for
converting Dell and HP quirks to generic forms.
- Inverted dmic code cleanup from David.
- Realtek COEF access has been optimized.
- Now HD-audio jack infrastructure allows multiple callbacks, which
fixes / simplifies the jack-dependent power controls on STAC/IDT
and VIA codecs.
- Many additional device-specific fixups as usual
- A few deadcode cleanups, CA0132 code cleanup, etc.
ASoC:
- More componentization work from Lars-Peter, this time mainly
cleaning up the suspend and bias level transition callbacks.
- Real system support for the Intel drivers and a bunch of fixes and
enhancements for the associated CODEC drivers, this is going to
need a lot quirks over time due to the lack of any firmware
description of the boards.
- Jack detect support for simple card from Dylan Reid.
- A bunch of small fixes and enhancements for the Freescale drivers.
- New drivers for Analog Devices SSM4567, Cirrus Logic CS35L32,
Everest Semiconductor ES8328 and Freescale cards using the ASRC in
newer i.MX processors.
- A few simple-card fixes, mostly cleanups but also a fix for
interaction between GPIO 0 and simple-card.
Misc:
- Virtuoso / Oxygen updates by Clemens
- USB-audio: Yamaha MOTIF XF MIDI port name fixes
- Conversion of kernel messages to standard dev_*() in ctxfi driver"
* tag 'sound-3.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (251 commits)
ASoC: mc13783: Ensure we only try to dereference valid of_nodes
ASoC: rockchip-i2s: fix infinite loop in rockchip_snd_txctrl
ALSA: hda - Add dock port support to Thinkpad L440 (71aa:501e)
ALSA: Allow pass NULL dev for snd_pci_quirk_lookup()
ASoC: imx-es8328: Fix of_node_put() call with uninitialized object
ASoC: soc-pcm: fix sig_bits determination in soc_pcm_apply_msb()
ASoC: simple-card: Initialize headphone and mic GPIO numbers
ASoC: imx-es8328: Fix missing return code in imx_es8328_probe()
ALSA: hda - Add dock support for Thinkpad T440 (17aa:2212)
ALSA: usb: caiaq: check for cdev->n_streams > 1
ASoC: 88pm860x-codec: Fix possibly missing string termination
ASoC: core: fix use after free in snd_soc_remove_platform()
ASoC: soc-dapm: fix use after free
ALSA: hda - Make the inv dmic handling for Realtek use generic parser
ALSA: hda - Add Inverted Internal mic for Samsung Ativ book 9 (NP900X3G)
ALSA: hda - Add inverted internal mic for Asus Aspire 4830T
ASoC: Intel: byt-rt5640: fix coccinelle warnings
ASoC: fsl_esai doc: Add "fsl,vf610-esai" as compatible string
ASoC: da732x: Remove unnecessary KERN_ERR in pr_err()
ASoC: simple-card: Fix detect gpio documentation.
...
This commit is contained in:
commit
a2ce35273c
195 changed files with 8018 additions and 3263 deletions
|
|
@ -2742,7 +2742,9 @@ struct _snd_pcm_runtime {
|
|||
|
||||
<para>
|
||||
Another note is that this callback is non-atomic
|
||||
(schedulable). This is important, because the
|
||||
(schedulable) as default, i.e. when no
|
||||
<structfield>nonatomic</structfield> flag set.
|
||||
This is important, because the
|
||||
<structfield>trigger</structfield> callback
|
||||
is atomic (non-schedulable). That is, mutexes or any
|
||||
schedule-related functions are not available in
|
||||
|
|
@ -2900,8 +2902,9 @@ struct _snd_pcm_runtime {
|
|||
</para>
|
||||
|
||||
<para>
|
||||
As mentioned, this callback is atomic. You cannot call
|
||||
functions which may sleep.
|
||||
As mentioned, this callback is atomic as default unless
|
||||
<structfield>nonatomic</structfield> flag set, and
|
||||
you cannot call functions which may sleep.
|
||||
The trigger callback should be as minimal as possible,
|
||||
just really triggering the DMA. The other stuff should be
|
||||
initialized hw_params and prepare callbacks properly
|
||||
|
|
@ -2936,7 +2939,7 @@ struct _snd_pcm_runtime {
|
|||
</para>
|
||||
|
||||
<para>
|
||||
This callback is also atomic.
|
||||
This callback is also atomic as default.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
|
|
@ -2972,7 +2975,7 @@ struct _snd_pcm_runtime {
|
|||
is useful only for such a purpose.
|
||||
</para>
|
||||
<para>
|
||||
This callback is atomic.
|
||||
This callback is atomic as default.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
|
|
@ -3175,6 +3178,21 @@ struct _snd_pcm_runtime {
|
|||
called with local interrupts disabled.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The recent changes in PCM core code, however, allow all PCM
|
||||
operations to be non-atomic. This assumes that the all caller
|
||||
sides are in non-atomic contexts. For example, the function
|
||||
<function>snd_pcm_period_elapsed()</function> is called
|
||||
typically from the interrupt handler. But, if you set up the
|
||||
driver to use a threaded interrupt handler, this call can be in
|
||||
non-atomic context, too. In such a case, you can set
|
||||
<structfield>nonatomic</structfield> filed of
|
||||
<structname>snd_pcm</structname> object after creating it.
|
||||
When this flag is set, mutex and rwsem are used internally in
|
||||
the PCM core instead of spin and rwlocks, so that you can call
|
||||
all PCM functions safely in a non-atomic context.
|
||||
</para>
|
||||
|
||||
</section>
|
||||
<section id="pcm-interface-constraints">
|
||||
<title>Constraints</title>
|
||||
|
|
|
|||
19
Documentation/devicetree/bindings/sound/adi,ssm2602.txt
Normal file
19
Documentation/devicetree/bindings/sound/adi,ssm2602.txt
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
Analog Devices SSM2602, SSM2603 and SSM2604 I2S audio CODEC devices
|
||||
|
||||
SSM2602 support both I2C and SPI as the configuration interface,
|
||||
the selection is made by the MODE strap-in pin.
|
||||
SSM2603 and SSM2604 only support I2C as the configuration interface.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : One of "adi,ssm2602", "adi,ssm2603" or "adi,ssm2604"
|
||||
|
||||
- reg : the I2C address of the device for I2C, the chip select
|
||||
number for SPI.
|
||||
|
||||
Example:
|
||||
|
||||
ssm2602: ssm2602@1a {
|
||||
compatible = "adi,ssm2602";
|
||||
reg = <0x1a>;
|
||||
};
|
||||
62
Documentation/devicetree/bindings/sound/cs35l32.txt
Normal file
62
Documentation/devicetree/bindings/sound/cs35l32.txt
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
CS35L32 audio CODEC
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : "cirrus,cs35l32"
|
||||
|
||||
- reg : the I2C address of the device for I2C. Address is determined by the level
|
||||
of the AD0 pin. Level 0 is 0x40 while Level 1 is 0x41.
|
||||
|
||||
- VA-supply, VP-supply : power supplies for the device,
|
||||
as covered in Documentation/devicetree/bindings/regulator/regulator.txt.
|
||||
|
||||
Optional properties:
|
||||
|
||||
- reset-gpios : a GPIO spec for the reset pin. If specified, it will be
|
||||
deasserted before communication to the codec starts.
|
||||
|
||||
- cirrus,boost-manager : Boost voltage control.
|
||||
0 = Automatically managed. Boost-converter output voltage is the higher
|
||||
of the two: Class G or adaptive LED voltage.
|
||||
1 = Automatically managed irrespective of audio, adapting for low-power
|
||||
dissipation when LEDs are ON, and operating in Fixed-Boost Bypass Mode
|
||||
if LEDs are OFF (VBST = VP).
|
||||
2 = (Default) Boost voltage fixed in Bypass Mode (VBST = VP).
|
||||
3 = Boost voltage fixed at 5 V.
|
||||
|
||||
- cirrus,sdout-datacfg : Data configuration for dual CS35L32 applications only.
|
||||
Determines the data packed in a two-CS35L32 configuration.
|
||||
0 = Left/right channels VMON[11:0], IMON[11:0], VPMON[7:0].
|
||||
1 = Left/right channels VMON[11:0], IMON[11:0], STATUS.
|
||||
2 = (Default) left/right channels VMON[15:0], IMON [15:0].
|
||||
3 = Left/right channels VPMON[7:0], STATUS.
|
||||
|
||||
- cirrus,sdout-share : SDOUT sharing. Determines whether one or two CS35L32
|
||||
devices are on board sharing SDOUT.
|
||||
0 = (Default) One IC.
|
||||
1 = Two IC's.
|
||||
|
||||
- cirrus,battery-recovery : Low battery nominal recovery threshold, rising VP.
|
||||
0 = 3.1V
|
||||
1 = 3.2V
|
||||
2 = 3.3V (Default)
|
||||
3 = 3.4V
|
||||
|
||||
- cirrus,battery-threshold : Low battery nominal threshold, falling VP.
|
||||
0 = 3.1V
|
||||
1 = 3.2V
|
||||
2 = 3.3V
|
||||
3 = 3.4V (Default)
|
||||
4 = 3.5V
|
||||
5 = 3.6V
|
||||
|
||||
Example:
|
||||
|
||||
codec: codec@40 {
|
||||
compatible = "cirrus,cs35l32";
|
||||
reg = <0x40>;
|
||||
reset-gpios = <&gpio 10 0>;
|
||||
cirrus,boost-manager = <0x03>;
|
||||
cirrus,sdout-datacfg = <0x02>;
|
||||
VA-supply = <®_audio>;
|
||||
};
|
||||
38
Documentation/devicetree/bindings/sound/es8328.txt
Normal file
38
Documentation/devicetree/bindings/sound/es8328.txt
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
Everest ES8328 audio CODEC
|
||||
|
||||
This device supports both I2C and SPI.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : "everest,es8328"
|
||||
- DVDD-supply : Regulator providing digital core supply voltage 1.8 - 3.6V
|
||||
- AVDD-supply : Regulator providing analog supply voltage 3.3V
|
||||
- PVDD-supply : Regulator providing digital IO supply voltage 1.8 - 3.6V
|
||||
- IPVDD-supply : Regulator providing analog output voltage 3.3V
|
||||
- clocks : A 22.5792 or 11.2896 MHz clock
|
||||
- reg : the I2C address of the device for I2C, the chip select number for SPI
|
||||
|
||||
Pins on the device (for linking into audio routes):
|
||||
|
||||
* LOUT1
|
||||
* LOUT2
|
||||
* ROUT1
|
||||
* ROUT2
|
||||
* LINPUT1
|
||||
* RINPUT1
|
||||
* LINPUT2
|
||||
* RINPUT2
|
||||
* Mic Bias
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
codec: es8328@11 {
|
||||
compatible = "everest,es8328";
|
||||
DVDD-supply = <®_3p3v>;
|
||||
AVDD-supply = <®_3p3v>;
|
||||
PVDD-supply = <®_3p3v>;
|
||||
HPVDD-supply = <®_3p3v>;
|
||||
clocks = <&clks 169>;
|
||||
reg = <0x11>;
|
||||
};
|
||||
|
|
@ -7,7 +7,8 @@ other DSPs. It has up to six transmitters and four receivers.
|
|||
|
||||
Required properties:
|
||||
|
||||
- compatible : Compatible list, must contain "fsl,imx35-esai".
|
||||
- compatible : Compatible list, must contain "fsl,imx35-esai" or
|
||||
"fsl,vf610-esai"
|
||||
|
||||
- reg : Offset and length of the register set for the device.
|
||||
|
||||
|
|
|
|||
|
|
@ -58,13 +58,7 @@ Optional properties:
|
|||
Documentation/devicetree/bindings/dma/dma.txt.
|
||||
- dma-names: Two dmas have to be defined, "tx" and "rx", if fsl,imx-fiq
|
||||
is not defined.
|
||||
- fsl,mode: The operating mode for the SSI interface.
|
||||
"i2s-slave" - I2S mode, SSI is clock slave
|
||||
"i2s-master" - I2S mode, SSI is clock master
|
||||
"lj-slave" - left-justified mode, SSI is clock slave
|
||||
"lj-master" - l.j. mode, SSI is clock master
|
||||
"rj-slave" - right-justified mode, SSI is clock slave
|
||||
"rj-master" - r.j., SSI is clock master
|
||||
- fsl,mode: The operating mode for the AC97 interface only.
|
||||
"ac97-slave" - AC97 mode, SSI is clock slave
|
||||
"ac97-master" - AC97 mode, SSI is clock master
|
||||
|
||||
|
|
|
|||
82
Documentation/devicetree/bindings/sound/fsl-asoc-card.txt
Normal file
82
Documentation/devicetree/bindings/sound/fsl-asoc-card.txt
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
Freescale Generic ASoC Sound Card with ASRC support
|
||||
|
||||
The Freescale Generic ASoC Sound Card can be used, ideally, for all Freescale
|
||||
SoCs connecting with external CODECs.
|
||||
|
||||
The idea of this generic sound card is a bit like ASoC Simple Card. However,
|
||||
for Freescale SoCs (especially those released in recent years), most of them
|
||||
have ASRC (Documentation/devicetree/bindings/sound/fsl,asrc.txt) inside. And
|
||||
this is a specific feature that might be painstakingly controlled and merged
|
||||
into the Simple Card.
|
||||
|
||||
So having this generic sound card allows all Freescale SoC users to benefit
|
||||
from the simplification of a new card support and the capability of the wide
|
||||
sample rates support through ASRC.
|
||||
|
||||
Note: The card is initially designed for those sound cards who use I2S and
|
||||
PCM DAI formats. However, it'll be also possible to support those non
|
||||
I2S/PCM type sound cards, such as S/PDIF audio and HDMI audio, as long
|
||||
as the driver has been properly upgraded.
|
||||
|
||||
|
||||
The compatible list for this generic sound card currently:
|
||||
"fsl,imx-audio-cs42888"
|
||||
|
||||
"fsl,imx-audio-wm8962"
|
||||
(compatible with Documentation/devicetree/bindings/sound/imx-audio-wm8962.txt)
|
||||
|
||||
"fsl,imx-audio-sgtl5000"
|
||||
(compatible with Documentation/devicetree/bindings/sound/imx-audio-sgtl5000.txt)
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : Contains one of entries in the compatible list.
|
||||
|
||||
- model : The user-visible name of this sound complex
|
||||
|
||||
- audio-cpu : The phandle of an CPU DAI controller
|
||||
|
||||
- audio-codec : The phandle of an audio codec
|
||||
|
||||
- audio-routing : A list of the connections between audio components.
|
||||
Each entry is a pair of strings, the first being the
|
||||
connection's sink, the second being the connection's
|
||||
source. There're a few pre-designed board connectors:
|
||||
* Line Out Jack
|
||||
* Line In Jack
|
||||
* Headphone Jack
|
||||
* Mic Jack
|
||||
* Ext Spk
|
||||
* AMIC (stands for Analog Microphone Jack)
|
||||
* DMIC (stands for Digital Microphone Jack)
|
||||
|
||||
Note: The "Mic Jack" and "AMIC" are redundant while
|
||||
coexsiting in order to support the old bindings
|
||||
of wm8962 and sgtl5000.
|
||||
|
||||
Optional properties:
|
||||
|
||||
- audio-asrc : The phandle of ASRC. It can be absent if there's no
|
||||
need to add ASRC support via DPCM.
|
||||
|
||||
Example:
|
||||
sound-cs42888 {
|
||||
compatible = "fsl,imx-audio-cs42888";
|
||||
model = "cs42888-audio";
|
||||
audio-cpu = <&esai>;
|
||||
audio-asrc = <&asrc>;
|
||||
audio-codec = <&cs42888>;
|
||||
audio-routing =
|
||||
"Line Out Jack", "AOUT1L",
|
||||
"Line Out Jack", "AOUT1R",
|
||||
"Line Out Jack", "AOUT2L",
|
||||
"Line Out Jack", "AOUT2R",
|
||||
"Line Out Jack", "AOUT3L",
|
||||
"Line Out Jack", "AOUT3R",
|
||||
"Line Out Jack", "AOUT4L",
|
||||
"Line Out Jack", "AOUT4R",
|
||||
"AIN1L", "Line In Jack",
|
||||
"AIN1R", "Line In Jack",
|
||||
"AIN2L", "Line In Jack",
|
||||
"AIN2R", "Line In Jack";
|
||||
};
|
||||
|
|
@ -18,12 +18,26 @@ Required properties:
|
|||
- pinctrl-names: Must contain a "default" entry.
|
||||
- pinctrl-NNN: One property must exist for each entry in pinctrl-names.
|
||||
See ../pinctrl/pinctrl-bindings.txt for details of the property values.
|
||||
- big-endian-regs: If this property is absent, the little endian mode will
|
||||
be in use as default, or the big endian mode will be in use for all the
|
||||
device registers.
|
||||
- big-endian-data: If this property is absent, the little endian mode will
|
||||
be in use as default, or the big endian mode will be in use for all the
|
||||
fifo data.
|
||||
- big-endian: Boolean property, required if all the FTM_PWM registers
|
||||
are big-endian rather than little-endian.
|
||||
- lsb-first: Configures whether the LSB or the MSB is transmitted first for
|
||||
the fifo data. If this property is absent, the MSB is transmitted first as
|
||||
default, or the LSB is transmitted first.
|
||||
- fsl,sai-synchronous-rx: This is a boolean property. If present, indicating
|
||||
that SAI will work in the synchronous mode (sync Tx with Rx) which means
|
||||
both the transimitter and receiver will send and receive data by following
|
||||
receiver's bit clocks and frame sync clocks.
|
||||
- fsl,sai-asynchronous: This is a boolean property. If present, indicating
|
||||
that SAI will work in the asynchronous mode, which means both transimitter
|
||||
and receiver will send and receive data by following their own bit clocks
|
||||
and frame sync clocks separately.
|
||||
|
||||
Note:
|
||||
- If both fsl,sai-asynchronous and fsl,sai-synchronous-rx are absent, the
|
||||
default synchronous mode (sync Rx with Tx) will be used, which means both
|
||||
transimitter and receiver will send and receive data by following clocks
|
||||
of transimitter.
|
||||
- fsl,sai-asynchronous and fsl,sai-synchronous-rx are exclusive.
|
||||
|
||||
Example:
|
||||
sai2: sai@40031000 {
|
||||
|
|
@ -38,6 +52,6 @@ sai2: sai@40031000 {
|
|||
dma-names = "tx", "rx";
|
||||
dmas = <&edma0 0 VF610_EDMA_MUXID0_SAI2_TX>,
|
||||
<&edma0 0 VF610_EDMA_MUXID0_SAI2_RX>;
|
||||
big-endian-regs;
|
||||
big-endian-data;
|
||||
big-endian;
|
||||
lsb-first;
|
||||
};
|
||||
|
|
|
|||
60
Documentation/devicetree/bindings/sound/imx-audio-es8328.txt
Normal file
60
Documentation/devicetree/bindings/sound/imx-audio-es8328.txt
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
Freescale i.MX audio complex with ES8328 codec
|
||||
|
||||
Required properties:
|
||||
- compatible : "fsl,imx-audio-es8328"
|
||||
- model : The user-visible name of this sound complex
|
||||
- ssi-controller : The phandle of the i.MX SSI controller
|
||||
- jack-gpio : Optional GPIO for headphone jack
|
||||
- audio-amp-supply : Power regulator for speaker amps
|
||||
- audio-codec : The phandle of the ES8328 audio codec
|
||||
- audio-routing : A list of the connections between audio components.
|
||||
Each entry is a pair of strings, the first being the
|
||||
connection's sink, the second being the connection's
|
||||
source. Valid names could be power supplies, ES8328
|
||||
pins, and the jacks on the board:
|
||||
|
||||
Power supplies:
|
||||
* audio-amp
|
||||
|
||||
ES8328 pins:
|
||||
* LOUT1
|
||||
* LOUT2
|
||||
* ROUT1
|
||||
* ROUT2
|
||||
* LINPUT1
|
||||
* LINPUT2
|
||||
* RINPUT1
|
||||
* RINPUT2
|
||||
* Mic PGA
|
||||
|
||||
Board connectors:
|
||||
* Headphone
|
||||
* Speaker
|
||||
* Mic Jack
|
||||
- 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 (AUDMIX)
|
||||
|
||||
Note: The AUDMUX port numbering should start at 1, which is consistent with
|
||||
hardware manual.
|
||||
|
||||
Example:
|
||||
|
||||
sound {
|
||||
compatible = "fsl,imx-audio-es8328";
|
||||
model = "imx-audio-es8328";
|
||||
ssi-controller = <&ssi1>;
|
||||
audio-codec = <&codec>;
|
||||
jack-gpio = <&gpio5 15 0>;
|
||||
audio-amp-supply = <®_audio_amp>;
|
||||
audio-routing =
|
||||
"Speaker", "LOUT2",
|
||||
"Speaker", "ROUT2",
|
||||
"Speaker", "audio-amp",
|
||||
"Headphone", "ROUT1",
|
||||
"Headphone", "LOUT1",
|
||||
"LINPUT1", "Mic Jack",
|
||||
"RINPUT1", "Mic Jack",
|
||||
"Mic Jack", "Mic Bias";
|
||||
mux-int-port = <1>;
|
||||
mux-ext-port = <3>;
|
||||
};
|
||||
|
|
@ -25,6 +25,7 @@ Required properties:
|
|||
|
||||
Optional properties:
|
||||
- nvidia,hp-det-gpios : The GPIO that detect headphones are plugged in
|
||||
- nvidia,mic-det-gpios : The GPIO that detect microphones are plugged in
|
||||
|
||||
Example:
|
||||
|
||||
|
|
|
|||
59
Documentation/devicetree/bindings/sound/rt5677.txt
Normal file
59
Documentation/devicetree/bindings/sound/rt5677.txt
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
RT5677 audio CODEC
|
||||
|
||||
This device supports I2C only.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : "realtek,rt5677".
|
||||
|
||||
- reg : The I2C address of the device.
|
||||
|
||||
- interrupts : The CODEC's interrupt output.
|
||||
|
||||
- gpio-controller : Indicates this device is a GPIO controller.
|
||||
|
||||
- #gpio-cells : Should be two. The first cell is the pin number and the
|
||||
second cell is used to specify optional parameters (currently unused).
|
||||
|
||||
Optional properties:
|
||||
|
||||
- realtek,pow-ldo2-gpio : The GPIO that controls the CODEC's POW_LDO2 pin.
|
||||
|
||||
- realtek,in1-differential
|
||||
- realtek,in2-differential
|
||||
- realtek,lout1-differential
|
||||
- realtek,lout2-differential
|
||||
- realtek,lout3-differential
|
||||
Boolean. Indicate MIC1/2 input and LOUT1/2/3 outputs are differential,
|
||||
rather than single-ended.
|
||||
|
||||
Pins on the device (for linking into audio routes):
|
||||
|
||||
* IN1P
|
||||
* IN1N
|
||||
* IN2P
|
||||
* IN2N
|
||||
* MICBIAS1
|
||||
* DMIC1
|
||||
* DMIC2
|
||||
* DMIC3
|
||||
* DMIC4
|
||||
* LOUT1
|
||||
* LOUT2
|
||||
* LOUT3
|
||||
|
||||
Example:
|
||||
|
||||
rt5677 {
|
||||
compatible = "realtek,rt5677";
|
||||
reg = <0x2c>;
|
||||
interrupt-parent = <&gpio>;
|
||||
interrupts = <TEGRA_GPIO(W, 3) GPIO_ACTIVE_HIGH>;
|
||||
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
realtek,pow-ldo2-gpio =
|
||||
<&gpio TEGRA_GPIO(V, 3) GPIO_ACTIVE_HIGH>;
|
||||
realtek,in1-differential = "true";
|
||||
};
|
||||
|
|
@ -17,6 +17,10 @@ Optional properties:
|
|||
source.
|
||||
- simple-audio-card,mclk-fs : Multiplication factor between stream rate and codec
|
||||
mclk.
|
||||
- simple-audio-card,hp-det-gpio : Reference to GPIO that signals when
|
||||
headphones are attached.
|
||||
- simple-audio-card,mic-det-gpio : Reference to GPIO that signals when
|
||||
a microphone is attached.
|
||||
|
||||
Optional subnodes:
|
||||
|
||||
|
|
|
|||
15
Documentation/devicetree/bindings/sound/ssm4567.txt
Normal file
15
Documentation/devicetree/bindings/sound/ssm4567.txt
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
Analog Devices SSM4567 audio amplifier
|
||||
|
||||
This device supports I2C only.
|
||||
|
||||
Required properties:
|
||||
- compatible : Must be "adi,ssm4567"
|
||||
- reg : the I2C address of the device. This will either be 0x34 (LR_SEL/ADDR connected to AGND),
|
||||
0x35 (LR_SEL/ADDR connected to IOVDD) or 0x36 (LR_SEL/ADDR open).
|
||||
|
||||
Example:
|
||||
|
||||
ssm4567: ssm4567@34 {
|
||||
compatible = "adi,ssm4567";
|
||||
reg = <0x34>;
|
||||
};
|
||||
|
|
@ -51,6 +51,7 @@ epfl Ecole Polytechnique Fédérale de Lausanne
|
|||
epson Seiko Epson Corp.
|
||||
est ESTeem Wireless Modems
|
||||
eukrea Eukréa Electromatique
|
||||
everest Everest Semiconductor Co. Ltd.
|
||||
excito Excito
|
||||
fcs Fairchild Semiconductor
|
||||
fsl Freescale Semiconductor
|
||||
|
|
|
|||
26
include/dt-bindings/sound/cs35l32.h
Normal file
26
include/dt-bindings/sound/cs35l32.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#ifndef __DT_CS35L32_H
|
||||
#define __DT_CS35L32_H
|
||||
|
||||
#define CS35L32_BOOST_MGR_AUTO 0
|
||||
#define CS35L32_BOOST_MGR_AUTO_AUDIO 1
|
||||
#define CS35L32_BOOST_MGR_BYPASS 2
|
||||
#define CS35L32_BOOST_MGR_FIXED 3
|
||||
|
||||
#define CS35L32_DATA_CFG_LR_VP 0
|
||||
#define CS35L32_DATA_CFG_LR_STAT 1
|
||||
#define CS35L32_DATA_CFG_LR 2
|
||||
#define CS35L32_DATA_CFG_LR_VPSTAT 3
|
||||
|
||||
#define CS35L32_BATT_THRESH_3_1V 0
|
||||
#define CS35L32_BATT_THRESH_3_2V 1
|
||||
#define CS35L32_BATT_THRESH_3_3V 2
|
||||
#define CS35L32_BATT_THRESH_3_4V 3
|
||||
|
||||
#define CS35L32_BATT_RECOV_3_1V 0
|
||||
#define CS35L32_BATT_RECOV_3_2V 1
|
||||
#define CS35L32_BATT_RECOV_3_3V 2
|
||||
#define CS35L32_BATT_RECOV_3_4V 3
|
||||
#define CS35L32_BATT_RECOV_3_5V 4
|
||||
#define CS35L32_BATT_RECOV_3_6V 5
|
||||
|
||||
#endif /* __DT_CS35L32_H */
|
||||
|
|
@ -183,6 +183,7 @@ struct snd_pcm_ops {
|
|||
#define SNDRV_PCM_FMTBIT_G723_40_1B _SNDRV_PCM_FMTBIT(G723_40_1B)
|
||||
#define SNDRV_PCM_FMTBIT_DSD_U8 _SNDRV_PCM_FMTBIT(DSD_U8)
|
||||
#define SNDRV_PCM_FMTBIT_DSD_U16_LE _SNDRV_PCM_FMTBIT(DSD_U16_LE)
|
||||
#define SNDRV_PCM_FMTBIT_DSD_U32_LE _SNDRV_PCM_FMTBIT(DSD_U32_LE)
|
||||
|
||||
#ifdef SNDRV_LITTLE_ENDIAN
|
||||
#define SNDRV_PCM_FMTBIT_S16 SNDRV_PCM_FMTBIT_S16_LE
|
||||
|
|
@ -365,6 +366,7 @@ struct snd_pcm_runtime {
|
|||
|
||||
struct snd_pcm_group { /* keep linked substreams */
|
||||
spinlock_t lock;
|
||||
struct mutex mutex;
|
||||
struct list_head substreams;
|
||||
int count;
|
||||
};
|
||||
|
|
@ -460,6 +462,7 @@ struct snd_pcm {
|
|||
void (*private_free) (struct snd_pcm *pcm);
|
||||
struct device *dev; /* actual hw device this belongs to */
|
||||
bool internal; /* pcm is for internal use only */
|
||||
bool nonatomic; /* whole PCM operations are in non-atomic context */
|
||||
#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
|
||||
struct snd_pcm_oss oss;
|
||||
#endif
|
||||
|
|
@ -492,8 +495,6 @@ int snd_pcm_notify(struct snd_pcm_notify *notify, int nfree);
|
|||
* Native I/O
|
||||
*/
|
||||
|
||||
extern rwlock_t snd_pcm_link_rwlock;
|
||||
|
||||
int snd_pcm_info(struct snd_pcm_substream *substream, struct snd_pcm_info *info);
|
||||
int snd_pcm_info_user(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_info __user *info);
|
||||
|
|
@ -537,41 +538,18 @@ static inline int snd_pcm_stream_linked(struct snd_pcm_substream *substream)
|
|||
return substream->group != &substream->self_group;
|
||||
}
|
||||
|
||||
static inline void snd_pcm_stream_lock(struct snd_pcm_substream *substream)
|
||||
{
|
||||
read_lock(&snd_pcm_link_rwlock);
|
||||
spin_lock(&substream->self_group.lock);
|
||||
}
|
||||
|
||||
static inline void snd_pcm_stream_unlock(struct snd_pcm_substream *substream)
|
||||
{
|
||||
spin_unlock(&substream->self_group.lock);
|
||||
read_unlock(&snd_pcm_link_rwlock);
|
||||
}
|
||||
|
||||
static inline void snd_pcm_stream_lock_irq(struct snd_pcm_substream *substream)
|
||||
{
|
||||
read_lock_irq(&snd_pcm_link_rwlock);
|
||||
spin_lock(&substream->self_group.lock);
|
||||
}
|
||||
|
||||
static inline void snd_pcm_stream_unlock_irq(struct snd_pcm_substream *substream)
|
||||
{
|
||||
spin_unlock(&substream->self_group.lock);
|
||||
read_unlock_irq(&snd_pcm_link_rwlock);
|
||||
}
|
||||
|
||||
#define snd_pcm_stream_lock_irqsave(substream, flags) \
|
||||
do { \
|
||||
read_lock_irqsave(&snd_pcm_link_rwlock, (flags)); \
|
||||
spin_lock(&substream->self_group.lock); \
|
||||
} while (0)
|
||||
|
||||
#define snd_pcm_stream_unlock_irqrestore(substream, flags) \
|
||||
do { \
|
||||
spin_unlock(&substream->self_group.lock); \
|
||||
read_unlock_irqrestore(&snd_pcm_link_rwlock, (flags)); \
|
||||
} while (0)
|
||||
void snd_pcm_stream_lock(struct snd_pcm_substream *substream);
|
||||
void snd_pcm_stream_unlock(struct snd_pcm_substream *substream);
|
||||
void snd_pcm_stream_lock_irq(struct snd_pcm_substream *substream);
|
||||
void snd_pcm_stream_unlock_irq(struct snd_pcm_substream *substream);
|
||||
unsigned long _snd_pcm_stream_lock_irqsave(struct snd_pcm_substream *substream);
|
||||
#define snd_pcm_stream_lock_irqsave(substream, flags) \
|
||||
do { \
|
||||
typecheck(unsigned long, flags); \
|
||||
flags = _snd_pcm_stream_lock_irqsave(substream); \
|
||||
} while (0)
|
||||
void snd_pcm_stream_unlock_irqrestore(struct snd_pcm_substream *substream,
|
||||
unsigned long flags);
|
||||
|
||||
#define snd_pcm_group_for_each_entry(s, substream) \
|
||||
list_for_each_entry(s, &substream->group->substreams, link_list)
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@ struct rt5645_platform_data {
|
|||
/* 0 = IN2N; 1 = GPIO5; 2 = GPIO11 */
|
||||
unsigned int dmic2_data_pin;
|
||||
/* 0 = IN2P; 1 = GPIO6; 2 = GPIO10; 3 = GPIO12 */
|
||||
|
||||
unsigned int hp_det_gpio;
|
||||
bool gpio_hp_det_active_high;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -12,10 +12,21 @@
|
|||
#ifndef __LINUX_SND_RT5677_H
|
||||
#define __LINUX_SND_RT5677_H
|
||||
|
||||
enum rt5677_dmic2_clk {
|
||||
RT5677_DMIC_CLK1 = 0,
|
||||
RT5677_DMIC_CLK2 = 1,
|
||||
};
|
||||
|
||||
|
||||
struct rt5677_platform_data {
|
||||
/* IN1 IN2 can optionally be differential */
|
||||
/* IN1/IN2/LOUT1/LOUT2/LOUT3 can optionally be differential */
|
||||
bool in1_diff;
|
||||
bool in2_diff;
|
||||
bool lout1_diff;
|
||||
bool lout2_diff;
|
||||
bool lout3_diff;
|
||||
/* DMIC2 clock source selection */
|
||||
enum rt5677_dmic2_clk dmic2_clk_pin;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -432,6 +432,7 @@ int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
|
|||
int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
void snd_soc_dapm_auto_nc_pins(struct snd_soc_card *card);
|
||||
unsigned int dapm_kcontrol_get_value(const struct snd_kcontrol *kcontrol);
|
||||
|
||||
/* Mostly internal - should not normally be used */
|
||||
void dapm_mark_io_dirty(struct snd_soc_dapm_context *dapm);
|
||||
|
|
@ -587,13 +588,13 @@ struct snd_soc_dapm_context {
|
|||
enum snd_soc_bias_level suspend_bias_level;
|
||||
struct delayed_work delayed_work;
|
||||
unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */
|
||||
|
||||
/* Go to BIAS_OFF in suspend if the DAPM context is idle */
|
||||
unsigned int suspend_bias_off:1;
|
||||
void (*seq_notifier)(struct snd_soc_dapm_context *,
|
||||
enum snd_soc_dapm_type, int);
|
||||
|
||||
struct device *dev; /* from parent - for debug */
|
||||
struct snd_soc_component *component; /* parent component */
|
||||
struct snd_soc_codec *codec; /* parent codec */
|
||||
struct snd_soc_card *card; /* parent card */
|
||||
|
||||
/* used during DAPM updates */
|
||||
|
|
|
|||
|
|
@ -690,6 +690,17 @@ struct snd_soc_compr_ops {
|
|||
struct snd_soc_component_driver {
|
||||
const char *name;
|
||||
|
||||
/* Default control and setup, added after probe() is run */
|
||||
const struct snd_kcontrol_new *controls;
|
||||
unsigned int num_controls;
|
||||
const struct snd_soc_dapm_widget *dapm_widgets;
|
||||
unsigned int num_dapm_widgets;
|
||||
const struct snd_soc_dapm_route *dapm_routes;
|
||||
unsigned int num_dapm_routes;
|
||||
|
||||
int (*probe)(struct snd_soc_component *);
|
||||
void (*remove)(struct snd_soc_component *);
|
||||
|
||||
/* DT */
|
||||
int (*of_xlate_dai_name)(struct snd_soc_component *component,
|
||||
struct of_phandle_args *args,
|
||||
|
|
@ -697,6 +708,10 @@ struct snd_soc_component_driver {
|
|||
void (*seq_notifier)(struct snd_soc_component *, enum snd_soc_dapm_type,
|
||||
int subseq);
|
||||
int (*stream_event)(struct snd_soc_component *, int event);
|
||||
|
||||
/* probe ordering - for components with runtime dependencies */
|
||||
int probe_order;
|
||||
int remove_order;
|
||||
};
|
||||
|
||||
struct snd_soc_component {
|
||||
|
|
@ -710,6 +725,7 @@ struct snd_soc_component {
|
|||
|
||||
unsigned int ignore_pmdown_time:1; /* pmdown_time is ignored at stop */
|
||||
unsigned int registered_as_component:1;
|
||||
unsigned int probed:1;
|
||||
|
||||
struct list_head list;
|
||||
|
||||
|
|
@ -728,9 +744,35 @@ struct snd_soc_component {
|
|||
|
||||
struct mutex io_mutex;
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_root;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* DO NOT use any of the fields below in drivers, they are temporary and
|
||||
* are going to be removed again soon. If you use them in driver code the
|
||||
* driver will be marked as BROKEN when these fields are removed.
|
||||
*/
|
||||
|
||||
/* Don't use these, use snd_soc_component_get_dapm() */
|
||||
struct snd_soc_dapm_context dapm;
|
||||
struct snd_soc_dapm_context *dapm_ptr;
|
||||
|
||||
const struct snd_kcontrol_new *controls;
|
||||
unsigned int num_controls;
|
||||
const struct snd_soc_dapm_widget *dapm_widgets;
|
||||
unsigned int num_dapm_widgets;
|
||||
const struct snd_soc_dapm_route *dapm_routes;
|
||||
unsigned int num_dapm_routes;
|
||||
struct snd_soc_codec *codec;
|
||||
|
||||
int (*probe)(struct snd_soc_component *);
|
||||
void (*remove)(struct snd_soc_component *);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
void (*init_debugfs)(struct snd_soc_component *component);
|
||||
const char *debugfs_prefix;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* SoC Audio Codec device */
|
||||
|
|
@ -746,11 +788,9 @@ struct snd_soc_codec {
|
|||
struct snd_ac97 *ac97; /* for ad-hoc ac97 devices */
|
||||
unsigned int cache_bypass:1; /* Suppress access to the cache */
|
||||
unsigned int suspended:1; /* Codec is in suspend PM state */
|
||||
unsigned int probed:1; /* Codec has been probed */
|
||||
unsigned int ac97_registered:1; /* Codec has been AC97 registered */
|
||||
unsigned int ac97_created:1; /* Codec has been created by SoC */
|
||||
unsigned int cache_init:1; /* codec cache has been initialized */
|
||||
u32 cache_only; /* Suppress writes to hardware */
|
||||
u32 cache_sync; /* Cache needs to be synced to hardware */
|
||||
|
||||
/* codec IO */
|
||||
|
|
@ -766,7 +806,6 @@ struct snd_soc_codec {
|
|||
struct snd_soc_dapm_context dapm;
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_codec_root;
|
||||
struct dentry *debugfs_reg;
|
||||
#endif
|
||||
};
|
||||
|
|
@ -808,15 +847,12 @@ struct snd_soc_codec_driver {
|
|||
int (*set_bias_level)(struct snd_soc_codec *,
|
||||
enum snd_soc_bias_level level);
|
||||
bool idle_bias_off;
|
||||
bool suspend_bias_off;
|
||||
|
||||
void (*seq_notifier)(struct snd_soc_dapm_context *,
|
||||
enum snd_soc_dapm_type, int);
|
||||
|
||||
bool ignore_pmdown_time; /* Doesn't benefit from pmdown delay */
|
||||
|
||||
/* probe ordering - for components with runtime dependencies */
|
||||
int probe_order;
|
||||
int remove_order;
|
||||
};
|
||||
|
||||
/* SoC platform interface */
|
||||
|
|
@ -832,14 +868,6 @@ struct snd_soc_platform_driver {
|
|||
int (*pcm_new)(struct snd_soc_pcm_runtime *);
|
||||
void (*pcm_free)(struct snd_pcm *);
|
||||
|
||||
/* Default control and setup, added after probe() is run */
|
||||
const struct snd_kcontrol_new *controls;
|
||||
int num_controls;
|
||||
const struct snd_soc_dapm_widget *dapm_widgets;
|
||||
int num_dapm_widgets;
|
||||
const struct snd_soc_dapm_route *dapm_routes;
|
||||
int num_dapm_routes;
|
||||
|
||||
/*
|
||||
* For platform caused delay reporting.
|
||||
* Optional.
|
||||
|
|
@ -853,13 +881,6 @@ struct snd_soc_platform_driver {
|
|||
/* platform stream compress ops */
|
||||
const struct snd_compr_ops *compr_ops;
|
||||
|
||||
/* probe ordering - for components with runtime dependencies */
|
||||
int probe_order;
|
||||
int remove_order;
|
||||
|
||||
/* platform IO - used for platform DAPM */
|
||||
unsigned int (*read)(struct snd_soc_platform *, unsigned int);
|
||||
int (*write)(struct snd_soc_platform *, unsigned int, unsigned int);
|
||||
int (*bespoke_trigger)(struct snd_pcm_substream *, int);
|
||||
};
|
||||
|
||||
|
|
@ -874,15 +895,10 @@ struct snd_soc_platform {
|
|||
const struct snd_soc_platform_driver *driver;
|
||||
|
||||
unsigned int suspended:1; /* platform is suspended */
|
||||
unsigned int probed:1;
|
||||
|
||||
struct list_head list;
|
||||
|
||||
struct snd_soc_component component;
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_platform_root;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct snd_soc_dai_link {
|
||||
|
|
@ -897,7 +913,7 @@ struct snd_soc_dai_link {
|
|||
* only for codec to codec links, or systems using device tree.
|
||||
*/
|
||||
const char *cpu_name;
|
||||
const struct device_node *cpu_of_node;
|
||||
struct device_node *cpu_of_node;
|
||||
/*
|
||||
* You MAY specify the DAI name of the CPU DAI. If this information is
|
||||
* omitted, the CPU-side DAI is matched using .cpu_name/.cpu_of_node
|
||||
|
|
@ -909,7 +925,7 @@ struct snd_soc_dai_link {
|
|||
* DT/OF node, but not both.
|
||||
*/
|
||||
const char *codec_name;
|
||||
const struct device_node *codec_of_node;
|
||||
struct device_node *codec_of_node;
|
||||
/* You MUST specify the DAI name within the codec */
|
||||
const char *codec_dai_name;
|
||||
|
||||
|
|
@ -922,7 +938,7 @@ struct snd_soc_dai_link {
|
|||
* do not need a platform.
|
||||
*/
|
||||
const char *platform_name;
|
||||
const struct device_node *platform_of_node;
|
||||
struct device_node *platform_of_node;
|
||||
int be_id; /* optional ID for machine driver BE identification */
|
||||
|
||||
const struct snd_soc_pcm_stream *params;
|
||||
|
|
@ -994,7 +1010,7 @@ struct snd_soc_aux_dev {
|
|||
const struct device_node *codec_of_node;
|
||||
|
||||
/* codec/machine specific init - e.g. add machine controls */
|
||||
int (*init)(struct snd_soc_dapm_context *dapm);
|
||||
int (*init)(struct snd_soc_component *component);
|
||||
};
|
||||
|
||||
/* SoC card */
|
||||
|
|
@ -1112,6 +1128,7 @@ struct snd_soc_pcm_runtime {
|
|||
struct snd_soc_platform *platform;
|
||||
struct snd_soc_dai *codec_dai;
|
||||
struct snd_soc_dai *cpu_dai;
|
||||
struct snd_soc_component *component; /* Only valid for AUX dev rtds */
|
||||
|
||||
struct snd_soc_dai **codec_dais;
|
||||
unsigned int num_codecs;
|
||||
|
|
@ -1260,9 +1277,6 @@ void snd_soc_component_async_complete(struct snd_soc_component *component);
|
|||
int snd_soc_component_test_bits(struct snd_soc_component *component,
|
||||
unsigned int reg, unsigned int mask, unsigned int value);
|
||||
|
||||
int snd_soc_component_init_io(struct snd_soc_component *component,
|
||||
struct regmap *regmap);
|
||||
|
||||
/* device driver data */
|
||||
|
||||
static inline void snd_soc_card_set_drvdata(struct snd_soc_card *card,
|
||||
|
|
@ -1276,26 +1290,37 @@ static inline void *snd_soc_card_get_drvdata(struct snd_soc_card *card)
|
|||
return card->drvdata;
|
||||
}
|
||||
|
||||
static inline void snd_soc_component_set_drvdata(struct snd_soc_component *c,
|
||||
void *data)
|
||||
{
|
||||
dev_set_drvdata(c->dev, data);
|
||||
}
|
||||
|
||||
static inline void *snd_soc_component_get_drvdata(struct snd_soc_component *c)
|
||||
{
|
||||
return dev_get_drvdata(c->dev);
|
||||
}
|
||||
|
||||
static inline void snd_soc_codec_set_drvdata(struct snd_soc_codec *codec,
|
||||
void *data)
|
||||
{
|
||||
dev_set_drvdata(codec->dev, data);
|
||||
snd_soc_component_set_drvdata(&codec->component, data);
|
||||
}
|
||||
|
||||
static inline void *snd_soc_codec_get_drvdata(struct snd_soc_codec *codec)
|
||||
{
|
||||
return dev_get_drvdata(codec->dev);
|
||||
return snd_soc_component_get_drvdata(&codec->component);
|
||||
}
|
||||
|
||||
static inline void snd_soc_platform_set_drvdata(struct snd_soc_platform *platform,
|
||||
void *data)
|
||||
{
|
||||
dev_set_drvdata(platform->dev, data);
|
||||
snd_soc_component_set_drvdata(&platform->component, data);
|
||||
}
|
||||
|
||||
static inline void *snd_soc_platform_get_drvdata(struct snd_soc_platform *platform)
|
||||
{
|
||||
return dev_get_drvdata(platform->dev);
|
||||
return snd_soc_component_get_drvdata(&platform->component);
|
||||
}
|
||||
|
||||
static inline void snd_soc_pcm_set_drvdata(struct snd_soc_pcm_runtime *rtd,
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue