Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'sound-6.17-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull more sound updates from Takashi Iwai:
"For catching up the remaining stuff for 6.17: only small updates and
the rest are mostly small fixes.

- Fixes in HD-audio codec driver Kconfig, so that configurations can
be more easily/safely carried between different versions

- Fixes in ASoC SDCA, FSL xcvr, AW88399

- ASoC IMX WM8524 support

- HD-audio and USB-audio quirks and fixes

- A minor selftest fix"

* tag 'sound-6.17-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (21 commits)
ALSA: usb: scarlett2: Fix missing NULL check
mips: Update HD-audio configs again
LoongArch: Update HD-audio codec configs
arm: Update HD-audio configs again
selftests: ALSA: fix memory leak in utimer test
ALSA: usb-audio: Add DSD support for Comtrue USB Audio device
ALSA: hda/hdmi: Enable drivers as default
ALSA: hda/cirrus: Enable drivers as default
ALSA: hda/realtek: Enable drivers as default
ALSA: hda/realtek - Fix mute LED for HP Victus 16-d1xxx (MB 8A26)
ALSA: hda/realtek - Fix mute LED for HP Victus 16-s0xxx
ALSA: hda: Fix the wrong register was used for DVC of TAS2770
ALSA: scarlett2: Add retry on -EPROTO from scarlett2_usb_tx()
ALSA: hda/realtek - Fix mute LED for HP Victus 16-r1xxx
ASoC: codecs: Add acpi_match_table for aw88399 driver
ASoC: dt-bindings: atmel,at91-ssc: add microchip,sam9x7-ssc
ASoC: imx-card: Add WM8524 support
ASoC: fsl_xcvr: get channel status data with firmware exists
ASoC: fsl_xcvr: get channel status data when PHY is not exists
ASoC: SDCA: Add support for -cn- value properties
...

