mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
sound updates for 6.6-rc1
We've received a fairly wide range of changes at this time, including for ALSA and ASoC core, but all of them are rather small changes. Here are some highlights: ALSA / ASoC Core: - Fixes of inconsistent locking around control API helpers - A few new control API functions and cleanups - Workarounds for potential UAFs by delayed kobj releases - Unified PCM copy ops with iov_iter - Continued efforts for ASoC API cleanups ASoC: - An adaptor to allow use of IIO DACs and ADCs in ASoC which pulls in some IIO changes - Create a library function for intlog10() and use it in the NAU8825 driver - Convert drivers to use the more modern maple tree register cache - Lots of work on the SOF framework, AMD and Intel drivers, including a lot of cleanup and new device support - Standardization of the presentation of jacks from drivers - Provision of some generic sound card DT properties - Support for AMD Van Gogh, AMD machines with MAX98388 and NAU8821, AWInic AW88261, Cirrus Logic CS35L36 and CS42L43, various Intel platforms including AVS machines with ES8336 and RT5663, Mediatek MT7986, NXP i.MX93, RealTek RT1017 and StarFive JH7110 Others: - New test coverage including ASoC and topology tests in KUnit; this also involves enabling UML builds of ALSA since that's the default KUnit test environment which pulls in the addition of some stubs to the driver - More enhancement of pcmtest driver - A few fixes / enhancements of MIDI 2.0 UMP core - Using PCI definitions in allover HD-audio code - Support for Cirrus CS35L56 and TI TAS2781 HD-audio sub-codecs - CS35L41 HD-audio sub-codec improvements - Continued emu10k1 improvements -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmTvJ1oOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE8/3w//XgX9aEmlr7ZD2s6sOolfYMFajq/mOBaFkw53 iDZOJs+jQNmx/BfVlaio8/hinkV8lUrjjPiBVwF6AWy3a2V9RmgqYtYvhlWIj2jW 95eqUFtpGq4pR2KM9kEfHsZEZO+LynpF3nQ0Zy1ShNZQv5H5SQ1Hi2N1btTkRq2y HcHGc7bosoBYPCiF5gm/u93h/u1oW7E1IEoxEjYDySvmvapQ6SiYQYX6jLRRda9T PxCz1sMerkglqFif2OVWB7MJQ4C1xQlVElVItKIxHwjvbwP0bmg32qY5+qI9M8vw 2VpDk1oXKBqFrdy5zDXL+zIj5WQ9BD2HFvfhiodfNNiI/eyTg/cVn1HysZ3CD0lh JU1j0pL7lwJkcgexEZqXqmshTGz0QrsJZQqa2WIHyl74xmwydxytzSdM/cEtPwt5 fo1/H6gfDHBZj4JzkZZs8/aGj0rnzlasHds6kROzN73D7dMx3SNTP9sotEksyAJ/ 8EY2JFrD1rYSOuArFLYdLK8FDlbpICAGRMjnuosglGJxOzyh5faCtijTu3LhhBfh QuIus+Q+mc454LZUPaoRPBiUqAp296YqsJGNv1v02s/BLNy4HGDWgQ5j6GUvi6Ew 0lTaOtjXscC6e091OG9LFShUFd4YAEetWdlAHwcMJbcoeubteZqz75YHvq7erzA8 rVOxUmM= =Rr0i -----END PGP SIGNATURE----- Merge tag 'sound-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound updates from Takashi Iwai: "We've received a fairly wide range of changes at this time, including for ALSA and ASoC core, but all of them are rather small changes. Here are some highlights: ALSA / ASoC Core: - Fixes of inconsistent locking around control API helpers - A few new control API functions and cleanups - Workarounds for potential UAFs by delayed kobj releases - Unified PCM copy ops with iov_iter - Continued efforts for ASoC API cleanups ASoC: - An adaptor to allow use of IIO DACs and ADCs in ASoC which pulls in some IIO changes - Create a library function for intlog10() and use it in the NAU8825 driver - Convert drivers to use the more modern maple tree register cache - Lots of work on the SOF framework, AMD and Intel drivers, including a lot of cleanup and new device support - Standardization of the presentation of jacks from drivers - Provision of some generic sound card DT properties - Support for AMD Van Gogh, AMD machines with MAX98388 and NAU8821, AWInic AW88261, Cirrus Logic CS35L36 and CS42L43, various Intel platforms including AVS machines with ES8336 and RT5663, Mediatek MT7986, NXP i.MX93, RealTek RT1017 and StarFive JH7110 Others: - New test coverage including ASoC and topology tests in KUnit; this also involves enabling UML builds of ALSA since that's the default KUnit test environment which pulls in the addition of some stubs to the driver - More enhancement of pcmtest driver - A few fixes / enhancements of MIDI 2.0 UMP core - Using PCI definitions in allover HD-audio code - Support for Cirrus CS35L56 and TI TAS2781 HD-audio sub-codecs - CS35L41 HD-audio sub-codec improvements - Continued emu10k1 improvements" * tag 'sound-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (693 commits) ALSA: pcm: Fix missing fixup call in compat hw_refine ioctl ASoC: dwc: i2s: Fix unused functions ALSA: usb-audio: Don't try to submit URBs after disconnection ALSA: emu10k1: add separate documentation for E-MU cards ALSA: emu10k1: more documentation updates ALSA: emu10k1: de-duplicate audigy-mixer.rst vs. sb-live-mixer.rst ALSA: ump: Fix -Wformat-truncation warnings ALSA: hda: Add missing dependency on CONFIG_EFI for Cirrus/TI sub-codecs ALSA: doc: Fix missing backquote in midi-2.0.rst ALSA: hda/realtek: Add quirk for mute LEDs on HP ENVY x360 15-eu0xxx ALSA: hda/tas2781: Switch back to use struct i2c_driver's .probe() ASoC: soc-core.c: Do not error if a DAI link component is not found ASoC: codecs: Fix error code in aw88261_i2c_probe() ASoC: audio-graph-card.c: move audio_graph_parse_of() ASoC: cs42l43: Use new-style PM runtime macros ALSA: documentation: Add description for USB MIDI 2.0 gadget driver ALSA: ump: Don't create unused substreams for static blocks ALSA: ump: Fill group names for legacy rawmidi substreams ALSA: usb-audio: Attach legacy rawmidi after probing all UMP EPs ALSA: ac97: Fix possible error value of *rac97 ...
This commit is contained in:
commit
4fb0dacb78
@ -162,8 +162,10 @@ Base 2 log and power Functions
|
||||
.. kernel-doc:: include/linux/log2.h
|
||||
:internal:
|
||||
|
||||
Integer power Functions
|
||||
-----------------------
|
||||
Integer log and power Functions
|
||||
-------------------------------
|
||||
|
||||
.. kernel-doc:: include/linux/int_log.h
|
||||
|
||||
.. kernel-doc:: lib/math/int_pow.c
|
||||
:export:
|
||||
|
@ -9,6 +9,9 @@ title: Amlogic AXG sound card
|
||||
maintainers:
|
||||
- Jerome Brunet <jbrunet@baylibre.com>
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: amlogic,axg-sound-card
|
||||
@ -17,23 +20,12 @@ properties:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
description: list of auxiliary devices
|
||||
|
||||
audio-routing:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
description:
|
||||
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.
|
||||
|
||||
audio-widgets:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
description:
|
||||
A list off component DAPM widget. Each entry is a pair of strings,
|
||||
the first being the widget type, the second being the widget name
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: User specified audio sound card name
|
||||
|
||||
patternProperties:
|
||||
"^dai-link-[0-9]+$":
|
||||
type: object
|
||||
@ -108,7 +100,6 @@ patternProperties:
|
||||
- sound-dai
|
||||
|
||||
required:
|
||||
- model
|
||||
- dai-link-0
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
@ -9,6 +9,9 @@ title: Amlogic GX sound card
|
||||
maintainers:
|
||||
- Jerome Brunet <jbrunet@baylibre.com>
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
@ -18,14 +21,6 @@ properties:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
description: list of auxiliary devices
|
||||
|
||||
audio-routing:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
minItems: 2
|
||||
description: |-
|
||||
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.
|
||||
|
||||
audio-widgets:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
minItems: 2
|
||||
@ -33,10 +28,6 @@ properties:
|
||||
A list off component DAPM widget. Each entry is a pair of strings,
|
||||
the first being the widget type, the second being the widget name
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: User specified audio sound card name
|
||||
|
||||
patternProperties:
|
||||
"^dai-link-[0-9]+$":
|
||||
type: object
|
||||
@ -86,7 +77,7 @@ required:
|
||||
- model
|
||||
- dai-link-0
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
|
64
Documentation/devicetree/bindings/sound/audio-iio-aux.yaml
Normal file
64
Documentation/devicetree/bindings/sound/audio-iio-aux.yaml
Normal file
@ -0,0 +1,64 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/audio-iio-aux.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Audio IIO auxiliary
|
||||
|
||||
maintainers:
|
||||
- Herve Codina <herve.codina@bootlin.com>
|
||||
|
||||
description:
|
||||
Auxiliary device based on Industrial I/O device channels
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: audio-iio-aux
|
||||
|
||||
io-channels:
|
||||
description:
|
||||
Industrial I/O device channels used
|
||||
|
||||
io-channel-names:
|
||||
description:
|
||||
Industrial I/O channel names related to io-channels.
|
||||
These names are used to provides sound controls, widgets and routes names.
|
||||
|
||||
snd-control-invert-range:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
description: |
|
||||
A list of 0/1 flags defining whether or not the related channel is
|
||||
inverted
|
||||
items:
|
||||
enum: [0, 1]
|
||||
default: 0
|
||||
description: |
|
||||
Invert the sound control value compared to the IIO channel raw value.
|
||||
- 1: The related sound control value is inverted meaning that the
|
||||
minimum sound control value correspond to the maximum IIO channel
|
||||
raw value and the maximum sound control value correspond to the
|
||||
minimum IIO channel raw value.
|
||||
- 0: The related sound control value is not inverted meaning that the
|
||||
minimum (resp maximum) sound control value correspond to the
|
||||
minimum (resp maximum) IIO channel raw value.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- io-channels
|
||||
- io-channel-names
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
iio-aux {
|
||||
compatible = "audio-iio-aux";
|
||||
io-channels = <&iio 0>, <&iio 1>, <&iio 2>, <&iio 3>;
|
||||
io-channel-names = "CH0", "CH1", "CH2", "CH3";
|
||||
/* Invert CH1 and CH2 */
|
||||
snd-control-invert-range = <0 1 1 0>;
|
||||
};
|
@ -19,7 +19,9 @@ allOf:
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: awinic,aw88395
|
||||
enum:
|
||||
- awinic,aw88395
|
||||
- awinic,aw88261
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
@ -17,6 +17,9 @@ description: |
|
||||
such as SAI, MICFIL, .etc through building rpmsg channels between
|
||||
Cortex-A and Cortex-M.
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
@ -25,10 +28,7 @@ properties:
|
||||
- fsl,imx8mm-rpmsg-audio
|
||||
- fsl,imx8mp-rpmsg-audio
|
||||
- fsl,imx8ulp-rpmsg-audio
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: User specified audio sound card name
|
||||
- fsl,imx93-rpmsg-audio
|
||||
|
||||
clocks:
|
||||
items:
|
||||
@ -65,13 +65,6 @@ properties:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle
|
||||
description: The phandle to a node of audio codec
|
||||
|
||||
audio-routing:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
description: |
|
||||
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.
|
||||
|
||||
fsl,enable-lpa:
|
||||
$ref: /schemas/types.yaml#/definitions/flag
|
||||
description: enable low power audio path.
|
||||
@ -100,9 +93,8 @@ properties:
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- model
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
|
@ -13,23 +13,15 @@ maintainers:
|
||||
description:
|
||||
This binding describes the SC7180 sound card which uses LPASS for audio.
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- google,sc7180-trogdor
|
||||
- google,sc7180-coachz
|
||||
|
||||
audio-routing:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
description:
|
||||
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.
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: User specified audio sound card name
|
||||
|
||||
"#address-cells":
|
||||
const: 1
|
||||
|
||||
@ -86,11 +78,10 @@ patternProperties:
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- model
|
||||
- "#address-cells"
|
||||
- "#size-cells"
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
|
||||
|
@ -13,22 +13,14 @@ maintainers:
|
||||
description:
|
||||
This binding describes the SC7280 sound card which uses LPASS for audio.
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- google,sc7280-herobrine
|
||||
|
||||
audio-routing:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
description:
|
||||
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.
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: User specified audio sound card name
|
||||
|
||||
"#address-cells":
|
||||
const: 1
|
||||
|
||||
@ -97,11 +89,10 @@ patternProperties:
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- model
|
||||
- "#address-cells"
|
||||
- "#size-cells"
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
|
||||
|
@ -1,19 +0,0 @@
|
||||
GTM601 UMTS modem audio interface CODEC
|
||||
|
||||
This device has no configuration interface. The sample rate and channels are
|
||||
based on the compatible string
|
||||
"option,gtm601" = 8kHz mono
|
||||
"broadmobi,bm818" = 48KHz stereo
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : one of
|
||||
"option,gtm601"
|
||||
"broadmobi,bm818"
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
codec: gtm601_codec {
|
||||
compatible = "option,gtm601";
|
||||
};
|
@ -9,23 +9,14 @@ title: NXP i.MX audio sound card.
|
||||
maintainers:
|
||||
- Shengjiu Wang <shengjiu.wang@nxp.com>
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- fsl,imx-audio-card
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: User specified audio sound card name
|
||||
|
||||
audio-routing:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
description:
|
||||
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,
|
||||
MicBias of codec and the jacks on the board.
|
||||
|
||||
patternProperties:
|
||||
".*-dai-link$":
|
||||
description:
|
||||
@ -84,9 +75,8 @@ patternProperties:
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- model
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
|
@ -1,44 +0,0 @@
|
||||
Maxim Integrated MAX98925/MAX98926/MAX98927 Speaker Amplifier
|
||||
|
||||
This device supports I2C.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : should be one of the following
|
||||
- "maxim,max98925"
|
||||
- "maxim,max98926"
|
||||
- "maxim,max98927"
|
||||
|
||||
- vmon-slot-no : slot number used to send voltage information
|
||||
or in inteleave mode this will be used as
|
||||
interleave slot.
|
||||
MAX98925/MAX98926 slot range : 0 ~ 30, Default : 0
|
||||
MAX98927 slot range : 0 ~ 15, Default : 0
|
||||
|
||||
- imon-slot-no : slot number used to send current information
|
||||
MAX98925/MAX98926 slot range : 0 ~ 30, Default : 0
|
||||
MAX98927 slot range : 0 ~ 15, Default : 0
|
||||
|
||||
- interleave-mode : When using two MAX9892X 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.
|
||||
Range : 0 (off), 1 (on), Default : 0
|
||||
|
||||
- reg : the I2C address of the device for I2C
|
||||
|
||||
Optional properties:
|
||||
- reset-gpios : GPIO to reset the device
|
||||
|
||||
Example:
|
||||
|
||||
codec: max98927@3a {
|
||||
compatible = "maxim,max98927";
|
||||
vmon-slot-no = <0>;
|
||||
imon-slot-no = <1>;
|
||||
interleave-mode = <0>;
|
||||
reg = <0x3a>;
|
||||
};
|
98
Documentation/devicetree/bindings/sound/maxim,max98925.yaml
Normal file
98
Documentation/devicetree/bindings/sound/maxim,max98925.yaml
Normal file
@ -0,0 +1,98 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/maxim,max98925.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Maxim Integrated MAX98925/MAX98926/MAX98927 speaker amplifier
|
||||
|
||||
maintainers:
|
||||
- Ryan Lee <ryans.lee@maximintegrated.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- maxim,max98925
|
||||
- maxim,max98926
|
||||
- maxim,max98927
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
reset-gpios:
|
||||
maxItems: 1
|
||||
|
||||
'#sound-dai-cells':
|
||||
const: 0
|
||||
|
||||
vmon-slot-no:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
minimum: 0
|
||||
maximum: 30
|
||||
default: 0
|
||||
description:
|
||||
Slot number used to send voltage information or in inteleave mode this
|
||||
will be used as interleave slot.
|
||||
|
||||
imon-slot-no:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
minimum: 0
|
||||
maximum: 30
|
||||
default: 0
|
||||
description:
|
||||
Slot number used to send current information.
|
||||
|
||||
maxim,interleave-mode:
|
||||
type: boolean
|
||||
description:
|
||||
When using two MAX9892X in a system it is possible to create ADC data
|
||||
that will overflow the frame size. When enabled, the 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.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- maxim,max98927
|
||||
then:
|
||||
properties:
|
||||
vmon-slot-no:
|
||||
minimum: 0
|
||||
maximum: 15
|
||||
|
||||
imon-slot-no:
|
||||
minimum: 0
|
||||
maximum: 15
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
audio-codec@3a {
|
||||
compatible = "maxim,max98927";
|
||||
reg = <0x3a>;
|
||||
#sound-dai-cells = <0>;
|
||||
|
||||
pinctrl-0 = <&speaker_default>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
reset-gpios = <&tlmm 69 GPIO_ACTIVE_LOW>;
|
||||
|
||||
vmon-slot-no = <1>;
|
||||
imon-slot-no = <0>;
|
||||
};
|
||||
};
|
160
Documentation/devicetree/bindings/sound/mediatek,mt7986-afe.yaml
Normal file
160
Documentation/devicetree/bindings/sound/mediatek,mt7986-afe.yaml
Normal file
@ -0,0 +1,160 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/mediatek,mt7986-afe.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: MediaTek AFE PCM controller for MT7986
|
||||
|
||||
maintainers:
|
||||
- Maso Huang <maso.huang@mediatek.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- const: mediatek,mt7986-afe
|
||||
- items:
|
||||
- enum:
|
||||
- mediatek,mt7981-afe
|
||||
- mediatek,mt7988-afe
|
||||
- const: mediatek,mt7986-afe
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
minItems: 5
|
||||
items:
|
||||
- description: audio bus clock
|
||||
- description: audio 26M clock
|
||||
- description: audio intbus clock
|
||||
- description: audio hopping clock
|
||||
- description: audio pll clock
|
||||
- description: mux for pcm_mck
|
||||
- description: audio i2s/pcm mck
|
||||
|
||||
clock-names:
|
||||
minItems: 5
|
||||
items:
|
||||
- const: bus_ck
|
||||
- const: 26m_ck
|
||||
- const: l_ck
|
||||
- const: aud_ck
|
||||
- const: eg2_ck
|
||||
- const: sel
|
||||
- const: i2s_m
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
allOf:
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: mediatek,mt7986-afe
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
items:
|
||||
- description: audio bus clock
|
||||
- description: audio 26M clock
|
||||
- description: audio intbus clock
|
||||
- description: audio hopping clock
|
||||
- description: audio pll clock
|
||||
clock-names:
|
||||
items:
|
||||
- const: bus_ck
|
||||
- const: 26m_ck
|
||||
- const: l_ck
|
||||
- const: aud_ck
|
||||
- const: eg2_ck
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: mediatek,mt7981-afe
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
items:
|
||||
- description: audio bus clock
|
||||
- description: audio 26M clock
|
||||
- description: audio intbus clock
|
||||
- description: audio hopping clock
|
||||
- description: audio pll clock
|
||||
- description: mux for pcm_mck
|
||||
clock-names:
|
||||
items:
|
||||
- const: bus_ck
|
||||
- const: 26m_ck
|
||||
- const: l_ck
|
||||
- const: aud_ck
|
||||
- const: eg2_ck
|
||||
- const: sel
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: mediatek,mt7988-afe
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
items:
|
||||
- description: audio bus clock
|
||||
- description: audio 26M clock
|
||||
- description: audio intbus clock
|
||||
- description: audio hopping clock
|
||||
- description: audio pll clock
|
||||
- description: mux for pcm_mck
|
||||
- description: audio i2s/pcm mck
|
||||
clock-names:
|
||||
items:
|
||||
- const: bus_ck
|
||||
- const: 26m_ck
|
||||
- const: l_ck
|
||||
- const: aud_ck
|
||||
- const: eg2_ck
|
||||
- const: sel
|
||||
- const: i2s_m
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/clock/mt7986-clk.h>
|
||||
|
||||
afe@11210000 {
|
||||
compatible = "mediatek,mt7986-afe";
|
||||
reg = <0x11210000 0x9000>;
|
||||
interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&infracfg_ao CLK_INFRA_AUD_BUS_CK>,
|
||||
<&infracfg_ao CLK_INFRA_AUD_26M_CK>,
|
||||
<&infracfg_ao CLK_INFRA_AUD_L_CK>,
|
||||
<&infracfg_ao CLK_INFRA_AUD_AUD_CK>,
|
||||
<&infracfg_ao CLK_INFRA_AUD_EG2_CK>;
|
||||
clock-names = "bus_ck",
|
||||
"26m_ck",
|
||||
"l_ck",
|
||||
"aud_ck",
|
||||
"eg2_ck";
|
||||
assigned-clocks = <&topckgen CLK_TOP_A1SYS_SEL>,
|
||||
<&topckgen CLK_TOP_AUD_L_SEL>,
|
||||
<&topckgen CLK_TOP_A_TUNER_SEL>;
|
||||
assigned-clock-parents = <&topckgen CLK_TOP_APLL2_D4>,
|
||||
<&apmixedsys CLK_APMIXED_APLL2>,
|
||||
<&topckgen CLK_TOP_APLL2_D4>;
|
||||
};
|
||||
|
||||
...
|
@ -0,0 +1,67 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/mediatek,mt7986-wm8960.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: MediaTek MT7986 sound card with WM8960 codec
|
||||
|
||||
maintainers:
|
||||
- Maso Huang <maso.huang@mediatek.com>
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: mediatek,mt7986-wm8960-sound
|
||||
|
||||
platform:
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
sound-dai:
|
||||
description: The phandle of MT7986 platform.
|
||||
maxItems: 1
|
||||
required:
|
||||
- sound-dai
|
||||
|
||||
codec:
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
sound-dai:
|
||||
description: The phandle of wm8960 codec.
|
||||
maxItems: 1
|
||||
required:
|
||||
- sound-dai
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- audio-routing
|
||||
- platform
|
||||
- codec
|
||||
|
||||
examples:
|
||||
- |
|
||||
sound {
|
||||
compatible = "mediatek,mt7986-wm8960-sound";
|
||||
model = "mt7986-wm8960";
|
||||
audio-routing =
|
||||
"Headphone", "HP_L",
|
||||
"Headphone", "HP_R",
|
||||
"LINPUT1", "AMIC",
|
||||
"RINPUT1", "AMIC";
|
||||
|
||||
platform {
|
||||
sound-dai = <&afe>;
|
||||
};
|
||||
|
||||
codec {
|
||||
sound-dai = <&wm8960>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
@ -25,6 +25,12 @@ properties:
|
||||
reset-names:
|
||||
const: audiosys
|
||||
|
||||
memory-region:
|
||||
maxItems: 1
|
||||
description: |
|
||||
Shared memory region for AFE memif. A "shared-dma-pool".
|
||||
See ../reserved-memory/reserved-memory.yaml for details.
|
||||
|
||||
mediatek,topckgen:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle
|
||||
description: The phandle of the mediatek topckgen controller
|
||||
@ -176,6 +182,7 @@ examples:
|
||||
interrupts = <GIC_SPI 822 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
resets = <&watchdog 14>;
|
||||
reset-names = "audiosys";
|
||||
memory-region = <&snd_dma_mem_reserved>;
|
||||
mediatek,topckgen = <&topckgen>;
|
||||
mediatek,infracfg = <&infracfg_ao>;
|
||||
power-domains = <&spm 13>; //MT8188_POWER_DOMAIN_AUDIO
|
||||
|
@ -9,23 +9,19 @@ title: MediaTek MT8188 ASoC sound card
|
||||
maintainers:
|
||||
- Trevor Wu <trevor.wu@mediatek.com>
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- mediatek,mt8188-mt6359-evb
|
||||
- mediatek,mt8188-nau8825
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: User specified audio sound card name
|
||||
|
||||
audio-routing:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
description:
|
||||
A list of the connections between audio components. Each entry is a
|
||||
sink/source pair of strings. Valid names could be the input or output
|
||||
widgets of audio components, power supplies, MicBias of codec and the
|
||||
software switch.
|
||||
Valid names could be the input or output widgets of audio components,
|
||||
power supplies, MicBias of codec and the software switch.
|
||||
|
||||
mediatek,platform:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle
|
||||
@ -86,7 +82,7 @@ patternProperties:
|
||||
required:
|
||||
- link-name
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
@ -96,6 +92,7 @@ examples:
|
||||
- |
|
||||
sound {
|
||||
compatible = "mediatek,mt8188-mt6359-evb";
|
||||
model = "MT6359-EVB";
|
||||
mediatek,platform = <&afe>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&aud_pins_default>;
|
||||
|
@ -1,55 +0,0 @@
|
||||
Nuvoton NAU88L21 audio codec
|
||||
|
||||
This device supports I2C only.
|
||||
|
||||
Required properties:
|
||||
- compatible : Must be "nuvoton,nau8821"
|
||||
|
||||
- reg : the I2C address of the device. This is either 0x1B (CSB=0) or 0x54 (CSB=1).
|
||||
|
||||
Optional properties:
|
||||
- nuvoton,jkdet-enable: Enable jack detection via JKDET pin.
|
||||
- nuvoton,jkdet-pull-enable: Enable JKDET pin pull. If set - pin pull enabled,
|
||||
otherwise pin in high impedance state.
|
||||
- nuvoton,jkdet-pull-up: Pull-up JKDET pin. If set then JKDET pin is pull up, otherwise pull down.
|
||||
- nuvoton,jkdet-polarity: JKDET pin polarity. 0 - active high, 1 - active low.
|
||||
|
||||
- nuvoton,vref-impedance: VREF Impedance selection
|
||||
0 - Open
|
||||
1 - 25 kOhm
|
||||
2 - 125 kOhm
|
||||
3 - 2.5 kOhm
|
||||
|
||||
- nuvoton,micbias-voltage: Micbias voltage level.
|
||||
0 - VDDA
|
||||
1 - VDDA
|
||||
2 - VDDA * 1.1
|
||||
3 - VDDA * 1.2
|
||||
4 - VDDA * 1.3
|
||||
5 - VDDA * 1.4
|
||||
6 - VDDA * 1.53
|
||||
7 - VDDA * 1.53
|
||||
|
||||
- nuvoton,jack-insert-debounce: number from 0 to 7 that sets debounce time to 2^(n+2) ms
|
||||
- nuvoton,jack-eject-debounce: number from 0 to 7 that sets debounce time to 2^(n+2) ms
|
||||
|
||||
- nuvoton,dmic-clk-threshold: the ADC threshold of DMIC clock.
|
||||
- nuvoton,key_enable: Headset button detection switch.
|
||||
|
||||
Example:
|
||||
|
||||
headset: nau8821@1b {
|
||||
compatible = "nuvoton,nau8821";
|
||||
reg = <0x1b>;
|
||||
interrupt-parent = <&gpio>;
|
||||
interrupts = <23 IRQ_TYPE_LEVEL_LOW>;
|
||||
nuvoton,jkdet-enable;
|
||||
nuvoton,jkdet-pull-enable;
|
||||
nuvoton,jkdet-pull-up;
|
||||
nuvoton,jkdet-polarity = <GPIO_ACTIVE_LOW>;
|
||||
nuvoton,vref-impedance = <2>;
|
||||
nuvoton,micbias-voltage = <6>;
|
||||
nuvoton,jack-insert-debounce = <7>;
|
||||
nuvoton,jack-eject-debounce = <7>;
|
||||
nuvoton,dmic-clk-threshold = 3072000;
|
||||
};
|
132
Documentation/devicetree/bindings/sound/nuvoton,nau8821.yaml
Normal file
132
Documentation/devicetree/bindings/sound/nuvoton,nau8821.yaml
Normal file
@ -0,0 +1,132 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/nuvoton,nau8821.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: NAU88L21 audio codec
|
||||
|
||||
maintainers:
|
||||
- Seven Lee <wtli@nuvoton.com>
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: nuvoton,nau8821
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
nuvoton,jkdet-enable:
|
||||
description: Enable jack detection via JKDET pin.
|
||||
type: boolean
|
||||
|
||||
nuvoton,jkdet-pull-enable:
|
||||
description: Enable JKDET pin pull. If set - pin pull enabled,
|
||||
otherwise pin in high impedance state.
|
||||
type: boolean
|
||||
|
||||
nuvoton,jkdet-pull-up:
|
||||
description: Pull-up JKDET pin. If set then JKDET pin is pull up,
|
||||
otherwise pull down.
|
||||
type: boolean
|
||||
|
||||
nuvoton,key-enable:
|
||||
description: handles key press detection.
|
||||
type: boolean
|
||||
|
||||
nuvoton,jkdet-polarity:
|
||||
description: JKDET pin polarity.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
enum:
|
||||
- 0 # active high
|
||||
- 1 # active low
|
||||
default: 1
|
||||
|
||||
nuvoton,micbias-voltage:
|
||||
description: MICBIAS output level select.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
enum:
|
||||
- 0 # VDDA
|
||||
- 1 # VDDA * 1
|
||||
- 2 # VDDA * 1.1
|
||||
- 3 # VDDA * 1.2
|
||||
- 4 # VDDA * 1.3
|
||||
- 5 # VDDA * 1.4
|
||||
- 6 # VDDA * 1.53
|
||||
- 7 # VDDA * 1.53
|
||||
default: 6
|
||||
|
||||
nuvoton,vref-impedance:
|
||||
description: VMID Tie-off impedance select.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
enum:
|
||||
- 0 # open
|
||||
- 1 # 25KOhms
|
||||
- 2 # 125KOhms
|
||||
- 3 # 2.5KOhms
|
||||
default: 2
|
||||
|
||||
nuvoton,jack-insert-debounce:
|
||||
description: number from 0 to 7 that sets debounce time to 2^(n+2)ms.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
maximum: 7
|
||||
default: 7
|
||||
|
||||
nuvoton,jack-eject-debounce:
|
||||
description: number from 0 to 7 that sets debounce time to 2^(n+2)ms.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
maximum: 7
|
||||
default: 0
|
||||
|
||||
nuvoton,dmic-clk-threshold:
|
||||
description: DMIC clock speed expected value. Unit is Hz.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
default: 3072000
|
||||
|
||||
nuvoton,left-input-single-end:
|
||||
description: Enable left input with single-ended settings if set.
|
||||
For the headset mic application, the single-ended control is
|
||||
just limited to the left adc for design demand.
|
||||
type: boolean
|
||||
|
||||
'#sound-dai-cells':
|
||||
const: 0
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
codec@1b {
|
||||
compatible = "nuvoton,nau8821";
|
||||
reg = <0x1b>;
|
||||
interrupt-parent = <&gpio>;
|
||||
interrupts = <23 IRQ_TYPE_LEVEL_LOW>;
|
||||
nuvoton,jkdet-enable;
|
||||
nuvoton,jkdet-pull-enable;
|
||||
nuvoton,jkdet-pull-up;
|
||||
nuvoton,key-enable;
|
||||
nuvoton,left-input-single-end;
|
||||
nuvoton,jkdet-polarity = <GPIO_ACTIVE_LOW>;
|
||||
nuvoton,micbias-voltage = <6>;
|
||||
nuvoton,vref-impedance = <2>;
|
||||
nuvoton,jack-insert-debounce = <7>;
|
||||
nuvoton,jack-eject-debounce = <0>;
|
||||
nuvoton,dmic-clk-threshold = <3072000>;
|
||||
#sound-dai-cells = <0>;
|
||||
};
|
||||
};
|
@ -21,6 +21,15 @@ properties:
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
"#sound-dai-cells":
|
||||
const: 0
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
clock-names:
|
||||
const: mclk
|
||||
|
||||
nuvoton,spk-btl:
|
||||
description:
|
||||
If set, configure the two loudspeaker outputs as a Bridge Tied Load output
|
||||
@ -31,6 +40,9 @@ required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
|
42
Documentation/devicetree/bindings/sound/option,gtm601.yaml
Normal file
42
Documentation/devicetree/bindings/sound/option,gtm601.yaml
Normal file
@ -0,0 +1,42 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/option,gtm601.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: GTM601 UMTS modem audio interface CODEC
|
||||
|
||||
maintainers:
|
||||
- kernel@puri.sm
|
||||
|
||||
description: >
|
||||
This device has no configuration interface. The sample rate and channels are
|
||||
based on the compatible string
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- description: Broadmobi BM818 (48Khz stereo)
|
||||
items:
|
||||
- const: broadmobi,bm818
|
||||
- const: option,gtm601
|
||||
- description: GTM601 (8kHz mono)
|
||||
const: option,gtm601
|
||||
|
||||
'#sound-dai-cells':
|
||||
const: 0
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
codec {
|
||||
compatible = "option,gtm601";
|
||||
#sound-dai-cells = <0>;
|
||||
};
|
@ -1,101 +0,0 @@
|
||||
msm8916 analog audio CODEC
|
||||
|
||||
Bindings for codec Analog IP which is integrated in pmic pm8916,
|
||||
|
||||
## Bindings for codec core on pmic:
|
||||
|
||||
Required properties
|
||||
- compatible = "qcom,pm8916-wcd-analog-codec";
|
||||
- reg: represents the slave base address provided to the peripheral.
|
||||
- interrupts: List of interrupts in given SPMI peripheral.
|
||||
- interrupt-names: Names specified to above list of interrupts in same
|
||||
order. List of supported interrupt names are:
|
||||
"cdc_spk_cnp_int" - Speaker click and pop interrupt.
|
||||
"cdc_spk_clip_int" - Speaker clip interrupt.
|
||||
"cdc_spk_ocp_int" - Speaker over current protect interrupt.
|
||||
"mbhc_ins_rem_det1" - jack insert removal detect interrupt 1.
|
||||
"mbhc_but_rel_det" - button release interrupt.
|
||||
"mbhc_but_press_det" - button press event
|
||||
"mbhc_ins_rem_det" - jack insert removal detect interrupt.
|
||||
"mbhc_switch_int" - multi button headset interrupt.
|
||||
"cdc_ear_ocp_int" - Earphone over current protect interrupt.
|
||||
"cdc_hphr_ocp_int" - Headphone R over current protect interrupt.
|
||||
"cdc_hphl_ocp_det" - Headphone L over current protect interrupt.
|
||||
"cdc_ear_cnp_int" - earphone cnp interrupt.
|
||||
"cdc_hphr_cnp_int" - hphr click and pop interrupt.
|
||||
"cdc_hphl_cnp_int" - hphl click and pop interrupt.
|
||||
|
||||
- clocks: Handle to mclk.
|
||||
- clock-names: should be "mclk"
|
||||
- vdd-cdc-io-supply: phandle to VDD_CDC_IO regulator DT node.
|
||||
- vdd-cdc-tx-rx-cx-supply: phandle to VDD_CDC_TX/RX/CX regulator DT node.
|
||||
- vdd-micbias-supply: phandle of VDD_MICBIAS supply's regulator DT node.
|
||||
|
||||
Optional Properties:
|
||||
- qcom,mbhc-vthreshold-low: Array of 5 threshold voltages in mV for 5 buttons
|
||||
detection on headset when the mbhc is powered up
|
||||
by internal current source, this is a low power.
|
||||
- qcom,mbhc-vthreshold-high: Array of 5 thresold voltages in mV for 5 buttons
|
||||
detection on headset when mbhc is powered up
|
||||
from micbias.
|
||||
- qcom,micbias-lvl: Voltage (mV) for Mic Bias
|
||||
- qcom,hphl-jack-type-normally-open: boolean, present if hphl pin on jack is a
|
||||
NO (Normally Open). If not specified, then
|
||||
its assumed that hphl pin on jack is NC
|
||||
(Normally Closed).
|
||||
- qcom,gnd-jack-type-normally-open: boolean, present if gnd pin on jack is
|
||||
NO (Normally Open). If not specified, then
|
||||
its assumed that gnd pin on jack is NC
|
||||
(Normally Closed).
|
||||
- qcom,micbias1-ext-cap: boolean, present if micbias1 has external capacitor
|
||||
connected.
|
||||
- qcom,micbias2-ext-cap: boolean, present if micbias2 has external capacitor
|
||||
connected.
|
||||
|
||||
Example:
|
||||
|
||||
spmi_bus {
|
||||
...
|
||||
audio-codec@f000{
|
||||
compatible = "qcom,pm8916-wcd-analog-codec";
|
||||
reg = <0xf000 0x200>;
|
||||
reg-names = "pmic-codec-core";
|
||||
clocks = <&gcc GCC_CODEC_DIGCODEC_CLK>;
|
||||
clock-names = "mclk";
|
||||
qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
|
||||
qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
|
||||
interrupt-parent = <&spmi_bus>;
|
||||
interrupts = <0x1 0xf0 0x0 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x1 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x2 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x3 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x4 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x5 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x6 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x7 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x0 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x1 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x2 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x3 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x4 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x5 IRQ_TYPE_NONE>;
|
||||
interrupt-names = "cdc_spk_cnp_int",
|
||||
"cdc_spk_clip_int",
|
||||
"cdc_spk_ocp_int",
|
||||
"mbhc_ins_rem_det1",
|
||||
"mbhc_but_rel_det",
|
||||
"mbhc_but_press_det",
|
||||
"mbhc_ins_rem_det",
|
||||
"mbhc_switch_int",
|
||||
"cdc_ear_ocp_int",
|
||||
"cdc_hphr_ocp_int",
|
||||
"cdc_hphl_ocp_det",
|
||||
"cdc_ear_cnp_int",
|
||||
"cdc_hphr_cnp_int",
|
||||
"cdc_hphl_cnp_int";
|
||||
vdd-cdc-io-supply = <&pm8916_l5>;
|
||||
vdd-cdc-tx-rx-cx-supply = <&pm8916_l5>;
|
||||
vdd-micbias-supply = <&pm8916_l13>;
|
||||
#sound-dai-cells = <1>;
|
||||
};
|
||||
};
|
@ -0,0 +1,153 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/qcom,pm8916-wcd-analog-codec.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Qualcomm PM8916 WCD Analog Audio Codec
|
||||
|
||||
maintainers:
|
||||
- Konrad Dybcio <konradybcio@kernel.org>
|
||||
|
||||
description:
|
||||
The analog WCD audio codec found on Qualcomm PM8916 PMIC.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: qcom,pm8916-wcd-analog-codec
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 14
|
||||
|
||||
interrupt-names:
|
||||
items:
|
||||
- const: cdc_spk_cnp_int
|
||||
- const: cdc_spk_clip_int
|
||||
- const: cdc_spk_ocp_int
|
||||
- const: mbhc_ins_rem_det1
|
||||
- const: mbhc_but_rel_det
|
||||
- const: mbhc_but_press_det
|
||||
- const: mbhc_ins_rem_det
|
||||
- const: mbhc_switch_int
|
||||
- const: cdc_ear_ocp_int
|
||||
- const: cdc_hphr_ocp_int
|
||||
- const: cdc_hphl_ocp_det
|
||||
- const: cdc_ear_cnp_int
|
||||
- const: cdc_hphr_cnp_int
|
||||
- const: cdc_hphl_cnp_int
|
||||
|
||||
vdd-cdc-io-supply:
|
||||
description: 1.8V buck supply
|
||||
|
||||
vdd-cdc-tx-rx-cx-supply:
|
||||
description: 1.8V SIDO buck supply
|
||||
|
||||
vdd-micbias-supply:
|
||||
description: micbias supply
|
||||
|
||||
qcom,mbhc-vthreshold-low:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
description:
|
||||
Array of 5 threshold voltages in mV for 5-button detection on
|
||||
headset when MBHC is powered by an internal current source.
|
||||
minItems: 5
|
||||
maxItems: 5
|
||||
|
||||
qcom,mbhc-vthreshold-high:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
description:
|
||||
Array of 5 threshold voltages in mV for 5-button detection on
|
||||
headset when MBHC is powered from micbias.
|
||||
minItems: 5
|
||||
maxItems: 5
|
||||
|
||||
qcom,micbias-lvl:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description:
|
||||
Voltage (mV) for Mic Bias
|
||||
|
||||
qcom,hphl-jack-type-normally-open:
|
||||
type: boolean
|
||||
description:
|
||||
True if the HPHL pin on the jack is NO (Normally Open), false if it's
|
||||
NC (Normally Closed).
|
||||
|
||||
qcom,gnd-jack-type-normally-open:
|
||||
type: boolean
|
||||
description:
|
||||
True if the GND pin on the jack is NO (Normally Open), false if it's
|
||||
NC (Normally Closed).
|
||||
|
||||
qcom,micbias1-ext-cap:
|
||||
type: boolean
|
||||
description:
|
||||
True if micbias1 has an external capacitor.
|
||||
|
||||
qcom,micbias2-ext-cap:
|
||||
type: boolean
|
||||
description:
|
||||
True if micbias2 has an external capacitor.
|
||||
|
||||
"#sound-dai-cells":
|
||||
const: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/spmi/spmi.h>
|
||||
|
||||
pmic@1 {
|
||||
compatible = "qcom,pm8916", "qcom,spmi-pmic";
|
||||
reg = <0x1 SPMI_USID>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
audio-codec@f000 {
|
||||
compatible = "qcom,pm8916-wcd-analog-codec";
|
||||
reg = <0xf000>;
|
||||
qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
|
||||
qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
|
||||
interrupt-parent = <&spmi_bus>;
|
||||
interrupts = <0x1 0xf0 0x0 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x1 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x2 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x3 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x4 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x5 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x6 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf0 0x7 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x0 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x1 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x2 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x3 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x4 IRQ_TYPE_NONE>,
|
||||
<0x1 0xf1 0x5 IRQ_TYPE_NONE>;
|
||||
interrupt-names = "cdc_spk_cnp_int",
|
||||
"cdc_spk_clip_int",
|
||||
"cdc_spk_ocp_int",
|
||||
"mbhc_ins_rem_det1",
|
||||
"mbhc_but_rel_det",
|
||||
"mbhc_but_press_det",
|
||||
"mbhc_ins_rem_det",
|
||||
"mbhc_switch_int",
|
||||
"cdc_ear_ocp_int",
|
||||
"cdc_hphr_ocp_int",
|
||||
"cdc_hphl_ocp_det",
|
||||
"cdc_ear_cnp_int",
|
||||
"cdc_hphr_cnp_int",
|
||||
"cdc_hphl_cnp_int";
|
||||
vdd-cdc-io-supply = <&pm8916_l5>;
|
||||
vdd-cdc-tx-rx-cx-supply = <&pm8916_l5>;
|
||||
vdd-micbias-supply = <&pm8916_l13>;
|
||||
#sound-dai-cells = <1>;
|
||||
};
|
||||
};
|
@ -9,6 +9,20 @@ title: Renesas R-Car Sound Driver
|
||||
maintainers:
|
||||
- Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||
|
||||
definitions:
|
||||
port-def:
|
||||
$ref: audio-graph-port.yaml#/definitions/port-base
|
||||
unevaluatedProperties: false
|
||||
patternProperties:
|
||||
"^endpoint(@[0-9a-f]+)?":
|
||||
$ref: audio-graph-port.yaml#/definitions/endpoint-base
|
||||
properties:
|
||||
playback:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
capture:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
|
||||
compatible:
|
||||
@ -77,6 +91,12 @@ properties:
|
||||
it must be 1 if your system has audio_clkout0/1/2/3
|
||||
enum: [0, 1]
|
||||
|
||||
"#address-cells":
|
||||
const: 1
|
||||
|
||||
"#size-cells":
|
||||
const: 0
|
||||
|
||||
clock-frequency:
|
||||
description: for audio_clkout0/1/2/3
|
||||
|
||||
@ -103,35 +123,9 @@ properties:
|
||||
description: List of necessary clock names.
|
||||
# details are defined below
|
||||
|
||||
ports:
|
||||
$ref: audio-graph-port.yaml#/definitions/port-base
|
||||
unevaluatedProperties: false
|
||||
patternProperties:
|
||||
'^port(@[0-9a-f]+)?$':
|
||||
$ref: audio-graph-port.yaml#/definitions/port-base
|
||||
unevaluatedProperties: false
|
||||
patternProperties:
|
||||
"^endpoint(@[0-9a-f]+)?":
|
||||
$ref: audio-graph-port.yaml#/definitions/endpoint-base
|
||||
properties:
|
||||
playback:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
capture:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
unevaluatedProperties: false
|
||||
|
||||
# ports is below
|
||||
port:
|
||||
$ref: audio-graph-port.yaml#/definitions/port-base
|
||||
unevaluatedProperties: false
|
||||
patternProperties:
|
||||
"^endpoint(@[0-9a-f]+)?":
|
||||
$ref: audio-graph-port.yaml#/definitions/endpoint-base
|
||||
properties:
|
||||
playback:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
capture:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
unevaluatedProperties: false
|
||||
$ref: "#/definitions/port-def"
|
||||
|
||||
rcar_sound,dvc:
|
||||
description: DVC subnode.
|
||||
@ -248,8 +242,9 @@ properties:
|
||||
- interrupts
|
||||
additionalProperties: false
|
||||
|
||||
patternProperties:
|
||||
# For DAI base
|
||||
rcar_sound,dai:
|
||||
'rcar_sound,dai(@[0-9a-f]+)?$':
|
||||
description: DAI subnode.
|
||||
type: object
|
||||
patternProperties:
|
||||
@ -269,6 +264,13 @@ properties:
|
||||
- capture
|
||||
additionalProperties: false
|
||||
|
||||
'ports(@[0-9a-f]+)?$':
|
||||
$ref: audio-graph-port.yaml#/definitions/port-base
|
||||
unevaluatedProperties: false
|
||||
patternProperties:
|
||||
'^port(@[0-9a-f]+)?$':
|
||||
$ref: "#/definitions/port-def"
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
@ -9,6 +9,9 @@ title: Samsung Aries audio complex with WM8994 codec
|
||||
maintainers:
|
||||
- Jonathan Bakker <xc-racer2@live.ca>
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
@ -17,10 +20,6 @@ properties:
|
||||
# Without FM radio and modem slave
|
||||
- samsung,fascinate4g-wm8994
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: The user-visible name of this sound complex.
|
||||
|
||||
cpu:
|
||||
type: object
|
||||
additionalProperties: false
|
||||
@ -46,6 +45,7 @@ properties:
|
||||
|
||||
samsung,audio-routing:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
deprecated: true
|
||||
description: |
|
||||
List of the connections between audio
|
||||
components; each entry is a pair of strings, the first being the
|
||||
@ -56,6 +56,7 @@ properties:
|
||||
or FM In
|
||||
For samsung,fascinate4g-wm8994: HP, SPK, RCV, LINE, Main Mic,
|
||||
or HeadsetMic
|
||||
Deprecated, use audio-routing.
|
||||
|
||||
extcon:
|
||||
description: Extcon phandle for dock detection
|
||||
@ -87,10 +88,9 @@ properties:
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- model
|
||||
- cpu
|
||||
- codec
|
||||
- samsung,audio-routing
|
||||
- audio-routing
|
||||
- extcon
|
||||
- main-micbias-supply
|
||||
- headset-micbias-supply
|
||||
@ -98,7 +98,7 @@ required:
|
||||
- headset-detect-gpios
|
||||
- headset-key-gpios
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
@ -121,7 +121,7 @@ examples:
|
||||
headset-detect-gpios = <&gph0 6 GPIO_ACTIVE_HIGH>;
|
||||
headset-key-gpios = <&gph3 6 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
samsung,audio-routing =
|
||||
audio-routing =
|
||||
"HP", "HPOUT1L",
|
||||
"HP", "HPOUT1R",
|
||||
|
||||
|
@ -9,14 +9,13 @@ title: Samsung Midas audio complex with WM1811 codec
|
||||
maintainers:
|
||||
- Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: samsung,midas-audio
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: The user-visible name of this sound complex.
|
||||
|
||||
cpu:
|
||||
type: object
|
||||
additionalProperties: false
|
||||
@ -38,6 +37,7 @@ properties:
|
||||
- sound-dai
|
||||
|
||||
samsung,audio-routing:
|
||||
deprecated: true
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
description: |
|
||||
List of the connections between audio components; each entry is
|
||||
@ -45,6 +45,7 @@ properties:
|
||||
being the connection's source; valid names for sources and sinks are
|
||||
the WM1811's pins (as documented in its binding), and the jacks
|
||||
on the board: HP, SPK, Main Mic, Sub Mic, Headset Mic.
|
||||
Deprecated, use audio-routing.
|
||||
|
||||
mic-bias-supply:
|
||||
description: Supply for the micbias on the Main microphone
|
||||
@ -62,14 +63,13 @@ properties:
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- model
|
||||
- cpu
|
||||
- codec
|
||||
- samsung,audio-routing
|
||||
- audio-routing
|
||||
- mic-bias-supply
|
||||
- submic-bias-supply
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
@ -84,7 +84,7 @@ examples:
|
||||
mic-bias-supply = <&mic_bias_reg>;
|
||||
submic-bias-supply = <&submic_bias_reg>;
|
||||
|
||||
samsung,audio-routing =
|
||||
audio-routing =
|
||||
"HP", "HPOUT1L",
|
||||
"HP", "HPOUT1R",
|
||||
|
||||
|
@ -10,6 +10,9 @@ maintainers:
|
||||
- Krzysztof Kozlowski <krzk@kernel.org>
|
||||
- Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
@ -24,10 +27,6 @@ properties:
|
||||
- const: samsung,odroid-xu4-audio
|
||||
deprecated: true
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: The user-visible name of this sound complex.
|
||||
|
||||
assigned-clock-parents: true
|
||||
assigned-clock-rates: true
|
||||
assigned-clocks: true
|
||||
@ -52,6 +51,7 @@ properties:
|
||||
|
||||
samsung,audio-routing:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
deprecated: true
|
||||
description: |
|
||||
List of the connections between audio
|
||||
components; each entry is a pair of strings, the first being the
|
||||
@ -61,6 +61,7 @@ properties:
|
||||
For Odroid X2: "Headphone Jack", "Mic Jack", "DMIC"
|
||||
For Odroid U3, XU3: "Headphone Jack", "Speakers"
|
||||
For Odroid XU4: no entries
|
||||
Deprecated, use audio-routing.
|
||||
|
||||
samsung,audio-widgets:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
@ -70,18 +71,17 @@ properties:
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- model
|
||||
- cpu
|
||||
- codec
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
sound {
|
||||
compatible = "hardkernel,odroid-xu3-audio";
|
||||
model = "Odroid-XU3";
|
||||
samsung,audio-routing =
|
||||
audio-routing =
|
||||
"Headphone Jack", "HPL",
|
||||
"Headphone Jack", "HPR",
|
||||
"IN1", "Mic Jack",
|
||||
|
@ -10,6 +10,9 @@ maintainers:
|
||||
- Krzysztof Kozlowski <krzk@kernel.org>
|
||||
- Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||
|
||||
allOf:
|
||||
- $ref: sound-card-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: samsung,tm2-audio
|
||||
@ -32,6 +35,8 @@ properties:
|
||||
being the connection's source; valid names for sources and sinks are the
|
||||
WM5110's and MAX98504's pins and the jacks on the board: HP, SPK, Main
|
||||
Mic, Sub Mic, Third Mic, Headset Mic.
|
||||
Deprecated, use audio-routing.
|
||||
deprecated: true
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
|
||||
i2s-controller:
|
||||
@ -44,20 +49,15 @@ properties:
|
||||
mic-bias-gpios:
|
||||
description: GPIO pin that enables the Main Mic bias regulator.
|
||||
|
||||
model:
|
||||
description: The user-visible name of this sound complex.
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- audio-amplifier
|
||||
- audio-codec
|
||||
- samsung,audio-routing
|
||||
- audio-routing
|
||||
- i2s-controller
|
||||
- mic-bias-gpios
|
||||
- model
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
@ -70,7 +70,7 @@ examples:
|
||||
audio-amplifier = <&max98504>;
|
||||
mic-bias-gpios = <&gpr3 2 GPIO_ACTIVE_HIGH>;
|
||||
model = "wm5110";
|
||||
samsung,audio-routing = "HP", "HPOUT1L",
|
||||
audio-routing = "HP", "HPOUT1L",
|
||||
"HP", "HPOUT1R",
|
||||
"SPK", "SPKOUT",
|
||||
"SPKOUT", "HPOUT2L",
|
||||
|
@ -148,6 +148,15 @@ definitions:
|
||||
required:
|
||||
- sound-dai
|
||||
|
||||
additional-devs:
|
||||
type: object
|
||||
description:
|
||||
Additional devices used by the simple audio card.
|
||||
patternProperties:
|
||||
'^iio-aux(-.+)?$':
|
||||
type: object
|
||||
$ref: audio-iio-aux.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
@ -187,6 +196,8 @@ properties:
|
||||
$ref: "#/definitions/mclk-fs"
|
||||
simple-audio-card,aux-devs:
|
||||
$ref: "#/definitions/aux-devs"
|
||||
simple-audio-card,additional-devs:
|
||||
$ref: "#/definitions/additional-devs"
|
||||
simple-audio-card,convert-rate:
|
||||
$ref: "#/definitions/convert-rate"
|
||||
simple-audio-card,convert-channels:
|
||||
@ -359,6 +370,48 @@ examples:
|
||||
};
|
||||
};
|
||||
|
||||
# --------------------
|
||||
# route audio to/from a codec through an amplifier
|
||||
# designed with a potentiometer driven by IIO:
|
||||
# --------------------
|
||||
- |
|
||||
sound {
|
||||
compatible = "simple-audio-card";
|
||||
|
||||
simple-audio-card,aux-devs = <&_in>, <&_out>;
|
||||
simple-audio-card,routing =
|
||||
"CODEC LEFTIN", "AMP_IN LEFT OUT",
|
||||
"CODEC RIGHTIN", "AMP_IN RIGHT OUT",
|
||||
"AMP_OUT LEFT IN", "CODEC LEFTOUT",
|
||||
"AMP_OUT RIGHT IN", "CODEC RIGHTOUT";
|
||||
|
||||
simple-audio-card,additional-devs {
|
||||
amp_out: iio-aux-out {
|
||||
compatible = "audio-iio-aux";
|
||||
io-channels = <&pot_out 0>, <&pot_out 1>;
|
||||
io-channel-names = "LEFT", "RIGHT";
|
||||
snd-control-invert-range = <1 1>;
|
||||
sound-name-prefix = "AMP_OUT";
|
||||
};
|
||||
|
||||
amp_in: iio_aux-in {
|
||||
compatible = "audio-iio-aux";
|
||||
io-channels = <&pot_in 0>, <&pot_in 1>;
|
||||
io-channel-names = "LEFT", "RIGHT";
|
||||
sound-name-prefix = "AMP_IN";
|
||||
};
|
||||
};
|
||||
|
||||
simple-audio-card,cpu {
|
||||
sound-dai = <&cpu>;
|
||||
};
|
||||
|
||||
simple-audio-card,codec {
|
||||
sound-dai = <&codec>;
|
||||
clocks = <&clocks>;
|
||||
};
|
||||
};
|
||||
|
||||
# --------------------
|
||||
# Sampling Rate Conversion
|
||||
# --------------------
|
||||
|
@ -17,6 +17,9 @@ properties:
|
||||
- const: snps,designware-i2s
|
||||
- enum:
|
||||
- snps,designware-i2s
|
||||
- starfive,jh7110-i2stx0
|
||||
- starfive,jh7110-i2stx1
|
||||
- starfive,jh7110-i2srx
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
@ -29,15 +32,36 @@ properties:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
description: Sampling rate reference clock
|
||||
maxItems: 1
|
||||
items:
|
||||
- description: Sampling rate reference clock
|
||||
- description: APB clock
|
||||
- description: Audio master clock
|
||||
- description: Inner audio master clock source
|
||||
- description: External audio master clock source
|
||||
- description: Bit clock
|
||||
- description: Left/right channel clock
|
||||
- description: External bit clock
|
||||
- description: External left/right channel clock
|
||||
minItems: 1
|
||||
|
||||
clock-names:
|
||||
const: i2sclk
|
||||
items:
|
||||
- const: i2sclk
|
||||
- const: apb
|
||||
- const: mclk
|
||||
- const: mclk_inner
|
||||
- const: mclk_ext
|
||||
- const: bclk
|
||||
- const: lrck
|
||||
- const: bclk_ext
|
||||
- const: lrck_ext
|
||||
minItems: 1
|
||||
|
||||
resets:
|
||||
items:
|
||||
- description: Optional controller resets
|
||||
- description: controller reset of Sampling rate
|
||||
minItems: 1
|
||||
|
||||
dmas:
|
||||
items:
|
||||
@ -51,6 +75,17 @@ properties:
|
||||
- const: rx
|
||||
minItems: 1
|
||||
|
||||
starfive,syscon:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
items:
|
||||
- items:
|
||||
- description: phandle to System Register Controller sys_syscon node.
|
||||
- description: I2S-rx enabled control offset of SYS_SYSCONSAIF__SYSCFG register.
|
||||
- description: I2S-rx enabled control mask
|
||||
description:
|
||||
The phandle to System Register Controller syscon node and the I2S-rx(ADC)
|
||||
enabled control offset and mask of SYS_SYSCONSAIF__SYSCFG register.
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
- if:
|
||||
@ -66,6 +101,73 @@ allOf:
|
||||
properties:
|
||||
"#sound-dai-cells":
|
||||
const: 0
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: snps,designware-i2s
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
maxItems: 1
|
||||
clock-names:
|
||||
maxItems: 1
|
||||
resets:
|
||||
maxItems: 1
|
||||
else:
|
||||
properties:
|
||||
resets:
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: starfive,jh7110-i2stx0
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 5
|
||||
maxItems: 5
|
||||
clock-names:
|
||||
minItems: 5
|
||||
maxItems: 5
|
||||
required:
|
||||
- resets
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: starfive,jh7110-i2stx1
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 9
|
||||
maxItems: 9
|
||||
clock-names:
|
||||
minItems: 9
|
||||
maxItems: 9
|
||||
required:
|
||||
- resets
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: starfive,jh7110-i2srx
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 9
|
||||
maxItems: 9
|
||||
clock-names:
|
||||
minItems: 9
|
||||
maxItems: 9
|
||||
required:
|
||||
- resets
|
||||
- starfive,syscon
|
||||
else:
|
||||
properties:
|
||||
starfive,syscon: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
@ -0,0 +1,27 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/sound-card-common.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Board Sound Card Common Properties
|
||||
|
||||
maintainers:
|
||||
- Mark Brown <broonie@kernel.org>
|
||||
|
||||
properties:
|
||||
audio-routing:
|
||||
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
|
||||
description: |
|
||||
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.
|
||||
|
||||
model:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description: User specified audio sound card name
|
||||
|
||||
required:
|
||||
- model
|
||||
|
||||
additionalProperties: true
|
74
Documentation/devicetree/bindings/sound/wlf,wm8904.yaml
Normal file
74
Documentation/devicetree/bindings/sound/wlf,wm8904.yaml
Normal file
@ -0,0 +1,74 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/wlf,wm8904.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Wolfson WM8904/WM8912 audio codecs
|
||||
|
||||
maintainers:
|
||||
- patches@opensource.cirrus.com
|
||||
|
||||
description: |
|
||||
Pins on the device (for linking into audio routes):
|
||||
IN1L, IN1R, IN2L, IN2R, IN3L, IN3R, HPOUTL, HPOUTR, LINEOUTL, LINEOUTR,
|
||||
MICBIAS
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- wlf,wm8904
|
||||
- wlf,wm8912
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
"#sound-dai-cells":
|
||||
const: 0
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
clock-names:
|
||||
const: mclk
|
||||
|
||||
AVDD-supply: true
|
||||
CPVDD-supply: true
|
||||
DBVDD-supply: true
|
||||
DCVDD-supply: true
|
||||
MICVDD-supply: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- clocks
|
||||
- clock-names
|
||||
- AVDD-supply
|
||||
- CPVDD-supply
|
||||
- DBVDD-supply
|
||||
- DCVDD-supply
|
||||
- MICVDD-supply
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
codec@1a {
|
||||
compatible = "wlf,wm8904";
|
||||
reg = <0x1a>;
|
||||
clocks = <&pck0>;
|
||||
clock-names = "mclk";
|
||||
AVDD-supply = <®_1p8v>;
|
||||
CPVDD-supply = <®_1p8v>;
|
||||
DBVDD-supply = <®_1p8v>;
|
||||
DCVDD-supply = <®_1p8v>;
|
||||
MICVDD-supply = <®_1p8v>;
|
||||
};
|
||||
};
|
@ -26,6 +26,21 @@ properties:
|
||||
'#sound-dai-cells':
|
||||
const: 0
|
||||
|
||||
AVDD-supply:
|
||||
description: Analogue supply.
|
||||
|
||||
DBVDD-supply:
|
||||
description: Digital Buffer Supply.
|
||||
|
||||
DCVDD-supply:
|
||||
description: Digital Core Supply.
|
||||
|
||||
SPKVDD1-supply:
|
||||
description: Supply for speaker drivers 1.
|
||||
|
||||
SPKVDD2-supply:
|
||||
description: Supply for speaker drivers 2.
|
||||
|
||||
wlf,capless:
|
||||
type: boolean
|
||||
description:
|
||||
@ -84,5 +99,10 @@ examples:
|
||||
wlf,hp-cfg = <3 2 3>;
|
||||
wlf,gpio-cfg = <1 3>;
|
||||
wlf,shared-lrclk;
|
||||
DCVDD-supply = <®_audio>;
|
||||
DBVDD-supply = <®_audio>;
|
||||
AVDD-supply = <®_audio>;
|
||||
SPKVDD1-supply = <®_audio>;
|
||||
SPKVDD2-supply = <®_audio>;
|
||||
};
|
||||
};
|
||||
|
@ -1,33 +0,0 @@
|
||||
WM8904 audio CODEC
|
||||
|
||||
This device supports I2C only.
|
||||
|
||||
Required properties:
|
||||
- compatible: "wlf,wm8904" or "wlf,wm8912"
|
||||
- reg: the I2C address of the device.
|
||||
- clock-names: "mclk"
|
||||
- clocks: reference to
|
||||
<Documentation/devicetree/bindings/clock/clock-bindings.txt>
|
||||
|
||||
Pins on the device (for linking into audio routes):
|
||||
|
||||
* IN1L
|
||||
* IN1R
|
||||
* IN2L
|
||||
* IN2R
|
||||
* IN3L
|
||||
* IN3R
|
||||
* HPOUTL
|
||||
* HPOUTR
|
||||
* LINEOUTL
|
||||
* LINEOUTR
|
||||
* MICBIAS
|
||||
|
||||
Examples:
|
||||
|
||||
codec: wm8904@1a {
|
||||
compatible = "wlf,wm8904";
|
||||
reg = <0x1a>;
|
||||
clocks = <&pck0>;
|
||||
clock-names = "mclk";
|
||||
};
|
@ -3,15 +3,6 @@
|
||||
Digital TV Common functions
|
||||
---------------------------
|
||||
|
||||
Math functions
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
Provide some commonly-used math functions, usually required in order to
|
||||
estimate signal strength and signal to noise measurements in dB.
|
||||
|
||||
.. kernel-doc:: include/media/dvb_math.h
|
||||
|
||||
|
||||
DVB devices
|
||||
~~~~~~~~~~~
|
||||
|
||||
|
@ -46,157 +46,158 @@ FX-bus
|
||||
|
||||
name='PCM Front Playback Volume',index=0
|
||||
----------------------------------------
|
||||
This control is used to attenuate samples for left and right front PCM FX-bus
|
||||
This control is used to attenuate samples from left and right front PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 8 and 9 for left and right front PCM
|
||||
samples for 5.1 playback. The result samples are forwarded to the front DAC PCM
|
||||
slots of the Philips DAC.
|
||||
samples for 5.1 playback. The result samples are forwarded to the front speakers.
|
||||
|
||||
name='PCM Surround Playback Volume',index=0
|
||||
-------------------------------------------
|
||||
This control is used to attenuate samples for left and right surround PCM FX-bus
|
||||
This control is used to attenuate samples from left and right surround PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 2 and 3 for left and right surround PCM
|
||||
samples for 5.1 playback. The result samples are forwarded to the surround DAC PCM
|
||||
slots of the Philips DAC.
|
||||
samples for 5.1 playback. The result samples are forwarded to the surround (rear)
|
||||
speakers.
|
||||
|
||||
name='PCM Side Playback Volume',index=0
|
||||
---------------------------------------
|
||||
This control is used to attenuate samples from left and right side PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 14 and 15 for left and right side PCM
|
||||
samples for 7.1 playback. The result samples are forwarded to the side speakers.
|
||||
|
||||
name='PCM Center Playback Volume',index=0
|
||||
-----------------------------------------
|
||||
This control is used to attenuate samples for center PCM FX-bus accumulator.
|
||||
ALSA uses accumulator 6 for center PCM sample for 5.1 playback. The result sample
|
||||
is forwarded to the center DAC PCM slot of the Philips DAC.
|
||||
This control is used to attenuate samples from center PCM FX-bus accumulator.
|
||||
ALSA uses accumulator 6 for center PCM samples for 5.1 playback. The result
|
||||
samples are forwarded to the center speaker.
|
||||
|
||||
name='PCM LFE Playback Volume',index=0
|
||||
--------------------------------------
|
||||
This control is used to attenuate sample for LFE PCM FX-bus accumulator.
|
||||
ALSA uses accumulator 7 for LFE PCM sample for 5.1 playback. The result sample
|
||||
is forwarded to the LFE DAC PCM slot of the Philips DAC.
|
||||
ALSA uses accumulator 7 for LFE PCM samples for 5.1 playback. The result
|
||||
samples are forwarded to the subwoofer.
|
||||
|
||||
name='PCM Playback Volume',index=0
|
||||
----------------------------------
|
||||
This control is used to attenuate samples for left and right PCM FX-bus
|
||||
This control is used to attenuate samples from left and right PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples for
|
||||
stereo playback. The result samples are forwarded to the front DAC PCM slots
|
||||
of the Philips DAC.
|
||||
stereo playback. The result samples are forwarded to the front speakers.
|
||||
|
||||
name='PCM Capture Volume',index=0
|
||||
---------------------------------
|
||||
This control is used to attenuate samples for left and right PCM FX-bus
|
||||
accumulator. ALSA uses accumulators 0 and 1 for left and right PCM.
|
||||
The result is forwarded to the ADC capture FIFO (thus to the standard capture
|
||||
PCM device).
|
||||
This control is used to attenuate samples from left and right PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples for
|
||||
stereo playback. The result is forwarded to the standard capture PCM device.
|
||||
|
||||
name='Music Playback Volume',index=0
|
||||
------------------------------------
|
||||
This control is used to attenuate samples for left and right MIDI FX-bus
|
||||
This control is used to attenuate samples from left and right MIDI FX-bus
|
||||
accumulators. ALSA uses accumulators 4 and 5 for left and right MIDI samples.
|
||||
The result samples are forwarded to the front DAC PCM slots of the AC97 codec.
|
||||
The result samples are forwarded to the virtual stereo mixer.
|
||||
|
||||
name='Music Capture Volume',index=0
|
||||
-----------------------------------
|
||||
These controls are used to attenuate samples for left and right MIDI FX-bus
|
||||
accumulator. ALSA uses accumulators 4 and 5 for left and right PCM.
|
||||
The result is forwarded to the ADC capture FIFO (thus to the standard capture
|
||||
PCM device).
|
||||
These controls are used to attenuate samples from left and right MIDI FX-bus
|
||||
accumulator. ALSA uses accumulators 4 and 5 for left and right MIDI samples.
|
||||
The result is forwarded to the standard capture PCM device.
|
||||
|
||||
name='Mic Playback Volume',index=0
|
||||
----------------------------------
|
||||
This control is used to attenuate samples for left and right Mic input.
|
||||
For Mic input is used AC97 codec. The result samples are forwarded to
|
||||
the front DAC PCM slots of the Philips DAC. Samples are forwarded to Mic
|
||||
capture FIFO (device 1 - 16bit/8KHz mono) too without volume control.
|
||||
This control is used to attenuate samples from left and right Mic input of
|
||||
the AC97 codec. The result samples are forwarded to the virtual stereo mixer.
|
||||
|
||||
name='Mic Capture Volume',index=0
|
||||
---------------------------------
|
||||
This control is used to attenuate samples for left and right Mic input.
|
||||
The result is forwarded to the ADC capture FIFO (thus to the standard capture
|
||||
PCM device).
|
||||
This control is used to attenuate samples from left and right Mic input of
|
||||
the AC97 codec. The result is forwarded to the standard capture PCM device.
|
||||
|
||||
The original samples are also forwarded to the Mic capture PCM device (device 1;
|
||||
16bit/8KHz mono) without volume control.
|
||||
|
||||
name='Audigy CD Playback Volume',index=0
|
||||
----------------------------------------
|
||||
This control is used to attenuate samples from left and right IEC958 TTL
|
||||
digital inputs (usually used by a CDROM drive). The result samples are
|
||||
forwarded to the front DAC PCM slots of the Philips DAC.
|
||||
forwarded to the virtual stereo mixer.
|
||||
|
||||
name='Audigy CD Capture Volume',index=0
|
||||
---------------------------------------
|
||||
This control is used to attenuate samples from left and right IEC958 TTL
|
||||
digital inputs (usually used by a CDROM drive). The result samples are
|
||||
forwarded to the ADC capture FIFO (thus to the standard capture PCM device).
|
||||
digital inputs (usually used by a CDROM drive). The result is forwarded
|
||||
to the standard capture PCM device.
|
||||
|
||||
name='IEC958 Optical Playback Volume',index=0
|
||||
---------------------------------------------
|
||||
This control is used to attenuate samples from left and right IEC958 optical
|
||||
digital input. The result samples are forwarded to the front DAC PCM slots
|
||||
of the Philips DAC.
|
||||
digital input. The result samples are forwarded to the virtual stereo mixer.
|
||||
|
||||
name='IEC958 Optical Capture Volume',index=0
|
||||
--------------------------------------------
|
||||
This control is used to attenuate samples from left and right IEC958 optical
|
||||
digital inputs. The result samples are forwarded to the ADC capture FIFO
|
||||
(thus to the standard capture PCM device).
|
||||
digital inputs. The result is forwarded to the standard capture PCM device.
|
||||
|
||||
name='Line2 Playback Volume',index=0
|
||||
------------------------------------
|
||||
This control is used to attenuate samples from left and right I2S ADC
|
||||
inputs (on the AudigyDrive). The result samples are forwarded to the front
|
||||
DAC PCM slots of the Philips DAC.
|
||||
inputs (on the AudigyDrive). The result samples are forwarded to the virtual
|
||||
stereo mixer.
|
||||
|
||||
name='Line2 Capture Volume',index=1
|
||||
-----------------------------------
|
||||
This control is used to attenuate samples from left and right I2S ADC
|
||||
inputs (on the AudigyDrive). The result samples are forwarded to the ADC
|
||||
capture FIFO (thus to the standard capture PCM device).
|
||||
inputs (on the AudigyDrive). The result is forwarded to the standard capture
|
||||
PCM device.
|
||||
|
||||
name='Analog Mix Playback Volume',index=0
|
||||
-----------------------------------------
|
||||
This control is used to attenuate samples from left and right I2S ADC
|
||||
inputs from Philips ADC. The result samples are forwarded to the front
|
||||
DAC PCM slots of the Philips DAC. This contains mix from analog sources
|
||||
like CD, Line In, Aux, ....
|
||||
inputs from Philips ADC. The result samples are forwarded to the virtual
|
||||
stereo mixer. This contains mix from analog sources like CD, Line In, Aux, ....
|
||||
|
||||
name='Analog Mix Capture Volume',index=1
|
||||
----------------------------------------
|
||||
This control is used to attenuate samples from left and right I2S ADC
|
||||
inputs Philips ADC. The result samples are forwarded to the ADC
|
||||
capture FIFO (thus to the standard capture PCM device).
|
||||
inputs Philips ADC. The result is forwarded to the standard capture PCM device.
|
||||
|
||||
name='Aux2 Playback Volume',index=0
|
||||
-----------------------------------
|
||||
This control is used to attenuate samples from left and right I2S ADC
|
||||
inputs (on the AudigyDrive). The result samples are forwarded to the front
|
||||
DAC PCM slots of the Philips DAC.
|
||||
inputs (on the AudigyDrive). The result samples are forwarded to the virtual
|
||||
stereo mixer.
|
||||
|
||||
name='Aux2 Capture Volume',index=1
|
||||
----------------------------------
|
||||
This control is used to attenuate samples from left and right I2S ADC
|
||||
inputs (on the AudigyDrive). The result samples are forwarded to the ADC
|
||||
capture FIFO (thus to the standard capture PCM device).
|
||||
inputs (on the AudigyDrive). The result is forwarded to the standard capture
|
||||
PCM device.
|
||||
|
||||
name='Front Playback Volume',index=0
|
||||
------------------------------------
|
||||
All stereo signals are mixed together and mirrored to surround, center and LFE.
|
||||
This control is used to attenuate samples for left and right front speakers of
|
||||
this mix.
|
||||
This control is used to attenuate samples from the virtual stereo mixer.
|
||||
The result samples are forwarded to the front speakers.
|
||||
|
||||
name='Surround Playback Volume',index=0
|
||||
---------------------------------------
|
||||
All stereo signals are mixed together and mirrored to surround, center and LFE.
|
||||
This control is used to attenuate samples for left and right surround speakers of
|
||||
this mix.
|
||||
This control is used to attenuate samples from the virtual stereo mixer.
|
||||
The result samples are forwarded to the surround (rear) speakers.
|
||||
|
||||
name='Side Playback Volume',index=0
|
||||
-----------------------------------
|
||||
This control is used to attenuate samples from the virtual stereo mixer.
|
||||
The result samples are forwarded to the side speakers.
|
||||
|
||||
name='Center Playback Volume',index=0
|
||||
-------------------------------------
|
||||
All stereo signals are mixed together and mirrored to surround, center and LFE.
|
||||
This control is used to attenuate sample for center speaker of this mix.
|
||||
This control is used to attenuate samples from the virtual stereo mixer.
|
||||
The result samples are forwarded to the center speaker.
|
||||
|
||||
name='LFE Playback Volume',index=0
|
||||
----------------------------------
|
||||
All stereo signals are mixed together and mirrored to surround, center and LFE.
|
||||
This control is used to attenuate sample for LFE speaker of this mix.
|
||||
This control is used to attenuate samples from the virtual stereo mixer.
|
||||
The result samples are forwarded to the subwoofer.
|
||||
|
||||
name='Tone Control - Switch',index=0
|
||||
------------------------------------
|
||||
This control turns the tone control on or off. The samples for front, rear
|
||||
and center / LFE outputs are affected.
|
||||
This control turns the tone control on or off. The samples forwarded to
|
||||
the speaker outputs are affected.
|
||||
|
||||
name='Tone Control - Bass',index=0
|
||||
----------------------------------
|
||||
@ -212,8 +213,7 @@ The closest value to pure signal is 20.
|
||||
|
||||
name='Master Playback Volume',index=0
|
||||
-------------------------------------
|
||||
This control is used to attenuate samples for front, surround, center and
|
||||
LFE outputs.
|
||||
This control is used to attenuate samples forwarded to the speaker outputs.
|
||||
|
||||
name='IEC958 Optical Raw Playback Switch',index=0
|
||||
-------------------------------------------------
|
||||
@ -303,69 +303,4 @@ The channel mapping is following:
|
||||
MANUALS/PATENTS
|
||||
===============
|
||||
|
||||
ftp://opensource.creative.com/pub/doc
|
||||
-------------------------------------
|
||||
|
||||
Note that the site is defunct, but the documents are available
|
||||
from various other locations.
|
||||
|
||||
LM4545.pdf
|
||||
AC97 Codec
|
||||
|
||||
m2049.pdf
|
||||
The EMU10K1 Digital Audio Processor
|
||||
|
||||
hog63.ps
|
||||
FX8010 - A DSP Chip Architecture for Audio Effects
|
||||
|
||||
|
||||
WIPO Patents
|
||||
------------
|
||||
|
||||
WO 9901813 (A1)
|
||||
Audio Effects Processor with multiple asynchronous streams
|
||||
(Jan. 14, 1999)
|
||||
|
||||
WO 9901814 (A1)
|
||||
Processor with Instruction Set for Audio Effects (Jan. 14, 1999)
|
||||
|
||||
WO 9901953 (A1)
|
||||
Audio Effects Processor having Decoupled Instruction
|
||||
Execution and Audio Data Sequencing (Jan. 14, 1999)
|
||||
|
||||
|
||||
US Patents (https://www.uspto.gov/)
|
||||
-----------------------------------
|
||||
|
||||
US 5925841
|
||||
Digital Sampling Instrument employing cache memory (Jul. 20, 1999)
|
||||
|
||||
US 5928342
|
||||
Audio Effects Processor integrated on a single chip
|
||||
with a multiport memory onto which multiple asynchronous
|
||||
digital sound samples can be concurrently loaded
|
||||
(Jul. 27, 1999)
|
||||
|
||||
US 5930158
|
||||
Processor with Instruction Set for Audio Effects (Jul. 27, 1999)
|
||||
|
||||
US 6032235
|
||||
Memory initialization circuit (Tram) (Feb. 29, 2000)
|
||||
|
||||
US 6138207
|
||||
Interpolation looping of audio samples in cache connected to
|
||||
system bus with prioritization and modification of bus transfers
|
||||
in accordance with loop ends and minimum block sizes
|
||||
(Oct. 24, 2000)
|
||||
|
||||
US 6151670
|
||||
Method for conserving memory storage using a
|
||||
pool of short term memory registers
|
||||
(Nov. 21, 2000)
|
||||
|
||||
US 6195715
|
||||
Interrupt control for multiple programs communicating with
|
||||
a common interrupt by associating programs to GP registers,
|
||||
defining interrupt register, polling GP registers, and invoking
|
||||
callback routine associated with defined interrupt register
|
||||
(Feb. 27, 2001)
|
||||
See sb-live-mixer.rst.
|
||||
|
226
Documentation/sound/cards/emu-mixer.rst
Normal file
226
Documentation/sound/cards/emu-mixer.rst
Normal file
@ -0,0 +1,226 @@
|
||||
==================================================
|
||||
E-MU Digital Audio System mixer / default DSP code
|
||||
==================================================
|
||||
|
||||
This document covers the E-MU 0404/1010/1212/1616/1820 PCI/PCI-e/CardBus
|
||||
cards.
|
||||
|
||||
These cards use regular EMU10K2 (SoundBlaster Audigy) chips, but with an
|
||||
alternative front-end geared towards semi-professional studio recording.
|
||||
|
||||
This document is based on audigy-mixer.rst.
|
||||
|
||||
|
||||
Hardware compatibility
|
||||
======================
|
||||
|
||||
The EMU10K2 chips have a very short capture FIFO, which makes recording
|
||||
unreliable if the card's PCI bus requests are not handled with the
|
||||
appropriate priority.
|
||||
This is the case on more modern motherboards, where the PCI bus is only a
|
||||
secondary peripheral, rather than the actual arbiter of device access.
|
||||
In particular, I got recording glitches during simultaneous playback on an
|
||||
Intel DP55 board (memory controller in the CPU), but had success with an
|
||||
Intel DP45 board (memory controller in the north bridge).
|
||||
|
||||
The PCI Express variants of these cards (which have a PCI bridge on board,
|
||||
but are otherwise identical) may be less problematic.
|
||||
|
||||
|
||||
Driver capabilities
|
||||
===================
|
||||
|
||||
This driver supports only 16-bit 44.1/48 kHz operation. The multi-channel
|
||||
device (see emu10k1-jack.rst) additionally supports 24-bit capture.
|
||||
|
||||
A patchset to enhance the driver is available from `a GitHub repository
|
||||
<https://github.com/ossilator/linux/tree/ossis-emu10k1>`_.
|
||||
Its multi-channel device supports 24-bit for both playback and capture,
|
||||
and also supports full 88.2/96/176.4/192 kHz operation.
|
||||
It is not going to be upstreamed due to a fundamental disagreement about
|
||||
what constitutes a good user experience.
|
||||
|
||||
|
||||
Digital mixer controls
|
||||
======================
|
||||
|
||||
Note that the controls work as attenuators: the maximum value is the neutral
|
||||
position leaving the signal unchanged. Note that if the same destination is
|
||||
mentioned in multiple controls, the signal is accumulated and can be clipped
|
||||
(set to maximal or minimal value without checking for overflow).
|
||||
|
||||
Explanation of used abbreviations:
|
||||
|
||||
DAC
|
||||
digital to analog converter
|
||||
ADC
|
||||
analog to digital converter
|
||||
LFE
|
||||
low frequency effects (used as subwoofer signal)
|
||||
IEC958
|
||||
S/PDIF
|
||||
FX-bus
|
||||
the EMU10K2 chip has an effect bus containing 64 accumulators.
|
||||
Each of the synthesizer voices can feed its output to these accumulators
|
||||
and the DSP microcontroller can operate with the resulting sum.
|
||||
|
||||
name='Clock Source',index=0
|
||||
---------------------------
|
||||
This control allows switching the word clock between interally generated
|
||||
44.1 or 48 kHz, or a number of external sources.
|
||||
|
||||
Note: the sources for the 1616 CardBus card are unclear. Please report your
|
||||
findings.
|
||||
|
||||
name='Clock Fallback',index=0
|
||||
-----------------------------
|
||||
This control determines the internal clock which the card switches to when
|
||||
the selected external clock source is/becomes invalid.
|
||||
|
||||
name='DAC1 0202 14dB PAD',index=0, etc.
|
||||
---------------------------------------
|
||||
Output attenuation controls. Not available on 0404 cards.
|
||||
|
||||
name='ADC1 14dB PAD 0202',index=0, etc.
|
||||
---------------------------------------
|
||||
Input attenuation controls. Not available on 0404 cards.
|
||||
|
||||
name='Optical Output Mode',index=0
|
||||
----------------------------------
|
||||
Switches the TOSLINK output port between S/PDIF and ADAT.
|
||||
Not available on 0404 cards (fixed to S/PDIF).
|
||||
|
||||
name='Optical Input Mode',index=0
|
||||
---------------------------------
|
||||
Switches the TOSLINK input port between S/PDIF and ADAT.
|
||||
Not available on 0404 cards (fixed to S/PDIF).
|
||||
|
||||
name='PCM Front Playback Volume',index=0
|
||||
----------------------------------------
|
||||
This control is used to attenuate samples from left and right front PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 8 and 9 for left and right front PCM
|
||||
samples for 5.1 playback. The result samples are forwarded to the DSP 0 & 1
|
||||
playback channels.
|
||||
|
||||
name='PCM Surround Playback Volume',index=0
|
||||
-------------------------------------------
|
||||
This control is used to attenuate samples from left and right surround PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 2 and 3 for left and right surround PCM
|
||||
samples for 5.1 playback. The result samples are forwarded to the DSP 2 & 3
|
||||
playback channels.
|
||||
|
||||
name='PCM Side Playback Volume',index=0
|
||||
---------------------------------------
|
||||
This control is used to attenuate samples from left and right side PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 14 and 15 for left and right side PCM
|
||||
samples for 7.1 playback. The result samples are forwarded to the DSP 6 & 7
|
||||
playback channels.
|
||||
|
||||
name='PCM Center Playback Volume',index=0
|
||||
-----------------------------------------
|
||||
This control is used to attenuate samples from the center PCM FX-bus accumulator.
|
||||
ALSA uses accumulator 6 for center PCM samples for 5.1 playback. The result samples
|
||||
are forwarded to the DSP 4 playback channel.
|
||||
|
||||
name='PCM LFE Playback Volume',index=0
|
||||
--------------------------------------
|
||||
This control is used to attenuate samples from the LFE PCM FX-bus accumulator.
|
||||
ALSA uses accumulator 7 for LFE PCM samples for 5.1 playback. The result samples
|
||||
are forwarded to the DSP 5 playback channel.
|
||||
|
||||
name='PCM Playback Volume',index=0
|
||||
----------------------------------
|
||||
This control is used to attenuate samples from left and right PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples for
|
||||
stereo playback. The result samples are forwarded to the virtual stereo mixer.
|
||||
|
||||
name='PCM Capture Volume',index=0
|
||||
---------------------------------
|
||||
This control is used to attenuate samples from left and right PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 0 and 1 for left and right PCM.
|
||||
The result is forwarded to the standard capture PCM device.
|
||||
|
||||
name='Music Playback Volume',index=0
|
||||
------------------------------------
|
||||
This control is used to attenuate samples from left and right MIDI FX-bus
|
||||
accumulators. ALSA uses accumulators 4 and 5 for left and right MIDI samples.
|
||||
The result samples are forwarded to the virtual stereo mixer.
|
||||
|
||||
name='Music Capture Volume',index=0
|
||||
-----------------------------------
|
||||
These controls are used to attenuate samples from left and right MIDI FX-bus
|
||||
accumulator. ALSA uses accumulators 4 and 5 for left and right MIDI samples.
|
||||
The result is forwarded to the standard capture PCM device.
|
||||
|
||||
name='Front Playback Volume',index=0
|
||||
------------------------------------
|
||||
This control is used to attenuate samples from the virtual stereo mixer.
|
||||
The result samples are forwarded to the DSP 0 & 1 playback channels.
|
||||
|
||||
name='Surround Playback Volume',index=0
|
||||
---------------------------------------
|
||||
This control is used to attenuate samples from the virtual stereo mixer.
|
||||
The result samples are forwarded to the DSP 2 & 3 playback channels.
|
||||
|
||||
name='Side Playback Volume',index=0
|
||||
-----------------------------------
|
||||
This control is used to attenuate samples from the virtual stereo mixer.
|
||||
The result samples are forwarded to the DSP 6 & 7 playback channels.
|
||||
|
||||
name='Center Playback Volume',index=0
|
||||
-------------------------------------
|
||||
This control is used to attenuate samples from the virtual stereo mixer.
|
||||
The result samples are forwarded to the DSP 4 playback channel.
|
||||
|
||||
name='LFE Playback Volume',index=0
|
||||
----------------------------------
|
||||
This control is used to attenuate samples from the virtual stereo mixer.
|
||||
The result samples are forwarded to the DSP 5 playback channel.
|
||||
|
||||
name='Tone Control - Switch',index=0
|
||||
------------------------------------
|
||||
This control turns the tone control on or off. The samples forwarded to
|
||||
the DSP playback channels are affected.
|
||||
|
||||
name='Tone Control - Bass',index=0
|
||||
----------------------------------
|
||||
This control sets the bass intensity. There is no neutral value!!
|
||||
When the tone control code is activated, the samples are always modified.
|
||||
The closest value to pure signal is 20.
|
||||
|
||||
name='Tone Control - Treble',index=0
|
||||
------------------------------------
|
||||
This control sets the treble intensity. There is no neutral value!!
|
||||
When the tone control code is activated, the samples are always modified.
|
||||
The closest value to pure signal is 20.
|
||||
|
||||
name='Master Playback Volume',index=0
|
||||
-------------------------------------
|
||||
This control is used to attenuate samples for all DSP playback channels.
|
||||
|
||||
name='EMU Capture Volume',index=0
|
||||
----------------------------------
|
||||
This control is used to attenuate samples from the DSP 0 & 1 capture channels.
|
||||
The result is forwarded to the standard capture PCM device.
|
||||
|
||||
name='DAC Left',index=0, etc.
|
||||
-----------------------------
|
||||
Select the source for the given physical audio output. These may be physical
|
||||
inputs, playback channels (DSP xx, specified as a decimal number), or silence.
|
||||
|
||||
name='DSP x',index=0
|
||||
--------------------
|
||||
Select the source for the given capture channel (specified as a hexadecimal
|
||||
digit). Same options as for the physical audio outputs.
|
||||
|
||||
|
||||
PCM stream related controls
|
||||
===========================
|
||||
|
||||
These controls are described in audigy-mixer.rst.
|
||||
|
||||
|
||||
MANUALS/PATENTS
|
||||
===============
|
||||
|
||||
See sb-live-mixer.rst.
|
@ -8,6 +8,7 @@ Card-Specific Information
|
||||
cmipci
|
||||
sb-live-mixer
|
||||
audigy-mixer
|
||||
emu-mixer
|
||||
emu10k1-jack
|
||||
via82xx-mixer
|
||||
audiophile-usb
|
||||
|
@ -61,61 +61,61 @@ FX-bus
|
||||
|
||||
``name='Wave Playback Volume',index=0``
|
||||
---------------------------------------
|
||||
This control is used to attenuate samples for left and right PCM FX-bus
|
||||
This control is used to attenuate samples from left and right PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples.
|
||||
The result samples are forwarded to the front DAC PCM slots of the AC97 codec.
|
||||
|
||||
``name='Wave Surround Playback Volume',index=0``
|
||||
------------------------------------------------
|
||||
This control is used to attenuate samples for left and right PCM FX-bus
|
||||
This control is used to attenuate samples from left and right PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples.
|
||||
The result samples are forwarded to the rear I2S DACs. These DACs operates
|
||||
separately (they are not inside the AC97 codec).
|
||||
|
||||
``name='Wave Center Playback Volume',index=0``
|
||||
----------------------------------------------
|
||||
This control is used to attenuate samples for left and right PCM FX-bus
|
||||
This control is used to attenuate samples from left and right PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples.
|
||||
The result is mixed to mono signal (single channel) and forwarded to
|
||||
the ??rear?? right DAC PCM slot of the AC97 codec.
|
||||
|
||||
``name='Wave LFE Playback Volume',index=0``
|
||||
-------------------------------------------
|
||||
This control is used to attenuate samples for left and right PCM FX-bus
|
||||
This control is used to attenuate samples from left and right PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 0 and 1 for left and right PCM.
|
||||
The result is mixed to mono signal (single channel) and forwarded to
|
||||
the ??rear?? left DAC PCM slot of the AC97 codec.
|
||||
|
||||
``name='Wave Capture Volume',index=0``, ``name='Wave Capture Switch',index=0``
|
||||
------------------------------------------------------------------------------
|
||||
These controls are used to attenuate samples for left and right PCM FX-bus
|
||||
These controls are used to attenuate samples from left and right PCM FX-bus
|
||||
accumulator. ALSA uses accumulators 0 and 1 for left and right PCM.
|
||||
The result is forwarded to the ADC capture FIFO (thus to the standard capture
|
||||
PCM device).
|
||||
|
||||
``name='Synth Playback Volume',index=0``
|
||||
----------------------------------------
|
||||
This control is used to attenuate samples for left and right MIDI FX-bus
|
||||
This control is used to attenuate samples from left and right MIDI FX-bus
|
||||
accumulators. ALSA uses accumulators 4 and 5 for left and right MIDI samples.
|
||||
The result samples are forwarded to the front DAC PCM slots of the AC97 codec.
|
||||
|
||||
``name='Synth Capture Volume',index=0``, ``name='Synth Capture Switch',index=0``
|
||||
--------------------------------------------------------------------------------
|
||||
These controls are used to attenuate samples for left and right MIDI FX-bus
|
||||
accumulator. ALSA uses accumulators 4 and 5 for left and right PCM.
|
||||
These controls are used to attenuate samples from left and right MIDI FX-bus
|
||||
accumulator. ALSA uses accumulators 4 and 5 for left and right MIDI samples.
|
||||
The result is forwarded to the ADC capture FIFO (thus to the standard capture
|
||||
PCM device).
|
||||
|
||||
``name='Surround Playback Volume',index=0``
|
||||
-------------------------------------------
|
||||
This control is used to attenuate samples for left and right rear PCM FX-bus
|
||||
This control is used to attenuate samples from left and right rear PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 2 and 3 for left and right rear PCM samples.
|
||||
The result samples are forwarded to the rear I2S DACs. These DACs operate
|
||||
separately (they are not inside the AC97 codec).
|
||||
|
||||
``name='Surround Capture Volume',index=0``, ``name='Surround Capture Switch',index=0``
|
||||
--------------------------------------------------------------------------------------
|
||||
These controls are used to attenuate samples for left and right rear PCM FX-bus
|
||||
These controls are used to attenuate samples from left and right rear PCM FX-bus
|
||||
accumulators. ALSA uses accumulators 2 and 3 for left and right rear PCM samples.
|
||||
The result is forwarded to the ADC capture FIFO (thus to the standard capture
|
||||
PCM device).
|
||||
@ -134,7 +134,7 @@ to the ??rear?? left DAC PCM slot of the AC97 codec.
|
||||
|
||||
``name='AC97 Playback Volume',index=0``
|
||||
---------------------------------------
|
||||
This control is used to attenuate samples for left and right front ADC PCM slots
|
||||
This control is used to attenuate samples from left and right front ADC PCM slots
|
||||
of the AC97 codec. The result samples are forwarded to the front DAC PCM
|
||||
slots of the AC97 codec.
|
||||
|
||||
@ -145,7 +145,7 @@ slots of the AC97 codec.
|
||||
|
||||
``name='AC97 Capture Volume',index=0``
|
||||
--------------------------------------
|
||||
This control is used to attenuate samples for left and right front ADC PCM slots
|
||||
This control is used to attenuate samples from left and right front ADC PCM slots
|
||||
of the AC97 codec. The result is forwarded to the ADC capture FIFO (thus to
|
||||
the standard capture PCM device).
|
||||
|
||||
|
@ -376,3 +376,191 @@ Sequencer API Extensions
|
||||
name and attributes accordingly, and notifies the changes via the
|
||||
announcement to the ALSA sequencer system port, similarly like the
|
||||
normal port change notification.
|
||||
|
||||
|
||||
MIDI2 USB Gadget Function Driver
|
||||
================================
|
||||
|
||||
The latest kernel contains the support for USB MIDI 2.0 gadget
|
||||
function driver, which can be used for prototyping and debugging MIDI
|
||||
2.0 features.
|
||||
|
||||
`CONFIG_USB_GADGET`, `CONFIG_USB_CONFIGFS` and
|
||||
`CONFIG_USB_CONFIGFS_F_MIDI2` need to be enabled for the MIDI2 gadget
|
||||
driver.
|
||||
|
||||
In addition, for using a gadget driver, you need a working UDC driver.
|
||||
In the example below, we use `dummy_hcd` driver (enabled via
|
||||
`CONFIG_USB_DUMMY_HCD`) that is available on PC and VM for debugging
|
||||
purpose. There are other UDC drivers depending on the platform, and
|
||||
those can be used for a real device, instead, too.
|
||||
|
||||
At first, on a system to run the gadget, load `libcomposite` module::
|
||||
|
||||
% modprobe libcomposite
|
||||
|
||||
and you'll have `usb_gadget` subdirectory under configfs space
|
||||
(typically `/sys/kernel/config` on modern OS). Then create a gadget
|
||||
instance and add configurations there, for example::
|
||||
|
||||
% cd /sys/kernel/config
|
||||
% mkdir usb_gadget/g1
|
||||
|
||||
% cd usb_gadget/g1
|
||||
% mkdir configs/c.1
|
||||
% mkdir functions/midi2.usb0
|
||||
|
||||
% echo 0x0004 > idProduct
|
||||
% echo 0x17b3 > idVendor
|
||||
% mkdir strings/0x409
|
||||
% echo "ACME Enterprises" > strings/0x409/manufacturer
|
||||
% echo "ACMESynth" > strings/0x409/product
|
||||
% echo "ABCD12345" > strings/0x409/serialnumber
|
||||
|
||||
% mkdir configs/c.1/strings/0x409
|
||||
% echo "Monosynth" > configs/c.1/strings/0x409/configuration
|
||||
% echo 120 > configs/c.1/MaxPower
|
||||
|
||||
At this point, there must be a subdirectory `ep.0`, and that is the
|
||||
configuration for a UMP Endpoint. You can fill the Endpoint
|
||||
information like::
|
||||
|
||||
% echo "ACMESynth" > functions/midi2.usb0/iface_name
|
||||
% echo "ACMESynth" > functions/midi2.usb0/ep.0/ep_name
|
||||
% echo "ABCD12345" > functions/midi2.usb0/ep.0/product_id
|
||||
% echo 0x0123 > functions/midi2.usb0/ep.0/family
|
||||
% echo 0x4567 > functions/midi2.usb0/ep.0/model
|
||||
% echo 0x123456 > functions/midi2.usb0/ep.0/manufacturer
|
||||
% echo 0x12345678 > functions/midi2.usb0/ep.0/sw_revision
|
||||
|
||||
The default MIDI protocol can be set either 1 or 2::
|
||||
|
||||
% echo 2 > functions/midi2.usb0/ep.0/protocol
|
||||
|
||||
And, you can find a subdirectory `block.0` under this Endpoint
|
||||
subdirectory. This defines the Function Block information::
|
||||
|
||||
% echo "Monosynth" > functions/midi2.usb0/ep.0/block.0/name
|
||||
% echo 0 > functions/midi2.usb0/ep.0/block.0/first_group
|
||||
% echo 1 > functions/midi2.usb0/ep.0/block.0/num_groups
|
||||
|
||||
Finally, link the configuration and enable it::
|
||||
|
||||
% ln -s functions/midi2.usb0 configs/c.1
|
||||
% echo dummy_udc.0 > UDC
|
||||
|
||||
where `dummy_udc.0` is an example case and it differs depending on the
|
||||
system. You can find the UDC instances in `/sys/class/udc` and pass
|
||||
the found name instead::
|
||||
|
||||
% ls /sys/class/udc
|
||||
dummy_udc.0
|
||||
|
||||
Now, the MIDI 2.0 gadget device is enabled, and the gadget host
|
||||
creates a new sound card instance containing a UMP rawmidi device by
|
||||
`f_midi2` driver::
|
||||
|
||||
% cat /proc/asound/cards
|
||||
....
|
||||
1 [Gadget ]: f_midi2 - MIDI 2.0 Gadget
|
||||
MIDI 2.0 Gadget
|
||||
|
||||
And on the connected host, a similar card should appear, too, but with
|
||||
the card and device names given in the configfs above::
|
||||
|
||||
% cat /proc/asound/cards
|
||||
....
|
||||
2 [ACMESynth ]: USB-Audio - ACMESynth
|
||||
ACME Enterprises ACMESynth at usb-dummy_hcd.0-1, high speed
|
||||
|
||||
You can play a MIDI file on the gadget side::
|
||||
|
||||
% aplaymidi -p 20:1 to_host.mid
|
||||
|
||||
and this will appear as an input from a MIDI device on the connected
|
||||
host::
|
||||
|
||||
% aseqdump -p 20:0 -u 2
|
||||
|
||||
Vice versa, a playback on the connected host will work as an input on
|
||||
the gadget, too.
|
||||
|
||||
Each Function Block may have different direction and UI-hint,
|
||||
specified via `direction` and `ui_hint` attributes.
|
||||
Passing `1` is for input-only, `2` for out-only and `3` for
|
||||
bidirectional (the default value). For example::
|
||||
|
||||
% echo 2 > functions/midi2.usb0/ep.0/block.0/direction
|
||||
% echo 2 > functions/midi2.usb0/ep.0/block.0/ui_hint
|
||||
|
||||
When you need more than one Function Blocks, you can create
|
||||
subdirectories `block.1`, `block.2`, etc dynamically, and configure
|
||||
them in the configuration procedure above before linking.
|
||||
For example, to create a second Function Block for a keyboard::
|
||||
|
||||
% mkdir functions/midi2.usb0/ep.0/block.1
|
||||
% echo "Keyboard" > functions/midi2.usb0/ep.0/block.1/name
|
||||
% echo 1 > functions/midi2.usb0/ep.0/block.1/first_group
|
||||
% echo 1 > functions/midi2.usb0/ep.0/block.1/num_groups
|
||||
% echo 1 > functions/midi2.usb0/ep.0/block.1/direction
|
||||
% echo 1 > functions/midi2.usb0/ep.0/block.1/ui_hint
|
||||
|
||||
The `block.*` subdirectories can be removed dynamically, too (except
|
||||
for `block.0` which is persistent).
|
||||
|
||||
For assigning a Function Block for MIDI 1.0 I/O, set up in `is_midi1`
|
||||
attribute. 1 is for MIDI 1.0, and 2 is for MIDI 1.0 with low speed
|
||||
connection::
|
||||
|
||||
% echo 2 > functions/midi2.usb0/ep.0/block.1/is_midi1
|
||||
|
||||
For disabling the processing of UMP Stream messages in the gadget
|
||||
driver, pass `0` to `process_ump` attribute in the top-level config::
|
||||
|
||||
% echo 0 > functions/midi2.usb0/process_ump
|
||||
|
||||
The MIDI 1.0 interface at altset 0 is supported by the gadget driver,
|
||||
too. When MIDI 1.0 interface is selected by the connected host, the
|
||||
UMP I/O on the gadget is translated from/to USB MIDI 1.0 packets
|
||||
accordingly while the gadget driver keeps communicating with the
|
||||
user-space over UMP rawmidi.
|
||||
|
||||
MIDI 1.0 ports are set up from the config in each Function Block.
|
||||
For example::
|
||||
|
||||
% echo 0 > functions/midi2.usb0/ep.0/block.0/midi1_first_group
|
||||
% echo 1 > functions/midi2.usb0/ep.0/block.0/midi1_num_groups
|
||||
|
||||
The configuration above will enable the Group 1 (the index 0) for MIDI
|
||||
1.0 interface. Note that those groups must be in the groups defined
|
||||
for the Function Block itself.
|
||||
|
||||
The gadget driver supports more than one UMP Endpoints, too.
|
||||
Similarly like the Function Blocks, you can create a new subdirectory
|
||||
`ep.1` (but under the card top-level config) to enable a new Endpoint::
|
||||
|
||||
% mkdir functions/midi2.usb0/ep.1
|
||||
|
||||
and create a new Function Block there. For example, to create 4
|
||||
Groups for the Function Block of this new Endpoint::
|
||||
|
||||
% mkdir functions/midi2.usb0/ep.1/block.0
|
||||
% echo 4 > functions/midi2.usb0/ep.1/block.0/num_groups
|
||||
|
||||
Now, you'll have 4 rawmidi devices in total: the first two are UMP
|
||||
rawmidi devices for Endpoint 0 and Endpoint 1, and other two for the
|
||||
legacy MIDI 1.0 rawmidi devices corresponding to both EP 0 and EP 1.
|
||||
|
||||
The current altsetting on the gadget can be informed via a control
|
||||
element "Operation Mode" with `RAWMIDI` iface. e.g. you can read it
|
||||
via `amixer` program running on the gadget host like::
|
||||
|
||||
% amixer -c1 cget iface=RAWMIDI,name='Operation Mode'
|
||||
; type=INTEGER,access=r--v----,values=1,min=0,max=2,step=0
|
||||
: values=2
|
||||
|
||||
The value (shown in the second returned line with `: values=`)
|
||||
indicates 1 for MIDI 1.0 (altset 0), 2 for MIDI 2.0 (altset 1) and 0
|
||||
for unset.
|
||||
|
||||
As of now, the configurations can't be changed after binding.
|
||||
|
@ -2018,8 +2018,8 @@ sleeping poll threads, etc.
|
||||
|
||||
This callback is also atomic by default.
|
||||
|
||||
copy_user, copy_kernel and fill_silence ops
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
copy and fill_silence ops
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
These callbacks are not mandatory, and can be omitted in most cases.
|
||||
These callbacks are used when the hardware buffer cannot be in the
|
||||
@ -3444,8 +3444,8 @@ external hardware buffer in interrupts (or in tasklets, preferably).
|
||||
|
||||
The first case works fine if the external hardware buffer is large
|
||||
enough. This method doesn't need any extra buffers and thus is more
|
||||
efficient. You need to define the ``copy_user`` and ``copy_kernel``
|
||||
callbacks for the data transfer, in addition to the ``fill_silence``
|
||||
efficient. You need to define the ``copy`` callback
|
||||
for the data transfer, in addition to the ``fill_silence``
|
||||
callback for playback. However, there is a drawback: it cannot be
|
||||
mmapped. The examples are GUS's GF1 PCM or emu8000's wavetable PCM.
|
||||
|
||||
@ -3458,22 +3458,22 @@ Another case is when the chip uses a PCI memory-map region for the
|
||||
buffer instead of the host memory. In this case, mmap is available only
|
||||
on certain architectures like the Intel one. In non-mmap mode, the data
|
||||
cannot be transferred as in the normal way. Thus you need to define the
|
||||
``copy_user``, ``copy_kernel`` and ``fill_silence`` callbacks as well,
|
||||
``copy`` and ``fill_silence`` callbacks as well,
|
||||
as in the cases above. Examples are found in ``rme32.c`` and
|
||||
``rme96.c``.
|
||||
|
||||
The implementation of the ``copy_user``, ``copy_kernel`` and
|
||||
The implementation of the ``copy`` and
|
||||
``silence`` callbacks depends upon whether the hardware supports
|
||||
interleaved or non-interleaved samples. The ``copy_user`` callback is
|
||||
interleaved or non-interleaved samples. The ``copy`` callback is
|
||||
defined like below, a bit differently depending on whether the direction
|
||||
is playback or capture::
|
||||
|
||||
static int playback_copy_user(struct snd_pcm_substream *substream,
|
||||
static int playback_copy(struct snd_pcm_substream *substream,
|
||||
int channel, unsigned long pos,
|
||||
void __user *src, unsigned long count);
|
||||
static int capture_copy_user(struct snd_pcm_substream *substream,
|
||||
struct iov_iter *src, unsigned long count);
|
||||
static int capture_copy(struct snd_pcm_substream *substream,
|
||||
int channel, unsigned long pos,
|
||||
void __user *dst, unsigned long count);
|
||||
struct iov_iter *dst, unsigned long count);
|
||||
|
||||
In the case of interleaved samples, the second argument (``channel``) is
|
||||
not used. The third argument (``pos``) specifies the position in bytes.
|
||||
@ -3490,18 +3490,17 @@ of data (``count``) at the specified pointer (``src``) to the specified
|
||||
offset (``pos``) in the hardware buffer. When coded like memcpy-like
|
||||
way, the copy would look like::
|
||||
|
||||
my_memcpy_from_user(my_buffer + pos, src, count);
|
||||
my_memcpy_from_iter(my_buffer + pos, src, count);
|
||||
|
||||
For the capture direction, you copy the given amount of data (``count``)
|
||||
at the specified offset (``pos``) in the hardware buffer to the
|
||||
specified pointer (``dst``)::
|
||||
|
||||
my_memcpy_to_user(dst, my_buffer + pos, count);
|
||||
my_memcpy_to_iter(dst, my_buffer + pos, count);
|
||||
|
||||
Here the functions are named ``from_user`` and ``to_user`` because
|
||||
it's the user-space buffer that is passed to these callbacks. That
|
||||
is, the callback is supposed to copy data from/to the user-space
|
||||
directly to/from the hardware buffer.
|
||||
The given ``src`` or ``dst`` a struct iov_iter pointer containing the
|
||||
pointer and the size. Use the existing helpers to copy or access the
|
||||
data as defined in ``linux/uio.h``.
|
||||
|
||||
Careful readers might notice that these callbacks receive the
|
||||
arguments in bytes, not in frames like other callbacks. It's because
|
||||
@ -3519,25 +3518,6 @@ the given user-space buffer, but only for the given channel. For
|
||||
details, please check ``isa/gus/gus_pcm.c`` or ``pci/rme9652/rme9652.c``
|
||||
as examples.
|
||||
|
||||
The above callbacks are the copies from/to the user-space buffer. There
|
||||
are some cases where we want to copy from/to the kernel-space buffer
|
||||
instead. In such a case, the ``copy_kernel`` callback is called. It'd
|
||||
look like::
|
||||
|
||||
static int playback_copy_kernel(struct snd_pcm_substream *substream,
|
||||
int channel, unsigned long pos,
|
||||
void *src, unsigned long count);
|
||||
static int capture_copy_kernel(struct snd_pcm_substream *substream,
|
||||
int channel, unsigned long pos,
|
||||
void *dst, unsigned long count);
|
||||
|
||||
As found easily, the only difference is that the buffer pointer is
|
||||
without a ``__user`` prefix; that is, a kernel-buffer pointer is passed
|
||||
in the fourth argument. Correspondingly, the implementation would be
|
||||
a version without the user-copy, such as::
|
||||
|
||||
my_memcpy(my_buffer + pos, src, count);
|
||||
|
||||
Usually for the playback, another callback ``fill_silence`` is
|
||||
defined. It's implemented in a similar way as the copy callbacks
|
||||
above::
|
||||
@ -3545,10 +3525,10 @@ above::
|
||||
static int silence(struct snd_pcm_substream *substream, int channel,
|
||||
unsigned long pos, unsigned long count);
|
||||
|
||||
The meanings of arguments are the same as in the ``copy_user`` and
|
||||
``copy_kernel`` callbacks, although there is no buffer pointer
|
||||
The meanings of arguments are the same as in the ``copy`` callback,
|
||||
although there is no buffer pointer
|
||||
argument. In the case of interleaved samples, the channel argument has
|
||||
no meaning, as for the ``copy_*`` callbacks.
|
||||
no meaning, as for the ``copy`` callback.
|
||||
|
||||
The role of the ``fill_silence`` callback is to set the given amount
|
||||
(``count``) of silence data at the specified offset (``pos``) in the
|
||||
|
@ -978,7 +978,8 @@ static int cs_dsp_create_control(struct cs_dsp *dsp,
|
||||
ctl->alg_region.alg == alg_region->alg &&
|
||||
ctl->alg_region.type == alg_region->type) {
|
||||
if ((!subname && !ctl->subname) ||
|
||||
(subname && !strncmp(ctl->subname, subname, ctl->subname_len))) {
|
||||
(subname && (ctl->subname_len == subname_len) &&
|
||||
!strncmp(ctl->subname, subname, ctl->subname_len))) {
|
||||
if (!ctl->enabled)
|
||||
ctl->enabled = 1;
|
||||
return 0;
|
||||
|
@ -2615,9 +2615,13 @@ static int vc4_hdmi_audio_cpu_dai_probe(struct snd_soc_dai *dai)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct snd_soc_dai_ops vc4_snd_dai_ops = {
|
||||
.probe = vc4_hdmi_audio_cpu_dai_probe,
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_driver vc4_hdmi_audio_cpu_dai_drv = {
|
||||
.name = "vc4-hdmi-cpu-dai",
|
||||
.probe = vc4_hdmi_audio_cpu_dai_probe,
|
||||
.ops = &vc4_snd_dai_ops,
|
||||
.playback = {
|
||||
.stream_name = "Playback",
|
||||
.channels_min = 1,
|
||||
|
@ -5,9 +5,10 @@
|
||||
*/
|
||||
#include <linux/err.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/minmax.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include <linux/iio/iio.h>
|
||||
#include <linux/iio/iio-opaque.h>
|
||||
@ -849,15 +850,14 @@ static int iio_channel_read_max(struct iio_channel *chan,
|
||||
int *val, int *val2, int *type,
|
||||
enum iio_chan_info_enum info)
|
||||
{
|
||||
int unused;
|
||||
const int *vals;
|
||||
int length;
|
||||
int ret;
|
||||
|
||||
if (!val2)
|
||||
val2 = &unused;
|
||||
|
||||
ret = iio_channel_read_avail(chan, &vals, type, &length, info);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
switch (ret) {
|
||||
case IIO_AVAIL_RANGE:
|
||||
switch (*type) {
|
||||
@ -866,7 +866,8 @@ static int iio_channel_read_max(struct iio_channel *chan,
|
||||
break;
|
||||
default:
|
||||
*val = vals[4];
|
||||
*val2 = vals[5];
|
||||
if (val2)
|
||||
*val2 = vals[5];
|
||||
}
|
||||
return 0;
|
||||
|
||||
@ -875,20 +876,16 @@ static int iio_channel_read_max(struct iio_channel *chan,
|
||||
return -EINVAL;
|
||||
switch (*type) {
|
||||
case IIO_VAL_INT:
|
||||
*val = vals[--length];
|
||||
while (length) {
|
||||
if (vals[--length] > *val)
|
||||
*val = vals[length];
|
||||
}
|
||||
*val = max_array(vals, length);
|
||||
break;
|
||||
default:
|
||||
/* FIXME: learn about max for other iio values */
|
||||
/* TODO: learn about max for other iio values */
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
|
||||
default:
|
||||
return ret;
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -912,6 +909,69 @@ err_unlock:
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(iio_read_max_channel_raw);
|
||||
|
||||
static int iio_channel_read_min(struct iio_channel *chan,
|
||||
int *val, int *val2, int *type,
|
||||
enum iio_chan_info_enum info)
|
||||
{
|
||||
const int *vals;
|
||||
int length;
|
||||
int ret;
|
||||
|
||||
ret = iio_channel_read_avail(chan, &vals, type, &length, info);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
switch (ret) {
|
||||
case IIO_AVAIL_RANGE:
|
||||
switch (*type) {
|
||||
case IIO_VAL_INT:
|
||||
*val = vals[0];
|
||||
break;
|
||||
default:
|
||||
*val = vals[0];
|
||||
if (val2)
|
||||
*val2 = vals[1];
|
||||
}
|
||||
return 0;
|
||||
|
||||
case IIO_AVAIL_LIST:
|
||||
if (length <= 0)
|
||||
return -EINVAL;
|
||||
switch (*type) {
|
||||
case IIO_VAL_INT:
|
||||
*val = min_array(vals, length);
|
||||
break;
|
||||
default:
|
||||
/* TODO: learn about min for other iio values */
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
int iio_read_min_channel_raw(struct iio_channel *chan, int *val)
|
||||
{
|
||||
struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(chan->indio_dev);
|
||||
int ret;
|
||||
int type;
|
||||
|
||||
mutex_lock(&iio_dev_opaque->info_exist_lock);
|
||||
if (!chan->indio_dev->info) {
|
||||
ret = -ENODEV;
|
||||
goto err_unlock;
|
||||
}
|
||||
|
||||
ret = iio_channel_read_min(chan, val, NULL, &type, IIO_CHAN_INFO_RAW);
|
||||
err_unlock:
|
||||
mutex_unlock(&iio_dev_opaque->info_exist_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(iio_read_min_channel_raw);
|
||||
|
||||
int iio_get_channel_type(struct iio_channel *chan, enum iio_chan_type *type)
|
||||
{
|
||||
struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(chan->indio_dev);
|
||||
|
@ -8,6 +8,6 @@ dvb-vb2-$(CONFIG_DVB_MMAP) := dvb_vb2.o
|
||||
|
||||
dvb-core-objs := dvbdev.o dmxdev.o dvb_demux.o \
|
||||
dvb_ca_en50221.o dvb_frontend.o \
|
||||
$(dvb-net-y) dvb_ringbuffer.o $(dvb-vb2-y) dvb_math.o
|
||||
$(dvb-net-y) dvb_ringbuffer.o $(dvb-vb2-y)
|
||||
|
||||
obj-$(CONFIG_DVB_CORE) += dvb-core.o
|
||||
|
@ -12,7 +12,7 @@
|
||||
#define AF9013_PRIV_H
|
||||
|
||||
#include <media/dvb_frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "af9013.h"
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/i2c-mux.h>
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include <linux/math64.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
|
||||
struct reg_val {
|
||||
u32 reg;
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
#include <linux/dvb/version.h>
|
||||
#include <media/dvb_frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "cxd2820r.h"
|
||||
#include <linux/gpio/driver.h> /* For gpio_chip */
|
||||
#include <linux/math64.h>
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include <linux/dynamic_debug.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include <media/dvb_frontend.h>
|
||||
#include "cxd2841er.h"
|
||||
#include "cxd2841er_priv.h"
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include "cxd2880_tnrdmd_dvbt2.h"
|
||||
#include "cxd2880_tnrdmd_dvbt2_mon.h"
|
||||
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
|
||||
static const int ref_dbm_1000[4][8] = {
|
||||
{-96000, -95000, -94000, -93000, -92000, -92000, -98000, -97000},
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include "cxd2880_tnrdmd_dvbt.h"
|
||||
#include "cxd2880_tnrdmd_dvbt_mon.h"
|
||||
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
|
||||
static const int ref_dbm_1000[3][5] = {
|
||||
{-93000, -91000, -90000, -89000, -88000},
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include <linux/spi/spi.h>
|
||||
|
||||
#include <media/dvb_frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
|
||||
#include "cxd2880.h"
|
||||
#include "cxd2880_tnrdmd_mon.h"
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <linux/mutex.h>
|
||||
#include <asm/div64.h>
|
||||
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include <media/dvb_frontend.h>
|
||||
|
||||
#include "dib7000p.h"
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <linux/mutex.h>
|
||||
#include <asm/div64.h>
|
||||
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
|
||||
#include <media/dvb_frontend.h>
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include <media/dvb_frontend.h>
|
||||
|
||||
#include "dib9000.h"
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <media/dvb_frontend.h>
|
||||
#include "drxk.h"
|
||||
#include "drxk_hard.h"
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
|
||||
static int power_down_dvbt(struct drxk_state *state, bool set_power_mode);
|
||||
static int power_down_qam(struct drxk_state *state);
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include <asm/div64.h>
|
||||
#include <linux/dvb/frontend.h>
|
||||
#include <linux/slab.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "lgdt3305.h"
|
||||
|
||||
static int debug;
|
||||
|
@ -12,7 +12,7 @@
|
||||
#include <asm/div64.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/dvb/frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "lgdt3306a.h"
|
||||
#include <linux/i2c-mux.h>
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#include <media/dvb_frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "lgdt330x_priv.h"
|
||||
#include "lgdt330x.h"
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
#include <media/dvb_frontend.h>
|
||||
#include "m88ds3103.h"
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/i2c-mux.h>
|
||||
#include <linux/regmap.h>
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
|
||||
#include "mn88443x.h"
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
#define MN88472_PRIV_H
|
||||
|
||||
#include <media/dvb_frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "mn88472.h"
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/regmap.h>
|
||||
|
@ -9,7 +9,7 @@
|
||||
#define MN88473_PRIV_H
|
||||
|
||||
#include <media/dvb_frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "mn88473.h"
|
||||
#include <linux/math64.h>
|
||||
#include <linux/firmware.h>
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include <media/dvb_frontend.h>
|
||||
#include "or51132.h"
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include <media/dvb_frontend.h>
|
||||
#include "or51211.h"
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
#define RTL2830_PRIV_H
|
||||
|
||||
#include <media/dvb_frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "rtl2830.h"
|
||||
#include <linux/i2c-mux.h>
|
||||
#include <linux/math64.h>
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include <media/dvb_frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "rtl2832.h"
|
||||
|
||||
struct rtl2832_dev {
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include <linux/regmap.h>
|
||||
|
||||
#include <media/dvb_frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "si2165_priv.h"
|
||||
#include "si2165.h"
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/i2c.h>
|
||||
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
|
||||
#include "stv0367.h"
|
||||
#include "stv0367_defs.h"
|
||||
|
@ -21,7 +21,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/math64.h>
|
||||
#include <linux/dvb/frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "tc90522.h"
|
||||
|
||||
#define TC90522_I2C_THRU_REG 0xfe
|
||||
|
@ -16,7 +16,7 @@
|
||||
#include <linux/math64.h>
|
||||
#include <asm/div64.h>
|
||||
#include <media/dvb_frontend.h>
|
||||
#include <media/dvb_math.h>
|
||||
#include <linux/int_log.h>
|
||||
#include "tda10048.h"
|
||||
|
||||
#define TDA10048_DEFAULT_FIRMWARE "dvb-fe-tda10048-1.0.fw"
|
||||
|
@ -204,9 +204,9 @@ static snd_pcm_uframes_t snd_solo_pcm_pointer(struct snd_pcm_substream *ss)
|
||||
return idx * G723_FRAMES_PER_PAGE;
|
||||
}
|
||||
|
||||
static int snd_solo_pcm_copy_user(struct snd_pcm_substream *ss, int channel,
|
||||
unsigned long pos, void __user *dst,
|
||||
unsigned long count)
|
||||
static int snd_solo_pcm_copy(struct snd_pcm_substream *ss, int channel,
|
||||
unsigned long pos, struct iov_iter *dst,
|
||||
unsigned long count)
|
||||
{
|
||||
struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss);
|
||||
struct solo_dev *solo_dev = solo_pcm->solo_dev;
|
||||
@ -223,35 +223,9 @@ static int snd_solo_pcm_copy_user(struct snd_pcm_substream *ss, int channel,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (copy_to_user(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES))
|
||||
if (copy_to_iter(solo_pcm->g723_buf, G723_PERIOD_BYTES, dst) !=
|
||||
G723_PERIOD_BYTES)
|
||||
return -EFAULT;
|
||||
dst += G723_PERIOD_BYTES;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int snd_solo_pcm_copy_kernel(struct snd_pcm_substream *ss, int channel,
|
||||
unsigned long pos, void *dst,
|
||||
unsigned long count)
|
||||
{
|
||||
struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss);
|
||||
struct solo_dev *solo_dev = solo_pcm->solo_dev;
|
||||
int err, i;
|
||||
|
||||
for (i = 0; i < (count / G723_FRAMES_PER_PAGE); i++) {
|
||||
int page = (pos / G723_FRAMES_PER_PAGE) + i;
|
||||
|
||||
err = solo_p2m_dma_t(solo_dev, 0, solo_pcm->g723_dma,
|
||||
SOLO_G723_EXT_ADDR(solo_dev) +
|
||||
(page * G723_PERIOD_BLOCK) +
|
||||
(ss->number * G723_PERIOD_BYTES),
|
||||
G723_PERIOD_BYTES, 0, 0);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
memcpy(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES);
|
||||
dst += G723_PERIOD_BYTES;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -263,8 +237,7 @@ static const struct snd_pcm_ops snd_solo_pcm_ops = {
|
||||
.prepare = snd_solo_pcm_prepare,
|
||||
.trigger = snd_solo_pcm_trigger,
|
||||
.pointer = snd_solo_pcm_pointer,
|
||||
.copy_user = snd_solo_pcm_copy_user,
|
||||
.copy_kernel = snd_solo_pcm_copy_kernel,
|
||||
.copy = snd_solo_pcm_copy,
|
||||
};
|
||||
|
||||
static int snd_solo_capture_volume_info(struct snd_kcontrol *kcontrol,
|
||||
|
@ -807,7 +807,6 @@ int gbaudio_register_module(struct gbaudio_module_info *module)
|
||||
{
|
||||
int ret;
|
||||
struct snd_soc_component *comp;
|
||||
struct snd_card *card;
|
||||
struct gbaudio_jack *jack = NULL;
|
||||
|
||||
if (!gbcodec) {
|
||||
@ -816,21 +815,20 @@ int gbaudio_register_module(struct gbaudio_module_info *module)
|
||||
}
|
||||
|
||||
comp = gbcodec->component;
|
||||
card = comp->card->snd_card;
|
||||
|
||||
down_write(&card->controls_rwsem);
|
||||
mutex_lock(&gbcodec->register_mutex);
|
||||
|
||||
if (module->num_dais) {
|
||||
dev_err(gbcodec->dev,
|
||||
"%d:DAIs not supported via gbcodec driver\n",
|
||||
module->num_dais);
|
||||
up_write(&card->controls_rwsem);
|
||||
mutex_unlock(&gbcodec->register_mutex);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = gbaudio_init_jack(module, comp->card);
|
||||
if (ret) {
|
||||
up_write(&card->controls_rwsem);
|
||||
mutex_unlock(&gbcodec->register_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -867,7 +865,7 @@ int gbaudio_register_module(struct gbaudio_module_info *module)
|
||||
ret = snd_soc_dapm_new_widgets(comp->card);
|
||||
dev_dbg(comp->dev, "Registered %s module\n", module->name);
|
||||
|
||||
up_write(&card->controls_rwsem);
|
||||
mutex_unlock(&gbcodec->register_mutex);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(gbaudio_register_module);
|
||||
@ -935,13 +933,12 @@ static void gbaudio_codec_cleanup(struct gbaudio_module_info *module)
|
||||
void gbaudio_unregister_module(struct gbaudio_module_info *module)
|
||||
{
|
||||
struct snd_soc_component *comp = gbcodec->component;
|
||||
struct snd_card *card = comp->card->snd_card;
|
||||
struct gbaudio_jack *jack, *n;
|
||||
int mask;
|
||||
|
||||
dev_dbg(comp->dev, "Unregister %s module\n", module->name);
|
||||
|
||||
down_write(&card->controls_rwsem);
|
||||
mutex_lock(&gbcodec->register_mutex);
|
||||
mutex_lock(&gbcodec->lock);
|
||||
gbaudio_codec_cleanup(module);
|
||||
list_del(&module->list);
|
||||
@ -978,10 +975,8 @@ void gbaudio_unregister_module(struct gbaudio_module_info *module)
|
||||
dev_dbg(comp->dev, "Removing %d controls\n",
|
||||
module->num_controls);
|
||||
/* release control semaphore */
|
||||
up_write(&card->controls_rwsem);
|
||||
gbaudio_remove_component_controls(comp, module->controls,
|
||||
module->num_controls);
|
||||
down_write(&card->controls_rwsem);
|
||||
}
|
||||
if (module->dapm_widgets) {
|
||||
dev_dbg(comp->dev, "Removing %d widgets\n",
|
||||
@ -992,7 +987,7 @@ void gbaudio_unregister_module(struct gbaudio_module_info *module)
|
||||
|
||||
dev_dbg(comp->dev, "Unregistered %s module\n", module->name);
|
||||
|
||||
up_write(&card->controls_rwsem);
|
||||
mutex_unlock(&gbcodec->register_mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(gbaudio_unregister_module);
|
||||
|
||||
@ -1012,6 +1007,7 @@ static int gbcodec_probe(struct snd_soc_component *comp)
|
||||
info->dev = comp->dev;
|
||||
INIT_LIST_HEAD(&info->module_list);
|
||||
mutex_init(&info->lock);
|
||||
mutex_init(&info->register_mutex);
|
||||
INIT_LIST_HEAD(&info->dai_list);
|
||||
|
||||
/* init dai_list used to maintain runtime stream info */
|
||||
|
@ -71,6 +71,7 @@ struct gbaudio_codec_info {
|
||||
/* to maintain runtime stream params for each DAI */
|
||||
struct list_head dai_list;
|
||||
struct mutex lock;
|
||||
struct mutex register_mutex;
|
||||
};
|
||||
|
||||
struct gbaudio_widget {
|
||||
|
@ -149,7 +149,6 @@ static int gbaudio_remove_controls(struct snd_card *card, struct device *dev,
|
||||
for (i = 0; i < num_controls; i++) {
|
||||
const struct snd_kcontrol_new *control = &controls[i];
|
||||
struct snd_ctl_elem_id id;
|
||||
struct snd_kcontrol *kctl;
|
||||
|
||||
if (prefix)
|
||||
snprintf(id.name, sizeof(id.name), "%s %s", prefix,
|
||||
@ -161,17 +160,10 @@ static int gbaudio_remove_controls(struct snd_card *card, struct device *dev,
|
||||
id.device = control->device;
|
||||
id.subdevice = control->subdevice;
|
||||
id.index = control->index;
|
||||
kctl = snd_ctl_find_id(card, &id);
|
||||
if (!kctl) {
|
||||
dev_err(dev, "Failed to find %s\n", control->name);
|
||||
continue;
|
||||
}
|
||||
err = snd_ctl_remove(card, kctl);
|
||||
if (err < 0) {
|
||||
err = snd_ctl_remove_id(card, &id);
|
||||
if (err < 0)
|
||||
dev_err(dev, "%d: Failed to remove %s\n", err,
|
||||
control->name);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -181,11 +173,7 @@ int gbaudio_remove_component_controls(struct snd_soc_component *component,
|
||||
unsigned int num_controls)
|
||||
{
|
||||
struct snd_card *card = component->card->snd_card;
|
||||
int err;
|
||||
|
||||
down_write(&card->controls_rwsem);
|
||||
err = gbaudio_remove_controls(card, component->dev, controls,
|
||||
num_controls, component->name_prefix);
|
||||
up_write(&card->controls_rwsem);
|
||||
return err;
|
||||
return gbaudio_remove_controls(card, component->dev, controls,
|
||||
num_controls, component->name_prefix);
|
||||
}
|
||||
|
@ -349,6 +349,7 @@ unsigned long devm_get_free_pages(struct device *dev,
|
||||
gfp_t gfp_mask, unsigned int order);
|
||||
void devm_free_pages(struct device *dev, unsigned long addr);
|
||||
|
||||
#ifdef CONFIG_HAS_IOMEM
|
||||
void __iomem *devm_ioremap_resource(struct device *dev,
|
||||
const struct resource *res);
|
||||
void __iomem *devm_ioremap_resource_wc(struct device *dev,
|
||||
@ -357,6 +358,31 @@ void __iomem *devm_ioremap_resource_wc(struct device *dev,
|
||||
void __iomem *devm_of_iomap(struct device *dev,
|
||||
struct device_node *node, int index,
|
||||
resource_size_t *size);
|
||||
#else
|
||||
|
||||
static inline
|
||||
void __iomem *devm_ioremap_resource(struct device *dev,
|
||||
const struct resource *res)
|
||||
{
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
static inline
|
||||
void __iomem *devm_ioremap_resource_wc(struct device *dev,
|
||||
const struct resource *res)
|
||||
{
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
static inline
|
||||
void __iomem *devm_of_iomap(struct device *dev,
|
||||
struct device_node *node, int index,
|
||||
resource_size_t *size)
|
||||
{
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* allows to add/remove a custom action to devres stack */
|
||||
void devm_remove_action(struct device *dev, void (*action)(void *), void *data);
|
||||
|
@ -37,17 +37,11 @@ struct imx_dsp_ipc {
|
||||
|
||||
static inline void imx_dsp_set_data(struct imx_dsp_ipc *ipc, void *data)
|
||||
{
|
||||
if (!ipc)
|
||||
return;
|
||||
|
||||
ipc->private_data = data;
|
||||
}
|
||||
|
||||
static inline void *imx_dsp_get_data(struct imx_dsp_ipc *ipc)
|
||||
{
|
||||
if (!ipc)
|
||||
return NULL;
|
||||
|
||||
return ipc->private_data;
|
||||
}
|
||||
|
||||
|
@ -46,17 +46,11 @@ struct mtk_adsp_ipc {
|
||||
|
||||
static inline void mtk_adsp_ipc_set_data(struct mtk_adsp_ipc *ipc, void *data)
|
||||
{
|
||||
if (!ipc)
|
||||
return;
|
||||
|
||||
ipc->private_data = data;
|
||||
}
|
||||
|
||||
static inline void *mtk_adsp_ipc_get_data(struct mtk_adsp_ipc *ipc)
|
||||
{
|
||||
if (!ipc)
|
||||
return NULL;
|
||||
|
||||
return ipc->private_data;
|
||||
}
|
||||
|
||||
|
@ -201,8 +201,9 @@ struct iio_dev
|
||||
* @chan: The channel being queried.
|
||||
* @val: Value read back.
|
||||
*
|
||||
* Note raw reads from iio channels are in adc counts and hence
|
||||
* scale will need to be applied if standard units required.
|
||||
* Note, if standard units are required, raw reads from iio channels
|
||||
* need the offset (default 0) and scale (default 1) to be applied
|
||||
* as (raw + offset) * scale.
|
||||
*/
|
||||
int iio_read_channel_raw(struct iio_channel *chan,
|
||||
int *val);
|
||||
@ -212,8 +213,9 @@ int iio_read_channel_raw(struct iio_channel *chan,
|
||||
* @chan: The channel being queried.
|
||||
* @val: Value read back.
|
||||
*
|
||||
* Note raw reads from iio channels are in adc counts and hence
|
||||
* scale will need to be applied if standard units required.
|
||||
* Note, if standard units are required, raw reads from iio channels
|
||||
* need the offset (default 0) and scale (default 1) to be applied
|
||||
* as (raw + offset) * scale.
|
||||
*
|
||||
* In opposit to the normal iio_read_channel_raw this function
|
||||
* returns the average of multiple reads.
|
||||
@ -281,8 +283,9 @@ int iio_read_channel_attribute(struct iio_channel *chan, int *val,
|
||||
* @chan: The channel being queried.
|
||||
* @val: Value being written.
|
||||
*
|
||||
* Note raw writes to iio channels are in dac counts and hence
|
||||
* scale will need to be applied if standard units required.
|
||||
* Note that for raw writes to iio channels, if the value provided is
|
||||
* in standard units, the affect of the scale and offset must be removed
|
||||
* as (value / scale) - offset.
|
||||
*/
|
||||
int iio_write_channel_raw(struct iio_channel *chan, int val);
|
||||
|
||||
@ -292,11 +295,24 @@ int iio_write_channel_raw(struct iio_channel *chan, int val);
|
||||
* @chan: The channel being queried.
|
||||
* @val: Value read back.
|
||||
*
|
||||
* Note raw reads from iio channels are in adc counts and hence
|
||||
* scale will need to be applied if standard units are required.
|
||||
* Note, if standard units are required, raw reads from iio channels
|
||||
* need the offset (default 0) and scale (default 1) to be applied
|
||||
* as (raw + offset) * scale.
|
||||
*/
|
||||
int iio_read_max_channel_raw(struct iio_channel *chan, int *val);
|
||||
|
||||
/**
|
||||
* iio_read_min_channel_raw() - read minimum available raw value from a given
|
||||
* channel, i.e. the minimum possible value.
|
||||
* @chan: The channel being queried.
|
||||
* @val: Value read back.
|
||||
*
|
||||
* Note, if standard units are required, raw reads from iio channels
|
||||
* need the offset (default 0) and scale (default 1) to be applied
|
||||
* as (raw + offset) * scale.
|
||||
*/
|
||||
int iio_read_min_channel_raw(struct iio_channel *chan, int *val);
|
||||
|
||||
/**
|
||||
* iio_read_avail_channel_raw() - read available raw values from a given channel
|
||||
* @chan: The channel being queried.
|
||||
@ -308,8 +324,9 @@ int iio_read_max_channel_raw(struct iio_channel *chan, int *val);
|
||||
* For ranges, three vals are always returned; min, step and max.
|
||||
* For lists, all the possible values are enumerated.
|
||||
*
|
||||
* Note raw available values from iio channels are in adc counts and
|
||||
* hence scale will need to be applied if standard units are required.
|
||||
* Note, if standard units are required, raw available values from iio
|
||||
* channels need the offset (default 0) and scale (default 1) to be applied
|
||||
* as (raw + offset) * scale.
|
||||
*/
|
||||
int iio_read_avail_channel_raw(struct iio_channel *chan,
|
||||
const int **vals, int *length);
|
||||
|
@ -1,22 +1,12 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* dvb-math provides some complex fixed-point math
|
||||
* operations shared between the dvb related stuff
|
||||
* Provides fixed-point logarithm operations.
|
||||
*
|
||||
* Copyright (C) 2006 Christoph Pfister (christophpfister@gmail.com)
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as
|
||||
* published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __DVB_MATH_H
|
||||
#define __DVB_MATH_H
|
||||
#ifndef __LINUX_INT_LOG_H
|
||||
#define __LINUX_INT_LOG_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
@ -134,6 +134,70 @@
|
||||
*/
|
||||
#define max_t(type, x, y) __careful_cmp((type)(x), (type)(y), >)
|
||||
|
||||
/*
|
||||
* Remove a const qualifier from integer types
|
||||
* _Generic(foo, type-name: association, ..., default: association) performs a
|
||||
* comparison against the foo type (not the qualified type).
|
||||
* Do not use the const keyword in the type-name as it will not match the
|
||||
* unqualified type of foo.
|
||||
*/
|
||||
#define __unconst_integer_type_cases(type) \
|
||||
unsigned type: (unsigned type)0, \
|
||||
signed type: (signed type)0
|
||||
|
||||
#define __unconst_integer_typeof(x) typeof( \
|
||||
_Generic((x), \
|
||||
char: (char)0, \
|
||||
__unconst_integer_type_cases(char), \
|
||||
__unconst_integer_type_cases(short), \
|
||||
__unconst_integer_type_cases(int), \
|
||||
__unconst_integer_type_cases(long), \
|
||||
__unconst_integer_type_cases(long long), \
|
||||
default: (x)))
|
||||
|
||||
/*
|
||||
* Do not check the array parameter using __must_be_array().
|
||||
* In the following legit use-case where the "array" passed is a simple pointer,
|
||||
* __must_be_array() will return a failure.
|
||||
* --- 8< ---
|
||||
* int *buff
|
||||
* ...
|
||||
* min = min_array(buff, nb_items);
|
||||
* --- 8< ---
|
||||
*
|
||||
* The first typeof(&(array)[0]) is needed in order to support arrays of both
|
||||
* 'int *buff' and 'int buff[N]' types.
|
||||
*
|
||||
* The array can be an array of const items.
|
||||
* typeof() keeps the const qualifier. Use __unconst_integer_typeof() in order
|
||||
* to discard the const qualifier for the __element variable.
|
||||
*/
|
||||
#define __minmax_array(op, array, len) ({ \
|
||||
typeof(&(array)[0]) __array = (array); \
|
||||
typeof(len) __len = (len); \
|
||||
__unconst_integer_typeof(__array[0]) __element = __array[--__len]; \
|
||||
while (__len--) \
|
||||
__element = op(__element, __array[__len]); \
|
||||
__element; })
|
||||
|
||||
/**
|
||||
* min_array - return minimum of values present in an array
|
||||
* @array: array
|
||||
* @len: array length
|
||||
*
|
||||
* Note that @len must not be zero (empty array).
|
||||
*/
|
||||
#define min_array(array, len) __minmax_array(min, array, len)
|
||||
|
||||
/**
|
||||
* max_array - return maximum of values present in an array
|
||||
* @array: array
|
||||
* @len: array length
|
||||
*
|
||||
* Note that @len must not be zero (empty array).
|
||||
*/
|
||||
#define max_array(array, len) __minmax_array(max, array, len)
|
||||
|
||||
/**
|
||||
* clamp_t - return a value clamped to a given range using a given type
|
||||
* @type: the type of variable to use
|
||||
|
@ -2646,6 +2646,7 @@
|
||||
|
||||
#define PCI_VENDOR_ID_INTEL 0x8086
|
||||
#define PCI_DEVICE_ID_INTEL_EESSC 0x0008
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_CML_LP 0x02c8
|
||||
#define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
|
||||
#define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321
|
||||
#define PCI_DEVICE_ID_INTEL_PXH_0 0x0329
|
||||
@ -2661,8 +2662,10 @@
|
||||
#define PCI_DEVICE_ID_INTEL_82424 0x0483
|
||||
#define PCI_DEVICE_ID_INTEL_82378 0x0484
|
||||
#define PCI_DEVICE_ID_INTEL_82425 0x0486
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_CML_H 0x06c8
|
||||
#define PCI_DEVICE_ID_INTEL_MRST_SD0 0x0807
|
||||
#define PCI_DEVICE_ID_INTEL_MRST_SD1 0x0808
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_OAKTRAIL 0x080a
|
||||
#define PCI_DEVICE_ID_INTEL_MFD_SD 0x0820
|
||||
#define PCI_DEVICE_ID_INTEL_MFD_SDIO1 0x0821
|
||||
#define PCI_DEVICE_ID_INTEL_MFD_SDIO2 0x0822
|
||||
@ -2672,15 +2675,19 @@
|
||||
#define PCI_DEVICE_ID_INTEL_QUARK_X1000_ILB 0x095e
|
||||
#define PCI_DEVICE_ID_INTEL_I960 0x0960
|
||||
#define PCI_DEVICE_ID_INTEL_I960RM 0x0962
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_HSW_0 0x0a0c
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_HSW_2 0x0c0c
|
||||
#define PCI_DEVICE_ID_INTEL_CENTERTON_ILB 0x0c60
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_HSW_3 0x0d0c
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_BYT 0x0f04
|
||||
#define PCI_DEVICE_ID_INTEL_SST_BYT 0x0f28
|
||||
#define PCI_DEVICE_ID_INTEL_8257X_SOL 0x1062
|
||||
#define PCI_DEVICE_ID_INTEL_82573E_SOL 0x1085
|
||||
#define PCI_DEVICE_ID_INTEL_82573L_SOL 0x108f
|
||||
#define PCI_DEVICE_ID_INTEL_82815_MC 0x1130
|
||||
#define PCI_DEVICE_ID_INTEL_82815_CGC 0x1132
|
||||
#define PCI_DEVICE_ID_INTEL_SST_TNG 0x119a
|
||||
#define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221
|
||||
#define PCI_DEVICE_ID_INTEL_7505_0 0x2550
|
||||
#define PCI_DEVICE_ID_INTEL_7205_0 0x255d
|
||||
#define PCI_DEVICE_ID_INTEL_82437 0x122d
|
||||
#define PCI_DEVICE_ID_INTEL_82371FB_0 0x122e
|
||||
#define PCI_DEVICE_ID_INTEL_82371FB_1 0x1230
|
||||
@ -2706,20 +2713,26 @@
|
||||
#define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_BRIDGE 0x1576
|
||||
#define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_NHI 0x1577
|
||||
#define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_BRIDGE 0x1578
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_BDW 0x160c
|
||||
#define PCI_DEVICE_ID_INTEL_80960_RP 0x1960
|
||||
#define PCI_DEVICE_ID_INTEL_QAT_C3XXX 0x19e2
|
||||
#define PCI_DEVICE_ID_INTEL_QAT_C3XXX_VF 0x19e3
|
||||
#define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21
|
||||
#define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT 0x1a38
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_CPT 0x1c20
|
||||
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MIN 0x1c41
|
||||
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX 0x1c5f
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_PBG 0x1d20
|
||||
#define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_0 0x1d40
|
||||
#define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_1 0x1d41
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_PPT 0x1e20
|
||||
#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI 0x1e31
|
||||
#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MIN 0x1e40
|
||||
#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MAX 0x1e5f
|
||||
#define PCI_DEVICE_ID_INTEL_VMD_201D 0x201d
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_BSW 0x2284
|
||||
#define PCI_DEVICE_ID_INTEL_SST_BSW 0x22a8
|
||||
#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MIN 0x2310
|
||||
#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MAX 0x231f
|
||||
#define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410
|
||||
@ -2774,6 +2787,8 @@
|
||||
#define PCI_DEVICE_ID_INTEL_82850_HB 0x2530
|
||||
#define PCI_DEVICE_ID_INTEL_82860_HB 0x2531
|
||||
#define PCI_DEVICE_ID_INTEL_E7501_MCH 0x254c
|
||||
#define PCI_DEVICE_ID_INTEL_7505_0 0x2550
|
||||
#define PCI_DEVICE_ID_INTEL_7205_0 0x255d
|
||||
#define PCI_DEVICE_ID_INTEL_82845G_HB 0x2560
|
||||
#define PCI_DEVICE_ID_INTEL_82845G_IG 0x2562
|
||||
#define PCI_DEVICE_ID_INTEL_82865_HB 0x2570
|
||||
@ -2795,12 +2810,14 @@
|
||||
#define PCI_DEVICE_ID_INTEL_ICH6_0 0x2640
|
||||
#define PCI_DEVICE_ID_INTEL_ICH6_1 0x2641
|
||||
#define PCI_DEVICE_ID_INTEL_ICH6_2 0x2642
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ICH6 0x2668
|
||||
#define PCI_DEVICE_ID_INTEL_ICH6_16 0x266a
|
||||
#define PCI_DEVICE_ID_INTEL_ICH6_17 0x266d
|
||||
#define PCI_DEVICE_ID_INTEL_ICH6_18 0x266e
|
||||
#define PCI_DEVICE_ID_INTEL_ICH6_19 0x266f
|
||||
#define PCI_DEVICE_ID_INTEL_ESB2_0 0x2670
|
||||
#define PCI_DEVICE_ID_INTEL_ESB2_14 0x2698
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ESB2 0x269a
|
||||
#define PCI_DEVICE_ID_INTEL_ESB2_17 0x269b
|
||||
#define PCI_DEVICE_ID_INTEL_ESB2_18 0x269e
|
||||
#define PCI_DEVICE_ID_INTEL_82945G_HB 0x2770
|
||||
@ -2808,11 +2825,12 @@
|
||||
#define PCI_DEVICE_ID_INTEL_3000_HB 0x2778
|
||||
#define PCI_DEVICE_ID_INTEL_82945GM_HB 0x27a0
|
||||
#define PCI_DEVICE_ID_INTEL_82945GM_IG 0x27a2
|
||||
#define PCI_DEVICE_ID_INTEL_ICH7_30 0x27b0
|
||||
#define PCI_DEVICE_ID_INTEL_ICH7_0 0x27b8
|
||||
#define PCI_DEVICE_ID_INTEL_ICH7_1 0x27b9
|
||||
#define PCI_DEVICE_ID_INTEL_ICH7_30 0x27b0
|
||||
#define PCI_DEVICE_ID_INTEL_TGP_LPC 0x27bc
|
||||
#define PCI_DEVICE_ID_INTEL_ICH7_31 0x27bd
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ICH7 0x27d8
|
||||
#define PCI_DEVICE_ID_INTEL_ICH7_17 0x27da
|
||||
#define PCI_DEVICE_ID_INTEL_ICH7_19 0x27dd
|
||||
#define PCI_DEVICE_ID_INTEL_ICH7_20 0x27de
|
||||
@ -2823,17 +2841,20 @@
|
||||
#define PCI_DEVICE_ID_INTEL_ICH8_3 0x2814
|
||||
#define PCI_DEVICE_ID_INTEL_ICH8_4 0x2815
|
||||
#define PCI_DEVICE_ID_INTEL_ICH8_5 0x283e
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ICH8 0x284b
|
||||
#define PCI_DEVICE_ID_INTEL_ICH8_6 0x2850
|
||||
#define PCI_DEVICE_ID_INTEL_VMD_28C0 0x28c0
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_0 0x2910
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_1 0x2917
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_2 0x2912
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_3 0x2913
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_4 0x2914
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_7 0x2916
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_1 0x2917
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_8 0x2918
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_5 0x2919
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_6 0x2930
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_7 0x2916
|
||||
#define PCI_DEVICE_ID_INTEL_ICH9_8 0x2918
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ICH9_0 0x293e
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ICH9_1 0x293f
|
||||
#define PCI_DEVICE_ID_INTEL_I7_MCR 0x2c18
|
||||
#define PCI_DEVICE_ID_INTEL_I7_MC_TAD 0x2c19
|
||||
#define PCI_DEVICE_ID_INTEL_I7_MC_RAS 0x2c1a
|
||||
@ -2850,8 +2871,8 @@
|
||||
#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_ADDR 0x2c31
|
||||
#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK 0x2c32
|
||||
#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC 0x2c33
|
||||
#define PCI_DEVICE_ID_INTEL_I7_NONCORE 0x2c41
|
||||
#define PCI_DEVICE_ID_INTEL_I7_NONCORE_ALT 0x2c40
|
||||
#define PCI_DEVICE_ID_INTEL_I7_NONCORE 0x2c41
|
||||
#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE 0x2c50
|
||||
#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_ALT 0x2c51
|
||||
#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_REV2 0x2c70
|
||||
@ -2885,6 +2906,7 @@
|
||||
#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_ADDR_REV2 0x2db1
|
||||
#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_RANK_REV2 0x2db2
|
||||
#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_TC_REV2 0x2db3
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_GML 0x3198
|
||||
#define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_TBG4 0x3429
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_TBG5 0x342a
|
||||
@ -2895,12 +2917,13 @@
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_TBG1 0x3431
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_TBG2 0x3432
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_TBG3 0x3433
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ICL_LP 0x34c8
|
||||
#define PCI_DEVICE_ID_INTEL_82830_HB 0x3575
|
||||
#define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577
|
||||
#define PCI_DEVICE_ID_INTEL_82854_HB 0x358c
|
||||
#define PCI_DEVICE_ID_INTEL_82854_IG 0x358e
|
||||
#define PCI_DEVICE_ID_INTEL_82855GM_HB 0x3580
|
||||
#define PCI_DEVICE_ID_INTEL_82855GM_IG 0x3582
|
||||
#define PCI_DEVICE_ID_INTEL_82854_HB 0x358c
|
||||
#define PCI_DEVICE_ID_INTEL_82854_IG 0x358e
|
||||
#define PCI_DEVICE_ID_INTEL_E7520_MCH 0x3590
|
||||
#define PCI_DEVICE_ID_INTEL_E7320_MCH 0x3592
|
||||
#define PCI_DEVICE_ID_INTEL_MCH_PA 0x3595
|
||||
@ -2910,11 +2933,11 @@
|
||||
#define PCI_DEVICE_ID_INTEL_MCH_PC 0x3599
|
||||
#define PCI_DEVICE_ID_INTEL_MCH_PC1 0x359a
|
||||
#define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b
|
||||
#define PCI_DEVICE_ID_INTEL_FBD_CNB 0x360c
|
||||
#define PCI_DEVICE_ID_INTEL_I7300_MCH_ERR 0x360c
|
||||
#define PCI_DEVICE_ID_INTEL_I7300_MCH_FB0 0x360f
|
||||
#define PCI_DEVICE_ID_INTEL_I7300_MCH_FB1 0x3610
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b
|
||||
#define PCI_DEVICE_ID_INTEL_FBD_CNB 0x360c
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_JSF0 0x3710
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_JSF1 0x3711
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_JSF2 0x3712
|
||||
@ -2927,14 +2950,19 @@
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_JSF9 0x3719
|
||||
#define PCI_DEVICE_ID_INTEL_QAT_C62X 0x37c8
|
||||
#define PCI_DEVICE_ID_INTEL_QAT_C62X_VF 0x37c9
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ICL_N 0x38c8
|
||||
#define PCI_DEVICE_ID_INTEL_ICH10_0 0x3a14
|
||||
#define PCI_DEVICE_ID_INTEL_ICH10_1 0x3a16
|
||||
#define PCI_DEVICE_ID_INTEL_ICH10_2 0x3a18
|
||||
#define PCI_DEVICE_ID_INTEL_ICH10_3 0x3a1a
|
||||
#define PCI_DEVICE_ID_INTEL_ICH10_4 0x3a30
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ICH10_0 0x3a3e
|
||||
#define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ICH10_1 0x3a6e
|
||||
#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00
|
||||
#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_5_3400_SERIES_0 0x3b56
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_5_3400_SERIES_1 0x3b57
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB0 0x3c20
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB1 0x3c21
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB2 0x3c22
|
||||
@ -2945,16 +2973,12 @@
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB7 0x3c27
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB8 0x3c2e
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB9 0x3c2f
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_HA 0x3c46
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_IMC0 0x3cb0
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_IMC1 0x3cb1
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_IMC2 0x3cb4
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_IMC3 0x3cb5
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_QPI0 0x3c41
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_QPI1 0x3c42
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_R2PCIE 0x3c43
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_R3QPI0 0x3c44
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_R3QPI1 0x3c45
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_HA 0x3c46
|
||||
#define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_RAS 0x3c71 /* 15.1 */
|
||||
#define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_ERR0 0x3c72 /* 16.2 */
|
||||
#define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_ERR1 0x3c73 /* 16.3 */
|
||||
@ -2966,17 +2990,40 @@
|
||||
#define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TAD1 0x3cab /* 15.3 */
|
||||
#define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TAD2 0x3cac /* 15.4 */
|
||||
#define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TAD3 0x3cad /* 15.5 */
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_IMC0 0x3cb0
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_IMC1 0x3cb1
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_IMC2 0x3cb4
|
||||
#define PCI_DEVICE_ID_INTEL_UNC_IMC3 0x3cb5
|
||||
#define PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_DDRIO 0x3cb8 /* 17.0 */
|
||||
#define PCI_DEVICE_ID_INTEL_JAKETOWN_UBOX 0x3ce0
|
||||
#define PCI_DEVICE_ID_INTEL_SBRIDGE_SAD0 0x3cf4 /* 12.6 */
|
||||
#define PCI_DEVICE_ID_INTEL_SBRIDGE_BR 0x3cf5 /* 13.6 */
|
||||
#define PCI_DEVICE_ID_INTEL_SBRIDGE_SAD1 0x3cf6 /* 12.7 */
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ICL_H 0x3dc8
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f
|
||||
#define PCI_DEVICE_ID_INTEL_5400_ERR 0x4030
|
||||
#define PCI_DEVICE_ID_INTEL_5400_FBD0 0x4035
|
||||
#define PCI_DEVICE_ID_INTEL_5400_FBD1 0x4036
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_TGL_H 0x43c8
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_DG1 0x490d
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_EHL_0 0x4b55
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_EHL_3 0x4b58
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_JSL_N 0x4dc8
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_DG2_0 0x4f90
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_DG2_1 0x4f91
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_DG2_2 0x4f92
|
||||
#define PCI_DEVICE_ID_INTEL_EP80579_0 0x5031
|
||||
#define PCI_DEVICE_ID_INTEL_EP80579_1 0x5032
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ADL_P 0x51c8
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ADL_PS 0x51c9
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_RPL_P_0 0x51ca
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_RPL_P_1 0x51cb
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ADL_M 0x51cc
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ADL_PX 0x51cd
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_RPL_M 0x51ce
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_RPL_PX 0x51cf
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ADL_N 0x54c8
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_APL 0x5a98
|
||||
#define PCI_DEVICE_ID_INTEL_5100_16 0x65f0
|
||||
#define PCI_DEVICE_ID_INTEL_5100_19 0x65f3
|
||||
#define PCI_DEVICE_ID_INTEL_5100_21 0x65f5
|
||||
@ -3010,8 +3057,13 @@
|
||||
#define PCI_DEVICE_ID_INTEL_82443GX_0 0x71a0
|
||||
#define PCI_DEVICE_ID_INTEL_82443GX_2 0x71a2
|
||||
#define PCI_DEVICE_ID_INTEL_82372FB_1 0x7601
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_RPL_S 0x7a50
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ADL_S 0x7ad0
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_MTL 0x7e28
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_ARL_S 0x7f50
|
||||
#define PCI_DEVICE_ID_INTEL_SCH_LPC 0x8119
|
||||
#define PCI_DEVICE_ID_INTEL_SCH_IDE 0x811a
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_POULSBO 0x811b
|
||||
#define PCI_DEVICE_ID_INTEL_E6XX_CU 0x8183
|
||||
#define PCI_DEVICE_ID_INTEL_ITC_LPC 0x8186
|
||||
#define PCI_DEVICE_ID_INTEL_82454GX 0x84c4
|
||||
@ -3020,9 +3072,31 @@
|
||||
#define PCI_DEVICE_ID_INTEL_82454NX 0x84cb
|
||||
#define PCI_DEVICE_ID_INTEL_84460GX 0x84ea
|
||||
#define PCI_DEVICE_ID_INTEL_IXP4XX 0x8500
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_LPT 0x8c20
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_9_SERIES 0x8ca0
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_WBG_0 0x8d20
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_WBG_1 0x8d21
|
||||
#define PCI_DEVICE_ID_INTEL_IXP2800 0x9004
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_LKF 0x98c8
|
||||
#define PCI_DEVICE_ID_INTEL_VMD_9A0B 0x9a0b
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_LPT_LP_0 0x9c20
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_LPT_LP_1 0x9c21
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_WPT_LP 0x9ca0
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_SKL_LP 0x9d70
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_KBL_LP 0x9d71
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_CNL_LP 0x9dc8
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_TGL_LP 0xa0c8
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_SKL 0xa170
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_KBL 0xa171
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_LBG_0 0xa1f0
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_LBG_1 0xa270
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_KBL_H 0xa2f0
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_CNL_H 0xa348
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_CML_S 0xa3f0
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_LNL_P 0xa828
|
||||
#define PCI_DEVICE_ID_INTEL_S21152BB 0xb152
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_CML_R 0xf0c8
|
||||
#define PCI_DEVICE_ID_INTEL_HDA_RKL_S 0xf1c8
|
||||
|
||||
#define PCI_VENDOR_ID_WANGXUN 0x8088
|
||||
|
||||
|
@ -63,6 +63,8 @@ extern struct resource *platform_get_mem_or_io(struct platform_device *,
|
||||
extern struct device *
|
||||
platform_find_device_by_driver(struct device *start,
|
||||
const struct device_driver *drv);
|
||||
|
||||
#ifdef CONFIG_HAS_IOMEM
|
||||
extern void __iomem *
|
||||
devm_platform_get_and_ioremap_resource(struct platform_device *pdev,
|
||||
unsigned int index, struct resource **res);
|
||||
@ -72,6 +74,32 @@ devm_platform_ioremap_resource(struct platform_device *pdev,
|
||||
extern void __iomem *
|
||||
devm_platform_ioremap_resource_byname(struct platform_device *pdev,
|
||||
const char *name);
|
||||
#else
|
||||
|
||||
static inline void __iomem *
|
||||
devm_platform_get_and_ioremap_resource(struct platform_device *pdev,
|
||||
unsigned int index, struct resource **res)
|
||||
{
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
|
||||
static inline void __iomem *
|
||||
devm_platform_ioremap_resource(struct platform_device *pdev,
|
||||
unsigned int index)
|
||||
{
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
static inline void __iomem *
|
||||
devm_platform_ioremap_resource_byname(struct platform_device *pdev,
|
||||
const char *name)
|
||||
{
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
extern int platform_get_irq(struct platform_device *, unsigned int);
|
||||
extern int platform_get_irq_optional(struct platform_device *, unsigned int);
|
||||
extern int platform_irq_count(struct platform_device *);
|
||||
|
@ -486,6 +486,11 @@ struct sdw_slave_id {
|
||||
__u8 sdw_version:4;
|
||||
};
|
||||
|
||||
struct sdw_extended_slave_id {
|
||||
int link_id;
|
||||
struct sdw_slave_id id;
|
||||
};
|
||||
|
||||
/*
|
||||
* Helper macros to extract the MIPI-defined IDs
|
||||
*
|
||||
|
@ -264,11 +264,6 @@ struct sdw_intel_link_dev;
|
||||
*/
|
||||
#define SDW_INTEL_CLK_STOP_BUS_RESET BIT(3)
|
||||
|
||||
struct sdw_intel_slave_id {
|
||||
int link_id;
|
||||
struct sdw_slave_id id;
|
||||
};
|
||||
|
||||
struct hdac_bus;
|
||||
|
||||
/**
|
||||
@ -298,7 +293,7 @@ struct sdw_intel_ctx {
|
||||
int num_slaves;
|
||||
acpi_handle handle;
|
||||
struct sdw_intel_link_dev **ldev;
|
||||
struct sdw_intel_slave_id *ids;
|
||||
struct sdw_extended_slave_id *ids;
|
||||
struct list_head link_list;
|
||||
struct mutex shim_lock; /* lock for access to shared SHIM registers */
|
||||
u32 shim_mask;
|
||||
|
@ -148,7 +148,7 @@ struct snd_compr_ops {
|
||||
*/
|
||||
struct snd_compr {
|
||||
const char *name;
|
||||
struct device dev;
|
||||
struct device *dev;
|
||||
struct snd_compr_ops *ops;
|
||||
void *private_data;
|
||||
struct snd_card *card;
|
||||
|
@ -140,8 +140,32 @@ int snd_ctl_remove_id(struct snd_card * card, struct snd_ctl_elem_id *id);
|
||||
int snd_ctl_rename_id(struct snd_card * card, struct snd_ctl_elem_id *src_id, struct snd_ctl_elem_id *dst_id);
|
||||
void snd_ctl_rename(struct snd_card *card, struct snd_kcontrol *kctl, const char *name);
|
||||
int snd_ctl_activate_id(struct snd_card *card, struct snd_ctl_elem_id *id, int active);
|
||||
struct snd_kcontrol *snd_ctl_find_numid(struct snd_card * card, unsigned int numid);
|
||||
struct snd_kcontrol *snd_ctl_find_id(struct snd_card * card, struct snd_ctl_elem_id *id);
|
||||
struct snd_kcontrol *snd_ctl_find_numid_locked(struct snd_card *card, unsigned int numid);
|
||||
struct snd_kcontrol *snd_ctl_find_numid(struct snd_card *card, unsigned int numid);
|
||||
struct snd_kcontrol *snd_ctl_find_id_locked(struct snd_card *card, const struct snd_ctl_elem_id *id);
|
||||
struct snd_kcontrol *snd_ctl_find_id(struct snd_card *card, const struct snd_ctl_elem_id *id);
|
||||
|
||||
/**
|
||||
* snd_ctl_find_id_mixer - find the control instance with the given name string
|
||||
* @card: the card instance
|
||||
* @name: the name string
|
||||
*
|
||||
* Finds the control instance with the given name and
|
||||
* @SNDRV_CTL_ELEM_IFACE_MIXER. Other fields are set to zero.
|
||||
*
|
||||
* This is merely a wrapper to snd_ctl_find_id().
|
||||
*
|
||||
* Return: The pointer of the instance if found, or %NULL if not.
|
||||
*/
|
||||
static inline struct snd_kcontrol *
|
||||
snd_ctl_find_id_mixer(struct snd_card *card, const char *name)
|
||||
{
|
||||
struct snd_ctl_elem_id id = {};
|
||||
|
||||
id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
|
||||
strscpy(id.name, name, sizeof(id.name));
|
||||
return snd_ctl_find_id(card, &id);
|
||||
}
|
||||
|
||||
int snd_ctl_create(struct snd_card *card);
|
||||
|
||||
@ -238,6 +262,9 @@ snd_ctl_add_follower(struct snd_kcontrol *master, struct snd_kcontrol *follower)
|
||||
return _snd_ctl_add_follower(master, follower, 0);
|
||||
}
|
||||
|
||||
int snd_ctl_add_followers(struct snd_card *card, struct snd_kcontrol *master,
|
||||
const char * const *list);
|
||||
|
||||
/**
|
||||
* snd_ctl_add_follower_uncached - Add a virtual follower control
|
||||
* @master: vmaster element
|
||||
|
@ -96,7 +96,7 @@ struct snd_card {
|
||||
private data */
|
||||
struct list_head devices; /* devices */
|
||||
|
||||
struct device ctl_dev; /* control device */
|
||||
struct device *ctl_dev; /* control device */
|
||||
unsigned int last_numid; /* last used numeric ID */
|
||||
struct rw_semaphore controls_rwsem; /* controls lock (list and values) */
|
||||
rwlock_t ctl_files_rwlock; /* ctl_files list lock */
|
||||
@ -239,7 +239,7 @@ extern struct dentry *sound_debugfs_root;
|
||||
|
||||
void snd_request_card(int card);
|
||||
|
||||
void snd_device_initialize(struct device *dev, struct snd_card *card);
|
||||
int snd_device_alloc(struct device **dev_p, struct snd_card *card);
|
||||
|
||||
int snd_register_device(int type, struct snd_card *card, int dev,
|
||||
const struct file_operations *f_ops,
|
||||
|
@ -829,6 +829,7 @@ enum cs35l41_cspl_mbox_cmd {
|
||||
CSPL_MBOX_CMD_STOP_PRE_REINIT = 4,
|
||||
CSPL_MBOX_CMD_HIBERNATE = 5,
|
||||
CSPL_MBOX_CMD_OUT_OF_HIBERNATE = 6,
|
||||
CSPL_MBOX_CMD_SPK_OUT_ENABLE = 7,
|
||||
CSPL_MBOX_CMD_UNKNOWN_CMD = -1,
|
||||
CSPL_MBOX_CMD_INVALID_SEQUENCE = -2,
|
||||
};
|
||||
@ -901,7 +902,7 @@ int cs35l41_exit_hibernate(struct device *dev, struct regmap *regmap);
|
||||
int cs35l41_init_boost(struct device *dev, struct regmap *regmap,
|
||||
struct cs35l41_hw_cfg *hw_cfg);
|
||||
bool cs35l41_safe_reset(struct regmap *regmap, enum cs35l41_boost_type b_type);
|
||||
int cs35l41_global_enable(struct regmap *regmap, enum cs35l41_boost_type b_type, int enable,
|
||||
struct completion *pll_lock);
|
||||
int cs35l41_global_enable(struct device *dev, struct regmap *regmap, enum cs35l41_boost_type b_type,
|
||||
int enable, struct completion *pll_lock, bool firmware_running);
|
||||
|
||||
#endif /* __CS35L41_H */
|
||||
|
@ -252,15 +252,40 @@
|
||||
#define CS35L56_NUM_BULK_SUPPLIES 3
|
||||
#define CS35L56_NUM_DSP_REGIONS 5
|
||||
|
||||
struct cs35l56_base {
|
||||
struct device *dev;
|
||||
struct regmap *regmap;
|
||||
int irq;
|
||||
struct mutex irq_lock;
|
||||
u8 rev;
|
||||
bool init_done;
|
||||
bool fw_patched;
|
||||
bool secured;
|
||||
bool can_hibernate;
|
||||
struct gpio_desc *reset_gpio;
|
||||
};
|
||||
|
||||
extern struct regmap_config cs35l56_regmap_i2c;
|
||||
extern struct regmap_config cs35l56_regmap_spi;
|
||||
extern struct regmap_config cs35l56_regmap_sdw;
|
||||
|
||||
extern const struct cs_dsp_region cs35l56_dsp1_regions[CS35L56_NUM_DSP_REGIONS];
|
||||
extern const char * const cs35l56_tx_input_texts[CS35L56_NUM_INPUT_SRC];
|
||||
extern const unsigned int cs35l56_tx_input_values[CS35L56_NUM_INPUT_SRC];
|
||||
|
||||
void cs35l56_reread_firmware_registers(struct device *dev, struct regmap *regmap);
|
||||
int cs35l56_set_patch(struct cs35l56_base *cs35l56_base);
|
||||
int cs35l56_mbox_send(struct cs35l56_base *cs35l56_base, unsigned int command);
|
||||
int cs35l56_firmware_shutdown(struct cs35l56_base *cs35l56_base);
|
||||
int cs35l56_wait_for_firmware_boot(struct cs35l56_base *cs35l56_base);
|
||||
void cs35l56_wait_control_port_ready(void);
|
||||
void cs35l56_wait_min_reset_pulse(void);
|
||||
void cs35l56_system_reset(struct cs35l56_base *cs35l56_base, bool is_soundwire);
|
||||
int cs35l56_irq_request(struct cs35l56_base *cs35l56_base, int irq);
|
||||
irqreturn_t cs35l56_irq(int irq, void *data);
|
||||
int cs35l56_is_fw_reload_needed(struct cs35l56_base *cs35l56_base);
|
||||
int cs35l56_runtime_suspend_common(struct cs35l56_base *cs35l56_base);
|
||||
int cs35l56_runtime_resume_common(struct cs35l56_base *cs35l56_base, bool is_soundwire);
|
||||
void cs35l56_init_cs_dsp(struct cs35l56_base *cs35l56_base, struct cs_dsp *cs_dsp);
|
||||
int cs35l56_hw_init(struct cs35l56_base *cs35l56_base);
|
||||
int cs35l56_get_bclk_freq_id(unsigned int freq);
|
||||
void cs35l56_fill_supply_names(struct regulator_bulk_data *data);
|
||||
|
||||
|
17
include/sound/cs42l43.h
Normal file
17
include/sound/cs42l43.h
Normal file
@ -0,0 +1,17 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* CS42L43 CODEC driver external data
|
||||
*
|
||||
* Copyright (C) 2022-2023 Cirrus Logic, Inc. and
|
||||
* Cirrus Logic International Semiconductor Ltd.
|
||||
*/
|
||||
|
||||
#ifndef CS42L43_ASOC_EXT_H
|
||||
#define CS42L43_ASOC_EXT_H
|
||||
|
||||
#define CS42L43_SYSCLK 0
|
||||
|
||||
#define CS42L43_SYSCLK_MCLK 0
|
||||
#define CS42L43_SYSCLK_SDW 1
|
||||
|
||||
#endif /* CS42L43_ASOC_EXT_H */
|
@ -21,6 +21,8 @@ struct i2s_clk_config_data {
|
||||
u32 sample_rate;
|
||||
};
|
||||
|
||||
struct dw_i2s_dev;
|
||||
|
||||
struct i2s_platform_data {
|
||||
#define DWC_I2S_PLAY (1 << 0)
|
||||
#define DWC_I2S_RECORD (1 << 1)
|
||||
@ -42,6 +44,7 @@ struct i2s_platform_data {
|
||||
void *capture_dma_data;
|
||||
bool (*filter)(struct dma_chan *chan, void *slave);
|
||||
int (*i2s_clk_cfg)(struct i2s_clk_config_data *config);
|
||||
int (*i2s_pd_init)(struct dw_i2s_dev *dev);
|
||||
};
|
||||
|
||||
struct i2s_dma_data {
|
||||
|
@ -142,7 +142,7 @@ struct snd_dmaengine_pcm_config {
|
||||
struct snd_pcm_substream *substream);
|
||||
int (*process)(struct snd_pcm_substream *substream,
|
||||
int channel, unsigned long hwoff,
|
||||
void *buf, unsigned long bytes);
|
||||
struct iov_iter *buf, unsigned long bytes);
|
||||
dma_filter_fn compat_filter_fn;
|
||||
struct device *dma_dev;
|
||||
const char *chan_names[SNDRV_PCM_STREAM_LAST + 1];
|
||||
|
@ -902,6 +902,11 @@ SUB_REG_NC(A_EHC, A_I2S_CAPTURE_RATE, 0x00000e00) /* This sets the capture PCM
|
||||
#define A_TTDA 0x7a /* Tank Table DMA Address */
|
||||
#define A_TTDD 0x7b /* Tank Table DMA Data */
|
||||
|
||||
// In A_FXRT1 & A_FXRT2, the 0x80 bit of each byte completely disables the
|
||||
// filter (CVCF_CURRENTFILTER) for the corresponding channel. There is no
|
||||
// effect on the volume (CVCF_CURRENTVOLUME) or the interpolator's filter
|
||||
// (CCCA_INTERPROM_MASK).
|
||||
|
||||
#define A_FXRT2 0x7c
|
||||
#define A_FXRT_CHANNELE 0x0000003f /* Effects send bus number for channel's effects send E */
|
||||
#define A_FXRT_CHANNELF 0x00003f00 /* Effects send bus number for channel's effects send F */
|
||||
@ -914,8 +919,6 @@ SUB_REG_NC(A_EHC, A_I2S_CAPTURE_RATE, 0x00000e00) /* This sets the capture PCM
|
||||
#define A_FXSENDAMOUNT_G_MASK 0x0000FF00
|
||||
#define A_FXSENDAMOUNT_H_MASK 0x000000FF
|
||||
|
||||
/* 0x7c, 0x7e "high bit is used for filtering" */
|
||||
|
||||
/* The send amounts for this one are the same as used with the emu10k1 */
|
||||
#define A_FXRT1 0x7e
|
||||
#define A_FXRT_CHANNELA 0x0000003f
|
||||
@ -992,6 +995,9 @@ SUB_REG_NC(A_EHC, A_I2S_CAPTURE_RATE, 0x00000e00) /* This sets the capture PCM
|
||||
#define EMU_HANA_WCLOCK_4X 0x10
|
||||
#define EMU_HANA_WCLOCK_MULT_RESERVED 0x18
|
||||
|
||||
// If the selected external clock source is/becomes invalid or incompatible
|
||||
// with the clock multiplier, the clock source is reset to this value, and
|
||||
// a WCLK_CHANGED interrupt is raised.
|
||||
#define EMU_HANA_DEFCLOCK 0x06 /* 000000x 1 bits Default Word Clock */
|
||||
#define EMU_HANA_DEFCLOCK_48K 0x00
|
||||
#define EMU_HANA_DEFCLOCK_44_1K 0x01
|
||||
@ -1523,10 +1529,10 @@ struct snd_emu10k1_pcm_mixer {
|
||||
((route[0] | (route[1] << 4) | (route[2] << 8) | (route[3] << 12)) << 16)
|
||||
|
||||
#define snd_emu10k1_compose_audigy_fxrt1(route) \
|
||||
((unsigned int)route[0] | ((unsigned int)route[1] << 8) | ((unsigned int)route[2] << 16) | ((unsigned int)route[3] << 24))
|
||||
((unsigned int)route[0] | ((unsigned int)route[1] << 8) | ((unsigned int)route[2] << 16) | ((unsigned int)route[3] << 24) | 0x80808080)
|
||||
|
||||
#define snd_emu10k1_compose_audigy_fxrt2(route) \
|
||||
((unsigned int)route[4] | ((unsigned int)route[5] << 8) | ((unsigned int)route[6] << 16) | ((unsigned int)route[7] << 24))
|
||||
((unsigned int)route[4] | ((unsigned int)route[5] << 8) | ((unsigned int)route[6] << 16) | ((unsigned int)route[7] << 24) | 0x80808080)
|
||||
|
||||
#define snd_emu10k1_compose_audigy_sendamounts(vol) \
|
||||
(((unsigned int)vol[4] << 24) | ((unsigned int)vol[5] << 16) | ((unsigned int)vol[6] << 8) | (unsigned int)vol[7])
|
||||
@ -1678,8 +1684,8 @@ struct snd_emu1010 {
|
||||
unsigned int clock_fallback;
|
||||
unsigned int optical_in; /* 0:SPDIF, 1:ADAT */
|
||||
unsigned int optical_out; /* 0:SPDIF, 1:ADAT */
|
||||
struct delayed_work firmware_work;
|
||||
u32 last_reg;
|
||||
struct work_struct firmware_work;
|
||||
struct work_struct clock_work;
|
||||
};
|
||||
|
||||
struct snd_emu10k1 {
|
||||
@ -1754,6 +1760,7 @@ struct snd_emu10k1 {
|
||||
struct snd_kcontrol *ctl_efx_send_routing;
|
||||
struct snd_kcontrol *ctl_efx_send_volume;
|
||||
struct snd_kcontrol *ctl_efx_attn;
|
||||
struct snd_kcontrol *ctl_clock_source;
|
||||
|
||||
void (*hwvol_interrupt)(struct snd_emu10k1 *emu, unsigned int status);
|
||||
void (*capture_interrupt)(struct snd_emu10k1 *emu, unsigned int status);
|
||||
@ -1761,6 +1768,7 @@ struct snd_emu10k1 {
|
||||
void (*capture_efx_interrupt)(struct snd_emu10k1 *emu, unsigned int status);
|
||||
void (*spdif_interrupt)(struct snd_emu10k1 *emu, unsigned int status);
|
||||
void (*dsp_interrupt)(struct snd_emu10k1 *emu);
|
||||
void (*gpio_interrupt)(struct snd_emu10k1 *emu);
|
||||
void (*p16v_interrupt)(struct snd_emu10k1 *emu);
|
||||
|
||||
struct snd_pcm_substream *pcm_capture_substream;
|
||||
|
@ -42,6 +42,7 @@ int hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, i
|
||||
int hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink);
|
||||
int hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink);
|
||||
|
||||
int hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid);
|
||||
int hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num);
|
||||
|
||||
int hdac_bus_eml_sdw_map_stream_ch(struct hdac_bus *bus, int sublink, int y,
|
||||
@ -145,6 +146,9 @@ hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink) { return 0
|
||||
static inline int
|
||||
hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
|
||||
|
||||
static inline int
|
||||
hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid) { return 0; }
|
||||
|
||||
static inline int
|
||||
hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num) { return 0; }
|
||||
|
||||
|
@ -18,9 +18,6 @@
|
||||
#include <sound/hda_verbs.h>
|
||||
#include <sound/hda_regmap.h>
|
||||
|
||||
#define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98)
|
||||
#define IS_CFL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa348)
|
||||
|
||||
/*
|
||||
* Structures
|
||||
*/
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/io-64-nonatomic-lo-hi.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/timecounter.h>
|
||||
#include <sound/core.h>
|
||||
@ -704,4 +705,29 @@ static inline unsigned int snd_array_index(struct snd_array *array, void *ptr)
|
||||
for ((idx) = 0, (ptr) = (array)->list; (idx) < (array)->used; \
|
||||
(ptr) = snd_array_elem(array, ++(idx)))
|
||||
|
||||
/*
|
||||
* Device matching
|
||||
*/
|
||||
|
||||
#define HDA_CONTROLLER_IS_HSW(pci) (pci_match_id((struct pci_device_id []){ \
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_HSW_0) }, \
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_HSW_2) }, \
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_HSW_3) }, \
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_BDW) }, \
|
||||
{ } \
|
||||
}, pci))
|
||||
|
||||
#define HDA_CONTROLLER_IS_APL(pci) (pci_match_id((struct pci_device_id []){ \
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_APL) }, \
|
||||
{ } \
|
||||
}, pci))
|
||||
|
||||
#define HDA_CONTROLLER_IN_GPU(pci) (pci_match_id((struct pci_device_id []){ \
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_DG1) }, \
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_DG2_0) }, \
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_DG2_1) }, \
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HDA_DG2_2) }, \
|
||||
{ } \
|
||||
}, pci) || HDA_CONTROLLER_IS_HSW(pci))
|
||||
|
||||
#endif /* __SOUND_HDAUDIO_H */
|
||||
|
@ -53,7 +53,7 @@ struct snd_hwdep {
|
||||
wait_queue_head_t open_wait;
|
||||
void *private_data;
|
||||
void (*private_free) (struct snd_hwdep *hwdep);
|
||||
struct device dev;
|
||||
struct device *dev;
|
||||
|
||||
struct mutex open_mutex;
|
||||
int used; /* reference counter */
|
||||
|
@ -118,8 +118,6 @@ struct snd_info_entry *snd_info_create_card_entry(struct snd_card *card,
|
||||
const char *name,
|
||||
struct snd_info_entry *parent);
|
||||
void snd_info_free_entry(struct snd_info_entry *entry);
|
||||
int snd_info_store_text(struct snd_info_entry *entry);
|
||||
int snd_info_restore_text(struct snd_info_entry *entry);
|
||||
|
||||
int snd_info_card_create(struct snd_card *card);
|
||||
int snd_info_card_register(struct snd_card *card);
|
||||
|
@ -1,28 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _L3_H_
|
||||
#define _L3_H_ 1
|
||||
|
||||
struct l3_pins {
|
||||
void (*setdat)(struct l3_pins *, int);
|
||||
void (*setclk)(struct l3_pins *, int);
|
||||
void (*setmode)(struct l3_pins *, int);
|
||||
|
||||
int gpio_data;
|
||||
int gpio_clk;
|
||||
int gpio_mode;
|
||||
int use_gpios;
|
||||
|
||||
int data_hold;
|
||||
int data_setup;
|
||||
int clock_high;
|
||||
int mode_hold;
|
||||
int mode;
|
||||
int mode_setup;
|
||||
};
|
||||
|
||||
struct device;
|
||||
|
||||
int l3_write(struct l3_pins *adap, u8 addr, u8 *data, int len);
|
||||
int l3_set_gpio_ops(struct device *dev, struct l3_pins *adap);
|
||||
|
||||
#endif
|
@ -16,6 +16,7 @@
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/pm_qos.h>
|
||||
#include <linux/refcount.h>
|
||||
#include <linux/uio.h>
|
||||
|
||||
#define snd_pcm_substream_chip(substream) ((substream)->private_data)
|
||||
#define snd_pcm_chip(pcm) ((pcm)->private_data)
|
||||
@ -68,11 +69,8 @@ struct snd_pcm_ops {
|
||||
struct snd_pcm_audio_tstamp_report *audio_tstamp_report);
|
||||
int (*fill_silence)(struct snd_pcm_substream *substream, int channel,
|
||||
unsigned long pos, unsigned long bytes);
|
||||
int (*copy_user)(struct snd_pcm_substream *substream, int channel,
|
||||
unsigned long pos, void __user *buf,
|
||||
unsigned long bytes);
|
||||
int (*copy_kernel)(struct snd_pcm_substream *substream, int channel,
|
||||
unsigned long pos, void *buf, unsigned long bytes);
|
||||
int (*copy)(struct snd_pcm_substream *substream, int channel,
|
||||
unsigned long pos, struct iov_iter *iter, unsigned long bytes);
|
||||
struct page *(*page)(struct snd_pcm_substream *substream,
|
||||
unsigned long offset);
|
||||
int (*mmap)(struct snd_pcm_substream *substream, struct vm_area_struct *vma);
|
||||
@ -510,7 +508,7 @@ struct snd_pcm_str {
|
||||
#endif
|
||||
#endif
|
||||
struct snd_kcontrol *chmap_kctl; /* channel-mapping controls */
|
||||
struct device dev;
|
||||
struct device *dev;
|
||||
};
|
||||
|
||||
struct snd_pcm {
|
||||
@ -1556,6 +1554,11 @@ static inline u64 pcm_format_to_bits(snd_pcm_format_t pcm_format)
|
||||
#define pcm_dbg(pcm, fmt, args...) \
|
||||
dev_dbg((pcm)->card->dev, fmt, ##args)
|
||||
|
||||
/* helpers for copying between iov_iter and iomem */
|
||||
int copy_to_iter_fromio(struct iov_iter *itert, const void __iomem *src,
|
||||
size_t count);
|
||||
int copy_from_iter_toio(void __iomem *dst, struct iov_iter *iter, size_t count);
|
||||
|
||||
struct snd_pcm_status64 {
|
||||
snd_pcm_state_t state; /* stream state */
|
||||
u8 rsvd[4];
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user