Alsa-devel
Threads by month
- ----- 2025 -----
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
July 2022
- 137 participants
- 399 discussions
The following changes since commit fc976f5629afb4160ee77798b14a693eac903ffd:
ASoC: Intel: Skylake: Correct the handling of fmt_config flexible array (2022-07-07 17:16:40 +0100)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git tags/asoc-v5.20
for you to fetch changes up to 7fb72b7bf167a8047204d30e0e8affe6023363d9:
ASoC: Merge up revert of v5.19 version of the rockchip BCLK management (2022-07-14 16:42:29 +0100)
----------------------------------------------------------------
ASoC: Updates for v5.20
This is a big release thus far and there will probably be more changes
to come, it's a combination of a larger than usual crop of new drivers
and some subsysetm wide cleanups from Charles rather than anything
structural. The SOF and Intel DSP code both also continue to be very
actively developed.
- Restructing of the set_fmt() callbacks to be specified in terms of
the device rather than with semantics depending on if the device is
supposed to be a CODEC or SoC, making things clearer in situations
like CODEC to CODEC links.
- Clean up of the way we flag which DAI naming scheme we use to reflect
the progress that's been made modernising things.
- Merge of more of the Intel AVS driver stack, including some board
integrations.
- New version 4 mechanism for communication with SOF DSPs.
- Suppoort for dynamically selecting the PLL to use at runtime on i.MX
platforms.
- Improvements for CODEC to CODEC support in the generic cards.
- Support for AMD Jadeite and various machines, Intel MetorLake DSPs,
Mediatek MT8186 DSPs and MT6366, nVidia Tegra MDDRC, OPE and PEQ, NXP
TFA9890, Qualcomm SDM845, WCD9335 and WAS883x, and Texas Instruments
TAS2780.
----------------------------------------------------------------
Aidan MacDonald (2):
ASoC: jz4740-i2s: Remove Open Firmware dependency
ASoC: jz4740-i2s: Refactor DMA channel setup
Ajit Kumar Pandey (2):
ASoC: SOF: amd: Add SOF pm ops callback for Renoir
ASoC: SOF: topology: add code to parse config params for ACPDMIC dai
Alexander Martinz (2):
ASoC: codecs: tfa989x: Add support for tfa9890
ASoC: dt-bindings: nxp,tfa989x: Add tfa9890 support
Alexandru Elisei (1):
ASoC: rockchip: i2s: Fix NULL pointer dereference when pinctrl is not found
Amadeusz Sławiński (10):
ASoC: Intel: avs: Add max98373 machine board
ASoC: Intel: avs: Fix parsing UUIDs in topology
ASoC: Remove unused hw_write_t type
ASoC: Intel: avs: Set max DMA segment size
ASoC: Intel: avs: Use helper function to set up DMA
ASoC: codecs: rt298: Fix NULL jack in interrupt
ASoC: codecs: rt298: Fix jack detection
ASoC: codecs: rt286: Set component to NULL on remove
ASoC: codecs: rt298: Set component to NULL on remove
ASoC: codecs: rt274: Set component to NULL on remove
Andy Shevchenko (4):
ASoC: madera: Replace kernel.h with the necessary inclusions
ASoC: Intel: catpt: remove duplicating driver data retrieval
ASoC: SOF: Intel: bdw: remove duplicating driver data retrieval
ASoC: SOF: Intel: byt: remove duplicating driver data retrieval
Arnaud Ferraris (2):
ASoC: dt-bindings: sun50i-codec: Add binding for internal bias
ASoC: sun50i-codec-analog: Add support for internal bias
Bard Liao (7):
ASoC: SOF: Intel: add MeteorLake machines
ASoC: SOF: IPC4: add sdw blob
ASoC: SOF: ipc4-topology: add SoundWire/ALH aggregation support
ASoC: SOC: Intel: introduce cl_init callback
ASoC: SOF: Intel: Add support for MeteorLake (MTL)
soundwire: Intel: add trigger callback
ASoC: SOF: Intel: add trigger callback into sdw_callback
Brent Lu (2):
ASoC: Intel: sof_cs42l42: support BT offload audio
ASoC: Intel: sof_cs42l42: add adl_mx98360a_cs4242 board config
Bryan O'Donoghue (1):
ASoC: qcom: lpass: Fix apq8016 compat string to match yaml
Cezary Rojewski (43):
ALSA: Add snd_pcm_direction_name() helper
ASoC: codecs: Add HD-Audio codec driver
ASoC: Intel: avs: Add HDAudio machine board
ASoC: Intel: avs: Add DMIC machine board
ASoC: Intel: avs: Add I2S-test machine board
ASoC: Intel: avs: Add rt274 machine board
ASoC: Intel: avs: Add rt286 machine board
ASoC: Intel: avs: Add rt298 machine board
ASoC: Intel: avs: Add rt5682 machine board
ASoC: Intel: avs: Add nau8825 machine board
ASoC: Intel: avs: Add ssm4567 machine board
ASoC: Intel: avs: Add max98357a machine board
ASoC: Intel: avs: Add da7219 machine board
ASoC: codecs: rt274: Always init jack_detect_work
ASoC: codecs: rt286: Reorganize jack detect handling
ASoC: codecs: rt298: Reorganize jack detect handling
ASoC: Intel: Rename haswell source file to hsw_rt5640
ASoC: Intel: hsw_rt5640: Reword prefixes of all driver members
ASoC: Intel: hsw_rt5640: Reword driver name
ASoC: Intel: hsw_rt5640: Update code indentation
ASoC: Intel: hsw_rt5640: Update file comments
ASoC: Intel: hsw_rt5640: Improve probe() function quality
ASoC: Intel: hsw_rt5640: Improve hw_params() debug-ability
ASoC: Intel: Rename broadwell source file to bdw_rt286
ASoC: Intel: bdw_rt286: Reword prefixes of all driver members
ASoC: Intel: bdw_rt286: Reword driver name
ASoC: Intel: bdw_rt286: Update code indentation
ASoC: Intel: bdw_rt286: Update file comments
ASoC: Intel: bdw_rt286: Improve probe() function quality
ASoC: Intel: bdw_rt286: Improve hw_params() debug-ability
ASoC: Intel: bdw_rt286: Improve codec_init() quality
ASoC: Intel: bdw_rt286: Remove FE DAI ops
ASoC: Intel: avs: Fix i2s_test card name initialization
ASoC: Intel: avs: Register HDAudio ext-bus operations
ASoC: Intel: avs: Assign I2S gateway when parsing topology
ASoC: Intel: avs: Relax DSP core transition timings
ASoC: Intel: avs: Copy only as many RX bytes as necessary
ASoC: Intel: avs: Shield LARGE_CONFIG_GETs against zero payload_size
ASoC: Intel: avs: Block IPC channel on suspend
ASoC: Intel: avs: Recognize FW_CFG_RESERVED
ASoC: Intel: avs: Replace hardcodes with SD_CTL_STREAM_RESET
ASoC: Intel: avs: Lower UNLOAD_MULTIPLE_MODULES IPC timeout
ASoC: Intel: avs: Update AVS_FW_INIT_TIMEOUT_US declaration
Charles Keepax (168):
ASoC: core: Add set_fmt_new callback that directly specifies provider
ASoC: amd: vangogh: Update to use set_fmt_new callback
ASoC: atmel: Update to use set_fmt_new callback
ASoC: au1x: Update to use set_fmt_new callback
ASoC: bcm: Update to use set_fmt_new callback
ASoC: ep93xx: Update to use set_fmt_new callback
ASoC: dwc: Update to use set_fmt_new callback
ASoC: fsl: Update to use set_fmt_new callback
ASoC: hisilicon: Update to use set_fmt_new callback
ASoC: img: Update to use set_fmt_new callback
ASoC: Intel: Update to use set_fmt_new callback
ASoC: js4740-i2s: Update to use set_fmt_new callback
ASoC: mediatek: Update to use set_fmt_new callback
ASoC: meson: Update to use set_fmt_new callback
ASoC: mxs-saif: Update to use set_fmt_new callback
ASoC: pxa: Update to use set_fmt_new callback
ASoC: qcom: Update to use set_fmt_new callback
ASoC: rockchip: Update to use set_fmt_new callback
ASoC: samsung: Update to use set_fmt_new callback
ASoC: sh: Update to use set_fmt_new callback
ASoC: stm: Update to use set_fmt_new callback
ASoC: sunxi: Update to use set_fmt_new callback
ASoC: tegra: Update to use set_fmt_new callback
ASoC: test-component: Update to use set_fmt_new callback
ASoC: ti: Update to use set_fmt_new callback
ASoC: ux500: Update to use set_fmt_new callback
ASoC: xtensa: Update to use set_fmt_new callback
ASoC: core: Always send the CPU DAI a direct clock specifier
ASoC: amd: vangogh: Rename set_fmt_new back to set_fmt
ASoC: atmel: Rename set_fmt_new back to set_fmt
ASoC: au1x: Rename set_fmt_new back to set_fmt
ASoC: bcm: Rename set_fmt_new back to set_fmt
ASoC: ep93xx: Rename set_fmt_new back to set_fmt
ASoC: dwc: Rename set_fmt_new back to set_fmt
ASoC: fsl: Rename set_fmt_new back to set_fmt
ASoC: hisilicon: Rename set_fmt_new back to set_fmt
ASoC: img: Rename set_fmt_new back to set_fmt
ASoC: Intel: Rename set_fmt_new back to set_fmt
ASoC: jz4740-i2s: Rename set_fmt_new back to set_fmt
ASoC: mediatek: Rename set_fmt_new back to set_fmt
ASoC: meson: Rename set_fmt_new back to set_fmt
ASoC: mxs-saif: Rename set_fmt_new back to set_fmt
ASoC: pxa: Rename set_fmt_new back to set_fmt
ASoC: qcom: Rename set_fmt_new back to set_fmt
ASoC: rockchip: Rename set_fmt_new back to set_fmt
ASoC: samsung: Rename set_fmt_new back to set_fmt
ASoC: sh: Rename set_fmt_new back to set_fmt
ASoC: stm: Rename set_fmt_new back to set_fmt
ASoC: sunxi: Rename set_fmt_new back to set_fmt
ASoC: tegra: Rename set_fmt_new back to set_fmt
ASoC: test-component: Rename set_fmt_new back to set_fmt
ASoC: ti: Rename set_fmt_new back to set_fmt
ASoC: ux500: Rename set_fmt_new back to set_fmt
ASoC: xtensa: Rename set_fmt_new back to set_fmt
ASoC: soc-dai: Remove set_fmt_new callback
ASoC: simple-card-utils: Move snd_soc_component_is_codec to be local
ASoC: cs42l52: Fix TLV scales for mixer controls
ASoC: cs35l36: Update digital volume TLV
ASoC: cs53l30: Correct number of volume levels on SX controls
ASoC: cs42l52: Correct TLV for Bypass Volume
ASoC: cs42l56: Correct typo in minimum level for SX volume controls
ASoC: cs42l51: Correct minimum value for SX volume control
ASoC: sun8i-codec: Partial revert to fix clock specifiers
ASoC: mediatek: mt8186: Use new direct clock defines
ASoC: cs35l45: Add endianness flag in snd_soc_component_driver
ASoC: wm_adsp: Fix event for preloader
ASoC: wm5110: Fix DRE control
ASoC: cs35l41: Correct some control names
ASoC: core: Add new SOC_DOUBLE_SX_TLV macro
ASoC: dapm: Move stereo autodisable check
ASoC: soc-component: Add legacy_dai_naming flag
soundwire: intel: Migrate to new style legacy DAI naming flag
drm/vc4: Migrate to new style legacy DAI naming flag
ASoC: img: Migrate to new style legacy DAI naming flag
ASoC: spear: Migrate to new style legacy DAI naming flag
ASoC: jz4740-i2c: Migrate to new style legacy DAI naming flag
ASoC: ep93xx: Migrate to new style legacy DAI naming flag
ASoC: stm32: Migrate to new style legacy DAI naming flag
ASoC: bcm: Migrate to new style legacy DAI naming flag
ASoC: sh: Migrate to new style legacy DAI naming flag
ASoC: tegra: Migrate to new style legacy DAI naming flag
ASoC: hisilicon: Migrate to new style legacy DAI naming flag
ASoC: xilinx: Migrate to new style legacy DAI naming flag
ASoC: sunxi: Migrate to new style legacy DAI naming flag
ASoC: Intel: Migrate to new style legacy DAI naming flag
ASoC: meson: Migrate to new style legacy DAI naming flag
ASoC: sti-uniperf: Migrate to new style legacy DAI naming flag
ASoC: amd: Migrate to new style legacy DAI naming flag
ASoC: atmel: Migrate to new style legacy DAI naming flag
ASoC: fsl: Migrate to new style legacy DAI naming flag
ASoC: xtensa: Migrate to new style legacy DAI naming flag
ASoC: adi: Migrate to new style legacy DAI naming flag
ASoC: dwc: Migrate to new style legacy DAI naming flag
ASoC: qcom: Migrate to new style legacy DAI naming flag
ASoC: test-component: Migrate to new style legacy DAI naming flag
ASoC: rockchip: Migrate to new style legacy DAI naming flag
ASoC: au1x: Migrate to new style legacy DAI naming flag
ASoC: pxa: Migrate to new style legacy DAI naming flag
ASoC: sof: Migrate to new style legacy DAI naming flag
ASoC: ux500: Migrate to new style legacy DAI naming flag
ASoC: ti: Migrate to new style legacy DAI naming flag
ASoC: mxs-saif: Migrate to new style legacy DAI naming flag
ASoC: samsung: Migrate to new style legacy DAI naming flag
ASoC: core: Switch core to new DAI naming flag
media: TDA1997x: Remove now redundant non_legacy_dai_naming flag
ASoC: fsl: Remove now redundant non_legacy_dai_naming flag
ASoC: meson: Remove now redundant non_legacy_dai_naming flag
ASoC: pistachio: Remove now redundant non_legacy_dai_naming flag
ASoC: samsung: Remove now redundant non_legacy_dai_naming flag
ASoC: soc-utils: Remove now redundant non_legacy_dai_naming flag
ASoC: sunxi: Remove now redundant non_legacy_dai_naming flag
ASoC: tegra: Remove now redundant non_legacy_dai_naming flag
ASoC: test-component: Remove now redundant non_legacy_dai_naming flag
ASoC: topology: KUnit: Remove now redundant non_legacy_dai_naming flag
ASoC: uniphier: Remove now redundant non_legacy_dai_naming flag
ASoC: ad*: Remove now redundant non_legacy_dai_naming flag
ASoC: ak*: Remove now redundant non_legacy_dai_naming flag
ASoC: alc*: Remove now redundant non_legacy_dai_naming flag
ASoC: cs*: Remove now redundant non_legacy_dai_naming flag
ASoC: da*: Remove now redundant non_legacy_dai_naming flag
ASoC: es*: Remove now redundant non_legacy_dai_naming flag
ASoC: max*: Remove now redundant non_legacy_dai_naming flag
ASoC: msm*: Remove now redundant non_legacy_dai_naming flag
ASoC: nau*: Remove now redundant non_legacy_dai_naming flag
ASoC: pcm*: Remove now redundant non_legacy_dai_naming flag
ASoC: rt*: Remove now redundant non_legacy_dai_naming flag
ASoC: spdif: Remove now redundant non_legacy_dai_naming flag
ASoC: ssm*: Remove now redundant non_legacy_dai_naming flag
ASoC: sta*: Remove now redundant non_legacy_dai_naming flag
ASoC: tas*: Remove now redundant non_legacy_dai_naming flag
ASoC: tfa*: Remove now redundant non_legacy_dai_naming flag
ASoC: tlv320*: Remove now redundant non_legacy_dai_naming flag
ASoC: twl*: Remove now redundant non_legacy_dai_naming flag
ASoC: uda*: Remove now redundant non_legacy_dai_naming flag
ASoC: wm*: Remove now redundant non_legacy_dai_naming flag
ASoC: 88pm860x: Remove now redundant non_legacy_dai_naming flag
ASoC: ab8500: Remove now redundant non_legacy_dai_naming flag
ASoC: ac97: Remove now redundant non_legacy_dai_naming flag
ASoC: ads117x: Remove now redundant non_legacy_dai_naming flag
ASoC: bd28623: Remove now redundant non_legacy_dai_naming flag
ASoC: bt-sco: Remove now redundant non_legacy_dai_naming flag
ASoC: cpcap: Remove now redundant non_legacy_dai_naming flag
ASoC: cq93vc: Remove now redundant non_legacy_dai_naming flag
ASoC: cx20442: Remove now redundant non_legacy_dai_naming flag
ASoC: dmic: Remove now redundant non_legacy_dai_naming flag
ASoC: gtm601: Remove now redundant non_legacy_dai_naming flag
ASoC: hdac_hdmi: Remove now redundant non_legacy_dai_naming flag
ASoC: hdmi-codec: Remove now redundant non_legacy_dai_naming flag
ASoC: ics43432: Remove now redundant non_legacy_dai_naming flag
ASoC: inno_rk3036: Remove now redundant non_legacy_dai_naming flag
ASoC: Intel: avs: Remove now redundant non_legacy_dai_naming flag
ASoC: isabelle: Remove now redundant non_legacy_dai_naming flag
ASoC: jz4740: Remove now redundant non_legacy_dai_naming flag
ASoC: lm49453: Remove now redundant non_legacy_dai_naming flag
ASoC: lochnagar: Remove now redundant non_legacy_dai_naming flag
ASoC: mc13783: Remove now redundant non_legacy_dai_naming flag
ASoC: ml26124: Remove now redundant non_legacy_dai_naming flag
ASoC: rk817: Remove now redundant non_legacy_dai_naming flag
ASoC: sgtl5000: Remove now redundant non_legacy_dai_naming flag
ASoC: si476x: Remove now redundant non_legacy_dai_naming flag
ASoC: stac9766: Remove now redundant non_legacy_dai_naming flag
ASoC: sti-sas: Remove now redundant non_legacy_dai_naming flag
ASoC: tscs42xx: Remove now redundant non_legacy_dai_naming flag
ASoC: wl1273: Remove now redundant non_legacy_dai_naming flag
ASoC: zl38060: Remove now redundant non_legacy_dai_naming flag
ASoC: soc-component: Remove non_legacy_dai_naming flag
ASoC: samsung: s3c24xx-i2s: Fix typo in DAIFMT handling
ASoC: wm_adsp: Minor clean and redundant code removal
Chen-Yu Tsai (1):
ASoC: rockchip: i2s: Fix crash on missing pinctrl
Christophe JAILLET (2):
ASoC: ux500: Remove some leftover from the "Replace GPLv2 boilerplate/reference with SPDX" rules
ASoC: ab8500: Remove some leftover from the "Replace GPLv2 boilerplate/reference with SPDX" rules
Claudiu Beznea (1):
ASoC: atmel: mchp-pdmc: remove space in front of mchp_pdmc_dt_init()
Colin Ian King (2):
ASoC: mediatek: mt8186: Fix a handful of spelling mistakes
ASoC: Intel: Skylake: remove redundant re-assignments to pointer array
Conor Dooley (1):
ASoC: dt-bindings: convert designware-i2s to dt-schema
Cristian Ciocaltea (1):
ASoC: cs35l41: Add support for CLSA3541 ACPI device ID
Dan Carpenter (4):
ASoC: SOF: mediatek: Fix error code in probe
ASoC: SOF: ipc4-topology: Fix error code in sof_ipc4_volume_put()
ASoC: amd: Fix error pointer dereference
ASoC: SOF: ipc-msg-injector: fix copy in sof_msg_inject_ipc4_dfs_write()
Daniel Baluta (4):
ASoC: SOF: compress: Dynamically allocate pcm params struct
ASoC: SOF: Copy compress parameters into extended data
ASoC: SOF: compress: Prevent current kernel running with older FW
uapi: sof: abi: Bump SOF ABI for ext_data_length
Daniel Mack (7):
ASoC: dt-bindings: max98396: add voltage supplies
ASoC: dt-bindings: max98396: Document adi,bypass-slot-no
ASoC: max98396: add voltage regulators
ASoC: max98396: Improve some error prints
ASoC: max98396: Fix register access for PCM format settings
ASoC: max98396: Implement DSP speaker monitor
ASoC: max98396: Fix TDM mode BSEL settings
David Lin (1):
ASoC: nau8825: Declare 2 channels for DAI of capture stream
Fabio Estevam (1):
ASoC: imx-audmux: Silence a clang warning
Fei Shao (1):
ASoC: mediatek: mt8186: Fix mutex double unlock in GPIO request
Francesco Dolcini (1):
ASoC: sgtl5000: Fix noise on shutdown/remove
Gaosheng Cui (1):
ASoC: codecs: wsa883x: fix warning using-module-alias-sdw.cocci
Hans de Goede (1):
ASoC: Intel: bytcr_wm5102: Fix GPIO related probe-ordering problem
Hui Wang (2):
ASoC: nau8822: Disable internal PLL if freq_out is zero
ASoC: nau8822: Add operation for internal PLL off and on
Javier Martinez Canillas (6):
regmap: Re-introduce bulk read support check in regmap_bulk_read()
regmap: Make regmap_noinc_read() return -ENOTSUPP if map->read isn't set
regmap: Wire up regmap_config provided bulk write in missed functions
regmap: Re-introduce bulk read support check in regmap_bulk_read()
regmap: Make regmap_noinc_read() return -ENOTSUPP if map->read isn't set
regmap: Wire up regmap_config provided bulk write in missed functions
Jiapeng Chong (3):
ASoC: rockchip: i2s: Fix missing error code in rockchip_i2s_probe()
ASoC: codecs: max98088: Clean up some inconsistent indenting
ASoC: tegra20_ac97: Fix missing error code in tegra20_ac97_platform_probe()
Jiasheng Jiang (1):
ASoC: codecs: da7210: add check for i2c_add_driver
Jiaxin Yu (12):
ASoC: mediatek: mt6366: support for mt6366 codec
ASoC: mediatek: mt8186: support audsys clock control
ASoC: mediatek: mt8186: support adda in platform driver
ASoC: mediatek: mt8186: support hostless in platform driver
ASoC: mediatek: mt8186: support hw gain in platform driver
ASoC: mediatek: mt8186: support i2s in platform driver
ASoC: mediatek: mt8186: support pcm in platform driver
ASoC: mediatek: mt8186: support src in platform driver
ASoC: mediatek: mt8186: support tdm in platform driver
ASoC: mediatek: mt8186: support audio clock control in platform driver
ASoC: mediatek: mt8186: support gpio control in platform driver
ASoC: mediatek: mt8186: add misc driver and register definitions
Judy Hsiao (6):
ASoC: rockchip: i2s: switch BCLK to GPIO
ASoC: rockchip: i2s: switch BCLK to GPIO
ASoC: dt-bindings: rockchip: Document pinctrl-names for i2s
ASoC: rockchip: i2s: Fix the debug level on missing pinctrl
ASoC: rockchip: i2s: Remove unwanted dma settings in rockchip_i2s_probe
ASoC: rockchip: i2s: Fix error code when fail to read I2S_CLR
Julia Lawall (2):
ASoC: amd: acp: fix typo in comment
ASoC: stm32: dfsdm: fix typo in comment
Krzysztof Kozlowski (5):
ASoC: samsung: s3c-i2s-v2: Allow build for unsupported hardware
ASoC: samsung: s3c24xx-i2s: Drop unneeded gpio.h include
ASoC: samsung: Enable compile test
ASoC: samsung: h1940_uda1380: include proepr GPIO consumer header
ASoC: dt-bindings: qcom,sm8250: add SDM845 sound
Kuninori Morimoto (11):
ASoC: simple-card-utils: rename asoc_simple_init_dai_link_params() to asoc_simple_init_for_codec2codec()
ASoC: ak4613: cares Simple-Audio-Card case for TDM
ASoC: soc-core.c: fixup snd_soc_of_get_dai_link_cpus()
ASoC: soc-core.c: share code for snd_soc_of_get_dai_link_cpus/codecs()
ASoC: audio-graph-card2.c: use of_property_read_u32() for rate
ASoC: audio-graph-card2.c: make Codec2Codec settings optional
ASoC: audio-graph-card2.c: remove pre-alloced Codec2Codec space
ASoC: audio-graph-card2-custom-sample.dtsi: add verbose explanation
ASoC: simple-card-utils.c: ignore Codec2Codec setting if it already have
ASoC: simple-card-utils.c: care Codec2Codec vs DPCM:BE
ASoC: rsnd: care default case on rsnd_ssiu_busif_err_irq_ctrl()
Li Chen (2):
regmap: provide regmap_field helpers for simple bit operations
ASoC: sunxi: Use {regmap/regmap_field}_{set/clear}_bits helpers
Li kunyu (1):
ASoC: tegra: delete a semicolon
Liang He (3):
ASoC: qcom: Fix missing of_node_put() in asoc_qcom_lpass_cpu_platform_probe()
ASoc: audio-graph-card2: Fix refcount leak bug in __graph_get_type()
ASoC: mt6359: Fix refcount leak bug
Libin Yang (2):
ASoC: SOF: ipc4-topology: check dai->private in ipc_free()
ASoC: SOF: ipc4-topology: free memories allocated in sof_ipc4_get_audio_fmt
Lukas Bulwahn (1):
ASoC: Intel: avs: correct config reference for I2S test board
Marco Felsch (2):
ASoC: fsl_sai: use local device pointer
ASoC: fsl_sai: add error message in case of missing imx-pcm-dma support
Marek Vasut (1):
ASoC: doc: Update dead links
Mark Brown (93):
Merge existing fixes from asoc/for-5.19 into new branch
ASoC: ssm2518: Use modern ASoC DAI format terminology
ASoC: ssm2602: Use modern ASoC DAI format terminology
ASoC: ssm4567: Use modern ASoC DAI format terminology
ASoC: ops: Clarify snd_soc_info_volsw_sx()
ASoC: nau8822: Don't reconfigure PLL to the same values
ASoC: ops: Remove unneeded delay.h inclusion
ASoC: tfa9879: Use modern ASoC DAI format terminology
ASoC: max9860: Use modern ASoC DAI format terminology
ASoC: wm_adsp: Fix event generation for wm_adsp_fw_put()
ASoC: cx2072x: Use modern ASoC DAI format terminology
ASoC: max98090: Use modern ASoC DAI format terminology
ASoC: rk3328: Use modern ASoC DAI format terminology
ASoC: sta32x: Use modern ASoC DAI format terminology
ASoC: sta350: Use modern ASoC DAI format terminology
ASoC: sti-sas: Use modern ASoC DAI format terminology
ASoC: tas2552: Use modern ASoC DAI format terminology
ASoC: tas2770: Use modern ASoC DAI format terminology
ASoC: tas5086: Use modern ASoC DAI format terminology
ASoC: tas5720: Use modern ASoC DAI format terminology
ASoC: tas6424: Use modern ASoC DAI format terminology
ASoC: uda1334: Use modern ASoC DAI format terminology
ASoC: tlv320adc3xxx: Use modern ASoC DAI format terminology
ASoC: tlv320adcx140: Use modern ASoC DAI format terminology
ASoC: tlv320aic23: Use modern ASoC DAI format terminology
ASoC: tlv320aic26: Use modern ASoC DAI format terminology
ASoC: tlv320aic31xx: Use modern ASoC DAI format terminology
ASoC: tlv320aic32x4: Use modern ASoC DAI format terminology
ASoC: tlv320aic33: Use modern ASoC DAI format terminology
ASoC: tlv320dac3x: Use modern ASoC DAI format terminology
ALSA: hda: cirrus: Add initial DSP support and firmware loading
ASoC: Intel: soc-acpi and machine driver updates
ASoC: Intel: avs: Machine boards and HDA codec support
OPE support on Tegra210 and later
ASoC: trivial changes for cppcheck warnings
Switch to use internal PLL for iMCLK
ASoC: Drop some i2c noop remove callbacks
Add Machine driver support for nau8825, max98560 and rt5682s, rt1019
ASoC: SOF: AMD/Mediatek updates for 5.20
ASoC: ssm: Use modern ASoC DAI format terminology
ASoC: DAI clocking terminology modernisation
ASoC: harden SoundWire codec/machine drivers used on Intel platforms
Specify clock provider directly to CPU DAIs
ASoC: codecs: Series of fixes for realtek codecs used on RVPs
ASoC: codecs: qualcomm move gain to S8_TLV
ASoC: SOF: ipc3-dtrace: Handle race during initialization
ASoC: SOF: Add support ctx_save with IPC4
ASoC: wcd9335: Fix spurious event generation
ASoC: hdmi-codec: Update to modern DAI terminology
ASoC: wcd938x: Fix event generation for some controls
ASoC: SOF: IPC4: Add topology, control and PCM ops
ASoC: Merge fixes
ASoC: ops: Don't modify the driver's plaform_max when reading state
ASoC: ops: Fix boolean/integer detection for simple controls
ASoC: SOF: Intel: Add support for MeteorLake
ASoC: Add regmap_field helpers for simple bit operations
ASoC: SOF/Intel: remove __func__ from dev_dbg()
ASoC: minor kernel-doc corrections
ASoC: Intel: Chromebooks: remap jack pins
ASoC: SOF: Intel: fix resume from hibernate
ASoC: SOF/soundwire: use resume_and_get on component probe
remap: Some fixes for bulk read/write callbacks in regmap_config support
ASoC: Merge fixes
Add MT8186 ADSP dt-binding
ASoC: rockchip: i2s: switch BCLK to GPIO
ASoC: Intel: haswell and broadwell boards update
ASoC: Merge up fixes
ASoC: sun50i-codec-analog: Internal bias support
ASoC: max98396: Some assorted fixes and additions
ASoC: use pm_runtime_resume_and_get() when possible
Add PDM/DSD/dataline configuration support
ASoC: codecs: add WSA883x support
ASoC: Refactor non_legacy_dai_naming flag
ASoC: dt-bindings: Add bindings for WCD9335 DAIs
ASoC: soc-core.c: fixup snd_soc_of_get_dai_link_cpus()
Add support of two Audio PLL source
I2S driver changes for Jadeite platform
ASoC: cleanups and improvements for jz4740-i2s
ASoC: Intel: sof_cs42l42: adding support for ADL configuration and BT offload
ASoC: audio-graph-card2.c: make Codec2Codec settings optional
ASoC: Merge up fixes
ASoC: SOF: ipc4-topology: fix error and memory handling
ADD legacy audio driver support for rembrandt
ASoC: codecs: Series of fixes for realtek codecs used on RVPs
ASoC: Intel: avs: Updates and cleanups
ASoC: SOF: Intel: hda: Use cold/purge boot after firmware crash
ASoC: SOF: Intel: hda-dai: No need to decouple host/link DMA twice
ASoC: SOF: Intel: Do not process IPC reply before firmware boot
Extend ipc stream parameters sent to DSP
ASoC: SOF: Intel: hda: Correct Firmware State Register use
ASoC/SoundWire: Intel: add sdw BE dai trigger
ASoC: rockchip-i2s: Undo BCLK pinctrl changes
ASoC: Merge up revert of v5.19 version of the rockchip BCLK management
Martin Povišer (1):
ASoC: Introduce 'fixup_controls' card method
Mauro Carvalho Chehab (1):
ASoC: wm8731: update wlf,wm8731.yaml reference
Miaoqian Lin (5):
ASoC: cros_ec_codec: Fix refcount leak in cros_ec_codec_platform_probe
ASoC: samsung: Fix error handling in aries_audio_probe
ASoC: mediatek: mt8173: Fix refcount leak in mt8173_rt5650_rt5676_dev_probe
ASoC: mt6797-mt6351: Fix refcount leak in mt6797_mt6351_dev_probe
ASoC: mediatek: mt8173-rt5650: Fix refcount leak in mt8173_rt5650_dev_probe
Minghao Chi (2):
ASoC: mediatek: remove unnecessary check of clk_disable_unprepare
ASoC: imx-audmux: remove unnecessary check of clk_disable_unprepare/clk_prepare_enable
Oder Chiou (1):
ASoC: rt5640: Add the MICBIAS1 to the dapm routing
Peter Ujfalusi (27):
ASoC: SOF: Intel: hda-dsp: Expose hda_dsp_core_power_up()
ASoC: SOF: Intel: hda-loader: Make sure that the fw load sequence is followed
ASoC: SOF: Intel: hda-loader: Clarify the cl_dsp_init() flow
ASoC: SOF: ipc3-topology: Move and correct size checks in sof_ipc3_control_load_bytes()
ASoC: SOF: make ctx_store and ctx_restore as optional
ASoC: SOF: sof_ipc_pm_ops: Add support for DSP core power management
ASoC: SOF: ipc3: Add set_core_state pm_ops implementation
ASoC: SOF: ipc4: Add set_core_state pm_ops implementation
ASoC: SOF: Intel: Switch to use the generic pm_ops.set_core_state
ASoC: SOF: ipc4: implement pm ctx_save callback
ASoC: SOF: ipc3-dtrace: Introduce SOF_DTRACE_INITIALIZING state
ASoC: SOF: ipc3-dtrace: Add helper function to update the sdev->host_offset
ASoC: SOF: ipc3-dtrace: Return from dtrace_read if there is no new data available
ASoC: SOF: debug: Clarify the IPC timeout handling path
ASoC: SOF: Compile and runtime IPC version selection
ASoC: SOF: Intel: IPC4: enable IMR boot
ASoC: SOF: Intel: hda: Fix compressed stream position tracking
ASoC: twl4030: Drop legacy, non DT boot support
ASoC: SOF: Intel: cnl: Do not process IPC reply before firmware boot
ASoC: SOF: Intel: hda-ipc: Do not process IPC reply before firmware boot
ASoC: SOF: Intel: mtl: Do not process IPC reply before firmware boot
ASoC: SOF: Intel: hda: Introduce skip_imr_boot flag
ASoC: SOF: Intel: hda: Correct the ROM/FW state reporting code
ASoC: SOF: Intel: hda-dai: Drop misleading comment regarding dma_data
ASoC: SOF: Intel: hda-dai: Do snd_hdac_ext_stream_decouple() only once
ASoC: SOF: sof-client-probes: Only load the driver if IPC3 is used
ASoC: SOF: ipc3-topology: Prevent double freeing of ipc_control_data via load_bytes
Pierre-Louis Bossart (74):
ASoC: cs35l45: typo in argument definition
ASoC: cs42l42: remove redundant test
ASoC: wcd-mbhc-v2: remove useless initialization
ASoC: wcd9335: remove redundant tests
ASoC: Intel: atom: sst: remove useless initialization
ASoC: Intel: atom: sst_ipc: remove redundant test
ASoC: Intel: atom: sst_ipc: remove useless initializations
ASoC: Intel: atom: controls: remove useless initializations
ASoC: Intel: boards: reset acpi_chan_package
ASoC: Intel: sof_pcm512x: remove unnecessary init
ASoC: mediatek: mt8195: simplify error handling
ASoC: qcom: q6dsp: q6adm: remove useless initializations
ASoC: qcom: q6dsp: remove spurious space
ASoC: rockchip: simplify error handling
ASoC: samsung: snow: simplify error handling
ASoC: meson: remove useless initialization
ASoC: Intel: sof_sdw: allow HDaudio/HDMI disable
ASoC: Realtek/Maxim SoundWire codecs: disable pm_runtime on remove
ASoC: rt711-sdca-sdw: fix calibrate mutex initialization
ASoC: Intel: sof_sdw: handle errors on card registration
ASoC: rt711: fix calibrate mutex initialization
ASoC: rt7*-sdw: harden jack_detect_handler
ASoC: codecs: rt700/rt711/rt711-sdca: initialize workqueues in probe
ASoC: codecs: rt700/rt711/rt711-sdca: resume bus/codec in .set_jack_detect
ASoC: SOF: ipc3-dtrace: use pm_runtime_resume_and_get()
MAINTAINERS: update ASoC/Intel/SOF maintainers
ASoC: SOF: Intel: hda-dai: enhance debug messages
ASoC: SOF: reduce default verbosity of IPC logs
ASoC: SOF: pm: add explicit behavior for ACPI S1 and S2
ASoC: SOF: pm: add definitions for S4 and S5 states
ASoC: SOF: Intel: disable IMR boot when resuming from ACPI S4 and S5 states
ASoC: cs4270: update kernel-doc
ASoC: sunxi: sun4i-i2s: update kernel-doc
ASoC: Intel: skl_nau88l25_max98357a: remap jack pins
ASoC: Intel: skl_nau88l25_ssm4567: remap jack pins
ASoC: Intel: kbl_rt5663_max98927: remap jack pins
ASoC: Intel: kbl_da7219_max98357a: remap jack pins
ASoC: Intel: kbl_da7219_max98927: remap jack pins
ASoC: Intel: kbl_rt5663_rt5514_max98927: remap jack pins
ASoC: Intel: bxt_da7219_max98357a: remap jack pins
ASoC: Intel: glk_rt5682_max98357a: remap jack pins
ASoC: Intel: cml_rt1011_rt5682: remap jack pins
ASoC: Intel: sof_cs42l42: remap jack pins
ASoC: Intel: sof_da7219_max98373: remap jack pins
ASoC: Intel: sof_nau8825: remap jack pins
ASoC: Intel: sof_rt5682: remap jack pins
ASoC: SOF: Intel: hda-dsp: report error on power-up/down
ASoC: SOF: Intel: hda-stream: report error on stream not opened
ASoC: SOF: Intel: hda-dai: remove use of __func__ in dev_dbg
ASoC: SOF: Intel: hda-stream: remove use of __func__ in dev_dbg
ASoC: SOF: Intel: mtl: remove use of __func__ in dev_dbg
ASoC: SOF: ipc3-dtrace: remove use of __func__ in dev_dbg
ASoC: SOF: ipc3-loader: remove use of __func__ in dev_dbg
ASoC: SOF: ipc3-topology: remove use of __func__ in dev_dbg
ASoC: SOF: ipc4-topology remove use of __func__ in dev_dbg
ASoC: SOF: sof-client: remove use of __func__ in dev_dbg
ASoC: SOF: ipc4: remove use of __func__ in dev_dbg
ASoC: Intel: boards: hda: remove use of __func__ in dev_dbg
ASoC: Intel: boards: sof_sdw: remove use of __func__ in dev_dbg
ASoC: SOF: pcm: use pm_resume_and_get() on component probe
ASoC: codecs: soundwire: call pm_runtime_resume() in component probe
ASoC: Intel: catpt: use pm_runtime_resume_and_get()
ASoC: Intel: skylake: skl-pcm: use pm_runtime_resume_and_get()
ASoC: wcd-mbhc-v2: use pm_runtime_resume_and_get()
ASoC: wsa881x: use pm_runtime_resume_and_get()
ASoC: rockchip: i2s_tdm: use pm_runtime_resume_and_get()
ASoC: fsl: fsl_sai: use pm_runtime_resume_and_get()
ASoC: img: img-i2s-out: use pm_runtime_resume_and_get()
ASoC: rockchip: pdm: use pm_runtime_resume_and_get()
ASoC: tas2552: use pm_runtime_resume_and_get()
ASoC: ti: davinci-mcasp: use pm_runtime_resume_and_get()
ASoC: amd: acp-es8336: use static variables
ASoC: SOF: remove warning on ABI checks
ASoC: soc-pcm: demote warnings on non-atomic BE connection
Randy Dunlap (2):
ASoC: max98390: use linux/gpio/consumer.h to fix build
ASoC: amd: fix Jadeite kconfig warning and build errors
Ranjani Sridharan (23):
ASoC: SOF: Add topology tokens for IPC4
ASoC: SOF: IPC4: Introduce topology ops
ASoC: SOF: ipc4-topology: Add support for parsing AIF_IN/AIF_OUT widgets
ASoC: SOF: ipc4-topology: Add support for parsing DAI_IN/DAI_OUT widgets
ASoC: SOF: ipc4-topology: Add prepare op for AIF type widgets
ASoC: SOF: ipc4-topology: Add prepare op for DAI type widgets
ASoC: SOF: ipc4-topology: Add support for parsing and preparing pga widgets
ASoC: SOF: ipc4-topology: Add support for parsing mixer widgets
ASoC: SOF: ipc4-topology: Add control_setup op
ASoC: SOF: ipc4-topology: Add control IO ops
ASoC: SOF: IPC4: Add pcm ops
ASoC: SOF: ipc4-topology: Add widget_setup/widget_free ops
ASoC: SOF: ipc4-topology: Add route_setup/route_free ops
ASoC: SOF: ipc4-topology: Add the dai_config op
ASoC: SOF: ipc4-pcm: Expose sof_ipc4_set_pipeline_state()
ASoC: SOF: IPC4: set the BE DAI ops
ASoC: SOF: Add ops_free
ASoC: SOF: Intel: hda: init NHLT for IPC4
ASoC: SOF: Add two new structures for topology manifest data
ASoC: SOF: Add a new IPC op for parsing topology manifest
ASoC: SOF: ipc4-topology: Add support for SSP/DMIC DAI's
AsoC: SOF: ipc4-topology: Add dai_get_clk op
ASoC: SOF: topology: remove unused variable
Raphael-Xu (2):
ASoC: add tas2780 driver
ASoC: add tas2780 DT binding
Sameer Pujar (5):
ASoC: tegra: Add binding doc for OPE module
ASoC: tegra: Add Tegra210 based OPE driver
ASoC: tegra: AHUB routes for OPE module
ASoC: tegra: Fix clock DAI format on Tegra210
ASoC: tegra: Fix MBDRC bypass mode check
Sascha Hauer (2):
ASoC: fsl_asrc_dma: Use dmaengine_terminate_async()
ASoC: audio_graph_card2: Fix port numbers in example
Seven Lee (1):
ASoC: nau8821: Add headset button detection
Shengjiu Wang (25):
ASoC: fsl_asrc_dma: enable dual fifo for ASRC P2P
ASoC: fsl_mqs: simplify the code with adding fsl_mqs_soc_data
ASoC: fsl_sai: Enable MCTL_MCLK_EN bit for master mode
ASoC: dt-bindings: fsl,mqs: Add compatible string for i.MX93 platform
ASoC: fsl_mqs: Add support for i.MX93 platform
ASoC: fsl_sai: Add PDM daifmt support
ASoC: fsl_sai: Add DSD bit format support
ASoC: fsl_sai: Add support for more sample rates
ASoc: fsl_sai: Add pinctrl operation for PDM and DSD
ASoC: fsl_sai: Make res a member of struct fsl_sai
ASoC: dt-bindings: fsl-sai: Add new property to configure dataline
ASoC: fsl_sai: Configure dataline/FIFO information from dts property
ASoC: fsl_micfil: change micfil default settings
ASoC: dt-bindings: fsl,micfil: Convert format to json-schema
ASoC: fsl_micfil: Add legacy_dai_naming flag
ASoC: fsl_asrc_dma: Add legacy_dai_naming flag
ASoC: fsl_utils: Add function to handle PLL clock source
ASoC: fsl_spdif: Add support for PLL switch at runtime.
ASoC: fsl_micfil: Add support for PLL switch at runtime
ASoC: fsl_sai: Add support for PLL switch at runtime
ASoC: dt-bindings: fsl_spdif: Add two PLL clock source
ASoC: dt-bindings: fsl-sai: Add two PLL clock source
ASoC: imx-card: Fix DSD/PDM mclk frequency
ASoC: fsl_utils: Don't use plain integer as NULL pointer
ASoC: fsl_utils: Drop usage of __clk_get_name()
Shuming Fan (1):
ASoC: rt711-sdca: fix kernel NULL pointer dereference when IO error
Srinivas Kandagatla (11):
ASoC: codecs: msm8916-wcd-digital: move gains from SX_TLV to S8_TLV
ASoC: codecs: wcd9335: move gains from SX_TLV to S8_TLV
ASoC: qdsp6: q6apm-dai: unprepare stream if its already prepared
MAINTAINERS: update ASoC Qualcomm maintainer email-id
ASoC: dt-bindings: Add WSA883x bindings
ASoC: codecs: add wsa883x amplifier support
MAINTAINERS: add ASoC Qualcomm codecs
ASoC: codecs: wsa883x: add control, dapm widgets and map
ASoC: codecs: wsa881x: handle timeouts in resume path
ASoC: codecs: wsa883x: handle timeouts in resume path
ASoC: codecs: wsa883x: add missing break statement
Srinivasa Rao Mandadapu (3):
ASoC: qcom: soundwire: Add support for controlling audio CGCR from HLOS
ASoC: qcom: lpass-platform: Update VMA access permissions in mmap callback
ASoC: qcom: Add driver support for audioreach solution
Stefan Binding (4):
ASoC: cs35l41: Move cs35l41 exit hibernate function into shared code
ASoC: cs35l41: Add common cs35l41 enter hibernate function
ASoC: cs35l41: Do not print error when waking from hibernation
ASoC: ops: Fix integer detection for when max possible values > 1
Tang Bin (1):
ASoC: stm32: sai: Remove useless define
Tinghan Shen (4):
dt-bindings: dsp: mediatek: Use meaningful names for mbox
firmware: mediatek: Use meaningful names for mbox
dt-bindings: dsp: mediatek: Add mt8186 dsp document
ASoC: SOF: mediatek: Align mt8186 clock names with dt-bindings
Tom Rix (2):
ASoC: samsung: change gpiod_speaker_power and rx1950_audio from global to static variables
ASoC: samsung: change neo1973_audio from a global to static
Uwe Kleine-König (17):
ASoC: ak4642: Drop no-op remove function
ASoC: da7219: Drop no-op remove function
ASoC: lm49453: Drop no-op remove function
ASoC: da732x: Drop no-op remove function
ASoC: cs35l45: Make cs35l45_remove() return void
ASoC: Intel: broadwell: Make broadwell_disable_jack() return void
ASoC: simple-card-utils: Make asoc_simple_clean_reference() return void
ASoC: core: Make snd_soc_unregister_card() return void
ASoC: amd: acp: Fix error handling in .remove()
ASoC: topology: KUnit: Followup prototype change of snd_soc_unregister_card()
ASoC: xilinx: Suppress second error message about reset failure in .remove()
ASoC: tegra: tegra20_das: Fold header file into only user
ASoC: tegra: tegra20_das: Remove unused function tegra20_das_read
ASoC: tegra: tegra20_das: Get rid of global pointer for driver data
ASoC: tegra: tegra20_das: Make helper functions return void
ASoC: tegra: tegra20_das: Drop write-only driver data member
ASoC: rsnd: Emit useful error messages in .remove()
V sujith kumar Reddy (5):
ASoC: amd: acp: Add support for nau8825 and max98360 card
ASoC: amd: acp: Add support for rt5682s and rt1019 card with hs instance
ASoC: amd: acp: Remove rt1019_1 codec conf from machine driver
ASoC: amd: acp: ACP code generic to support newer platforms
ASoC: amd: acp: Add legacy audio driver support for Rembrandt platform
Vijendar Mukunda (7):
ASoC: amd: add I2S MICSP instance support
ASoC: amd: add Machine driver for Jadeite platform
ASoC: amd: enable machine driver build for Jadeite platform
ASoC: amd: fix ACPI dependency compile errors and warnings
ASoC: amd: remove unused header file inclusion
ASoC: amd: drop machine driver remove function
ASoC: amd: fix for variable set but not used warning
YC Hung (4):
ASoC: SOF: mediatek: revise mt8195 clock sequence
ASoC: SOF: mediatek: Add shared_size for mediatek common chip information
ASoC: SOF: mediatek: mt8195 modify dram type as non-cache
ASoC: SOF: mediatek: mt8195 suspend check dsp idle
Yang Li (1):
ASoC: amd: Remove duplicated include in acp-es8336.c
Yang Yingliang (1):
ASoC: fsl: pcm030-audio-fabric: use platform_device_unregsiter()
Yassine Oudjana (3):
ASoC: wcd9335: Remove RX channel from old list before adding it to a new one
ASoC: dt-bindings: Add bindings for WCD9335 DAIs
ASoC: wcd9335: Use DT bindings instead of local DAI definitions
Yong Zhi (2):
ASoC: Intel: boards: rename RTL1019 compatible driver to rt1019p
ASoC: intel: sof_sdw: add RT711 SDCA card for MTL platform
Zhongjun Tan (1):
ASoC: mediatek: mt8186: Remove condition with no effect
Zhu Ning (1):
ASoC: codes: Add support for ES8316 producer mode
xliu (1):
ASoC: Intel: cirrus-common: fix incorrect channel mapping
zhangqilong (1):
ASoC: fsl_xcvr:Fix unbalanced pm_runtime_enable in fsl_xcvr_probe
.../bindings/dsp/mediatek,mt8186-dsp.yaml | 91 +
.../bindings/dsp/mediatek,mt8195-dsp.yaml | 10 +-
.../devicetree/bindings/sound/adi,max98396.yaml | 30 +-
.../sound/allwinner,sun50i-a64-codec-analog.yaml | 5 +
.../bindings/sound/atmel-sam9x5-wm8731-audio.txt | 2 +-
.../devicetree/bindings/sound/designware-i2s.txt | 35 -
.../devicetree/bindings/sound/fsl,micfil.txt | 33 -
.../devicetree/bindings/sound/fsl,micfil.yaml | 85 +
.../devicetree/bindings/sound/fsl,mqs.txt | 2 +-
.../devicetree/bindings/sound/fsl,spdif.yaml | 4 +
.../devicetree/bindings/sound/fsl-sai.txt | 11 +
.../devicetree/bindings/sound/nau8821.txt | 2 +-
.../bindings/sound/nvidia,tegra210-ahub.yaml | 4 +
.../bindings/sound/nvidia,tegra210-mbdrc.yaml | 47 +
.../bindings/sound/nvidia,tegra210-ope.yaml | 87 +
.../bindings/sound/nvidia,tegra210-peq.yaml | 48 +
.../devicetree/bindings/sound/nxp,tfa989x.yaml | 1 +
.../devicetree/bindings/sound/qcom,sdm845.txt | 91 -
.../devicetree/bindings/sound/qcom,sm8250.yaml | 3 +
.../devicetree/bindings/sound/qcom,wsa883x.yaml | 74 +
.../devicetree/bindings/sound/rockchip-i2s.yaml | 7 +
.../bindings/sound/snps,designware-i2s.yaml | 94 +
.../devicetree/bindings/sound/tas2780.yaml | 72 +
Documentation/process/kernel-docs.rst | 2 +-
Documentation/sound/soc/codec.rst | 2 +-
Documentation/sound/soc/platform.rst | 2 +-
MAINTAINERS | 5 +
drivers/base/regmap/regmap.c | 37 +-
drivers/firmware/mtk-adsp-ipc.c | 36 +-
drivers/gpu/drm/bridge/sii902x.c | 5 +-
.../gpu/drm/bridge/synopsys/dw-hdmi-i2s-audio.c | 2 +-
drivers/gpu/drm/exynos/exynos_hdmi.c | 8 +-
drivers/gpu/drm/i2c/tda998x_drv.c | 6 +-
drivers/gpu/drm/sti/sti_hdmi.c | 8 +-
drivers/gpu/drm/vc4/vc4_hdmi.c | 1 +
drivers/media/i2c/tda1997x.c | 1 -
drivers/soundwire/intel.c | 14 +-
drivers/soundwire/qcom.c | 10 +
include/dt-bindings/sound/qcom,wcd9335.h | 15 +
include/linux/regmap.h | 37 +
include/linux/soundwire/sdw_intel.h | 3 +
include/sound/cs35l41.h | 3 +
include/sound/hdmi-codec.h | 4 +-
include/sound/madera-pdata.h | 2 +-
include/sound/pcm.h | 19 +-
include/sound/simple_card_utils.h | 5 +-
include/sound/soc-acpi-intel-match.h | 2 +
include/sound/soc-card.h | 1 +
include/sound/soc-component.h | 7 +-
include/sound/soc-dai.h | 6 +
include/sound/soc.h | 15 +-
include/sound/sof.h | 1 +
include/sound/sof/dai-amd.h | 7 +
include/sound/sof/dai.h | 2 +-
include/sound/sof/ipc4/header.h | 8 +
include/sound/sof/stream.h | 6 +-
include/uapi/sound/sof/abi.h | 4 +-
include/uapi/sound/sof/header.h | 30 +
include/uapi/sound/sof/tokens.h | 44 +
sound/pci/ens1370.c | 2 +-
sound/soc/adi/axi-i2s.c | 1 +
sound/soc/adi/axi-spdif.c | 1 +
sound/soc/amd/Kconfig | 12 +
sound/soc/amd/Makefile | 2 +
sound/soc/amd/acp-config.c | 30 +
sound/soc/amd/acp-es8336.c | 318 +++
sound/soc/amd/acp-pcm-dma.c | 50 +-
sound/soc/amd/acp.h | 13 +
sound/soc/amd/acp/Kconfig | 12 +
sound/soc/amd/acp/Makefile | 2 +
sound/soc/amd/acp/acp-i2s.c | 169 +-
sound/soc/amd/acp/acp-legacy-mach.c | 32 +
sound/soc/amd/acp/acp-mach-common.c | 301 +-
sound/soc/amd/acp/acp-mach.h | 9 +
sound/soc/amd/acp/acp-pci.c | 6 +
sound/soc/amd/acp/acp-pdm.c | 10 +-
sound/soc/amd/acp/acp-platform.c | 47 +-
sound/soc/amd/acp/acp-rembrandt.c | 401 +++
sound/soc/amd/acp/acp-renoir.c | 48 +-
sound/soc/amd/acp/acp-sof-mach.c | 30 +
sound/soc/amd/acp/amd.h | 86 +-
sound/soc/amd/acp/chip_offset_byte.h | 40 +-
sound/soc/amd/mach-config.h | 1 +
sound/soc/amd/raven/acp3x-i2s.c | 3 +-
sound/soc/amd/renoir/acp3x-pdm-dma.c | 13 +-
sound/soc/amd/vangogh/acp5x-i2s.c | 5 +-
sound/soc/amd/yc/acp6x-pdm-dma.c | 13 +-
sound/soc/atmel/atmel-classd.c | 1 +
sound/soc/atmel/atmel-i2s.c | 7 +-
sound/soc/atmel/atmel-pdmic.c | 1 +
sound/soc/atmel/atmel_ssc_dai.c | 25 +-
sound/soc/atmel/mchp-i2s-mcc.c | 11 +-
sound/soc/atmel/mchp-pdmc.c | 7 +-
sound/soc/atmel/mchp-spdifrx.c | 3 +-
sound/soc/atmel/mchp-spdiftx.c | 3 +-
sound/soc/atmel/mikroe-proto.c | 4 +-
sound/soc/au1x/ac97c.c | 3 +-
sound/soc/au1x/i2sc.c | 5 +-
sound/soc/au1x/psc-ac97.c | 3 +-
sound/soc/au1x/psc-i2s.c | 7 +-
sound/soc/bcm/bcm2835-i2s.c | 23 +-
sound/soc/bcm/bcm63xx-i2s-whistler.c | 1 +
sound/soc/bcm/cygnus-ssp.c | 11 +-
sound/soc/cirrus/ep93xx-ac97.c | 3 +-
sound/soc/cirrus/ep93xx-i2s.c | 11 +-
sound/soc/codecs/88pm860x-codec.c | 1 -
sound/soc/codecs/Kconfig | 28 +
sound/soc/codecs/Makefile | 6 +
sound/soc/codecs/ab8500-codec.c | 3 -
sound/soc/codecs/ab8500-codec.h | 2 -
sound/soc/codecs/ac97.c | 1 -
sound/soc/codecs/ad1836.c | 1 -
sound/soc/codecs/ad193x.c | 1 -
sound/soc/codecs/ad1980.c | 1 -
sound/soc/codecs/ad73311.c | 1 -
sound/soc/codecs/adau1373.c | 1 -
sound/soc/codecs/adau1701.c | 1 -
sound/soc/codecs/adau1761.c | 1 -
sound/soc/codecs/adau1781.c | 1 -
sound/soc/codecs/adau1977.c | 1 -
sound/soc/codecs/adau7002.c | 1 -
sound/soc/codecs/adau7118.c | 1 -
sound/soc/codecs/adav80x.c | 1 -
sound/soc/codecs/ads117x.c | 1 -
sound/soc/codecs/ak4104.c | 1 -
sound/soc/codecs/ak4118.c | 1 -
sound/soc/codecs/ak4375.c | 1 -
sound/soc/codecs/ak4458.c | 2 -
sound/soc/codecs/ak4535.c | 1 -
sound/soc/codecs/ak4554.c | 1 -
sound/soc/codecs/ak4613.c | 7 -
sound/soc/codecs/ak4641.c | 1 -
sound/soc/codecs/ak4642.c | 1 -
sound/soc/codecs/ak4671.c | 1 -
sound/soc/codecs/ak5386.c | 1 -
sound/soc/codecs/ak5558.c | 2 -
sound/soc/codecs/alc5623.c | 1 -
sound/soc/codecs/alc5632.c | 1 -
sound/soc/codecs/bd28623.c | 1 -
sound/soc/codecs/bt-sco.c | 1 -
sound/soc/codecs/cpcap.c | 1 -
sound/soc/codecs/cq93vc.c | 1 -
sound/soc/codecs/cros_ec_codec.c | 1 +
sound/soc/codecs/cs35l32.c | 1 -
sound/soc/codecs/cs35l33.c | 1 -
sound/soc/codecs/cs35l34.c | 1 -
sound/soc/codecs/cs35l35.c | 1 -
sound/soc/codecs/cs35l36.c | 1 -
sound/soc/codecs/cs35l41-lib.c | 82 +-
sound/soc/codecs/cs35l41-spi.c | 1 +
sound/soc/codecs/cs35l41.c | 71 +-
sound/soc/codecs/cs35l45-i2c.c | 4 +-
sound/soc/codecs/cs35l45.c | 6 +-
sound/soc/codecs/cs35l45.h | 4 +-
sound/soc/codecs/cs4234.c | 1 -
sound/soc/codecs/cs4265.c | 1 -
sound/soc/codecs/cs4270.c | 2 -
sound/soc/codecs/cs4271.c | 1 -
sound/soc/codecs/cs42l42.c | 4 +-
sound/soc/codecs/cs42l51.c | 1 -
sound/soc/codecs/cs42l52.c | 1 -
sound/soc/codecs/cs42l56.c | 1 -
sound/soc/codecs/cs42l73.c | 1 -
sound/soc/codecs/cs42xx8.c | 1 -
sound/soc/codecs/cs43130.c | 1 -
sound/soc/codecs/cs4341.c | 1 -
sound/soc/codecs/cs4349.c | 1 -
sound/soc/codecs/cs47l15.c | 1 -
sound/soc/codecs/cs47l24.c | 1 -
sound/soc/codecs/cs47l35.c | 1 -
sound/soc/codecs/cs47l85.c | 1 -
sound/soc/codecs/cs47l90.c | 1 -
sound/soc/codecs/cs47l92.c | 1 -
sound/soc/codecs/cs53l30.c | 1 -
sound/soc/codecs/cx20442.c | 1 -
sound/soc/codecs/cx2072x.c | 17 +-
sound/soc/codecs/da7210.c | 3 +-
sound/soc/codecs/da7213.c | 1 -
sound/soc/codecs/da7218.c | 1 -
sound/soc/codecs/da7219.c | 7 -
sound/soc/codecs/da732x.c | 7 -
sound/soc/codecs/da9055.c | 1 -
sound/soc/codecs/dmic.c | 1 -
sound/soc/codecs/es7134.c | 1 -
sound/soc/codecs/es7241.c | 1 -
sound/soc/codecs/es8316.c | 21 +-
sound/soc/codecs/es8328.c | 1 -
sound/soc/codecs/gtm601.c | 1 -
sound/soc/codecs/hda-dai.c | 102 +
sound/soc/codecs/hda.c | 395 +++
sound/soc/codecs/hda.h | 19 +
sound/soc/codecs/hdac_hdmi.c | 1 -
sound/soc/codecs/hdmi-codec.c | 19 +-
sound/soc/codecs/ics43432.c | 1 -
sound/soc/codecs/inno_rk3036.c | 1 -
sound/soc/codecs/isabelle.c | 1 -
sound/soc/codecs/jz4740.c | 2 -
sound/soc/codecs/lm49453.c | 7 -
sound/soc/codecs/lochnagar-sc.c | 1 -
sound/soc/codecs/max98088.c | 33 +-
sound/soc/codecs/max98090.c | 13 +-
sound/soc/codecs/max98095.c | 1 -
sound/soc/codecs/max98357a.c | 1 -
sound/soc/codecs/max98371.c | 1 -
sound/soc/codecs/max98373.c | 16 +-
sound/soc/codecs/max98390.c | 3 +-
sound/soc/codecs/max98396.c | 271 +-
sound/soc/codecs/max98396.h | 10 +-
sound/soc/codecs/max9850.c | 1 -
sound/soc/codecs/max98520.c | 1 -
sound/soc/codecs/max9860.c | 7 +-
sound/soc/codecs/max9867.c | 1 -
sound/soc/codecs/max98925.c | 1 -
sound/soc/codecs/max98926.c | 1 -
sound/soc/codecs/max98927.c | 1 -
sound/soc/codecs/mc13783.c | 1 -
sound/soc/codecs/ml26124.c | 1 -
sound/soc/codecs/msm8916-wcd-analog.c | 1 -
sound/soc/codecs/msm8916-wcd-digital.c | 47 +-
sound/soc/codecs/mt6358.c | 1 +
sound/soc/codecs/mt6359-accdet.c | 1 +
sound/soc/codecs/mt6359.c | 1 +
sound/soc/codecs/nau8315.c | 1 -
sound/soc/codecs/nau8540.c | 1 -
sound/soc/codecs/nau8810.c | 1 -
sound/soc/codecs/nau8821.c | 36 +-
sound/soc/codecs/nau8821.h | 1 +
sound/soc/codecs/nau8822.c | 15 +-
sound/soc/codecs/nau8822.h | 2 +
sound/soc/codecs/nau8824.c | 1 -
sound/soc/codecs/nau8825.c | 3 +-
sound/soc/codecs/pcm1681.c | 1 -
sound/soc/codecs/pcm1789.c | 1 -
sound/soc/codecs/pcm179x.c | 1 -
sound/soc/codecs/pcm186x.c | 2 -
sound/soc/codecs/pcm3008.c | 1 -
sound/soc/codecs/pcm3168a.c | 1 -
sound/soc/codecs/pcm5102a.c | 1 -
sound/soc/codecs/pcm512x.c | 1 -
sound/soc/codecs/rk3328_codec.c | 6 +-
sound/soc/codecs/rk817_codec.c | 1 -
sound/soc/codecs/rt1011.c | 1 -
sound/soc/codecs/rt1015.c | 1 -
sound/soc/codecs/rt1015p.c | 1 -
sound/soc/codecs/rt1016.c | 1 -
sound/soc/codecs/rt1019.c | 1 -
sound/soc/codecs/rt1305.c | 1 -
sound/soc/codecs/rt1308-sdw.c | 12 +
sound/soc/codecs/rt1308.c | 1 -
sound/soc/codecs/rt1316-sdw.c | 12 +
sound/soc/codecs/rt274.c | 11 +-
sound/soc/codecs/rt286.c | 19 +-
sound/soc/codecs/rt286.h | 2 -
sound/soc/codecs/rt298.c | 61 +-
sound/soc/codecs/rt298.h | 2 -
sound/soc/codecs/rt5514.c | 1 -
sound/soc/codecs/rt5616.c | 1 -
sound/soc/codecs/rt5631.c | 1 -
sound/soc/codecs/rt5640.c | 13 +-
sound/soc/codecs/rt5645.c | 1 -
sound/soc/codecs/rt5651.c | 1 -
sound/soc/codecs/rt5659.c | 1 -
sound/soc/codecs/rt5660.c | 1 -
sound/soc/codecs/rt5663.c | 1 -
sound/soc/codecs/rt5665.c | 1 -
sound/soc/codecs/rt5668.c | 1 -
sound/soc/codecs/rt5670.c | 1 -
sound/soc/codecs/rt5677.c | 1 -
sound/soc/codecs/rt5682.c | 1 -
sound/soc/codecs/rt5682s.c | 1 -
sound/soc/codecs/rt700.c | 5 +
sound/soc/codecs/rt711-sdca.c | 5 +
sound/soc/codecs/rt711.c | 5 +
sound/soc/codecs/rt715-sdca.c | 12 +
sound/soc/codecs/rt715.c | 12 +
sound/soc/codecs/sgtl5000.c | 1 -
sound/soc/codecs/si476x.c | 1 -
sound/soc/codecs/spdif_receiver.c | 1 -
sound/soc/codecs/spdif_transmitter.c | 1 -
sound/soc/codecs/ssm2518.c | 5 +-
sound/soc/codecs/ssm2602.c | 7 +-
sound/soc/codecs/ssm4567.c | 5 +-
sound/soc/codecs/sta32x.c | 5 +-
sound/soc/codecs/sta350.c | 5 +-
sound/soc/codecs/sta529.c | 1 -
sound/soc/codecs/stac9766.c | 2 -
sound/soc/codecs/sti-sas.c | 7 +-
sound/soc/codecs/tas2552.c | 13 +-
sound/soc/codecs/tas2562.c | 2 -
sound/soc/codecs/tas2764.c | 1 -
sound/soc/codecs/tas2770.c | 7 +-
sound/soc/codecs/tas2780.c | 663 +++++
sound/soc/codecs/tas2780.h | 101 +
sound/soc/codecs/tas5086.c | 3 +-
sound/soc/codecs/tas571x.c | 1 -
sound/soc/codecs/tas5720.c | 6 +-
sound/soc/codecs/tas5805m.c | 1 -
sound/soc/codecs/tas6424.c | 7 +-
sound/soc/codecs/tfa9879.c | 5 +-
sound/soc/codecs/tfa989x.c | 31 +-
sound/soc/codecs/tlv320adc3xxx.c | 3 +-
sound/soc/codecs/tlv320adcx140.c | 11 +-
sound/soc/codecs/tlv320aic23.c | 8 +-
sound/soc/codecs/tlv320aic26.c | 16 +-
sound/soc/codecs/tlv320aic31xx.c | 20 +-
sound/soc/codecs/tlv320aic32x4.c | 11 +-
sound/soc/codecs/tlv320aic3x.c | 12 +-
sound/soc/codecs/tlv320dac33.c | 13 +-
sound/soc/codecs/tscs42xx.c | 1 -
sound/soc/codecs/twl4030.c | 102 +-
sound/soc/codecs/twl6040.c | 1 -
sound/soc/codecs/uda1334.c | 3 +-
sound/soc/codecs/uda134x.c | 1 -
sound/soc/codecs/uda1380.c | 1 -
sound/soc/codecs/wcd-mbhc-v2.c | 12 +-
sound/soc/codecs/wcd9335.c | 98 +-
sound/soc/codecs/wl1273.c | 1 -
sound/soc/codecs/wm0010.c | 1 -
sound/soc/codecs/wm1250-ev1.c | 1 -
sound/soc/codecs/wm2000.c | 1 -
sound/soc/codecs/wm2200.c | 1 -
sound/soc/codecs/wm5100.c | 1 -
sound/soc/codecs/wm5102.c | 1 -
sound/soc/codecs/wm5110.c | 1 -
sound/soc/codecs/wm8350.c | 1 -
sound/soc/codecs/wm8400.c | 1 -
sound/soc/codecs/wm8510.c | 1 -
sound/soc/codecs/wm8523.c | 1 -
sound/soc/codecs/wm8524.c | 1 -
sound/soc/codecs/wm8580.c | 1 -
sound/soc/codecs/wm8711.c | 1 -
sound/soc/codecs/wm8727.c | 1 -
sound/soc/codecs/wm8728.c | 1 -
sound/soc/codecs/wm8731.c | 1 -
sound/soc/codecs/wm8737.c | 1 -
sound/soc/codecs/wm8741.c | 1 -
sound/soc/codecs/wm8750.c | 1 -
sound/soc/codecs/wm8753.c | 1 -
sound/soc/codecs/wm8770.c | 1 -
sound/soc/codecs/wm8776.c | 1 -
sound/soc/codecs/wm8782.c | 1 -
sound/soc/codecs/wm8804.c | 1 -
sound/soc/codecs/wm8900.c | 1 -
sound/soc/codecs/wm8903.c | 1 -
sound/soc/codecs/wm8904.c | 1 -
sound/soc/codecs/wm8940.c | 1 -
sound/soc/codecs/wm8955.c | 1 -
sound/soc/codecs/wm8960.c | 1 -
sound/soc/codecs/wm8961.c | 1 -
sound/soc/codecs/wm8962.c | 1 -
sound/soc/codecs/wm8971.c | 1 -
sound/soc/codecs/wm8974.c | 1 -
sound/soc/codecs/wm8978.c | 1 -
sound/soc/codecs/wm8983.c | 1 -
sound/soc/codecs/wm8985.c | 1 -
sound/soc/codecs/wm8988.c | 1 -
sound/soc/codecs/wm8990.c | 1 -
sound/soc/codecs/wm8991.c | 1 -
sound/soc/codecs/wm8993.c | 1 -
sound/soc/codecs/wm8994.c | 1 -
sound/soc/codecs/wm8995.c | 1 -
sound/soc/codecs/wm8996.c | 2 -
sound/soc/codecs/wm8997.c | 1 -
sound/soc/codecs/wm8998.c | 1 -
sound/soc/codecs/wm9081.c | 1 -
sound/soc/codecs/wm9090.c | 1 -
sound/soc/codecs/wm9705.c | 1 -
sound/soc/codecs/wm9712.c | 1 -
sound/soc/codecs/wm9713.c | 1 -
sound/soc/codecs/wm_adsp.c | 25 +-
sound/soc/codecs/wsa881x.c | 16 +-
sound/soc/codecs/wsa883x.c | 1511 ++++++++++
sound/soc/codecs/zl38060.c | 1 -
sound/soc/dwc/dwc-i2s.c | 15 +-
sound/soc/fsl/Kconfig | 3 +
sound/soc/fsl/fsl_asrc_dma.c | 19 +-
sound/soc/fsl/fsl_aud2htx.c | 3 +-
sound/soc/fsl/fsl_audmix.c | 6 +-
sound/soc/fsl/fsl_easrc.c | 7 +-
sound/soc/fsl/fsl_esai.c | 11 +-
sound/soc/fsl/fsl_micfil.c | 55 +-
sound/soc/fsl/fsl_micfil.h | 9 +
sound/soc/fsl/fsl_mqs.c | 136 +-
sound/soc/fsl/fsl_rpmsg.c | 3 +-
sound/soc/fsl/fsl_sai.c | 375 ++-
sound/soc/fsl/fsl_sai.h | 28 +-
sound/soc/fsl/fsl_spdif.c | 51 +-
sound/soc/fsl/fsl_ssi.c | 23 +-
sound/soc/fsl/fsl_utils.c | 69 +
sound/soc/fsl/fsl_utils.h | 7 +
sound/soc/fsl/fsl_xcvr.c | 12 +-
sound/soc/fsl/imx-audmix.c | 4 +-
sound/soc/fsl/imx-audmux.c | 24 +-
sound/soc/fsl/imx-card.c | 16 +-
sound/soc/fsl/mpc5200_psc_i2s.c | 3 +-
sound/soc/fsl/pcm030-audio-fabric.c | 8 +-
.../generic/audio-graph-card2-custom-sample.dtsi | 101 +-
sound/soc/generic/audio-graph-card2.c | 74 +-
sound/soc/generic/simple-card-utils.c | 44 +-
sound/soc/generic/test-component.c | 20 +-
sound/soc/hisilicon/hi6210-i2s.c | 19 +-
sound/soc/img/img-i2s-in.c | 7 +-
sound/soc/img/img-i2s-out.c | 21 +-
sound/soc/img/img-parallel-out.c | 3 +-
sound/soc/img/img-spdif-in.c | 3 +-
sound/soc/img/img-spdif-out.c | 3 +-
sound/soc/img/pistachio-internal-dac.c | 1 -
sound/soc/intel/Kconfig | 5 +-
sound/soc/intel/atom/sst-atom-controls.c | 8 +-
sound/soc/intel/atom/sst/sst.c | 2 +-
sound/soc/intel/atom/sst/sst_ipc.c | 8 +-
sound/soc/intel/avs/Makefile | 3 +
sound/soc/intel/avs/boards/Kconfig | 121 +
sound/soc/intel/avs/boards/Makefile | 27 +
sound/soc/intel/avs/boards/da7219.c | 282 ++
sound/soc/intel/avs/boards/dmic.c | 93 +
sound/soc/intel/avs/boards/hdaudio.c | 294 ++
sound/soc/intel/avs/boards/i2s_test.c | 180 ++
sound/soc/intel/avs/boards/max98357a.c | 154 ++
sound/soc/intel/avs/boards/max98373.c | 239 ++
sound/soc/intel/avs/boards/nau8825.c | 353 +++
sound/soc/intel/avs/boards/rt274.c | 310 +++
sound/soc/intel/avs/boards/rt286.c | 281 ++
sound/soc/intel/avs/boards/rt298.c | 281 ++
sound/soc/intel/avs/boards/rt5682.c | 340 +++
sound/soc/intel/avs/boards/ssm4567.c | 271 ++
sound/soc/intel/avs/cldma.c | 12 +-
sound/soc/intel/avs/core.c | 13 +-
sound/soc/intel/avs/dsp.c | 11 +-
sound/soc/intel/avs/ipc.c | 1 +
sound/soc/intel/avs/loader.c | 2 +-
sound/soc/intel/avs/messages.c | 18 +-
sound/soc/intel/avs/pcm.c | 2 -
sound/soc/intel/avs/topology.c | 27 +
sound/soc/intel/boards/Kconfig | 5 +-
sound/soc/intel/boards/Makefile | 4 +-
sound/soc/intel/boards/bdw_rt286.c | 279 ++
sound/soc/intel/boards/broadwell.c | 336 ---
sound/soc/intel/boards/bxt_da7219_max98357a.c | 21 +-
sound/soc/intel/boards/bxt_rt298.c | 2 +-
sound/soc/intel/boards/bytcht_cx2072x.c | 2 +-
sound/soc/intel/boards/bytcht_da7213.c | 2 +-
sound/soc/intel/boards/bytcht_es8316.c | 2 +-
sound/soc/intel/boards/bytcht_nocodec.c | 2 +-
sound/soc/intel/boards/bytcr_rt5640.c | 4 +-
sound/soc/intel/boards/bytcr_rt5651.c | 4 +-
sound/soc/intel/boards/bytcr_wm5102.c | 2 +-
sound/soc/intel/boards/cht_bsw_max98090_ti.c | 3 +-
sound/soc/intel/boards/cht_bsw_rt5645.c | 8 +-
sound/soc/intel/boards/cht_bsw_rt5672.c | 2 +-
sound/soc/intel/boards/cml_rt1011_rt5682.c | 23 +-
sound/soc/intel/boards/glk_rt5682_max98357a.c | 21 +-
sound/soc/intel/boards/haswell.c | 202 --
sound/soc/intel/boards/hda_dsp_common.c | 4 +-
sound/soc/intel/boards/hsw_rt5640.c | 176 ++
sound/soc/intel/boards/kbl_da7219_max98357a.c | 21 +-
sound/soc/intel/boards/kbl_da7219_max98927.c | 21 +-
sound/soc/intel/boards/kbl_rt5663_max98927.c | 21 +-
.../soc/intel/boards/kbl_rt5663_rt5514_max98927.c | 21 +-
sound/soc/intel/boards/skl_hda_dsp_generic.c | 4 +-
sound/soc/intel/boards/skl_nau88l25_max98357a.c | 19 +-
sound/soc/intel/boards/skl_nau88l25_ssm4567.c | 19 +-
sound/soc/intel/boards/skl_rt286.c | 2 +-
sound/soc/intel/boards/sof_cs42l42.c | 109 +-
sound/soc/intel/boards/sof_da7219_max98373.c | 23 +-
sound/soc/intel/boards/sof_nau8825.c | 23 +-
sound/soc/intel/boards/sof_pcm512x.c | 2 +-
sound/soc/intel/boards/sof_realtek_common.c | 24 +-
sound/soc/intel/boards/sof_realtek_common.h | 6 +-
sound/soc/intel/boards/sof_rt5682.c | 25 +-
sound/soc/intel/boards/sof_sdw.c | 34 +-
sound/soc/intel/catpt/device.c | 5 +-
sound/soc/intel/catpt/pcm.c | 26 +-
sound/soc/intel/catpt/sysfs.c | 4 +-
sound/soc/intel/common/Makefile | 1 +
sound/soc/intel/common/soc-acpi-intel-adl-match.c | 7 +
.../intel/common/soc-acpi-intel-hsw-bdw-match.c | 6 +-
sound/soc/intel/common/soc-acpi-intel-mtl-match.c | 72 +
sound/soc/intel/keembay/kmb_platform.c | 18 +-
sound/soc/intel/skylake/skl-pcm.c | 5 +-
sound/soc/intel/skylake/skl-topology.c | 6 -
sound/soc/jz4740/Kconfig | 2 +-
sound/soc/jz4740/jz4740-i2s.c | 43 +-
sound/soc/mediatek/mt6797/mt6797-mt6351.c | 6 +-
sound/soc/mediatek/mt8173/mt8173-afe-pcm.c | 6 +-
sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c | 10 +-
sound/soc/mediatek/mt8173/mt8173-rt5650.c | 9 +-
sound/soc/mediatek/mt8186/mt8186-afe-clk.c | 651 +++++
sound/soc/mediatek/mt8186/mt8186-afe-clk.h | 106 +
sound/soc/mediatek/mt8186/mt8186-afe-gpio.c | 243 ++
sound/soc/mediatek/mt8186/mt8186-afe-gpio.h | 19 +
sound/soc/mediatek/mt8186/mt8186-audsys-clk.c | 150 +
sound/soc/mediatek/mt8186/mt8186-audsys-clk.h | 15 +
sound/soc/mediatek/mt8186/mt8186-audsys-clkid.h | 45 +
sound/soc/mediatek/mt8186/mt8186-dai-adda.c | 871 ++++++
sound/soc/mediatek/mt8186/mt8186-dai-hostless.c | 298 ++
sound/soc/mediatek/mt8186/mt8186-dai-hw-gain.c | 236 ++
sound/soc/mediatek/mt8186/mt8186-dai-i2s.c | 1286 +++++++++
sound/soc/mediatek/mt8186/mt8186-dai-pcm.c | 423 +++
sound/soc/mediatek/mt8186/mt8186-dai-src.c | 695 +++++
sound/soc/mediatek/mt8186/mt8186-dai-tdm.c | 698 +++++
sound/soc/mediatek/mt8186/mt8186-interconnection.h | 69 +
sound/soc/mediatek/mt8186/mt8186-misc-control.c | 252 ++
sound/soc/mediatek/mt8186/mt8186-reg.h | 2913 ++++++++++++++++++++
sound/soc/mediatek/mt8195/mt8195-afe-clk.c | 8 +-
sound/soc/mediatek/mt8195/mt8195-dai-etdm.c | 6 +-
sound/soc/mediatek/mt8195/mt8195-dai-pcm.c | 6 +-
sound/soc/meson/aiu-acodec-ctrl.c | 1 -
sound/soc/meson/aiu-codec-ctrl.c | 1 -
sound/soc/meson/aiu-encoder-i2s.c | 2 +-
sound/soc/meson/axg-frddr.c | 3 +
sound/soc/meson/axg-pdm.c | 4 +-
sound/soc/meson/axg-spdifin.c | 1 +
sound/soc/meson/axg-spdifout.c | 1 +
sound/soc/meson/axg-tdm-interface.c | 14 +-
sound/soc/meson/axg-toddr.c | 3 +
sound/soc/meson/g12a-toacodec.c | 2 -
sound/soc/meson/g12a-tohdmitx.c | 1 -
sound/soc/meson/meson-codec-glue.c | 2 +-
sound/soc/meson/t9015.c | 1 -
sound/soc/mxs/mxs-saif.c | 7 +-
sound/soc/pxa/magician.c | 8 +-
sound/soc/pxa/mmp-sspa.c | 15 +-
sound/soc/pxa/pxa-ssp.c | 43 +-
sound/soc/pxa/pxa2xx-i2s.c | 27 +-
sound/soc/qcom/apq8016_sbc.c | 2 +-
sound/soc/qcom/lpass-apq8016.c | 1 +
sound/soc/qcom/lpass-cpu.c | 7 +
sound/soc/qcom/qdsp6/audioreach.c | 4 +-
sound/soc/qcom/qdsp6/q6adm.c | 6 +-
sound/soc/qcom/qdsp6/q6afe.c | 6 +-
sound/soc/qcom/qdsp6/q6asm-dai.c | 23 +-
sound/soc/qcom/sc7180.c | 2 +-
sound/soc/qcom/sc7280.c | 33 +
sound/soc/qcom/sdm845.c | 6 +-
sound/soc/qcom/sm8250.c | 4 +-
sound/soc/rockchip/rk3288_hdmi_analog.c | 4 +-
sound/soc/rockchip/rockchip_i2s.c | 98 +-
sound/soc/rockchip/rockchip_i2s_tdm.c | 13 +-
sound/soc/rockchip/rockchip_pdm.c | 7 +-
sound/soc/rockchip/rockchip_spdif.c | 1 +
sound/soc/samsung/Kconfig | 20 +-
sound/soc/samsung/aries_wm8994.c | 7 +-
sound/soc/samsung/h1940_uda1380.c | 2 +-
sound/soc/samsung/i2s.c | 8 +-
sound/soc/samsung/neo1973_wm8753.c | 2 +-
sound/soc/samsung/pcm.c | 7 +-
sound/soc/samsung/rx1950_uda1380.c | 4 +-
sound/soc/samsung/s3c-i2s-v2.c | 17 +-
sound/soc/samsung/s3c2412-i2s.c | 7 +-
sound/soc/samsung/s3c24xx-i2s.c | 14 +-
sound/soc/samsung/snow.c | 2 +-
sound/soc/samsung/spdif.c | 7 +-
sound/soc/sh/fsi.c | 6 +-
sound/soc/sh/hac.c | 3 +-
sound/soc/sh/rcar/core.c | 30 +-
sound/soc/sh/rcar/ssiu.c | 2 +
sound/soc/sh/rz-ssi.c | 11 +-
sound/soc/sh/siu_pcm.c | 17 +-
sound/soc/sh/ssi.c | 13 +-
sound/soc/soc-card.c | 6 +
sound/soc/soc-core.c | 167 +-
sound/soc/soc-dai.c | 3 +-
sound/soc/soc-dapm.c | 10 +-
sound/soc/soc-ops.c | 51 +-
sound/soc/soc-pcm.c | 3 +-
sound/soc/soc-topology-test.c | 37 +-
sound/soc/soc-utils.c | 1 -
sound/soc/sof/Kconfig | 7 +
sound/soc/sof/Makefile | 16 +-
sound/soc/sof/amd/Kconfig | 1 +
sound/soc/sof/amd/acp-dsp-offset.h | 2 +
sound/soc/sof/amd/acp.c | 36 +
sound/soc/sof/amd/acp.h | 4 +
sound/soc/sof/amd/pci-rn.c | 4 +
sound/soc/sof/amd/renoir.c | 4 +
sound/soc/sof/compress.c | 73 +-
sound/soc/sof/core.c | 7 +-
sound/soc/sof/debug.c | 5 +-
sound/soc/sof/imx/Kconfig | 1 +
sound/soc/sof/intel/Kconfig | 27 +
sound/soc/sof/intel/Makefile | 4 +-
sound/soc/sof/intel/apl.c | 1 +
sound/soc/sof/intel/bdw.c | 7 +-
sound/soc/sof/intel/byt.c | 5 +-
sound/soc/sof/intel/cnl.c | 39 +-
sound/soc/sof/intel/hda-dai.c | 226 +-
sound/soc/sof/intel/hda-dsp.c | 26 +-
sound/soc/sof/intel/hda-ipc.c | 39 +-
sound/soc/sof/intel/hda-loader.c | 28 +-
sound/soc/sof/intel/hda-stream.c | 6 +-
sound/soc/sof/intel/hda.c | 149 +-
sound/soc/sof/intel/hda.h | 70 +
sound/soc/sof/intel/icl.c | 1 +
sound/soc/sof/intel/mtl.c | 805 ++++++
sound/soc/sof/intel/mtl.h | 76 +
sound/soc/sof/intel/pci-apl.c | 1 +
sound/soc/sof/intel/pci-cnl.c | 1 +
sound/soc/sof/intel/pci-icl.c | 1 +
sound/soc/sof/intel/pci-mtl.c | 71 +
sound/soc/sof/intel/pci-tgl.c | 1 +
sound/soc/sof/intel/shim.h | 2 +
sound/soc/sof/intel/tgl.c | 34 +-
sound/soc/sof/ipc.c | 24 +-
sound/soc/sof/ipc3-dtrace.c | 55 +-
sound/soc/sof/ipc3-loader.c | 11 +-
sound/soc/sof/ipc3-pcm.c | 8 +-
sound/soc/sof/ipc3-topology.c | 73 +-
sound/soc/sof/ipc3.c | 36 +-
sound/soc/sof/ipc4-control.c | 216 ++
sound/soc/sof/ipc4-pcm.c | 230 ++
sound/soc/sof/ipc4-priv.h | 7 +
sound/soc/sof/ipc4-topology.c | 1811 ++++++++++++
sound/soc/sof/ipc4-topology.h | 245 ++
sound/soc/sof/ipc4.c | 45 +-
sound/soc/sof/mediatek/Kconfig | 1 +
sound/soc/sof/mediatek/adsp_helper.h | 1 +
sound/soc/sof/mediatek/mt8186/mt8186-clk.c | 4 +-
sound/soc/sof/mediatek/mt8195/mt8195-clk.c | 7 +
sound/soc/sof/mediatek/mt8195/mt8195.c | 50 +-
sound/soc/sof/mediatek/mt8195/mt8195.h | 5 +
sound/soc/sof/ops.h | 6 +
sound/soc/sof/pcm.c | 13 +
sound/soc/sof/sof-audio.h | 12 +
sound/soc/sof/sof-client-ipc-msg-injector.c | 29 +-
sound/soc/sof/sof-client-probes.c | 5 +
sound/soc/sof/sof-client.c | 4 +-
sound/soc/sof/sof-priv.h | 14 +-
sound/soc/sof/topology.c | 121 +-
sound/soc/spear/spdif_in.c | 3 +-
sound/soc/spear/spdif_out.c | 3 +-
sound/soc/sti/sti_uniperif.c | 3 +-
sound/soc/stm/stm32_adfsdm.c | 3 +-
sound/soc/stm/stm32_i2s.c | 9 +-
sound/soc/stm/stm32_sai_sub.c | 11 +-
sound/soc/stm/stm32_spdifrx.c | 1 +
sound/soc/sunxi/sun4i-codec.c | 85 +-
sound/soc/sunxi/sun4i-i2s.c | 23 +-
sound/soc/sunxi/sun4i-spdif.c | 3 +-
sound/soc/sunxi/sun50i-codec-analog.c | 8 +
sound/soc/sunxi/sun8i-codec.c | 7 +-
sound/soc/tegra/Kconfig | 9 +
sound/soc/tegra/Makefile | 2 +
sound/soc/tegra/tegra20_ac97.c | 5 +-
sound/soc/tegra/tegra20_das.c | 198 +-
sound/soc/tegra/tegra20_das.h | 120 -
sound/soc/tegra/tegra20_i2s.c | 9 +-
sound/soc/tegra/tegra20_spdif.c | 1 +
sound/soc/tegra/tegra210_adx.c | 2 +-
sound/soc/tegra/tegra210_ahub.c | 39 +-
sound/soc/tegra/tegra210_i2s.c | 7 +-
sound/soc/tegra/tegra210_mbdrc.c | 1014 +++++++
sound/soc/tegra/tegra210_mbdrc.h | 215 ++
sound/soc/tegra/tegra210_ope.c | 419 +++
sound/soc/tegra/tegra210_ope.h | 90 +
sound/soc/tegra/tegra210_peq.c | 434 +++
sound/soc/tegra/tegra210_peq.h | 56 +
sound/soc/tegra/tegra30_i2s.c | 9 +-
sound/soc/ti/davinci-i2s.c | 35 +-
sound/soc/ti/davinci-mcasp.c | 16 +-
sound/soc/ti/davinci-vcif.c | 3 +-
sound/soc/ti/omap-dmic.c | 3 +-
sound/soc/ti/omap-hdmi.c | 1 +
sound/soc/ti/omap-mcbsp.c | 15 +-
sound/soc/ti/omap-mcpdm.c | 7 +-
sound/soc/uniphier/evea.c | 1 -
sound/soc/ux500/mop500.c | 2 -
sound/soc/ux500/mop500_ab8500.c | 2 -
sound/soc/ux500/mop500_ab8500.h | 2 -
sound/soc/ux500/ux500_msp_dai.c | 41 +-
sound/soc/ux500/ux500_msp_dai.h | 2 -
sound/soc/ux500/ux500_msp_i2s.c | 2 -
sound/soc/ux500/ux500_msp_i2s.h | 2 -
sound/soc/ux500/ux500_pcm.c | 2 -
sound/soc/ux500/ux500_pcm.h | 2 -
sound/soc/xilinx/xlnx_formatter_pcm.c | 18 +-
sound/soc/xilinx/xlnx_i2s.c | 1 +
sound/soc/xilinx/xlnx_spdif.c | 1 +
sound/soc/xtensa/xtfpga-i2s.c | 19 +-
679 files changed, 27894 insertions(+), 3270 deletions(-)
create mode 100644 Documentation/devicetree/bindings/dsp/mediatek,mt8186-dsp.yaml
delete mode 100644 Documentation/devicetree/bindings/sound/designware-i2s.txt
delete mode 100644 Documentation/devicetree/bindings/sound/fsl,micfil.txt
create mode 100644 Documentation/devicetree/bindings/sound/fsl,micfil.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-mbdrc.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-ope.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-peq.yaml
delete mode 100644 Documentation/devicetree/bindings/sound/qcom,sdm845.txt
create mode 100644 Documentation/devicetree/bindings/sound/qcom,wsa883x.yaml
create mode 100644 Documentation/devicetree/bindings/sound/snps,designware-i2s.yaml
create mode 100644 Documentation/devicetree/bindings/sound/tas2780.yaml
create mode 100644 include/dt-bindings/sound/qcom,wcd9335.h
create mode 100644 sound/soc/amd/acp-es8336.c
create mode 100644 sound/soc/amd/acp/acp-rembrandt.c
create mode 100644 sound/soc/codecs/hda-dai.c
create mode 100644 sound/soc/codecs/hda.c
create mode 100644 sound/soc/codecs/hda.h
create mode 100644 sound/soc/codecs/tas2780.c
create mode 100644 sound/soc/codecs/tas2780.h
create mode 100644 sound/soc/codecs/wsa883x.c
create mode 100644 sound/soc/intel/avs/boards/Kconfig
create mode 100644 sound/soc/intel/avs/boards/Makefile
create mode 100644 sound/soc/intel/avs/boards/da7219.c
create mode 100644 sound/soc/intel/avs/boards/dmic.c
create mode 100644 sound/soc/intel/avs/boards/hdaudio.c
create mode 100644 sound/soc/intel/avs/boards/i2s_test.c
create mode 100644 sound/soc/intel/avs/boards/max98357a.c
create mode 100644 sound/soc/intel/avs/boards/max98373.c
create mode 100644 sound/soc/intel/avs/boards/nau8825.c
create mode 100644 sound/soc/intel/avs/boards/rt274.c
create mode 100644 sound/soc/intel/avs/boards/rt286.c
create mode 100644 sound/soc/intel/avs/boards/rt298.c
create mode 100644 sound/soc/intel/avs/boards/rt5682.c
create mode 100644 sound/soc/intel/avs/boards/ssm4567.c
create mode 100644 sound/soc/intel/boards/bdw_rt286.c
delete mode 100644 sound/soc/intel/boards/broadwell.c
delete mode 100644 sound/soc/intel/boards/haswell.c
create mode 100644 sound/soc/intel/boards/hsw_rt5640.c
create mode 100644 sound/soc/intel/common/soc-acpi-intel-mtl-match.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-afe-clk.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-afe-clk.h
create mode 100644 sound/soc/mediatek/mt8186/mt8186-afe-gpio.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-afe-gpio.h
create mode 100644 sound/soc/mediatek/mt8186/mt8186-audsys-clk.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-audsys-clk.h
create mode 100644 sound/soc/mediatek/mt8186/mt8186-audsys-clkid.h
create mode 100644 sound/soc/mediatek/mt8186/mt8186-dai-adda.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-dai-hostless.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-dai-hw-gain.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-dai-i2s.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-dai-pcm.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-dai-src.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-dai-tdm.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-interconnection.h
create mode 100644 sound/soc/mediatek/mt8186/mt8186-misc-control.c
create mode 100644 sound/soc/mediatek/mt8186/mt8186-reg.h
create mode 100644 sound/soc/sof/intel/mtl.c
create mode 100644 sound/soc/sof/intel/mtl.h
create mode 100644 sound/soc/sof/intel/pci-mtl.c
create mode 100644 sound/soc/sof/ipc4-control.c
create mode 100644 sound/soc/sof/ipc4-pcm.c
create mode 100644 sound/soc/sof/ipc4-topology.c
create mode 100644 sound/soc/sof/ipc4-topology.h
delete mode 100644 sound/soc/tegra/tegra20_das.h
create mode 100644 sound/soc/tegra/tegra210_mbdrc.c
create mode 100644 sound/soc/tegra/tegra210_mbdrc.h
create mode 100644 sound/soc/tegra/tegra210_ope.c
create mode 100644 sound/soc/tegra/tegra210_ope.h
create mode 100644 sound/soc/tegra/tegra210_peq.c
create mode 100644 sound/soc/tegra/tegra210_peq.h
2
1
Remove #ifdef CONFIG_PM and use pm_ptr() instead.
Signed-off-by: Claudiu Beznea <claudiu.beznea(a)microchip.com>
---
sound/soc/atmel/atmel_ssc_dai.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
index 8aae0beadcfe..e868b7e028d6 100644
--- a/sound/soc/atmel/atmel_ssc_dai.c
+++ b/sound/soc/atmel/atmel_ssc_dai.c
@@ -762,7 +762,6 @@ static int atmel_ssc_trigger(struct snd_pcm_substream *substream,
return 0;
}
-#ifdef CONFIG_PM
static int atmel_ssc_suspend(struct snd_soc_component *component)
{
struct atmel_ssc_info *ssc_p;
@@ -821,10 +820,6 @@ static int atmel_ssc_resume(struct snd_soc_component *component)
return 0;
}
-#else /* CONFIG_PM */
-# define atmel_ssc_suspend NULL
-# define atmel_ssc_resume NULL
-#endif /* CONFIG_PM */
#define ATMEL_SSC_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
@@ -859,8 +854,8 @@ static struct snd_soc_dai_driver atmel_ssc_dai = {
static const struct snd_soc_component_driver atmel_ssc_component = {
.name = "atmel-ssc",
- .suspend = atmel_ssc_suspend,
- .resume = atmel_ssc_resume,
+ .suspend = pm_ptr(atmel_ssc_suspend),
+ .resume = pm_ptr(atmel_ssc_resume),
.legacy_dai_naming = 1,
};
--
2.34.1
2
1
The following changes since commit 980555e95f7cabdc9c80a07107622b097ba23703:
ASoC: madera: Fix event generation for rate controls (2022-06-24 16:22:01 +0100)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git tags/asoc-fix-v5.19-rc4-2
for you to fetch changes up to 1e347f861da8ddb17e1d1b3113cb6c188e0de3e5:
ASoC: rockchip-i2s: Undo BCLK pinctrl changes (2022-07-14 13:25:52 +0100)
----------------------------------------------------------------
ASoC: Drop Rockchip BCLK management for v5.19
As covered in the second revert commit in this pull request the version
of the BCLK muxing that's in v5.19 is causing issues, let's just revert
it and wait for the more complete support in v5.20 instead.
----------------------------------------------------------------
Alexandru Elisei (1):
ASoC: rockchip: i2s: Fix NULL pointer dereference when pinctrl is not found
Brent Lu (1):
ASoC: Intel: sof_rt5682: fix out-of-bounds array access
Bryan O'Donoghue (1):
ASoC: dt-bindings: Fix description for msm8916
Charles Keepax (4):
ASoC: wm5102: Fix event generation for output compensation
ASoC: wm8998: Fix event generation for input mux
ASoC: cs47l92: Fix event generation for OUT1 demux
ASoC: arizona: Update arizona_aif_cfg_changed to use RX_BCLK_RATE
Daniel Mack (1):
ASoC: max98396: Fix register access for PCM format settings
David Owens (1):
ASoC: ti: omap-mcbsp: duplicate sysfs error
Francesco Dolcini (1):
ASoC: sgtl5000: Fix noise on shutdown/remove
Hector Martin (2):
ASoC: tas2764: Correct playback volume range
ASoC: tas2764: Fix amp gain register offset & default
Jianglei Nie (1):
ASoC: qdsp6: fix potential memory leak in q6apm_get_audioreach_graph()
Marek Vasut (1):
ASoC: doc: Capitalize RESET line name
Mark Brown (1):
ASoC: rockchip-i2s: Undo BCLK pinctrl changes
Martin Povišer (2):
ASoC: tas2764: Add post reset delays
ASoC: tas2764: Fix and extend FSYNC polarity handling
Oder Chiou (1):
ASoC: rt5640: Fix the wrong state of JD1 and JD2
Peter Ujfalusi (2):
ASoC: Intel: Skylake: Correct the ssp rate discovery in skl_get_ssp_clks()
ASoC: Intel: Skylake: Correct the handling of fmt_config flexible array
Sascha Hauer (2):
ASoC: audio_graph_card2: Fix port numbers in example
ASoC: tlv320adcx140: Fix tx_mask check
Yassine Oudjana (1):
ASoC: wcd9335: Use int array instead of bitmask for TX mixers
.../devicetree/bindings/sound/qcom,lpass-cpu.yaml | 8 +-
Documentation/sound/soc/dai.rst | 2 +-
sound/soc/codecs/arizona.c | 4 +-
sound/soc/codecs/cs47l92.c | 8 +-
sound/soc/codecs/max98396.c | 10 +-
sound/soc/codecs/rt5640.c | 30 ++--
sound/soc/codecs/sgtl5000.c | 9 ++
sound/soc/codecs/sgtl5000.h | 1 +
sound/soc/codecs/tas2764.c | 46 +++---
sound/soc/codecs/tas2764.h | 6 +-
sound/soc/codecs/tlv320adcx140.c | 13 +-
sound/soc/codecs/wcd9335.c | 17 ++-
sound/soc/codecs/wm5102.c | 21 ++-
sound/soc/codecs/wm8998.c | 21 ++-
sound/soc/generic/audio-graph-card2.c | 6 +-
sound/soc/intel/boards/sof_rt5682.c | 10 +-
sound/soc/intel/skylake/skl-nhlt.c | 40 ++++--
sound/soc/qcom/qdsp6/q6apm.c | 1 +
sound/soc/rockchip/rockchip_i2s.c | 160 ++++-----------------
sound/soc/ti/omap-mcbsp-priv.h | 2 -
sound/soc/ti/omap-mcbsp-st.c | 14 +-
sound/soc/ti/omap-mcbsp.c | 19 +--
22 files changed, 199 insertions(+), 249 deletions(-)
2
5

15 Jul '22
Hi ALL,
in the below link
https://github.com/bear24rw/alsa-utils/blob/master/aplay/aplay.c#L1360
My question here is ..
aplay -->writes the data from userspace to system dma (in the kernel
alsabuffer).and from system dma to hardware dma(if hardware dma present)and
to fifo.
Now the application writes the data to system dma -->is always fast because
the cpu runs in GHz. and from system dma to i2s fifo runs on i2s
mclk.which is running on 196.6MHz.
My point is..
cpu is always fast and controller is slow ,so when playback we should get
overrun.
the command should be like this in my point of you.
stream == SND_PCM_STREAM_PLAYBACK ? : _("overrun") _("underrun"),
Please let me know if I am wrong.
Thanks
Sujith
1
0
The functions related to SOF can be reused in different machine drivers,
such as mt8195 or mt8186, so extract the common code to avoid duplication.
Set mtk_soc_card_data which include machine private data and SOF private
data as card drvdata, then the difference between machine private can be
ignored such as mt8195_mt6359_priv or mt8186_mt6366_priv, at the same
time the SOF related code can be reused in different machine drivers.
Signed-off-by: Chunxu Li <chunxu.li(a)mediatek.com>
---
sound/soc/mediatek/common/Makefile | 2 +-
.../soc/mediatek/common/mtk-dsp-sof-common.c | 196 +++++++++++++++
.../soc/mediatek/common/mtk-dsp-sof-common.h | 35 +++
sound/soc/mediatek/common/mtk-soc-card.h | 17 ++
sound/soc/mediatek/mt8195/mt8195-mt6359.c | 233 ++++--------------
5 files changed, 300 insertions(+), 183 deletions(-)
create mode 100644 sound/soc/mediatek/common/mtk-dsp-sof-common.c
create mode 100644 sound/soc/mediatek/common/mtk-dsp-sof-common.h
create mode 100644 sound/soc/mediatek/common/mtk-soc-card.h
diff --git a/sound/soc/mediatek/common/Makefile b/sound/soc/mediatek/common/Makefile
index acbe01e9e928..576deb7f8cce 100644
--- a/sound/soc/mediatek/common/Makefile
+++ b/sound/soc/mediatek/common/Makefile
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: GPL-2.0
# platform driver
-snd-soc-mtk-common-objs := mtk-afe-platform-driver.o mtk-afe-fe-dai.o
+snd-soc-mtk-common-objs := mtk-afe-platform-driver.o mtk-afe-fe-dai.o mtk-dsp-sof-common.o
obj-$(CONFIG_SND_SOC_MEDIATEK) += snd-soc-mtk-common.o
obj-$(CONFIG_SND_SOC_MTK_BTCVSD) += mtk-btcvsd.o
diff --git a/sound/soc/mediatek/common/mtk-dsp-sof-common.c b/sound/soc/mediatek/common/mtk-dsp-sof-common.c
new file mode 100644
index 000000000000..1098694f4f36
--- /dev/null
+++ b/sound/soc/mediatek/common/mtk-dsp-sof-common.c
@@ -0,0 +1,196 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * mtk-dsp-sof-common.c -- MediaTek dsp sof common ctrl
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chunxu Li <chunxu.li(a)mediatek.com>
+ */
+
+#include <mtk-dsp-sof-common.h>
+#include <mtk-soc-card.h>
+
+/* fixup the BE DAI link to match any values from topology */
+int mtk_sof_dai_link_fixup(struct snd_soc_pcm_runtime *rtd,
+ struct snd_pcm_hw_params *params)
+{
+ struct snd_soc_card *card = rtd->card;
+ struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(card);
+ struct mtk_sof_priv *sof_priv = soc_card_data->sof_priv;
+ int i, j, ret = 0;
+
+ for (i = 0; i < sof_priv->num_streams; i++) {
+ struct snd_soc_dai *cpu_dai;
+ struct snd_soc_pcm_runtime *runtime;
+ struct snd_soc_dai_link *sof_dai_link = NULL;
+ const struct sof_conn_stream *conn = &sof_priv->conn_streams[i];
+
+ if (strcmp(rtd->dai_link->name, conn->normal_link))
+ continue;
+
+ for_each_card_rtds(card, runtime) {
+ if (strcmp(runtime->dai_link->name, conn->sof_link))
+ continue;
+
+ for_each_rtd_cpu_dais(runtime, j, cpu_dai) {
+ if (cpu_dai->stream_active[conn->stream_dir] > 0) {
+ sof_dai_link = runtime->dai_link;
+ break;
+ }
+ }
+ break;
+ }
+
+ if (sof_dai_link && sof_dai_link->be_hw_params_fixup)
+ ret = sof_dai_link->be_hw_params_fixup(runtime, params);
+
+ break;
+ }
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(mtk_sof_dai_link_fixup);
+
+int mtk_sof_card_probe(struct snd_soc_card *card)
+{
+ int i;
+ struct snd_soc_dai_link *dai_link;
+
+ /* Set stream_name to help sof bind widgets */
+ for_each_card_prelinks(card, i, dai_link) {
+ if (dai_link->no_pcm && !dai_link->stream_name && dai_link->name)
+ dai_link->stream_name = dai_link->name;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(mtk_sof_card_probe);
+
+int mtk_sof_card_late_probe(struct snd_soc_card *card)
+{
+ struct snd_soc_pcm_runtime *rtd;
+ struct snd_soc_component *sof_comp = NULL;
+ struct mtk_soc_card_data *soc_card_data =
+ snd_soc_card_get_drvdata(card);
+ struct mtk_sof_priv *sof_priv = soc_card_data->sof_priv;
+ int i;
+
+ /* 1. find sof component */
+ for_each_card_rtds(card, rtd) {
+ sof_comp = snd_soc_rtdcom_lookup(rtd, "sof-audio-component");
+ if (sof_comp)
+ break;
+ }
+
+ if (!sof_comp) {
+ dev_info(card->dev, "probe without sof-audio-component\n");
+ return 0;
+ }
+
+ /* 2. add route path and fixup callback */
+ for (i = 0; i < sof_priv->num_streams; i++) {
+ const struct sof_conn_stream *conn = &sof_priv->conn_streams[i];
+ struct snd_soc_pcm_runtime *sof_rtd = NULL;
+ struct snd_soc_pcm_runtime *normal_rtd = NULL;
+
+ for_each_card_rtds(card, rtd) {
+ if (!strcmp(rtd->dai_link->name, conn->sof_link)) {
+ sof_rtd = rtd;
+ continue;
+ }
+ if (!strcmp(rtd->dai_link->name, conn->normal_link)) {
+ normal_rtd = rtd;
+ continue;
+ }
+ if (normal_rtd && sof_rtd)
+ break;
+ }
+ if (normal_rtd && sof_rtd) {
+ int j;
+ struct snd_soc_dai *cpu_dai;
+
+ for_each_rtd_cpu_dais(sof_rtd, j, cpu_dai) {
+ struct snd_soc_dapm_route route;
+ struct snd_soc_dapm_path *p = NULL;
+ struct snd_soc_dapm_widget *play_widget =
+ cpu_dai->playback_widget;
+ struct snd_soc_dapm_widget *cap_widget =
+ cpu_dai->capture_widget;
+ memset(&route, 0, sizeof(route));
+ if (conn->stream_dir == SNDRV_PCM_STREAM_CAPTURE &&
+ cap_widget) {
+ snd_soc_dapm_widget_for_each_sink_path(cap_widget, p) {
+ route.source = conn->sof_dma;
+ route.sink = p->sink->name;
+ snd_soc_dapm_add_routes(&card->dapm, &route, 1);
+ }
+ } else if (conn->stream_dir == SNDRV_PCM_STREAM_PLAYBACK &&
+ play_widget) {
+ snd_soc_dapm_widget_for_each_source_path(play_widget, p) {
+ route.source = p->source->name;
+ route.sink = conn->sof_dma;
+ snd_soc_dapm_add_routes(&card->dapm, &route, 1);
+ }
+ } else {
+ dev_err(cpu_dai->dev, "stream dir and widget not pair\n");
+ }
+ }
+
+ sof_rtd->dai_link->be_hw_params_fixup =
+ sof_comp->driver->be_hw_params_fixup;
+ if (sof_priv->sof_dai_link_fixup)
+ normal_rtd->dai_link->be_hw_params_fixup =
+ sof_priv->sof_dai_link_fixup;
+ else
+ normal_rtd->dai_link->be_hw_params_fixup = mtk_sof_dai_link_fixup;
+ }
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(mtk_sof_card_late_probe);
+
+int mtk_sof_dailink_parse_of(struct snd_soc_card *card, struct device_node *np,
+ const char *propname, struct snd_soc_dai_link *pre_dai_links,
+ int pre_num_links)
+{
+ struct device *dev = card->dev;
+ struct snd_soc_dai_link *parsed_dai_link;
+ const char *dai_name = NULL;
+ int i, j, ret, num_links, parsed_num_links = 0;
+
+ num_links = of_property_count_strings(np, "mediatek,dai-link");
+ if (num_links < 0 || num_links > card->num_links) {
+ dev_dbg(dev, "number of dai-link is invalid\n");
+ return -EINVAL;
+ }
+
+ parsed_dai_link = devm_kcalloc(dev, num_links, sizeof(*parsed_dai_link), GFP_KERNEL);
+ if (!parsed_dai_link)
+ return -ENOMEM;
+
+ for (i = 0; i < num_links; i++) {
+ ret = of_property_read_string_index(np, propname, i, &dai_name);
+ if (ret) {
+ dev_dbg(dev, "ASoC: Property '%s' index %d could not be read: %d\n",
+ propname, i, ret);
+ return ret;
+ }
+ dev_dbg(dev, "ASoC: Property get dai_name:%s\n", dai_name);
+ for (j = 0; j < pre_num_links; j++) {
+ if (!strcmp(dai_name, pre_dai_links[j].name)) {
+ memcpy(&parsed_dai_link[parsed_num_links++], &pre_dai_links[j],
+ sizeof(struct snd_soc_dai_link));
+ break;
+ }
+ }
+ }
+
+ if (parsed_num_links != num_links)
+ return -EINVAL;
+
+ card->dai_link = parsed_dai_link;
+ card->num_links = parsed_num_links;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(mtk_sof_dailink_parse_of);
diff --git a/sound/soc/mediatek/common/mtk-dsp-sof-common.h b/sound/soc/mediatek/common/mtk-dsp-sof-common.h
new file mode 100644
index 000000000000..f02ba2ce3718
--- /dev/null
+++ b/sound/soc/mediatek/common/mtk-dsp-sof-common.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mtk-dsp-sof-common.h -- MediaTek dsp sof common definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chunxu Li <chunxu.li(a)mediatek.com>
+ */
+
+#ifndef _MTK_DSP_SOF_COMMON_H_
+#define _MTK_DSP_SOF_COMMON_H_
+
+#include <sound/soc.h>
+struct sof_conn_stream {
+ const char *normal_link;
+ const char *sof_link;
+ const char *sof_dma;
+ int stream_dir;
+};
+
+struct mtk_sof_priv {
+ const struct sof_conn_stream *conn_streams;
+ int num_streams;
+ int (*sof_dai_link_fixup)(struct snd_soc_pcm_runtime *rtd,
+ struct snd_pcm_hw_params *params);
+};
+
+int mtk_sof_dai_link_fixup(struct snd_soc_pcm_runtime *rtd,
+ struct snd_pcm_hw_params *params);
+int mtk_sof_card_probe(struct snd_soc_card *card);
+int mtk_sof_card_late_probe(struct snd_soc_card *card);
+int mtk_sof_dailink_parse_of(struct snd_soc_card *card, struct device_node *np,
+ const char *propname, struct snd_soc_dai_link *pre_dai_links,
+ int pre_num_links);
+
+#endif
diff --git a/sound/soc/mediatek/common/mtk-soc-card.h b/sound/soc/mediatek/common/mtk-soc-card.h
new file mode 100644
index 000000000000..eeda79370049
--- /dev/null
+++ b/sound/soc/mediatek/common/mtk-soc-card.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * mtk-soc-card.h -- MediaTek soc card data definition
+ *
+ * Copyright (c) 2022 MediaTek Inc.
+ * Author: Chunxu Li <chunxu.li(a)mediatek.com>
+ */
+
+#ifndef _MTK_SOC_CARD_H_
+#define _MTK_SOC_CARD_H_
+
+struct mtk_soc_card_data {
+ void *mach_priv;
+ void *sof_priv;
+};
+
+#endif
diff --git a/sound/soc/mediatek/mt8195/mt8195-mt6359.c b/sound/soc/mediatek/mt8195/mt8195-mt6359.c
index 54a00b0699b1..c530e3fc27e4 100644
--- a/sound/soc/mediatek/mt8195/mt8195-mt6359.c
+++ b/sound/soc/mediatek/mt8195/mt8195-mt6359.c
@@ -20,6 +20,8 @@
#include "../../codecs/rt1011.h"
#include "../../codecs/rt5682.h"
#include "../common/mtk-afe-platform-driver.h"
+#include "../common/mtk-dsp-sof-common.h"
+#include "../common/mtk-soc-card.h"
#include "mt8195-afe-clk.h"
#include "mt8195-afe-common.h"
@@ -54,13 +56,6 @@ struct mt8195_card_data {
unsigned long quirk;
};
-struct sof_conn_stream {
- const char *normal_link;
- const char *sof_link;
- const char *sof_dma;
- int stream_dir;
-};
-
struct mt8195_mt6359_priv {
struct snd_soc_jack headset_jack;
struct snd_soc_jack dp_jack;
@@ -374,7 +369,8 @@ static const struct snd_soc_ops mt8195_dptx_ops = {
static int mt8195_dptx_codec_init(struct snd_soc_pcm_runtime *rtd)
{
- struct mt8195_mt6359_priv *priv = snd_soc_card_get_drvdata(rtd->card);
+ struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
+ struct mt8195_mt6359_priv *priv = soc_card_data->mach_priv;
struct snd_soc_component *cmpnt_codec =
asoc_rtd_to_codec(rtd, 0)->component;
int ret;
@@ -389,7 +385,8 @@ static int mt8195_dptx_codec_init(struct snd_soc_pcm_runtime *rtd)
static int mt8195_hdmi_codec_init(struct snd_soc_pcm_runtime *rtd)
{
- struct mt8195_mt6359_priv *priv = snd_soc_card_get_drvdata(rtd->card);
+ struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
+ struct mt8195_mt6359_priv *priv = soc_card_data->mach_priv;
struct snd_soc_component *cmpnt_codec =
asoc_rtd_to_codec(rtd, 0)->component;
int ret;
@@ -555,7 +552,8 @@ static int mt8195_rt5682_init(struct snd_soc_pcm_runtime *rtd)
{
struct snd_soc_component *cmpnt_codec =
asoc_rtd_to_codec(rtd, 0)->component;
- struct mt8195_mt6359_priv *priv = snd_soc_card_get_drvdata(rtd->card);
+ struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
+ struct mt8195_mt6359_priv *priv = soc_card_data->mach_priv;
struct snd_soc_jack *jack = &priv->headset_jack;
struct snd_soc_component *cmpnt_afe =
snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME);
@@ -722,7 +720,8 @@ static int mt8195_set_bias_level_post(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, enum snd_soc_bias_level level)
{
struct snd_soc_component *component = dapm->component;
- struct mt8195_mt6359_priv *priv = snd_soc_card_get_drvdata(card);
+ struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(card);
+ struct mt8195_mt6359_priv *priv = soc_card_data->mach_priv;
int ret;
/*
@@ -1321,175 +1320,24 @@ static struct snd_soc_card mt8195_mt6359_soc_card = {
static int mt8195_dai_link_fixup(struct snd_soc_pcm_runtime *rtd,
struct snd_pcm_hw_params *params)
{
- struct snd_soc_card *card = rtd->card;
- struct snd_soc_dai_link *sof_dai_link = NULL;
- struct snd_soc_pcm_runtime *runtime;
- struct snd_soc_dai *cpu_dai;
- int i, j, ret = 0;
-
- for (i = 0; i < ARRAY_SIZE(g_sof_conn_streams); i++) {
- const struct sof_conn_stream *conn = &g_sof_conn_streams[i];
-
- if (strcmp(rtd->dai_link->name, conn->normal_link))
- continue;
-
- for_each_card_rtds(card, runtime) {
- if (strcmp(runtime->dai_link->name, conn->sof_link))
- continue;
-
- for_each_rtd_cpu_dais(runtime, j, cpu_dai) {
- if (cpu_dai->stream_active[conn->stream_dir] > 0) {
- sof_dai_link = runtime->dai_link;
- break;
- }
- }
- break;
- }
+ int ret;
- if (sof_dai_link && sof_dai_link->be_hw_params_fixup)
- ret = sof_dai_link->be_hw_params_fixup(runtime, params);
-
- break;
- }
+ ret = mtk_sof_dai_link_fixup(rtd, params);
if (!strcmp(rtd->dai_link->name, "ETDM2_IN_BE") ||
!strcmp(rtd->dai_link->name, "ETDM1_OUT_BE")) {
- mt8195_etdm_hw_params_fixup(runtime, params);
+ mt8195_etdm_hw_params_fixup(rtd, params);
}
return ret;
}
-static int mt8195_mt6359_card_late_probe(struct snd_soc_card *card)
-{
- struct snd_soc_pcm_runtime *runtime;
- struct snd_soc_component *sof_comp = NULL;
- int i;
-
- /* 1. find sof component */
- for_each_card_rtds(card, runtime) {
- for (i = 0; i < runtime->num_components; i++) {
- if (!runtime->components[i]->driver->name)
- continue;
- if (!strcmp(runtime->components[i]->driver->name, "sof-audio-component")) {
- sof_comp = runtime->components[i];
- break;
- }
- }
- }
-
- if (!sof_comp) {
- dev_info(card->dev, " probe without component\n");
- return 0;
- }
- /* 2. add route path and fixup callback */
- for (i = 0; i < ARRAY_SIZE(g_sof_conn_streams); i++) {
- const struct sof_conn_stream *conn = &g_sof_conn_streams[i];
- struct snd_soc_pcm_runtime *sof_rtd = NULL;
- struct snd_soc_pcm_runtime *normal_rtd = NULL;
- struct snd_soc_pcm_runtime *rtd = NULL;
-
- for_each_card_rtds(card, rtd) {
- if (!strcmp(rtd->dai_link->name, conn->sof_link)) {
- sof_rtd = rtd;
- continue;
- }
- if (!strcmp(rtd->dai_link->name, conn->normal_link)) {
- normal_rtd = rtd;
- continue;
- }
- if (normal_rtd && sof_rtd)
- break;
- }
- if (normal_rtd && sof_rtd) {
- int j;
- struct snd_soc_dai *cpu_dai;
-
- for_each_rtd_cpu_dais(sof_rtd, j, cpu_dai) {
- struct snd_soc_dapm_route route;
- struct snd_soc_dapm_path *p = NULL;
- struct snd_soc_dapm_widget *play_widget =
- cpu_dai->playback_widget;
- struct snd_soc_dapm_widget *cap_widget =
- cpu_dai->capture_widget;
- memset(&route, 0, sizeof(route));
- if (conn->stream_dir == SNDRV_PCM_STREAM_CAPTURE &&
- cap_widget) {
- snd_soc_dapm_widget_for_each_sink_path(cap_widget, p) {
- route.source = conn->sof_dma;
- route.sink = p->sink->name;
- snd_soc_dapm_add_routes(&card->dapm, &route, 1);
- }
- } else if (conn->stream_dir == SNDRV_PCM_STREAM_PLAYBACK &&
- play_widget){
- snd_soc_dapm_widget_for_each_source_path(play_widget, p) {
- route.source = p->source->name;
- route.sink = conn->sof_dma;
- snd_soc_dapm_add_routes(&card->dapm, &route, 1);
- }
- } else {
- dev_err(cpu_dai->dev, "stream dir and widget not pair\n");
- }
- }
- normal_rtd->dai_link->be_hw_params_fixup = mt8195_dai_link_fixup;
- }
- }
-
- return 0;
-}
-
-static int mt8195_dailink_parse_of(struct snd_soc_card *card, struct device_node *np,
- const char *propname)
-{
- struct device *dev = card->dev;
- struct snd_soc_dai_link *link;
- const char *dai_name = NULL;
- int i, j, ret, num_links;
-
- num_links = of_property_count_strings(np, "mediatek,dai-link");
-
- if (num_links < 0 || num_links > ARRAY_SIZE(mt8195_mt6359_dai_links)) {
- dev_dbg(dev, "number of dai-link is invalid\n");
- return -EINVAL;
- }
-
- card->dai_link = devm_kcalloc(dev, num_links, sizeof(*link), GFP_KERNEL);
- if (!card->dai_link)
- return -ENOMEM;
-
- card->num_links = 0;
- link = card->dai_link;
-
- for (i = 0; i < num_links; i++) {
- ret = of_property_read_string_index(np, propname, i, &dai_name);
- if (ret) {
- dev_dbg(dev, "ASoC: Property '%s' index %d could not be read: %d\n",
- propname, i, ret);
- return -EINVAL;
- }
-
- for (j = 0; j < ARRAY_SIZE(mt8195_mt6359_dai_links); j++) {
- if (!strcmp(dai_name, mt8195_mt6359_dai_links[j].name)) {
- memcpy(link, &mt8195_mt6359_dai_links[j],
- sizeof(struct snd_soc_dai_link));
- link++;
- card->num_links++;
- break;
- }
- }
- }
-
- if (card->num_links != num_links)
- return -EINVAL;
-
- return 0;
-}
-
static int mt8195_mt6359_dev_probe(struct platform_device *pdev)
{
struct snd_soc_card *card = &mt8195_mt6359_soc_card;
struct snd_soc_dai_link *dai_link;
- struct mt8195_mt6359_priv *priv;
+ struct mtk_soc_card_data *soc_card_data;
+ struct mt8195_mt6359_priv *mach_priv;
struct device_node *platform_node, *adsp_node, *dp_node, *hdmi_node;
struct mt8195_card_data *card_data;
int is5682s = 0;
@@ -1512,17 +1360,41 @@ static int mt8195_mt6359_dev_probe(struct platform_device *pdev)
if (strstr(card->name, "_5682s"))
is5682s = 1;
+ soc_card_data = devm_kzalloc(&pdev->dev, sizeof(*card_data), GFP_KERNEL);
+ if (!soc_card_data)
+ return -ENOMEM;
- priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
- if (!priv)
+ mach_priv = devm_kzalloc(&pdev->dev, sizeof(*mach_priv), GFP_KERNEL);
+ if (!mach_priv)
return -ENOMEM;
+ soc_card_data->mach_priv = mach_priv;
+
+ adsp_node = of_parse_phandle(pdev->dev.of_node, "mediatek,adsp", 0);
+ if (adsp_node) {
+ struct mtk_sof_priv *sof_priv;
+
+ sof_priv = devm_kzalloc(&pdev->dev, sizeof(*sof_priv), GFP_KERNEL);
+ if (!sof_priv) {
+ ret = -ENOMEM;
+ goto err_kzalloc;
+ }
+ sof_priv->conn_streams = g_sof_conn_streams;
+ sof_priv->num_streams = ARRAY_SIZE(g_sof_conn_streams);
+ sof_priv->sof_dai_link_fixup = mt8195_dai_link_fixup;
+ soc_card_data->sof_priv = sof_priv;
+ card->late_probe = mtk_sof_card_late_probe;
+ sof_on = 1;
+ }
+
if (of_property_read_bool(pdev->dev.of_node, "mediatek,dai-link")) {
- ret = mt8195_dailink_parse_of(card, pdev->dev.of_node,
- "mediatek,dai-link");
+ ret = mtk_sof_dailink_parse_of(card, pdev->dev.of_node,
+ "mediatek,dai-link",
+ mt8195_mt6359_dai_links,
+ ARRAY_SIZE(mt8195_mt6359_dai_links));
if (ret) {
dev_dbg(&pdev->dev, "Parse dai-link fail\n");
- return -EINVAL;
+ goto err_parse_of;
}
} else {
if (!sof_on)
@@ -1533,13 +1405,10 @@ static int mt8195_mt6359_dev_probe(struct platform_device *pdev)
"mediatek,platform", 0);
if (!platform_node) {
dev_dbg(&pdev->dev, "Property 'platform' missing or invalid\n");
- return -EINVAL;
+ ret = -EINVAL;
+ goto err_platform_node;
}
- adsp_node = of_parse_phandle(pdev->dev.of_node, "mediatek,adsp", 0);
- if (adsp_node)
- sof_on = 1;
-
dp_node = of_parse_phandle(pdev->dev.of_node, "mediatek,dptx-codec", 0);
hdmi_node = of_parse_phandle(pdev->dev.of_node,
"mediatek,hdmi-codec", 0);
@@ -1612,17 +1481,17 @@ static int mt8195_mt6359_dev_probe(struct platform_device *pdev)
}
}
- if (sof_on)
- card->late_probe = mt8195_mt6359_card_late_probe;
-
- snd_soc_card_set_drvdata(card, priv);
+ snd_soc_card_set_drvdata(card, soc_card_data);
ret = devm_snd_soc_register_card(&pdev->dev, card);
of_node_put(platform_node);
- of_node_put(adsp_node);
of_node_put(dp_node);
of_node_put(hdmi_node);
+err_kzalloc:
+err_parse_of:
+err_platform_node:
+ of_node_put(adsp_node);
return ret;
}
--
2.25.1
2
1
When the driver fails in snd_card_register() at probe time, it will free
the 'bcd2k->midi_out_urb' before killing it, which may cause a UAF bug.
The following log can reveal it:
[ 50.727020] BUG: KASAN: use-after-free in bcd2000_input_complete+0x1f1/0x2e0 [snd_bcd2000]
[ 50.727623] Read of size 8 at addr ffff88810fab0e88 by task swapper/4/0
[ 50.729530] Call Trace:
[ 50.732899] bcd2000_input_complete+0x1f1/0x2e0 [snd_bcd2000]
Fix this by adding usb_kill_urb() before usb_free_urb().
Fixes: b47a22290d58 ("ALSA: MIDI driver for Behringer BCD2000 USB device")
Signed-off-by: Zheyu Ma <zheyuma97(a)gmail.com>
---
sound/usb/bcd2000/bcd2000.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sound/usb/bcd2000/bcd2000.c b/sound/usb/bcd2000/bcd2000.c
index cd4a0bc6d278..7aec0a95c609 100644
--- a/sound/usb/bcd2000/bcd2000.c
+++ b/sound/usb/bcd2000/bcd2000.c
@@ -348,7 +348,8 @@ static int bcd2000_init_midi(struct bcd2000 *bcd2k)
static void bcd2000_free_usb_related_resources(struct bcd2000 *bcd2k,
struct usb_interface *interface)
{
- /* usb_kill_urb not necessary, urb is aborted automatically */
+ usb_kill_urb(bcd2k->midi_out_urb);
+ usb_kill_urb(bcd2k->midi_in_urb);
usb_free_urb(bcd2k->midi_out_urb);
usb_free_urb(bcd2k->midi_in_urb);
--
2.25.1
2
1
The ES8326 codec is not compatible with ES8316 and requires a dedicated driver.
Signed-off-by: David Yang <yangxiaohua(a)everest-semi.com>
Signed-off-by: Zhu Ning <zhuning(a)everest-semi.com>
---
sound/soc/codecs/Kconfig | 5 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/es8326.c | 794 ++++++++++++++++++++++++++++++++++++++
sound/soc/codecs/es8326.h | 187 +++++++++
4 files changed, 988 insertions(+)
mode change 100644 => 100755 sound/soc/codecs/Kconfig
mode change 100644 => 100755 sound/soc/codecs/Makefile
create mode 100755 sound/soc/codecs/es8326.c
create mode 100755 sound/soc/codecs/es8326.h
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
old mode 100644
new mode 100755
index 6165db92a629..b0a15cce416d
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -98,6 +98,7 @@ config SND_SOC_ALL_CODECS
imply SND_SOC_DA9055
imply SND_SOC_DMIC
imply SND_SOC_ES8316
+ imply SND_SOC_ES8326
imply SND_SOC_ES8328_SPI
imply SND_SOC_ES8328_I2C
imply SND_SOC_ES7134
@@ -911,6 +912,10 @@ config SND_SOC_ES8316
tristate "Everest Semi ES8316 CODEC"
depends on I2C
+config SND_SOC_ES8326
+ tristate "Everest Semi ES8326 CODEC"
+ depends on I2C
+
config SND_SOC_ES8328
tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
old mode 100644
new mode 100755
index 28dc4edfd01f..ae9d789b5381
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -100,6 +100,7 @@ snd-soc-dmic-objs := dmic.o
snd-soc-es7134-objs := es7134.o
snd-soc-es7241-objs := es7241.o
snd-soc-es8316-objs := es8316.o
+snd-soc-es8326-objs := es8326.o
snd-soc-es8328-objs := es8328.o
snd-soc-es8328-i2c-objs := es8328-i2c.o
snd-soc-es8328-spi-objs := es8328-spi.o
@@ -452,6 +453,7 @@ obj-$(CONFIG_SND_SOC_DMIC) += snd-soc-dmic.o
obj-$(CONFIG_SND_SOC_ES7134) += snd-soc-es7134.o
obj-$(CONFIG_SND_SOC_ES7241) += snd-soc-es7241.o
obj-$(CONFIG_SND_SOC_ES8316) += snd-soc-es8316.o
+obj-$(CONFIG_SND_SOC_ES8326) += snd-soc-es8326.o
obj-$(CONFIG_SND_SOC_ES8328) += snd-soc-es8328.o
obj-$(CONFIG_SND_SOC_ES8328_I2C)+= snd-soc-es8328-i2c.o
obj-$(CONFIG_SND_SOC_ES8328_SPI)+= snd-soc-es8328-spi.o
diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c
new file mode 100755
index 000000000000..d62c596ac878
--- /dev/null
+++ b/sound/soc/codecs/es8326.c
@@ -0,0 +1,794 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// es8326.c -- es8326 ALSA SoC audio driver
+// Copyright Everest Semiconductor Co., Ltd
+//
+// Authors: David Yang <yangxiaohua(a)everest-semi.com>
+//
+
+#include <linux/clk.h>
+#include <linux/i2c.h>
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/module.h>
+#include <sound/jack.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/tlv.h>
+#include "es8326.h"
+
+struct es8326_priv {
+ struct clk *mclk;
+ struct snd_pcm_hw_constraint_list *sysclk_constraints;
+ struct i2c_client *i2c;
+ struct regmap *regmap;
+ struct snd_soc_component *component;
+ struct delayed_work jack_detect_work;
+ struct snd_soc_jack *jack;
+ int irq;
+ /* The lock protects the situation that an irq is generated
+ * while enabling or disabling irq.
+ */
+ struct mutex lock;
+ u8 mic1_src;
+ u8 mic2_src;
+ u8 jack_pol;
+ bool jd_inverted;
+ unsigned int sysclk;
+};
+
+static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(dac_vol_tlv, -9550, 50, 0);
+static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(adc_vol_tlv, -9550, 50, 0);
+static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(adc_analog_pga_tlv, 0, 300, 0);
+static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(adc_pga_tlv, 0, 600, 0);
+static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(softramp_rate, 0, 100, 0);
+static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(drc_target_tlv, -3200, 200, 0);
+static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(drc_recovery_tlv, -125, 250, 0);
+
+static const char *const winsize[] = {
+ "0.25db/2 LRCK",
+ "0.25db/4 LRCK",
+ "0.25db/8 LRCK",
+ "0.25db/16 LRCK",
+ "0.25db/32 LRCK",
+ "0.25db/64 LRCK",
+ "0.25db/128 LRCK",
+ "0.25db/256 LRCK",
+ "0.25db/512 LRCK",
+ "0.25db/1024 LRCK",
+ "0.25db/2048 LRCK",
+ "0.25db/4096 LRCK",
+ "0.25db/8192 LRCK",
+ "0.25db/16384 LRCK",
+ "0.25db/32768 LRCK",
+ "0.25db/65536 LRCK",
+};
+
+static const char *const dacpol_txt[] = {
+ "Normal", "R Invert", "L Invert", "L + R Invert" };
+
+static const struct soc_enum dacpol =
+ SOC_ENUM_SINGLE(ES8326_DAC_DSM_4D, 4, 4, dacpol_txt);
+static const struct soc_enum alc_winsize =
+ SOC_ENUM_SINGLE(ES8326_ADC_RAMPRATE_2E, 4, 16, winsize);
+static const struct soc_enum drc_winsize =
+ SOC_ENUM_SINGLE(ES8326_DRC_WINSIZE_54, 4, 16, winsize);
+
+static const struct snd_kcontrol_new es8326_snd_controls[] = {
+ SOC_SINGLE_TLV("DAC Playback Volume", ES8326_DAC_VOL_50, 0, 0xbf, 0, dac_vol_tlv),
+ SOC_ENUM("Playback Polarity", dacpol),
+ SOC_SINGLE_TLV("DAC Ramp Rate", ES8326_DAC_RAMPRATE_4E, 0, 0x0f, 0, softramp_rate),
+ SOC_SINGLE_TLV("DRC Recovery Level", ES8326_DRC_RECOVERY_53, 0, 4, 0, drc_recovery_tlv),
+ SOC_ENUM("DRC Winsize", drc_winsize),
+ SOC_SINGLE_TLV("DRC Target Level", ES8326_DRC_WINSIZE_54, 0, 0x0f, 0, drc_target_tlv),
+
+ SOC_DOUBLE_R_TLV("ADC Capture Volume", ES8326_ADC1_VOL_2C, ES8326_ADC2_VOL_2D, 0, 0xff, 0,
+ adc_vol_tlv),
+ SOC_DOUBLE_TLV("ADC PGA Volume", ES8326_ADC_SCALE_29, 4, 0, 5, 0, adc_pga_tlv),
+ SOC_SINGLE_TLV("ADC PGA Gain Volume", ES8326_PGAGAIN_23, 0, 10, 0, adc_analog_pga_tlv),
+ SOC_SINGLE_TLV("ADC Ramp Rate", ES8326_ADC_RAMPRATE_2E, 0, 0x0f, 0, softramp_rate),
+ SOC_SINGLE("ALC Capture Switch", ES8326_ALC_RECOVERY_32, 3, 1, 0),
+ SOC_SINGLE_TLV("ALC Capture Recovery Level", ES8326_ALC_LEVEL_33,
+ 0, 4, 0, drc_recovery_tlv),
+ SOC_ENUM("ALC Capture Winsize", alc_winsize),
+ SOC_SINGLE_TLV("ALC Capture Target Level", ES8326_ALC_LEVEL_33,
+ 0, 0x0f, 0, drc_target_tlv),
+
+};
+
+static const struct snd_soc_dapm_widget es8326_dapm_widgets[] = {
+ SND_SOC_DAPM_INPUT("MIC1"),
+ SND_SOC_DAPM_INPUT("MIC2"),
+ SND_SOC_DAPM_INPUT("MIC3"),
+ SND_SOC_DAPM_INPUT("MIC4"),
+
+ SND_SOC_DAPM_ADC("ADC L", NULL, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_ADC("ADC R", NULL, SND_SOC_NOPM, 0, 0),
+
+ /* Digital Interface */
+ SND_SOC_DAPM_AIF_OUT("I2S OUT", "I2S1 Capture", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_IN("I2S IN", "I2S1 Playback", 0, SND_SOC_NOPM, 0, 0),
+
+ /* ADC Digital Mute */
+ SND_SOC_DAPM_PGA("ADC L1", ES8326_ADC_MUTE_15, 0, 1, NULL, 0),
+ SND_SOC_DAPM_PGA("ADC R1", ES8326_ADC_MUTE_15, 1, 1, NULL, 0),
+ SND_SOC_DAPM_PGA("ADC L2", ES8326_ADC_MUTE_15, 2, 1, NULL, 0),
+ SND_SOC_DAPM_PGA("ADC R2", ES8326_ADC_MUTE_15, 3, 1, NULL, 0),
+
+ /* Analog Power Supply*/
+ SND_SOC_DAPM_DAC("Right DAC", NULL, ES8326_ANA_PDN_16, 0, 1),
+ SND_SOC_DAPM_DAC("Left DAC", NULL, ES8326_ANA_PDN_16, 1, 1),
+ SND_SOC_DAPM_SUPPLY("Analog Power", ES8326_ANA_PDN_16, 7, 1, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("IBias Power", ES8326_ANA_PDN_16, 6, 1, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("ADC Vref", ES8326_ANA_PDN_16, 5, 1, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("DAC Vref", ES8326_ANA_PDN_16, 4, 1, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Vref Power", ES8326_ANA_PDN_16, 3, 1, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("MICBIAS1", ES8326_ANA_MICBIAS_1B, 2, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("MICBIAS2", ES8326_ANA_MICBIAS_1B, 3, 0, NULL, 0),
+
+ SND_SOC_DAPM_PGA("LHPMIX", ES8326_DAC2HPMIX_25, 7, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("RHPMIX", ES8326_DAC2HPMIX_25, 3, 0, NULL, 0),
+
+ /* Headphone Charge Pump and Output */
+ SND_SOC_DAPM_SUPPLY("HPOR Cal", ES8326_HP_CAL_27, 7, 1, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("HPOL Cal", ES8326_HP_CAL_27, 3, 1, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Headphone Charge Pump", ES8326_HP_DRIVER_24,
+ 3, 1, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Headphone Driver Bias", ES8326_HP_DRIVER_24,
+ 2, 1, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Headphone LDO", ES8326_HP_DRIVER_24,
+ 1, 1, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Headphone Reference", ES8326_HP_DRIVER_24,
+ 0, 1, NULL, 0),
+ SND_SOC_DAPM_REG(snd_soc_dapm_supply, "HPOR Supply", ES8326_HP_CAL_27,
+ ES8326_HPOR_SHIFT, 7, 7, 0),
+ SND_SOC_DAPM_REG(snd_soc_dapm_supply, "HPOL Supply", ES8326_HP_CAL_27,
+ 0, 7, 7, 0),
+
+ SND_SOC_DAPM_OUTPUT("HPOL"),
+ SND_SOC_DAPM_OUTPUT("HPOR"),
+};
+
+static const struct snd_soc_dapm_route es8326_dapm_routes[] = {
+ {"ADC L1", NULL, "MIC1"},
+ {"ADC R1", NULL, "MIC2"},
+ {"ADC L2", NULL, "MIC3"},
+ {"ADC R2", NULL, "MIC4"},
+
+
+ {"ADC L", NULL, "ADC L1"},
+ {"ADC R", NULL, "ADC R1"},
+ {"ADC L", NULL, "ADC L2"},
+ {"ADC R", NULL, "ADC R2"},
+
+ {"I2S OUT", NULL, "ADC L"},
+ {"I2S OUT", NULL, "ADC R"},
+
+ {"I2S OUT", NULL, "Analog Power"},
+ {"I2S OUT", NULL, "ADC Vref"},
+ {"I2S OUT", NULL, "Vref Power"},
+ {"I2S OUT", NULL, "IBias Power"},
+ {"I2S IN", NULL, "Analog Power"},
+ {"I2S IN", NULL, "DAC Vref"},
+ {"I2S IN", NULL, "Vref Power"},
+ {"I2S IN", NULL, "IBias Power"},
+
+ {"Right DAC", NULL, "I2S IN"},
+ {"Left DAC", NULL, "I2S IN"},
+
+ {"LHPMIX", NULL, "Left DAC"},
+ {"RHPMIX", NULL, "Right DAC"},
+
+ {"HPOR", NULL, "HPOR Cal"},
+ {"HPOL", NULL, "HPOL Cal"},
+ {"HPOR", NULL, "HPOR Supply"},
+ {"HPOL", NULL, "HPOL Supply"},
+ {"HPOL", NULL, "Headphone Charge Pump"},
+ {"HPOR", NULL, "Headphone Charge Pump"},
+ {"HPOL", NULL, "Headphone Driver Bias"},
+ {"HPOR", NULL, "Headphone Driver Bias"},
+ {"HPOL", NULL, "Headphone LDO"},
+ {"HPOR", NULL, "Headphone LDO"},
+ {"HPOL", NULL, "Headphone Reference"},
+ {"HPOR", NULL, "Headphone Reference"},
+
+ {"HPOL", NULL, "LHPMIX"},
+ {"HPOR", NULL, "RHPMIX"},
+};
+
+static const struct regmap_range es8326_volatile_ranges[] = {
+ regmap_reg_range(ES8326_HP_DETECT_FB, ES8326_HP_DETECT_FB),
+};
+
+static const struct regmap_access_table es8326_volatile_table = {
+ .yes_ranges = es8326_volatile_ranges,
+ .n_yes_ranges = ARRAY_SIZE(es8326_volatile_ranges),
+};
+
+const struct regmap_config es8326_regmap_config = {
+ .reg_bits = 8,
+ .val_bits = 8,
+ .max_register = 0xff,
+ .volatile_table = &es8326_volatile_table,
+ .cache_type = REGCACHE_RBTREE,
+};
+
+struct _coeff_div {
+ u16 fs;
+ u32 rate;
+ u32 mclk;
+ u8 reg4;
+ u8 reg5;
+ u8 reg6;
+ u8 reg7;
+ u8 reg8;
+ u8 reg9;
+ u8 rega;
+ u8 regb;
+};
+
+/* codec hifi mclk clock divider coefficients */
+/* {ratio, LRCK, MCLK, REG04, REG05, REG06, REG07, REG08, REG09, REG10, REG11} */
+static const struct _coeff_div coeff_div[] = {
+ {32, 8000, 256000, 0x60, 0x00, 0x0F, 0x75, 0x0A, 0x1B, 0x1F, 0x7F},
+ {32, 16000, 512000, 0x20, 0x00, 0x0D, 0x75, 0x0A, 0x1B, 0x1F, 0x3F},
+ {32, 44100, 1411200, 0x00, 0x00, 0x13, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {32, 48000, 1536000, 0x00, 0x00, 0x13, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {36, 8000, 288000, 0x20, 0x00, 0x0D, 0x75, 0x0A, 0x1B, 0x23, 0x47},
+ {36, 16000, 576000, 0x20, 0x00, 0x0D, 0x75, 0x0A, 0x1B, 0x23, 0x47},
+ {48, 8000, 384000, 0x60, 0x02, 0x1F, 0x75, 0x0A, 0x1B, 0x1F, 0x7F},
+ {48, 16000, 768000, 0x20, 0x02, 0x0F, 0x75, 0x0A, 0x1B, 0x1F, 0x3F},
+ {48, 48000, 2304000, 0x00, 0x02, 0x0D, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {64, 8000, 512000, 0x60, 0x00, 0x0D, 0x75, 0x0A, 0x1B, 0x1F, 0x7F},
+ {64, 16000, 1024000, 0x20, 0x00, 0x05, 0x75, 0x0A, 0x1B, 0x1F, 0x3F},
+
+ {64, 44100, 2822400, 0x00, 0x00, 0x11, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {64, 48000, 3072000, 0x00, 0x00, 0x11, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {72, 8000, 576000, 0x20, 0x00, 0x13, 0x35, 0x0A, 0x1B, 0x23, 0x47},
+ {72, 16000, 1152000, 0x20, 0x00, 0x05, 0x75, 0x0A, 0x1B, 0x23, 0x47},
+ {96, 8000, 768000, 0x60, 0x02, 0x1D, 0x75, 0x0A, 0x1B, 0x1F, 0x7F},
+ {96, 16000, 1536000, 0x20, 0x02, 0x0D, 0x75, 0x0A, 0x1B, 0x1F, 0x3F},
+ {100, 48000, 4800000, 0x04, 0x04, 0x3F, 0x6D, 0x38, 0x08, 0x4f, 0x1f},
+ {125, 48000, 6000000, 0x04, 0x04, 0x1F, 0x2D, 0x0A, 0x0A, 0x27, 0x27},
+ {128, 8000, 1024000, 0x60, 0x00, 0x13, 0x35, 0x0A, 0x1B, 0x1F, 0x7F},
+ {128, 16000, 2048000, 0x20, 0x00, 0x11, 0x35, 0x0A, 0x1B, 0x1F, 0x3F},
+
+ {128, 44100, 5644800, 0x00, 0x00, 0x01, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {128, 48000, 6144000, 0x00, 0x00, 0x01, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {144, 8000, 1152000, 0x20, 0x00, 0x03, 0x35, 0x0A, 0x1B, 0x23, 0x47},
+ {144, 16000, 2304000, 0x20, 0x00, 0x11, 0x35, 0x0A, 0x1B, 0x23, 0x47},
+ {192, 8000, 1536000, 0x60, 0x02, 0x0D, 0x75, 0x0A, 0x1B, 0x1F, 0x7F},
+ {192, 16000, 3072000, 0x20, 0x02, 0x05, 0x75, 0x0A, 0x1B, 0x1F, 0x3F},
+ {200, 48000, 9600000, 0x04, 0x04, 0x0F, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {250, 48000, 12000000, 0x04, 0x04, 0x0F, 0x2D, 0x0A, 0x0A, 0x27, 0x27},
+ {256, 8000, 2048000, 0x60, 0x00, 0x11, 0x35, 0x0A, 0x1B, 0x1F, 0x7F},
+ {256, 16000, 4096000, 0x20, 0x00, 0x01, 0x35, 0x0A, 0x1B, 0x1F, 0x3F},
+
+ {256, 44100, 11289600, 0x00, 0x00, 0x10, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {256, 48000, 12288000, 0x00, 0x00, 0x30, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {288, 8000, 2304000, 0x20, 0x00, 0x01, 0x35, 0x0A, 0x1B, 0x23, 0x47},
+ {384, 8000, 3072000, 0x60, 0x02, 0x05, 0x75, 0x0A, 0x1B, 0x1F, 0x7F},
+ {384, 16000, 6144000, 0x20, 0x02, 0x03, 0x35, 0x0A, 0x1B, 0x1F, 0x3F},
+ {384, 48000, 18432000, 0x00, 0x02, 0x01, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {400, 48000, 19200000, 0x09, 0x04, 0x0f, 0x6d, 0x3a, 0x0A, 0x4F, 0x1F},
+ {500, 48000, 24000000, 0x18, 0x04, 0x1F, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {512, 8000, 4096000, 0x60, 0x00, 0x01, 0x35, 0x0A, 0x1B, 0x1F, 0x7F},
+ {512, 16000, 8192000, 0x20, 0x00, 0x10, 0x35, 0x0A, 0x1B, 0x1F, 0x3F},
+
+ {512, 44100, 22579200, 0x00, 0x00, 0x00, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {512, 48000, 24576000, 0x00, 0x00, 0x00, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {768, 8000, 6144000, 0x60, 0x02, 0x11, 0x35, 0x0A, 0x1B, 0x1F, 0x7F},
+ {768, 16000, 12288000, 0x20, 0x02, 0x01, 0x35, 0x0A, 0x1B, 0x1F, 0x3F},
+ {800, 48000, 38400000, 0x00, 0x18, 0x13, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F},
+ {1024, 8000, 8192000, 0x60, 0x00, 0x10, 0x35, 0x0A, 0x1B, 0x1F, 0x7F},
+ {1024, 16000, 16384000, 0x20, 0x00, 0x00, 0x35, 0x0A, 0x1B, 0x1F, 0x3F},
+ {1152, 16000, 18432000, 0x20, 0x08, 0x11, 0x35, 0x0A, 0x1B, 0x1F, 0x3F},
+ {1536, 8000, 12288000, 0x60, 0x02, 0x01, 0x35, 0x0A, 0x1B, 0x1F, 0x7F},
+
+ {1536, 16000, 24576000, 0x20, 0x02, 0x10, 0x35, 0x0A, 0x1B, 0x1F, 0x3F},
+ {1625, 8000, 13000000, 0x0C, 0x18, 0x1F, 0x2D, 0x0A, 0x0A, 0x27, 0x27},
+ {1625, 16000, 26000000, 0x0C, 0x18, 0x1F, 0x2D, 0x0A, 0x0A, 0x27, 0x27},
+ {2048, 8000, 16384000, 0x60, 0x00, 0x00, 0x35, 0x0A, 0x1B, 0x1F, 0x7F},
+ {2304, 8000, 18432000, 0x40, 0x02, 0x10, 0x35, 0x0A, 0x1B, 0x1F, 0x5F},
+ {3072, 8000, 24576000, 0x60, 0x02, 0x10, 0x35, 0x0A, 0x1B, 0x1F, 0x7F},
+ {3250, 8000, 26000000, 0x0C, 0x18, 0x0F, 0x2D, 0x0A, 0x0A, 0x27, 0x27},
+
+};
+
+static inline int get_coeff(int mclk, int rate)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(coeff_div); i++) {
+ if (coeff_div[i].rate == rate && coeff_div[i].mclk == mclk)
+ return i;
+ }
+
+ return -EINVAL;
+}
+
+static unsigned int es8326_rates[] = {
+ 8000, 12000, 16000, 24000, 32000, 48000, 96000
+};
+
+static struct snd_pcm_hw_constraint_list es8326_constraints = {
+ .count = ARRAY_SIZE(es8326_rates),
+ .list = es8326_rates,
+};
+
+static int es8326_set_dai_sysclk(struct snd_soc_dai *codec_dai,
+ int clk_id, unsigned int freq, int dir)
+{
+ struct snd_soc_component *codec = codec_dai->component;
+ struct es8326_priv *es8326 = snd_soc_component_get_drvdata(codec);
+
+ es8326->sysclk = freq;
+
+ if (freq == 0) {
+ es8326->sysclk_constraints->list = NULL;
+ es8326->sysclk_constraints->count = 0;
+ return 0;
+ }
+
+ es8326->sysclk_constraints = &es8326_constraints;
+ return 0;
+}
+
+static int es8326_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
+{
+ struct snd_soc_component *component = codec_dai->component;
+ u8 iface = 0;
+
+ switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
+ case SND_SOC_DAIFMT_CBP_CFP:
+ snd_soc_component_update_bits(component, ES8326_RESET_00,
+ ES8326_MASTER_MODE_EN, ES8326_MASTER_MODE_EN);
+ break;
+ case SND_SOC_DAIFMT_CBC_CFC:
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ /* interface format */
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ break;
+ case SND_SOC_DAIFMT_RIGHT_J:
+ dev_err(component->dev, "Codec driver does not support right justified\n");
+ return -EINVAL;
+ case SND_SOC_DAIFMT_LEFT_J:
+ iface |= ES8326_DAIFMT_LEFT_J;
+ break;
+ case SND_SOC_DAIFMT_DSP_A:
+ iface |= ES8326_DAIFMT_DSP_A;
+ break;
+ case SND_SOC_DAIFMT_DSP_B:
+ iface |= ES8326_DAIFMT_DSP_B;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_component_update_bits(component, ES8326_FMT_13, ES8326_DAIFMT_MASK, iface);
+
+ return 0;
+}
+
+static int es8326_pcm_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_component *codec = dai->component;
+ struct es8326_priv *es8326 = snd_soc_component_get_drvdata(codec);
+ u8 srate = 0;
+ int coeff;
+
+ coeff = get_coeff(es8326->sysclk, params_rate(params));
+ /* bit size */
+ switch (params_format(params)) {
+ case SNDRV_PCM_FORMAT_S16_LE:
+ srate |= ES8326_S16_LE;
+ break;
+ case SNDRV_PCM_FORMAT_S20_3LE:
+ srate |= ES8326_S20_3_LE;
+ break;
+ case SNDRV_PCM_FORMAT_S18_3LE:
+ srate |= ES8326_S18_LE;
+ break;
+ case SNDRV_PCM_FORMAT_S24_LE:
+ srate |= ES8326_S24_LE;
+ break;
+ case SNDRV_PCM_FORMAT_S32_LE:
+ srate |= ES8326_S32_LE;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ /* set iface & srate */
+ snd_soc_component_update_bits(codec, ES8326_FMT_13, ES8326_DATA_LEN_MASK, srate);
+
+ if (coeff >= 0) {
+ regmap_write(es8326->regmap, ES8326_CLK_DIV1_04,
+ coeff_div[coeff].reg4);
+ regmap_write(es8326->regmap, ES8326_CLK_DIV2_05,
+ coeff_div[coeff].reg5);
+ regmap_write(es8326->regmap, ES8326_CLK_DLL_06,
+ coeff_div[coeff].reg6);
+ regmap_write(es8326->regmap, ES8326_CLK_MUX_07,
+ coeff_div[coeff].reg7);
+ regmap_write(es8326->regmap, ES8326_CLK_ADC_SEL_08,
+ coeff_div[coeff].reg8);
+ regmap_write(es8326->regmap, ES8326_CLK_DAC_SEL_09,
+ coeff_div[coeff].reg9);
+ regmap_write(es8326->regmap, ES8326_CLK_ADC_OSR_0A,
+ coeff_div[coeff].rega);
+ regmap_write(es8326->regmap, ES8326_CLK_DAC_OSR_0B,
+ coeff_div[coeff].regb);
+ }
+
+ return 0;
+}
+
+static int es8326_set_bias_level(struct snd_soc_component *codec,
+ enum snd_soc_bias_level level)
+{
+ struct es8326_priv *es8326 = snd_soc_component_get_drvdata(codec);
+ int ret;
+
+ switch (level) {
+ case SND_SOC_BIAS_ON:
+ if (!IS_ERR(es8326->mclk)) {
+ ret = clk_prepare_enable(es8326->mclk);
+ if (ret)
+ return ret;
+ }
+ regmap_write(es8326->regmap, ES8326_RESET_00, ES8326_PWRUP_SEQ_EN);
+ regmap_write(es8326->regmap, ES8326_INTOUT_IO_59, 0x45);
+ regmap_write(es8326->regmap, ES8326_SDINOUT1_IO_5A,
+ (ES8326_IO_DMIC_CLK << ES8326_SDINOUT1_SHIFT));
+ regmap_write(es8326->regmap, ES8326_SDINOUT23_IO_5B, ES8326_IO_INPUT);
+ regmap_write(es8326->regmap, ES8326_CLK_RESAMPLE_03, 0x05);
+ regmap_write(es8326->regmap, ES8326_VMIDSEL_18, 0x02);
+ regmap_write(es8326->regmap, ES8326_PGA_PDN_17, 0x40);
+ regmap_write(es8326->regmap, ES8326_DAC2HPMIX_25, 0xAA);
+ regmap_write(es8326->regmap, ES8326_RESET_00, ES8326_CSM_ON);
+ break;
+ case SND_SOC_BIAS_PREPARE:
+ break;
+ case SND_SOC_BIAS_STANDBY:
+ break;
+ case SND_SOC_BIAS_OFF:
+ if (es8326->mclk)
+ clk_disable_unprepare(es8326->mclk);
+ regmap_write(es8326->regmap, ES8326_DAC2HPMIX_25, 0x11);
+ regmap_write(es8326->regmap, ES8326_RESET_00, ES8326_CSM_OFF);
+ regmap_write(es8326->regmap, ES8326_PGA_PDN_17, 0xF8);
+ regmap_write(es8326->regmap, ES8326_VMIDSEL_18, 0x00);
+ regmap_write(es8326->regmap, ES8326_INT_SOURCE_58, 0x08);
+ regmap_write(es8326->regmap, ES8326_SDINOUT1_IO_5A, ES8326_IO_INPUT);
+ regmap_write(es8326->regmap, ES8326_SDINOUT23_IO_5B, ES8326_IO_INPUT);
+ regmap_write(es8326->regmap, ES8326_RESET_00,
+ ES8326_CODEC_RESET | ES8326_PWRUP_SEQ_EN);
+ break;
+ }
+
+ return 0;
+}
+
+#define es8326_RATES SNDRV_PCM_RATE_8000_96000
+
+#define es8326_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
+ SNDRV_PCM_FMTBIT_S24_LE)
+
+static const struct snd_soc_dai_ops es8326_ops = {
+ .hw_params = es8326_pcm_hw_params,
+ .set_fmt = es8326_set_dai_fmt,
+ .set_sysclk = es8326_set_dai_sysclk,
+};
+
+static struct snd_soc_dai_driver es8326_dai = {
+ .name = "ES8326 HiFi",
+ .playback = {
+ .stream_name = "Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = es8326_RATES,
+ .formats = es8326_FORMATS,
+ },
+ .capture = {
+ .stream_name = "Capture",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = es8326_RATES,
+ .formats = es8326_FORMATS,
+ },
+ .ops = &es8326_ops,
+ .symmetric_rate = 1,
+};
+
+static void es8326_enable_micbias(struct snd_soc_component *component)
+{
+ struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
+
+ snd_soc_dapm_mutex_lock(dapm);
+ snd_soc_dapm_force_enable_pin_unlocked(dapm, "MICBIAS1");
+ snd_soc_dapm_force_enable_pin_unlocked(dapm, "MICBIAS2");
+ snd_soc_dapm_sync_unlocked(dapm);
+ snd_soc_dapm_mutex_unlock(dapm);
+}
+
+static void es8326_disable_micbias(struct snd_soc_component *component)
+{
+ struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
+
+ snd_soc_dapm_mutex_lock(dapm);
+ snd_soc_dapm_disable_pin_unlocked(dapm, "MICBIAS1");
+ snd_soc_dapm_disable_pin_unlocked(dapm, "MICBIAS2");
+ snd_soc_dapm_sync_unlocked(dapm);
+ snd_soc_dapm_mutex_unlock(dapm);
+}
+static void es8326_jack_detect_handler(struct work_struct *work)
+{
+ struct es8326_priv *es8326 =
+ container_of(work, struct es8326_priv, jack_detect_work.work);
+ struct snd_soc_component *comp = es8326->component;
+ unsigned int iface;
+
+ iface = snd_soc_component_read(comp, ES8326_HP_DETECT_FB);
+ dev_dbg(comp->dev, "gpio flag %#04x", iface);
+ if ((iface & ES8326_HPINSERT_FLAG) == 0) {
+ dev_dbg(comp->dev, "No headset detected");
+ snd_soc_jack_report(es8326->jack, 0, SND_JACK_HEADSET);
+ snd_soc_component_write(comp, ES8326_ADC1_SRC_2A, es8326->mic2_src);
+ es8326_disable_micbias(comp);
+ } else if ((iface & ES8326_HPINSERT_FLAG) == ES8326_HPINSERT_FLAG) {
+ if ((iface & ES8326_HPBUTTON_FLAG) == 0x00) {
+ dev_dbg(comp->dev, "Headset detected");
+ snd_soc_jack_report(es8326->jack, SND_JACK_HEADSET, SND_JACK_HEADSET);
+ snd_soc_component_write(comp, ES8326_ADC1_SRC_2A, es8326->mic1_src);
+ } else {
+ dev_dbg(comp->dev, "Headphone detected");
+ snd_soc_jack_report(es8326->jack, SND_JACK_HEADPHONE, SND_JACK_HEADSET);
+ }
+ }
+}
+
+static irqreturn_t es8326_irq(int irq, void *dev_id)
+{
+ struct es8326_priv *es8326 = dev_id;
+ struct snd_soc_component *comp = es8326->component;
+
+ if(!es8326->jack)
+ goto out;
+ es8326_enable_micbias(comp);
+
+ queue_delayed_work(system_wq, &es8326->jack_detect_work,
+ msecs_to_jiffies(300));
+
+out:
+ return IRQ_HANDLED;
+}
+
+static int es8326_resume(struct snd_soc_component *component)
+{
+ struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component);
+
+ regmap_write(es8326->regmap, ES8326_CLK_CTL_01, ES8326_CLK_ON);
+ /* Two channel ADC */
+ regmap_write(es8326->regmap, ES8326_PULLUP_CTL_F9, 0x02);
+ regmap_write(es8326->regmap, ES8326_CLK_INV_02, 0x00);
+ regmap_write(es8326->regmap, ES8326_CLK_DIV_CPC_0C, 0x1F);
+ regmap_write(es8326->regmap, ES8326_CLK_VMIDS1_10, 0xC8);
+ regmap_write(es8326->regmap, ES8326_CLK_VMIDS2_11, 0x88);
+ regmap_write(es8326->regmap, ES8326_CLK_CAL_TIME_12, 0x20);
+ regmap_write(es8326->regmap, ES8326_SYS_BIAS_1D, 0x08);
+ regmap_write(es8326->regmap, ES8326_DAC2HPMIX_25, 0x22);
+ regmap_write(es8326->regmap, ES8326_ADC1_SRC_2A, es8326->mic1_src);
+ regmap_write(es8326->regmap, ES8326_ADC2_SRC_2B, es8326->mic2_src);
+ regmap_write(es8326->regmap, ES8326_HPJACK_TIMER_56, 0x88);
+ regmap_write(es8326->regmap, ES8326_HP_DET_57,
+ ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol);
+ regmap_write(es8326->regmap, ES8326_INT_SOURCE_58, 0x08);
+ regmap_write(es8326->regmap, ES8326_INTOUT_IO_59, 0x45);
+ regmap_write(es8326->regmap, ES8326_RESET_00, ES8326_CSM_ON);
+ snd_soc_component_update_bits(component, ES8326_PGAGAIN_23,
+ ES8326_MIC_SEL_MASK, ES8326_MIC1_SEL);
+
+ es8326_irq(es8326->irq, es8326);
+ return 0;
+}
+
+static int es8326_suspend(struct snd_soc_component *component)
+{
+ struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component);
+
+ regmap_write(es8326->regmap, ES8326_CLK_CTL_01, ES8326_CLK_OFF);
+ return 0;
+}
+
+static int es8326_probe(struct snd_soc_component *component)
+{
+ struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component);
+ int ret;
+
+ es8326->component = component;
+ es8326->jd_inverted = device_property_read_bool(component->dev,
+ "everest,jack-detect-inverted");
+
+ ret = device_property_read_u8(component->dev, "everest,mic1-src", &es8326->mic1_src);
+ if (ret != 0) {
+ dev_dbg(component->dev, "mic1-src return %d", ret);
+ es8326->mic1_src = ES8326_ADC_AMIC;
+ }
+ dev_dbg(component->dev, "mic1-src %x", es8326->mic1_src);
+
+ ret = device_property_read_u8(component->dev, "everest,mic2-src", &es8326->mic2_src);
+ if (ret != 0) {
+ dev_dbg(component->dev, "mic2-src return %d", ret);
+ es8326->mic2_src = ES8326_ADC_DMIC;
+ }
+ dev_dbg(component->dev, "mic2-src %x", es8326->mic2_src);
+
+ ret = device_property_read_u8(component->dev, "everest,jack-pol", &es8326->jack_pol);
+ if (ret != 0) {
+ dev_dbg(component->dev, "jack-pol return %d", ret);
+ es8326->jack_pol = ES8326_HP_DET_BUTTON_POL | ES8326_HP_TYPE_OMTP;
+ }
+ dev_dbg(component->dev, "jack-pol %x", es8326->jack_pol);
+
+ es8326_resume(component);
+ return 0;
+}
+
+static void es8326_enable_jack_detect(struct snd_soc_component *component,
+ struct snd_soc_jack *jack)
+{
+ struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component);
+
+ mutex_lock(&es8326->lock);
+ if (es8326->jd_inverted)
+ snd_soc_component_update_bits(component, ES8326_HP_DET_57,
+ ES8326_HP_DET_JACK_POL, ~es8326->jack_pol);
+ es8326->jack = jack;
+
+ mutex_unlock(&es8326->lock);
+ es8326_irq(es8326->irq, es8326);
+}
+
+static void es8326_disable_jack_detect(struct snd_soc_component *component)
+{
+ struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component);
+
+ dev_dbg(component->dev, "Enter into %s\n", __func__);
+ if (!es8326->jack)
+ return; /* Already disabled (or never enabled) */
+
+ cancel_delayed_work_sync(&es8326->jack_detect_work);
+
+ mutex_lock(&es8326->lock);
+ if (es8326->jack->status & SND_JACK_MICROPHONE)
+ snd_soc_jack_report(es8326->jack, 0, SND_JACK_BTN_0);
+
+ es8326->jack = NULL;
+ mutex_unlock(&es8326->lock);
+}
+
+static int es8326_set_jack(struct snd_soc_component *component,
+ struct snd_soc_jack *jack, void *data)
+{
+ if (jack)
+ es8326_enable_jack_detect(component, jack);
+ else
+ es8326_disable_jack_detect(component);
+
+ return 0;
+}
+
+static void es8326_remove(struct snd_soc_component *component)
+{
+ es8326_disable_jack_detect(component);
+ es8326_set_bias_level(component, SND_SOC_BIAS_OFF);
+}
+
+static const struct snd_soc_component_driver soc_component_dev_es8326 = {
+ .probe = es8326_probe,
+ .remove = es8326_remove,
+ .resume = es8326_resume,
+ .suspend = es8326_suspend,
+ .set_bias_level = es8326_set_bias_level,
+ .set_jack = es8326_set_jack,
+
+ .dapm_widgets = es8326_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(es8326_dapm_widgets),
+ .dapm_routes = es8326_dapm_routes,
+ .num_dapm_routes = ARRAY_SIZE(es8326_dapm_routes),
+ .controls = es8326_snd_controls,
+ .num_controls = ARRAY_SIZE(es8326_snd_controls),
+};
+
+static int es8326_i2c_probe(struct i2c_client *i2c,
+ const struct i2c_device_id *id)
+{
+ struct es8326_priv *es8326;
+ int ret;
+
+ es8326 = devm_kzalloc(&i2c->dev, sizeof(struct es8326_priv), GFP_KERNEL);
+ if (!es8326)
+ return -ENOMEM;
+
+ i2c_set_clientdata(i2c, es8326);
+ es8326->i2c = i2c;
+ mutex_init(&es8326->lock);
+ es8326->regmap = devm_regmap_init_i2c(i2c, &es8326_regmap_config);
+ if (IS_ERR(es8326->regmap)) {
+ ret = PTR_ERR(es8326->regmap);
+ dev_err(&i2c->dev, "Failed to init regmap: %d\n", ret);
+ return ret;
+ }
+
+ es8326->irq = i2c->irq;
+ /* ES8316 is level-based while ES8326 is edge-based */
+ ret = devm_request_threaded_irq(&i2c->dev, es8326->irq, NULL, es8326_irq,
+ IRQF_TRIGGER_RISING | IRQF_ONESHOT,
+ "es8326", es8326);
+ if (ret)
+ dev_err(&i2c->dev, "Failed to reguest IRQ: %d\n", ret);
+ INIT_DELAYED_WORK(&es8326->jack_detect_work,
+ es8326_jack_detect_handler);
+
+ es8326->mclk = devm_clk_get_optional(&i2c->dev, "mclk");
+ if (IS_ERR(es8326->mclk)) {
+ dev_err(&i2c->dev, "unable to get mclk\n");
+ return PTR_ERR(es8326->mclk);
+ }
+ if (!es8326->mclk)
+ dev_warn(&i2c->dev, "assuming static mclk\n");
+
+ ret = clk_prepare_enable(es8326->mclk);
+ if (ret) {
+ dev_err(&i2c->dev, "unable to enable mclk\n");
+ return ret;
+ }
+ return devm_snd_soc_register_component(&i2c->dev,
+ &soc_component_dev_es8326,
+ &es8326_dai, 1);
+}
+
+static const struct i2c_device_id es8326_i2c_id[] = {
+ {"es8326", 0 },
+ {}
+};
+MODULE_DEVICE_TABLE(i2c, es8326_i2c_id);
+
+#ifdef CONFIG_OF
+static const struct of_device_id es8326_of_match[] = {
+ { .compatible = "everest,es8326", },
+ {}
+};
+MODULE_DEVICE_TABLE(of, es8326_of_match);
+#endif
+
+#ifdef CONFIG_ACPI
+static const struct acpi_device_id es8326_acpi_match[] = {
+ {"ESSX8326", 0},
+ {},
+};
+MODULE_DEVICE_TABLE(acpi, es8326_acpi_match);
+#endif
+
+static struct i2c_driver es8326_i2c_driver = {
+ .driver = {
+ .name = "es8326",
+ .acpi_match_table = ACPI_PTR(es8326_acpi_match),
+ .of_match_table = of_match_ptr(es8326_of_match),
+ },
+ .probe = es8326_i2c_probe,
+};
+module_i2c_driver(es8326_i2c_driver);
+
+MODULE_DESCRIPTION("ASoC es8326 driver");
+MODULE_AUTHOR("David Yang <yangxiaohua(a)everest-semi.com>");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/es8326.h b/sound/soc/codecs/es8326.h
new file mode 100755
index 000000000000..9affd5c14407
--- /dev/null
+++ b/sound/soc/codecs/es8326.h
@@ -0,0 +1,187 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * es8326.c -- es8326 ALSA SoC audio driver
+ * Copyright Everest Semiconductor Co.,Ltd
+ *
+ * Authors: David Yang <yangxiaohua(a)everest-semi.com>
+ */
+
+#ifndef _ES8326_H
+#define _ES8326_H
+
+#define CONFIG_HHTECH_MINIPMP 1
+
+/* ES8326 register space */
+
+#define ES8326_RESET_00 0x00
+#define ES8326_CLK_CTL_01 0x01
+#define ES8326_CLK_INV_02 0x02
+#define ES8326_CLK_RESAMPLE_03 0x03
+#define ES8326_CLK_DIV1_04 0x04
+#define ES8326_CLK_DIV2_05 0x05
+#define ES8326_CLK_DLL_06 0x06
+#define ES8326_CLK_MUX_07 0x07
+#define ES8326_CLK_ADC_SEL_08 0x08
+#define ES8326_CLK_DAC_SEL_09 0x09
+#define ES8326_CLK_ADC_OSR_0A 0x0a
+#define ES8326_CLK_DAC_OSR_0B 0x0b
+#define ES8326_CLK_DIV_CPC_0C 0x0c
+#define ES8326_CLK_DIV_BCLK_0D 0x0d
+#define ES8326_CLK_TRI_0E 0x0e
+#define ES8326_CLK_DIV_LRCK_0F 0x0f
+#define ES8326_CLK_VMIDS1_10 0x10
+#define ES8326_CLK_VMIDS2_11 0x11
+#define ES8326_CLK_CAL_TIME_12 0x12
+#define ES8326_FMT_13 0x13
+
+#define ES8326_DAC_MUTE_14 0x14
+#define ES8326_ADC_MUTE_15 0x15
+#define ES8326_ANA_PDN_16 0x16
+#define ES8326_PGA_PDN_17 0x17
+#define ES8326_VMIDSEL_18 0x18
+#define ES8326_ANA_LOWPOWER_19 0x19
+#define ES8326_ANA_DMS_1A 0x1a
+#define ES8326_ANA_MICBIAS_1B 0x1b
+#define ES8326_ANA_VSEL_1C 0x1c
+#define ES8326_SYS_BIAS_1D 0x1d
+#define ES8326_BIAS_SW1_1E 0x1e
+#define ES8326_BIAS_SW2_1F 0x1f
+#define ES8326_BIAS_SW3_20 0x20
+#define ES8326_BIAS_SW4_21 0x21
+#define ES8326_VMIDLOW_22 0x22
+
+#define ES8326_PGAGAIN_23 0x23
+#define ES8326_HP_DRIVER_24 0x24
+#define ES8326_DAC2HPMIX_25 0x25
+#define ES8326_HP_VOL_26 0x26
+#define ES8326_HP_CAL_27 0x27
+#define ES8326_HP_DRIVER_REF_28 0x28
+#define ES8326_ADC_SCALE_29 0x29
+#define ES8326_ADC1_SRC_2A 0x2a
+#define ES8326_ADC2_SRC_2B 0x2b
+#define ES8326_ADC1_VOL_2C 0x2c
+#define ES8326_ADC2_VOL_2D 0x2d
+#define ES8326_ADC_RAMPRATE_2E 0x2e
+#define ES8326_2F 0x2f
+#define ES8326_30 0x30
+#define ES8326_31 0x31
+#define ES8326_ALC_RECOVERY_32 0x32
+#define ES8326_ALC_LEVEL_33 0x33
+#define ES8326_ADC_HPFS1_34 0x34
+#define ES8326_ADC_HPFS2_35 0x35
+#define ES8326_ADC_EQ_36 0x36
+#define ES8326_HP_CAL_4A 0x4A
+#define ES8326_HPL_OFFSET_INI_4B 0x4B
+#define ES8326_HPR_OFFSET_INI_4C 0x4C
+#define ES8326_DAC_DSM_4D 0x4D
+#define ES8326_DAC_RAMPRATE_4E 0x4E
+#define ES8326_DAC_VPPSCALE_4F 0x4F
+#define ES8326_DAC_VOL_50 0x50
+#define ES8326_DRC_RECOVERY_53 0x53
+#define ES8326_DRC_WINSIZE_54 0x54
+#define ES8326_HPJACK_TIMER_56 0x56
+#define ES8326_HP_DET_57 0x57
+#define ES8326_INT_SOURCE_58 0x58
+#define ES8326_INTOUT_IO_59 0x59
+#define ES8326_SDINOUT1_IO_5A 0x5A
+#define ES8326_SDINOUT23_IO_5B 0x5B
+#define ES8326_JACK_PULSE_5C 0x5C
+
+#define ES8326_PULLUP_CTL_F9 0xF9
+#define ES8326_HP_DETECT_FB 0xFB
+#define ES8326_CHIP_ID1_FD 0xFD
+#define ES8326_CHIP_ID2_FE 0xFE
+#define ES8326_CHIP_VERSION_FF 0xFF
+
+/* ES8326_RESET_00 */
+#define ES8326_CSM_ON (1 << 7)
+#define ES8326_MASTER_MODE_EN (1 << 6)
+#define ES8326_PWRUP_SEQ_EN (1 << 5)
+#define ES8326_CODEC_RESET (0x0f << 0)
+#define ES8326_CSM_OFF (0 << 7)
+
+/* ES8326_CLK_CTL_01 */
+#define ES8326_CLK_ON (0x7f << 0)
+#define ES8326_CLK_OFF (0 << 0)
+
+/* ES8326_CLK_INV_02 */
+#define ES8326_BCLK_AS_MCLK (1 << 3)
+
+/* ES8326_FMT_13 */
+#define ES8326_S24_LE (0 << 2)
+#define ES8326_S20_3_LE (1 << 2)
+#define ES8326_S18_LE (2 << 2)
+#define ES8326_S16_LE (3 << 2)
+#define ES8326_S32_LE (4 << 2)
+#define ES8326_DATA_LEN_MASK (7 << 2)
+
+#define ES8326_DAIFMT_MASK ((1 << 5) | (3 << 0))
+#define ES8326_DAIFMT_I2S 0
+#define ES8326_DAIFMT_LEFT_J (1 << 0)
+#define ES8326_DAIFMT_DSP_A (3 << 0)
+#define ES8326_DAIFMT_DSP_B ((1 << 5) | (3 << 0))
+
+/* ES8326_PGAGAIN_23 */
+#define ES8326_MIC_SEL_MASK (3 << 4)
+#define ES8326_MIC1_SEL (1 << 4)
+#define ES8326_MIC2_SEL (1 << 5)
+
+/* ES8326_HP_CAL_27 */
+#define ES8326_HPOR_SHIFT 4
+
+/* ES8326_ADC1_SRC_2A */
+#define ES8326_ADC1_SHIFT 0
+#define ES8326_ADC2_SHIFT 4
+#define ES8326_ADC_SRC_ANA 0
+#define ES8326_ADC_SRC_ANA_INV_SW0 1
+#define ES8326_ADC_SRC_ANA_INV_SW1 2
+#define ES8326_ADC_SRC_DMIC_MCLK 3
+#define ES8326_ADC_SRC_DMIC_SDIN2 4
+#define ES8326_ADC_SRC_DMIC_SDIN2_INV 5
+#define ES8326_ADC_SRC_DMIC_SDIN3 6
+#define ES8326_ADC_SRC_DMIC_SDIN3_INV 7
+
+#define ES8326_ADC_AMIC ((ES8326_ADC_SRC_ANA_INV_SW1 << ES8326_ADC2_SHIFT) \
+ | (ES8326_ADC_SRC_ANA_INV_SW1 << ES8326_ADC1_SHIFT))
+#define ES8326_ADC_DMIC ((ES8326_ADC_SRC_DMIC_SDIN2 << ES8326_ADC2_SHIFT) \
+ | (ES8326_ADC_SRC_DMIC_SDIN2 << ES8326_ADC1_SHIFT))
+/* ES8326_ADC2_SRC_2B */
+#define ES8326_ADC3_SHIFT 0
+#define ES8326_ADC4_SHIFT 3
+
+/* ES8326_HP_DET_57 */
+#define ES8326_HP_DET_SRC_PIN27 (1 << 5)
+#define ES8326_HP_DET_SRC_PIN9 (1 << 4)
+#define ES8326_HP_DET_JACK_POL (1 << 3)
+#define ES8326_HP_DET_BUTTON_POL (1 << 2)
+#define ES8326_HP_TYPE_OMTP (3 << 0)
+#define ES8326_HP_TYPE_CTIA (2 << 0)
+#define ES8326_HP_TYPE_AUTO (1 << 0)
+#define ES8326_HP_TYPE_AUTO_INV (0 << 0)
+
+/* ES8326_SDINOUT1_IO_5A */
+#define ES8326_IO_INPUT (0 << 0)
+#define ES8326_IO_SDIN_SLOT0 (1 << 0)
+#define ES8326_IO_SDIN_SLOT1 (2 << 0)
+#define ES8326_IO_SDIN_SLOT2 (3 << 0)
+#define ES8326_IO_SDIN_SLOT7 (8 << 0)
+#define ES8326_IO_DMIC_CLK (9 << 0)
+#define ES8326_IO_DMIC_CLK_INV (0x0a << 0)
+#define ES8326_IO_SDOUT2 (0x0b << 0)
+#define ES8326_IO_LOW (0x0e << 0)
+#define ES8326_IO_HIGH (0x0f << 0)
+#define ES8326_ADC2DAC (1 << 3)
+#define ES8326_SDINOUT1_SHIFT 4
+
+/* ES8326_SDINOUT23_IO_5B */
+#define ES8326_SDINOUT2_SHIFT 4
+#define ES8326_SDINOUT3_SHIFT 0
+
+/* ES8326_HP_DETECT_FB */
+#define ES8326_HPINSERT_FLAG (1 << 1)
+#define ES8326_HPBUTTON_FLAG (1 << 0)
+
+/* ES8326_CHIP_VERSION_FF 0xFF */
+#define ES8326_VERSION_B (1 << 0)
+
+#endif
--
2.36.1
1
0

No Audio: MAG Z690 TOMAHAWK WIFI DDR4 & how to build info request
by GitHub issues - edited 15 Jul '22
by GitHub issues - edited 15 Jul '22
15 Jul '22
alsa-project/alsa-ucm-conf issue #189 was edited from Dave--G:
My MAG Z690 TOMAHAWK WIFI DDR4 motherboard has no alsa audio support.
It looks like the realtek-alc4080 audio chip is supported, just not on this motherboard due to a missing entry in `USB-Audio.conf`.
The USB audio device id is `0db0:b202`.
Currently it just displays as `USB Audio` and doesn't function at all.
This device works under windows so the hardware is functioning but no linux distro I've tried.
I attempted to address this myself, by downloading `https://github.com/alsa-project/alsa-ucm-conf/releases/tag/v1.2.7.2`, copying it to `/usr/share/alsa` (preserving simlinks of course) and editing `ucm2/USB-Audio/USB-Audio.conf`, changing line 46 to read ` Regex "USB((0b05:(1996|1a2[07]))|(0db0:(1feb|419c|a073|b202)))"`.
However, when I execute `sudo alsa force-reload` it generates parsing errors and `pactl list sinks` does not show any changes to the device properties as expected.
Can someone please explain what I need to do to get this device working? Am I on the right track? Do I need to rebuild alsa from github? It's not clear and I'm not seeing build instructions. I've been struggling with this for quite some time so any help would be appreciated.
I will PR the fix back to this repo once its working.
Issue URL : https://github.com/alsa-project/alsa-ucm-conf/issues/189
Repository URL: https://github.com/alsa-project/alsa-ucm-conf
1
0

No Audio: MAG Z690 TOMAHAWK WIFI DDR4 & how to build info request
by GitHub issues - opened 15 Jul '22
by GitHub issues - opened 15 Jul '22
15 Jul '22
alsa-project/alsa-ucm-conf issue #189 was opened from Dave--G:
My MAG Z690 TOMAHAWK WIFI DDR4 motherboard has no alsa audio support.
It looks like the realtek-alc4080 audio chip is supported, just not on this motherboard due to a missing entry in `USB-Audio.conf`.
The USB audio device id is `0db0:b202`.
Currently it just displays as `USB Audio` and doesn't function at all.
This device works under windows so the hardware is functioning but no linux distro I've tried.
I attempted to address this myself, by downloading `https://github.com/alsa-project/alsa-ucm-conf/releases/tag/v1.2.7.2`, copying it to `/usr/share/alsa` (preserving simlinks of course) and editing `ucm2/USB-Audio/USB-Audio.conf`, changing line 46 to read ` Regex "USB((0b05:(1996|1a2[07]))|(0db0:(1feb|419c|a073|b202)))"`.
However, when I execute `sudo alsa force-reload` it generates parsing errors and `pactl list sinks` does not show any changes to the device properties as expected.
Can someone please explain what I need to do to get this device working? Am I on the right track? Do I need to rebuild alsa from github? It's not clear and I'm not seeing build instructions. I've been struggling with this for quite some time so any help would be appreciated.
I will PR the fix back to this repo once its working.
Issue URL : https://github.com/alsa-project/alsa-ucm-conf/issues/189
Repository URL: https://github.com/alsa-project/alsa-ucm-conf
1
0

[PATCH] ASoC: rsnd: care default case on rsnd_ssiu_busif_err_irq_ctrl()
by Kuninori Morimoto 14 Jul '22
by Kuninori Morimoto 14 Jul '22
14 Jul '22
From: Kuninori Morimoto <kuninori.morimoto.gx(a)renesas.com>
Before, ssiu.c didn't care SSI5-8, thus,
commit b1384d4c95088d0 ("ASoC: rsnd: care default case on
rsnd_ssiu_busif_err_status_clear()") cares it for status clear.
But we should care it for error irq handling, too.
This patch cares it.
Reported-by: Nguyen Bao Nguyen <nguyen.nguyen.yj(a)renesas.com>
Reported-by: Nishiyama Kunihiko <kunihiko.nishiyama.dn(a)renesas.com>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx(a)renesas.com>
---
sound/soc/sh/rcar/ssiu.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/sound/soc/sh/rcar/ssiu.c b/sound/soc/sh/rcar/ssiu.c
index 4b8a63e336c7..d7f4646ee029 100644
--- a/sound/soc/sh/rcar/ssiu.c
+++ b/sound/soc/sh/rcar/ssiu.c
@@ -67,6 +67,8 @@ static void rsnd_ssiu_busif_err_irq_ctrl(struct rsnd_mod *mod, int enable)
shift = 1;
offset = 1;
break;
+ default:
+ return;
}
for (i = 0; i < 4; i++) {
--
2.25.1
2
1