+282 -68
+8 -3
Documentation/devicetree/bindings/sound/atmel,at91-ssc.yaml
··· 16 16 17 17 properties: 18 18 compatible: 19 - enum: 20 - - atmel,at91rm9200-ssc 21 - - atmel,at91sam9g45-ssc 19 + oneOf: 20 + - enum: 21 + - atmel,at91rm9200-ssc 22 + - atmel,at91sam9g45-ssc 23 + - items: 24 + - enum: 25 + - microchip,sam9x7-ssc 26 + - const: atmel,at91sam9g45-ssc 22 27 23 28 reg: 24 29 maxItems: 1
+3 -1
arch/arm/configs/multi_v7_defconfig
··· 794 794 CONFIG_SND_HDA_TEGRA=m 795 795 CONFIG_SND_HDA_INPUT_BEEP=y 796 796 CONFIG_SND_HDA_PATCH_LOADER=y 797 - CONFIG_SND_HDA_CODEC_REALTEK=y 797 + CONFIG_SND_HDA_CODEC_REALTEK=m 798 798 CONFIG_SND_HDA_CODEC_REALTEK_LIB=m 799 799 CONFIG_SND_HDA_CODEC_ALC269=m 800 800 CONFIG_SND_HDA_CODEC_HDMI=m 801 + CONFIG_SND_HDA_CODEC_HDMI_GENERIC=m 802 + CONFIG_SND_HDA_CODEC_HDMI_NVIDIA=m 801 803 CONFIG_SND_HDA_CODEC_HDMI_TEGRA=m 802 804 CONFIG_SND_USB_AUDIO=m 803 805 CONFIG_SND_SOC=m
+5
arch/arm/configs/tegra_defconfig
··· 225 225 CONFIG_SND_HDA_INPUT_BEEP=y 226 226 CONFIG_SND_HDA_PATCH_LOADER=y 227 227 CONFIG_SND_HDA_CODEC_REALTEK=y 228 + CONFIG_SND_HDA_CODEC_REALTEK_LIB=y 229 + CONFIG_SND_HDA_CODEC_ALC269=y 228 230 CONFIG_SND_HDA_CODEC_HDMI=y 231 + CONFIG_SND_HDA_CODEC_HDMI_GENERIC=y 232 + CONFIG_SND_HDA_CODEC_HDMI_NVIDIA=y 233 + CONFIG_SND_HDA_CODEC_HDMI_TEGRA=y 229 234 # CONFIG_SND_ARM is not set 230 235 # CONFIG_SND_SPI is not set 231 236 # CONFIG_SND_USB is not set
+15
arch/loongarch/configs/loongson3_defconfig
··· 783 783 CONFIG_SND_HDA_INPUT_BEEP=y 784 784 CONFIG_SND_HDA_PATCH_LOADER=y 785 785 CONFIG_SND_HDA_CODEC_REALTEK=y 786 + CONFIG_SND_HDA_CODEC_REALTEK_LIB=y 787 + CONFIG_SND_HDA_CODEC_ALC260=y 788 + CONFIG_SND_HDA_CODEC_ALC262=y 789 + CONFIG_SND_HDA_CODEC_ALC268=y 790 + CONFIG_SND_HDA_CODEC_ALC269=y 791 + CONFIG_SND_HDA_CODEC_ALC662=y 792 + CONFIG_SND_HDA_CODEC_ALC680=y 793 + CONFIG_SND_HDA_CODEC_ALC861=y 794 + CONFIG_SND_HDA_CODEC_ALC861VD=y 795 + CONFIG_SND_HDA_CODEC_ALC880=y 796 + CONFIG_SND_HDA_CODEC_ALC882=y 786 797 CONFIG_SND_HDA_CODEC_SIGMATEL=y 787 798 CONFIG_SND_HDA_CODEC_HDMI=y 799 + CONFIG_SND_HDA_CODEC_HDMI_GENERIC=y 800 + CONFIG_SND_HDA_CODEC_HDMI_INTEL=y 801 + CONFIG_SND_HDA_CODEC_HDMI_ATI=y 802 + CONFIG_SND_HDA_CODEC_HDMI_NVIDIA=y 788 803 CONFIG_SND_HDA_CODEC_CONEXANT=y 789 804 CONFIG_SND_USB_AUDIO=m 790 805 CONFIG_SND_SOC=m
+11
arch/mips/configs/loongson2k_defconfig
··· 256 256 CONFIG_SND_HDA_HWDEP=y 257 257 CONFIG_SND_HDA_PATCH_LOADER=y 258 258 CONFIG_SND_HDA_CODEC_REALTEK=y 259 + CONFIG_SND_HDA_CODEC_REALTEK_LIB=y 260 + CONFIG_SND_HDA_CODEC_ALC260=y 261 + CONFIG_SND_HDA_CODEC_ALC262=y 262 + CONFIG_SND_HDA_CODEC_ALC268=y 263 + CONFIG_SND_HDA_CODEC_ALC269=y 264 + CONFIG_SND_HDA_CODEC_ALC662=y 265 + CONFIG_SND_HDA_CODEC_ALC680=y 266 + CONFIG_SND_HDA_CODEC_ALC861=y 267 + CONFIG_SND_HDA_CODEC_ALC861VD=y 268 + CONFIG_SND_HDA_CODEC_ALC880=y 269 + CONFIG_SND_HDA_CODEC_ALC882=y 259 270 CONFIG_SND_HDA_CODEC_ANALOG=y 260 271 CONFIG_SND_HDA_CODEC_SIGMATEL=y 261 272 CONFIG_SND_HDA_CODEC_VIA=y
+14 -1
arch/mips/configs/loongson3_defconfig
··· 291 291 # CONFIG_SND_ISA is not set 292 292 CONFIG_SND_HDA_INTEL=m 293 293 CONFIG_SND_HDA_PATCH_LOADER=y 294 - CONFIG_SND_HDA_CODEC_REALTEK=y 294 + CONFIG_SND_HDA_CODEC_REALTEK=m 295 295 CONFIG_SND_HDA_CODEC_REALTEK_LIB=m 296 + CONFIG_SND_HDA_CODEC_ALC260=m 297 + CONFIG_SND_HDA_CODEC_ALC262=m 298 + CONFIG_SND_HDA_CODEC_ALC268=m 296 299 CONFIG_SND_HDA_CODEC_ALC269=m 300 + CONFIG_SND_HDA_CODEC_ALC662=m 301 + CONFIG_SND_HDA_CODEC_ALC680=m 302 + CONFIG_SND_HDA_CODEC_ALC861=m 303 + CONFIG_SND_HDA_CODEC_ALC861VD=m 304 + CONFIG_SND_HDA_CODEC_ALC880=m 305 + CONFIG_SND_HDA_CODEC_ALC882=m 297 306 CONFIG_SND_HDA_CODEC_SIGMATEL=m 298 307 CONFIG_SND_HDA_CODEC_HDMI=m 308 + CONFIG_SND_HDA_CODEC_HDMI_GENERIC=m 309 + CONFIG_SND_HDA_CODEC_HDMI_INTEL=m 310 + CONFIG_SND_HDA_CODEC_HDMI_ATI=m 311 + CONFIG_SND_HDA_CODEC_HDMI_NVIDIA=m 299 312 CONFIG_SND_HDA_CODEC_CONEXANT=m 300 313 # CONFIG_SND_USB is not set 301 314 CONFIG_HIDRAW=y
+7 -7
include/sound/sdca_function.h
··· 742 742 * struct sdca_control - information for one SDCA Control 743 743 * @label: Name for the Control, from SDCA Specification v1.0, section 7.1.7. 744 744 * @sel: Identifier used for addressing. 745 - * @value: Holds the Control value for constants and defaults. 746 745 * @nbits: Number of bits used in the Control. 747 - * @interrupt_position: SCDA interrupt line that will alert to changes on this 748 - * Control. 746 + * @values: Holds the Control value for constants and defaults. 749 747 * @cn_list: A bitmask showing the valid Control Numbers within this Control, 750 748 * Control Numbers typically represent channels. 751 - * @range: Buffer describing valid range of values for the Control. 749 + * @interrupt_position: SCDA interrupt line that will alert to changes on this 750 + * Control. 752 751 * @type: Format of the data in the Control. 752 + * @range: Buffer describing valid range of values for the Control. 753 753 * @mode: Access mode of the Control. 754 754 * @layers: Bitmask of access layers of the Control. 755 755 * @deferrable: Indicates if the access to the Control can be deferred. ··· 760 760 const char *label; 761 761 int sel; 762 762 763 - int value; 764 763 int nbits; 765 - int interrupt_position; 764 + int *values; 766 765 u64 cn_list; 766 + int interrupt_position; 767 767 768 - struct sdca_control_range range; 769 768 enum sdca_control_datatype type; 769 + struct sdca_control_range range; 770 770 enum sdca_access_mode mode; 771 771 u8 layers; 772 772
+2 -2
include/sound/tas2770-tlv.h
··· 14 14 #ifndef __TAS2770_TLV_H__ 15 15 #define __TAS2770_TLV_H__ 16 16 17 - #define TAS2770_DVC_LEVEL TASDEVICE_REG(0x0, 0x0, 0x17) 17 + #define TAS2770_DVC_LEVEL TASDEVICE_REG(0x0, 0x0, 0x05) 18 18 #define TAS2770_AMP_LEVEL TASDEVICE_REG(0x0, 0x0, 0x03) 19 19 20 - static const __maybe_unused DECLARE_TLV_DB_SCALE(tas2770_dvc_tlv, 1650, 50, 0); 20 + static const __maybe_unused DECLARE_TLV_DB_SCALE(tas2770_dvc_tlv, -10000, 50, 0); 21 21 static const __maybe_unused DECLARE_TLV_DB_SCALE(tas2770_amp_tlv, 1100, 50, 0); 22 22 23 23 #endif
+9
sound/hda/codecs/cirrus/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 3 + menuconfig SND_HDA_CODEC_CIRRUS 4 + tristate "Cirrus Logic HD-audio codec support" 5 + 6 + if SND_HDA_CODEC_CIRRUS 7 + 3 8 config SND_HDA_CODEC_CS420X 4 9 tristate "Build Cirrus Logic CS420x codec support" 5 10 select SND_HDA_GENERIC 11 + default y 6 12 help 7 13 Say Y or M here to include Cirrus Logic CS420x codec support in 8 14 snd-hda-intel driver ··· 19 13 config SND_HDA_CODEC_CS421X 20 14 tristate "Build Cirrus Logic CS421x codec support" 21 15 select SND_HDA_GENERIC 16 + default y 22 17 help 23 18 Say Y or M here to include Cirrus Logic CS421x codec support in 24 19 snd-hda-intel driver ··· 36 29 37 30 comment "Set to Y if you want auto-loading the codec driver" 38 31 depends on SND_HDA=y && SND_HDA_CODEC_CS8409=m 32 + 33 + endif
+19 -5
sound/hda/codecs/hdmi/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 3 - config SND_HDA_CODEC_HDMI 3 + menuconfig SND_HDA_CODEC_HDMI 4 + tristate "HD-audio HDMI codec support" 5 + 6 + if SND_HDA_CODEC_HDMI 7 + 8 + config SND_HDA_CODEC_HDMI_GENERIC 4 9 tristate "Generic HDMI/DisplayPort HD-audio codec support" 5 10 select SND_DYNAMIC_MINORS 6 11 select SND_PCM_ELD 12 + default y 7 13 help 8 14 Say Y or M here to include Generic HDMI and DisplayPort HD-audio 9 15 codec support. ··· 19 13 20 14 config SND_HDA_CODEC_HDMI_SIMPLE 21 15 tristate "Simple HDMI/DisplayPort HD-audio codec support" 16 + default y 22 17 help 23 18 Say Y or M here to include Simple HDMI and DisplayPort HD-audio 24 19 codec support for VIA and other codecs. 25 20 26 21 config SND_HDA_CODEC_HDMI_INTEL 27 22 tristate "Intel HDMI/DisplayPort HD-audio codec support" 28 - select SND_HDA_CODEC_HDMI 23 + select SND_HDA_CODEC_HDMI_GENERIC 24 + default y 29 25 help 30 26 Say Y or M here to include Intel graphics HDMI and DisplayPort 31 27 HD-audio codec support. ··· 49 41 50 42 config SND_HDA_CODEC_HDMI_ATI 51 43 tristate "AMD/ATI HDMI/DisplayPort HD-audio codec support" 52 - select SND_HDA_CODEC_HDMI 44 + select SND_HDA_CODEC_HDMI_GENERIC 45 + default y 53 46 help 54 47 Say Y or M here to include AMD/ATI graphics HDMI and DisplayPort 55 48 HD-audio codec support. 56 49 57 50 config SND_HDA_CODEC_HDMI_NVIDIA 58 51 tristate "Nvidia HDMI/DisplayPort HD-audio codec support" 59 - select SND_HDA_CODEC_HDMI 52 + select SND_HDA_CODEC_HDMI_GENERIC 53 + default y 60 54 help 61 55 Say Y or M here to include HDMI and DisplayPort HD-audio codec 62 56 support for the recent Nvidia graphics cards. ··· 66 56 config SND_HDA_CODEC_HDMI_NVIDIA_MCP 67 57 tristate "Legacy Nvidia HDMI/DisplayPort HD-audio codec support" 68 58 select SND_HDA_CODEC_HDMI_SIMPLE 59 + default y 69 60 help 70 61 Say Y or M here to include HDMI and DisplayPort HD-audio codec 71 62 support for the legacy Nvidia graphics like MCP73, MCP67, MCP77/78. 72 63 73 64 config SND_HDA_CODEC_HDMI_TEGRA 74 65 tristate "Nvidia Tegra HDMI/DisplayPort HD-audio codec support" 75 - select SND_HDA_CODEC_HDMI 66 + select SND_HDA_CODEC_HDMI_GENERIC 67 + default y 76 68 help 77 69 Say Y or M here to include HDMI and DisplayPort HD-audio codec 78 70 support for Nvidia Tegra. 71 + 72 + endif
+1 -1
sound/hda/codecs/hdmi/Makefile
··· 9 9 snd-hda-codec-nvhdmi-mcp-y := nvhdmi-mcp.o 10 10 snd-hda-codec-tegrahdmi-y := tegrahdmi.o 11 11 12 - obj-$(CONFIG_SND_HDA_CODEC_HDMI) += snd-hda-codec-hdmi.o 12 + obj-$(CONFIG_SND_HDA_CODEC_HDMI_GENERIC) += snd-hda-codec-hdmi.o 13 13 obj-$(CONFIG_SND_HDA_CODEC_HDMI_SIMPLE) += snd-hda-codec-simplehdmi.o 14 14 obj-$(CONFIG_SND_HDA_CODEC_HDMI_INTEL) += snd-hda-codec-intelhdmi.o 15 15 obj-$(CONFIG_SND_HDA_CODEC_HDMI_ATI) += snd-hda-codec-atihdmi.o
+11 -1
sound/hda/codecs/realtek/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 3 3 menuconfig SND_HDA_CODEC_REALTEK 4 - bool "Realtek HD-audio codec support" 4 + tristate "Realtek HD-audio codec support" 5 5 6 6 if SND_HDA_CODEC_REALTEK 7 7 ··· 15 15 tristate "Build Realtek ALC260 HD-audio codec support" 16 16 depends on INPUT 17 17 select SND_HDA_CODEC_REALTEK_LIB 18 + default y 18 19 help 19 20 Say Y or M here to include Realtek ALC260 HD-audio codec support 20 21 ··· 23 22 tristate "Build Realtek ALC262 HD-audio codec support" 24 23 depends on INPUT 25 24 select SND_HDA_CODEC_REALTEK_LIB 25 + default y 26 26 help 27 27 Say Y or M here to include Realtek ALC262 HD-audio codec support 28 28 ··· 31 29 tristate "Build Realtek ALC268 HD-audio codec support" 32 30 depends on INPUT 33 31 select SND_HDA_CODEC_REALTEK_LIB 32 + default y 34 33 help 35 34 Say Y or M here to include Realtek ALC268 and compatible HD-audio 36 35 codec support ··· 40 37 tristate "Build Realtek ALC269 HD-audio codecs support" 41 38 depends on INPUT 42 39 select SND_HDA_CODEC_REALTEK_LIB 40 + default y 43 41 help 44 42 Say Y or M here to include Realtek ALC269 and compatible HD-audio 45 43 codec support ··· 49 45 tristate "Build Realtek ALC662 HD-audio codecs support" 50 46 depends on INPUT 51 47 select SND_HDA_CODEC_REALTEK_LIB 48 + default y 52 49 help 53 50 Say Y or M here to include Realtek ALC662 and compatible HD-audio 54 51 codec support ··· 58 53 tristate "Build Realtek ALC680 HD-audio codecs support" 59 54 depends on INPUT 60 55 select SND_HDA_CODEC_REALTEK_LIB 56 + default y 61 57 help 62 58 Say Y or M here to include Realtek ALC680 HD-audio codec support 63 59 ··· 66 60 tristate "Build Realtek ALC861 HD-audio codecs support" 67 61 depends on INPUT 68 62 select SND_HDA_CODEC_REALTEK_LIB 63 + default y 69 64 help 70 65 Say Y or M here to include Realtek ALC861 HD-audio codec support 71 66 ··· 74 67 tristate "Build Realtek ALC861-VD HD-audio codecs support" 75 68 depends on INPUT 76 69 select SND_HDA_CODEC_REALTEK_LIB 70 + default y 77 71 help 78 72 Say Y or M here to include Realtek ALC861-VD HD-audio codec support 79 73 ··· 82 74 tristate "Build Realtek ALC880 HD-audio codecs support" 83 75 depends on INPUT 84 76 select SND_HDA_CODEC_REALTEK_LIB 77 + default y 85 78 help 86 79 Say Y or M here to include Realtek ALC880 HD-audio codec support 87 80 ··· 90 81 tristate "Build Realtek ALC882 HD-audio codecs support" 91 82 depends on INPUT 92 83 select SND_HDA_CODEC_REALTEK_LIB 84 + default y 93 85 help 94 86 Say Y or M here to include Realtek ALC882 and compatible HD-audio 95 87 codec support
+3
sound/hda/codecs/realtek/alc269.c
··· 6470 6470 SND_PCI_QUIRK(0x103c, 0x8a0f, "HP Pavilion 14-ec1xxx", ALC287_FIXUP_HP_GPIO_LED), 6471 6471 SND_PCI_QUIRK(0x103c, 0x8a20, "HP Laptop 15s-fq5xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2), 6472 6472 SND_PCI_QUIRK(0x103c, 0x8a25, "HP Victus 16-d1xxx (MB 8A25)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT), 6473 + SND_PCI_QUIRK(0x103c, 0x8a26, "HP Victus 16-d1xxx (MB 8A26)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT), 6473 6474 SND_PCI_QUIRK(0x103c, 0x8a28, "HP Envy 13", ALC287_FIXUP_CS35L41_I2C_2), 6474 6475 SND_PCI_QUIRK(0x103c, 0x8a29, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2), 6475 6476 SND_PCI_QUIRK(0x103c, 0x8a2a, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2), ··· 6529 6528 SND_PCI_QUIRK(0x103c, 0x8bbe, "HP Victus 16-r0xxx (MB 8BBE)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT), 6530 6529 SND_PCI_QUIRK(0x103c, 0x8bc8, "HP Victus 15-fa1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT), 6531 6530 SND_PCI_QUIRK(0x103c, 0x8bcd, "HP Omen 16-xd0xxx", ALC245_FIXUP_HP_MUTE_LED_V1_COEFBIT), 6531 + SND_PCI_QUIRK(0x103c, 0x8bd4, "HP Victus 16-s0xxx (MB 8BD4)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT), 6532 6532 SND_PCI_QUIRK(0x103c, 0x8bdd, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2), 6533 6533 SND_PCI_QUIRK(0x103c, 0x8bde, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2), 6534 6534 SND_PCI_QUIRK(0x103c, 0x8bdf, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2), ··· 6582 6580 SND_PCI_QUIRK(0x103c, 0x8c91, "HP EliteBook 660", ALC236_FIXUP_HP_GPIO_LED), 6583 6581 SND_PCI_QUIRK(0x103c, 0x8c96, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF), 6584 6582 SND_PCI_QUIRK(0x103c, 0x8c97, "HP ZBook", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF), 6583 + SND_PCI_QUIRK(0x103c, 0x8c99, "HP Victus 16-r1xxx (MB 8C99)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT), 6585 6584 SND_PCI_QUIRK(0x103c, 0x8c9c, "HP Victus 16-s1xxx (MB 8C9C)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT), 6586 6585 SND_PCI_QUIRK(0x103c, 0x8ca1, "HP ZBook Power", ALC236_FIXUP_HP_GPIO_LED), 6587 6586 SND_PCI_QUIRK(0x103c, 0x8ca2, "HP ZBook Power", ALC236_FIXUP_HP_GPIO_LED),
+1 -1
sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
··· 260 260 0, 0, 20, 0, tas2781_amp_getvol, 261 261 tas2781_amp_putvol, tas2770_amp_tlv), 262 262 ACARD_SINGLE_RANGE_EXT_TLV("Speaker Digital Volume", TAS2770_DVC_LEVEL, 263 - 0, 0, 31, 0, tas2781_amp_getvol, 263 + 0, 0, 200, 1, tas2781_amp_getvol, 264 264 tas2781_amp_putvol, tas2770_dvc_tlv), 265 265 }; 266 266
+9
sound/soc/codecs/aw88399.c
··· 2330 2330 }; 2331 2331 MODULE_DEVICE_TABLE(i2c, aw88399_i2c_id); 2332 2332 2333 + #ifdef CONFIG_ACPI 2334 + static const struct acpi_device_id aw88399_acpi_match[] = { 2335 + { "AWDZ8399", 0 }, 2336 + { }, 2337 + }; 2338 + MODULE_DEVICE_TABLE(acpi, aw88399_acpi_match); 2339 + #endif 2340 + 2333 2341 static struct i2c_driver aw88399_i2c_driver = { 2334 2342 .driver = { 2335 2343 .name = AW88399_I2C_NAME, 2344 + .acpi_match_table = ACPI_PTR(aw88399_acpi_match), 2336 2345 }, 2337 2346 .probe = aw88399_i2c_probe, 2338 2347 .id_table = aw88399_i2c_id,
+23 -2
sound/soc/fsl/fsl_xcvr.c
··· 1395 1395 if (isr & FSL_XCVR_IRQ_NEW_CS) { 1396 1396 dev_dbg(dev, "Received new CS block\n"); 1397 1397 isr_clr |= FSL_XCVR_IRQ_NEW_CS; 1398 - if (!xcvr->soc_data->spdif_only) { 1398 + if (xcvr->soc_data->fw_name) { 1399 1399 /* Data RAM is 4KiB, last two pages: 8 and 9. Select page 8. */ 1400 1400 regmap_update_bits(xcvr->regmap, FSL_XCVR_EXT_CTRL, 1401 1401 FSL_XCVR_EXT_CTRL_PAGE_MASK, ··· 1423 1423 /* clear CS control register */ 1424 1424 memset_io(reg_ctrl, 0, sizeof(val)); 1425 1425 } 1426 + } else { 1427 + regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_0, 1428 + (u32 *)&xcvr->rx_iec958.status[0]); 1429 + regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_1, 1430 + (u32 *)&xcvr->rx_iec958.status[4]); 1431 + regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_2, 1432 + (u32 *)&xcvr->rx_iec958.status[8]); 1433 + regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_3, 1434 + (u32 *)&xcvr->rx_iec958.status[12]); 1435 + regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_4, 1436 + (u32 *)&xcvr->rx_iec958.status[16]); 1437 + regmap_read(xcvr->regmap, FSL_XCVR_RX_CS_DATA_5, 1438 + (u32 *)&xcvr->rx_iec958.status[20]); 1439 + for (i = 0; i < 6; i++) { 1440 + val = *(u32 *)(xcvr->rx_iec958.status + i * 4); 1441 + *(u32 *)(xcvr->rx_iec958.status + i * 4) = 1442 + bitrev32(val); 1443 + } 1444 + regmap_set_bits(xcvr->regmap, FSL_XCVR_RX_DPTH_CTRL, 1445 + FSL_XCVR_RX_DPTH_CTRL_CSA); 1426 1446 } 1427 1447 } 1428 1448 if (isr & FSL_XCVR_IRQ_NEW_UD) { ··· 1517 1497 }; 1518 1498 1519 1499 static const struct fsl_xcvr_soc_data fsl_xcvr_imx95_data = { 1500 + .fw_name = "imx/xcvr/xcvr-imx95.bin", 1520 1501 .spdif_only = true, 1521 1502 .use_phy = true, 1522 1503 .use_edma = true, ··· 1807 1786 } 1808 1787 } 1809 1788 1810 - if (xcvr->mode == FSL_XCVR_MODE_EARC) { 1789 + if (xcvr->soc_data->fw_name) { 1811 1790 ret = fsl_xcvr_load_firmware(xcvr); 1812 1791 if (ret) { 1813 1792 dev_err(dev, "failed to load firmware.\n");
+40
sound/soc/fsl/imx-card.c
··· 26 26 CODEC_AK4497, 27 27 CODEC_AK5552, 28 28 CODEC_CS42888, 29 + CODEC_WM8524, 29 30 }; 30 31 31 32 /* ··· 197 196 { .min = 256, .max = 256, .mul = 256 }, 198 197 }; 199 198 199 + static struct imx_akcodec_fs_mul wm8524_fs_mul[] = { 200 + { .rmin = 8000, .rmax = 32000, .wmin = 256, .wmax = 1152, }, 201 + { .rmin = 44100, .rmax = 48000, .wmin = 256, .wmax = 768, }, 202 + { .rmin = 88200, .rmax = 96000, .wmin = 128, .wmax = 384, }, 203 + { .rmin = 176400, .rmax = 192000, .wmin = 128, .wmax = 192, }, 204 + }; 205 + 200 206 static const u32 akcodec_rates[] = { 201 207 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 202 208 96000, 176400, 192000, 352800, 384000, 705600, 768000, ··· 235 227 236 228 static const u32 cs42888_tdm_channels[] = { 237 229 1, 2, 3, 4, 5, 6, 7, 8, 230 + }; 231 + 232 + static const u32 wm8524_channels[] = { 233 + 2, 238 234 }; 239 235 240 236 static bool format_is_dsd(struct snd_pcm_hw_params *params) ··· 273 261 case CODEC_AK5558: 274 262 case CODEC_AK5552: 275 263 case CODEC_CS42888: 264 + case CODEC_WM8524: 276 265 return true; 277 266 default: 278 267 break; ··· 490 477 return ret; 491 478 } 492 479 480 + static void imx_aif_shutdown(struct snd_pcm_substream *substream) 481 + { 482 + struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); 483 + struct snd_soc_dai *cpu_dai; 484 + struct snd_soc_dai *codec_dai; 485 + int i; 486 + 487 + for_each_rtd_cpu_dais(rtd, i, cpu_dai) 488 + snd_soc_dai_set_sysclk(cpu_dai, 0, 0, SND_SOC_CLOCK_OUT); 489 + 490 + for_each_rtd_codec_dais(rtd, i, codec_dai) 491 + snd_soc_dai_set_sysclk(codec_dai, 0, 0, SND_SOC_CLOCK_IN); 492 + } 493 + 493 494 static const struct snd_soc_ops imx_aif_ops = { 494 495 .hw_params = imx_aif_hw_params, 495 496 .startup = imx_aif_startup, 497 + .shutdown = imx_aif_shutdown, 496 498 }; 497 499 498 500 static const struct snd_soc_ops imx_aif_ops_be = { ··· 660 632 plat_data->type = CODEC_AK5552; 661 633 else if (!strcmp(link->codecs->dai_name, "cs42888")) 662 634 plat_data->type = CODEC_CS42888; 635 + else if (!strcmp(link->codecs->dai_name, "wm8524-hifi")) 636 + plat_data->type = CODEC_WM8524; 663 637 664 638 } else { 665 639 link->codecs = &snd_soc_dummy_dlc; ··· 835 805 data->dapm_routes[1].sink = "CPU-Capture"; 836 806 data->dapm_routes[1].source = "Capture"; 837 807 break; 808 + case CODEC_WM8524: 809 + data->dapm_routes[0].sink = "Playback"; 810 + data->dapm_routes[0].source = "CPU-Playback"; 811 + break; 838 812 default: 839 813 break; 840 814 } ··· 887 853 plat_data->num_channels = ARRAY_SIZE(cs42888_channels); 888 854 plat_data->support_tdm_channels = cs42888_tdm_channels; 889 855 plat_data->num_tdm_channels = ARRAY_SIZE(cs42888_tdm_channels); 856 + break; 857 + case CODEC_WM8524: 858 + plat_data->fs_mul = wm8524_fs_mul; 859 + plat_data->num_fs_mul = ARRAY_SIZE(wm8524_fs_mul); 860 + plat_data->support_channels = wm8524_channels; 861 + plat_data->num_channels = ARRAY_SIZE(wm8524_channels); 890 862 break; 891 863 default: 892 864 break;
+62 -37
sound/soc/sdca/sdca_functions.c
··· 814 814 return 0; 815 815 } 816 816 817 + static int find_sdca_control_value(struct device *dev, struct sdca_entity *entity, 818 + struct fwnode_handle *control_node, 819 + struct sdca_control *control, 820 + const char * const label) 821 + { 822 + char property[SDCA_PROPERTY_LENGTH]; 823 + bool global = true; 824 + int ret, cn, i; 825 + u32 tmp; 826 + 827 + snprintf(property, sizeof(property), "mipi-sdca-control-%s", label); 828 + 829 + ret = fwnode_property_read_u32(control_node, property, &tmp); 830 + if (ret == -EINVAL) 831 + global = false; 832 + else if (ret) 833 + return ret; 834 + 835 + i = 0; 836 + for_each_set_bit(cn, (unsigned long *)&control->cn_list, 837 + BITS_PER_TYPE(control->cn_list)) { 838 + if (!global) { 839 + snprintf(property, sizeof(property), 840 + "mipi-sdca-control-cn-%d-%s", cn, label); 841 + 842 + ret = fwnode_property_read_u32(control_node, property, &tmp); 843 + if (ret) 844 + return ret; 845 + } 846 + 847 + control->values[i] = tmp; 848 + i++; 849 + } 850 + 851 + return 0; 852 + } 853 + 817 854 /* 818 855 * TODO: Add support for -cn- properties, allowing different channels to have 819 856 * different defaults etc. ··· 880 843 881 844 control->layers = tmp; 882 845 846 + ret = fwnode_property_read_u64(control_node, "mipi-sdca-control-cn-list", 847 + &control->cn_list); 848 + if (ret == -EINVAL) { 849 + /* Spec allows not specifying cn-list if only the first number is used */ 850 + control->cn_list = 0x1; 851 + } else if (ret || !control->cn_list) { 852 + dev_err(dev, "%s: control %#x: cn list missing: %d\n", 853 + entity->label, control->sel, ret); 854 + return ret; 855 + } 856 + 857 + control->values = devm_kzalloc(dev, hweight64(control->cn_list), GFP_KERNEL); 858 + if (!control->values) 859 + return -ENOMEM; 860 + 883 861 switch (control->mode) { 884 862 case SDCA_ACCESS_MODE_DC: 885 - ret = fwnode_property_read_u32(control_node, 886 - "mipi-sdca-control-dc-value", 887 - &tmp); 863 + ret = find_sdca_control_value(dev, entity, control_node, control, 864 + "dc-value"); 888 865 if (ret) { 889 866 dev_err(dev, "%s: control %#x: dc value missing: %d\n", 890 867 entity->label, control->sel, ret); 891 868 return ret; 892 869 } 893 870 894 - control->value = tmp; 895 871 control->has_fixed = true; 896 872 break; 897 873 case SDCA_ACCESS_MODE_RW: 898 874 case SDCA_ACCESS_MODE_DUAL: 899 - ret = fwnode_property_read_u32(control_node, 900 - "mipi-sdca-control-default-value", 901 - &tmp); 902 - if (!ret) { 903 - control->value = tmp; 875 + ret = find_sdca_control_value(dev, entity, control_node, control, 876 + "default-value"); 877 + if (!ret) 904 878 control->has_default = true; 905 - } 906 879 907 - ret = fwnode_property_read_u32(control_node, 908 - "mipi-sdca-control-fixed-value", 909 - &tmp); 910 - if (!ret) { 911 - if (control->has_default && control->value != tmp) { 912 - dev_err(dev, 913 - "%s: control %#x: default and fixed value don't match\n", 914 - entity->label, control->sel); 915 - return -EINVAL; 916 - } 917 - 918 - control->value = tmp; 880 + ret = find_sdca_control_value(dev, entity, control_node, control, 881 + "fixed-value"); 882 + if (!ret) 919 883 control->has_fixed = true; 920 - } 921 884 fallthrough; 922 885 case SDCA_ACCESS_MODE_RO: 923 886 control->deferrable = fwnode_property_read_bool(control_node, ··· 930 893 ret = find_sdca_control_range(dev, control_node, &control->range); 931 894 if (ret) { 932 895 dev_err(dev, "%s: control %#x: range missing: %d\n", 933 - entity->label, control->sel, ret); 934 - return ret; 935 - } 936 - 937 - ret = fwnode_property_read_u64(control_node, "mipi-sdca-control-cn-list", 938 - &control->cn_list); 939 - if (ret == -EINVAL) { 940 - /* Spec allows not specifying cn-list if only the first number is used */ 941 - control->cn_list = 0x1; 942 - } else if (ret || !control->cn_list) { 943 - dev_err(dev, "%s: control %#x: cn list missing: %d\n", 944 896 entity->label, control->sel, ret); 945 897 return ret; 946 898 } ··· 949 923 control->type = find_sdca_control_datatype(entity, control); 950 924 control->nbits = find_sdca_control_bits(entity, control); 951 925 952 - dev_info(dev, "%s: %s: control %#x mode %#x layers %#x cn %#llx int %d value %#x %s\n", 926 + dev_info(dev, "%s: %s: control %#x mode %#x layers %#x cn %#llx int %d %s\n", 953 927 entity->label, control->label, control->sel, 954 928 control->mode, control->layers, control->cn_list, 955 - control->interrupt_position, control->value, 956 - control->deferrable ? "deferrable" : ""); 929 + control->interrupt_position, control->deferrable ? "deferrable" : ""); 957 930 958 931 return 0; 959 932 }
+23 -6
sound/soc/sdca/sdca_regmap.c
··· 72 72 if (!control) 73 73 return false; 74 74 75 + if (!(BIT(SDW_SDCA_CTL_CNUM(reg)) & control->cn_list)) 76 + return false; 77 + 75 78 switch (control->mode) { 76 79 case SDCA_ACCESS_MODE_RW: 77 80 case SDCA_ACCESS_MODE_RO: 78 - case SDCA_ACCESS_MODE_DUAL: 79 81 case SDCA_ACCESS_MODE_RW1S: 80 82 case SDCA_ACCESS_MODE_RW1C: 83 + if (SDW_SDCA_NEXT_CTL(0) & reg) 84 + return false; 85 + fallthrough; 86 + case SDCA_ACCESS_MODE_DUAL: 81 87 /* No access to registers marked solely for device use */ 82 88 return control->layers & ~SDCA_ACCESS_LAYER_DEVICE; 83 89 default: ··· 110 104 if (!control) 111 105 return false; 112 106 107 + if (!(BIT(SDW_SDCA_CTL_CNUM(reg)) & control->cn_list)) 108 + return false; 109 + 113 110 switch (control->mode) { 114 111 case SDCA_ACCESS_MODE_RW: 115 - case SDCA_ACCESS_MODE_DUAL: 116 112 case SDCA_ACCESS_MODE_RW1S: 117 113 case SDCA_ACCESS_MODE_RW1C: 114 + if (SDW_SDCA_NEXT_CTL(0) & reg) 115 + return false; 116 + fallthrough; 117 + case SDCA_ACCESS_MODE_DUAL: 118 118 /* No access to registers marked solely for device use */ 119 119 return control->layers & ~SDCA_ACCESS_LAYER_DEVICE; 120 120 default: ··· 253 241 struct sdca_function_data *function, 254 242 struct reg_default *consts) 255 243 { 256 - int i, j, k; 244 + int i, j, k, l; 257 245 258 246 for (i = 0, k = 0; i < function->num_entities; i++) { 259 247 struct sdca_entity *entity = &function->entities[i]; ··· 265 253 if (control->mode != SDCA_ACCESS_MODE_DC) 266 254 continue; 267 255 256 + l = 0; 268 257 for_each_set_bit(cn, (unsigned long *)&control->cn_list, 269 258 BITS_PER_TYPE(control->cn_list)) { 270 259 consts[k].reg = SDW_SDCA_CTL(function->desc->adr, 271 260 entity->id, 272 261 control->sel, cn); 273 - consts[k].def = control->value; 262 + consts[k].def = control->values[l]; 274 263 k++; 264 + l++; 275 265 } 276 266 } 277 267 } ··· 297 283 int sdca_regmap_write_defaults(struct device *dev, struct regmap *regmap, 298 284 struct sdca_function_data *function) 299 285 { 300 - int i, j; 286 + int i, j, k; 301 287 int ret; 302 288 303 289 for (i = 0; i < function->num_entities; i++) { ··· 313 299 if (!control->has_default && !control->has_fixed) 314 300 continue; 315 301 302 + k = 0; 316 303 for_each_set_bit(cn, (unsigned long *)&control->cn_list, 317 304 BITS_PER_TYPE(control->cn_list)) { 318 305 unsigned int reg; ··· 321 306 reg = SDW_SDCA_CTL(function->desc->adr, entity->id, 322 307 control->sel, cn); 323 308 324 - ret = regmap_write(regmap, reg, control->value); 309 + ret = regmap_write(regmap, reg, control->values[k]); 325 310 if (ret) 326 311 return ret; 312 + 313 + k++; 327 314 } 328 315 } 329 316 }
+13 -1
sound/usb/mixer_scarlett2.c
··· 2351 2351 struct scarlett2_usb_packet *req, *resp = NULL; 2352 2352 size_t req_buf_size = struct_size(req, data, req_size); 2353 2353 size_t resp_buf_size = struct_size(resp, data, resp_size); 2354 + int retries = 0; 2355 + const int max_retries = 5; 2354 2356 int err; 2355 2357 2356 2358 req = kmalloc(req_buf_size, GFP_KERNEL); ··· 2376 2374 if (req_size) 2377 2375 memcpy(req->data, req_data, req_size); 2378 2376 2377 + retry: 2379 2378 err = scarlett2_usb_tx(dev, private->bInterfaceNumber, 2380 2379 req, req_buf_size); 2381 2380 2382 2381 if (err != req_buf_size) { 2382 + if (err == -EPROTO && ++retries <= max_retries) { 2383 + msleep(5 * (1 << (retries - 1))); 2384 + goto retry; 2385 + } 2383 2386 usb_audio_err( 2384 2387 mixer->chip, 2385 2388 "%s USB request result cmd %x was %d\n", ··· 3978 3971 goto unlock; 3979 3972 3980 3973 /* Loop through each input */ 3981 - for (i = 0; i < inputs; i++) 3974 + for (i = 0; i < inputs; i++) { 3982 3975 values[i] = kasprintf(GFP_KERNEL, "Input %d", i + 1); 3976 + if (!values[i]) { 3977 + err = -ENOMEM; 3978 + goto unlock; 3979 + } 3980 + } 3983 3981 3984 3982 err = snd_ctl_enum_info(uinfo, 1, i, 3985 3983 (const char * const *)values);
+2
sound/usb/quirks.c
··· 2408 2408 QUIRK_FLAG_DSD_RAW), 2409 2409 VENDOR_FLG(0x2d87, /* Cayin device */ 2410 2410 QUIRK_FLAG_DSD_RAW), 2411 + VENDOR_FLG(0x2fc6, /* Comture-inc devices */ 2412 + QUIRK_FLAG_DSD_RAW), 2411 2413 VENDOR_FLG(0x3336, /* HEM devices */ 2412 2414 QUIRK_FLAG_DSD_RAW), 2413 2415 VENDOR_FLG(0x3353, /* Khadas devices */
+1
tools/testing/selftests/alsa/utimer-test.c
··· 135 135 pthread_join(ticking_thread, NULL); 136 136 ASSERT_EQ(total_ticks, TICKS_COUNT); 137 137 pclose(rfp); 138 + free(buf); 138 139 } 139 140 140 141 TEST(wrong_timers_test) {