* [PATCH v2 00/10] Basic sound support for Arndale board / wm8994 updates [not found] <CGME20190920130238eucas1p147fca337fa84592ac7f83760449e26a1@eucas1p1.samsung.com> @ 2019-09-20 13:02 ` Sylwester Nawrocki [not found] ` <CGME20190920130313eucas1p27758c613ab3a10296b92974f14bd521d@eucas1p2.samsung.com> ` (8 more replies) 0 siblings, 9 replies; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:02 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski This patch series adds basic audio support for Exynos5250 SoC based Arndale board, the Bluetooth receiver source and HDMI output are not covered yet. There is also one fix for wm8994 driver related to WM1811 CODEC and wm8994 updates to handle MCLK clocks, similar to patches: ae1ea48c5c59 ("ASoC: arizona: Add gating for source clocks of the FLLs") 7a4413d0dc96 ("ASoC: arizona: Add gating for clock when used for direct MCLK") The main changes since v1: - Fixed bug in "ASoC: wm8994: Add support for MCLKn clock gating" patch (thanks to Charles), - dropped the MFD part patch and moved getting of clocks to the CODEC driver, - Added missing Kconfig entries to patch "ASoC: samsung: arndale: Add support for WM1811 CODEC", - Added a patch renaming the driver and a patch for exynos_defconfig. Sylwester Nawrocki (10): ASoC: wm8994: Do not register inapplicable controls for WM1811 ASoC: samsung: arndale: Add missing OF node dereferencing ASoC: wm8994: Add support for setting MCLK clock rate ASoC: wm8994: Add support for MCLKn clock gating ASoC: samsung: arndale: Simplify DAI link initialization ASoC: dt-bindings: Document "samsung,arndale-wm1811" compatible ASoC: samsung: arndale: Add support for WM1811 CODEC ASoC: samsung: Rename Arndale card driver ARM: dts: arndale: Add audio support (WM1811 CODEC boards) ARM: exynos_defconfig: Enable Arndale audio driver .../devicetree/bindings/sound/arndale.txt | 5 +- arch/arm/boot/dts/exynos5250-arndale.dts | 27 ++- arch/arm/configs/exynos_defconfig | 1 + sound/soc/codecs/wm8994.c | 199 +++++++++++++--- sound/soc/codecs/wm8994.h | 10 +- sound/soc/samsung/Kconfig | 12 +- sound/soc/samsung/Makefile | 4 +- sound/soc/samsung/arndale.c | 217 ++++++++++++++++++ sound/soc/samsung/arndale_rt5631.c | 138 ----------- 9 files changed, 438 insertions(+), 175 deletions(-) create mode 100644 sound/soc/samsung/arndale.c delete mode 100644 sound/soc/samsung/arndale_rt5631.c -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <CGME20190920130313eucas1p27758c613ab3a10296b92974f14bd521d@eucas1p2.samsung.com>]
* [PATCH v2 01/10] ASoC: wm8994: Do not register inapplicable controls for WM1811 [not found] ` <CGME20190920130313eucas1p27758c613ab3a10296b92974f14bd521d@eucas1p2.samsung.com> @ 2019-09-20 13:02 ` Sylwester Nawrocki [not found] ` <CGME20190920130711eucas1p29497b40981e4e0a24769ced4e06be208@eucas1p2.samsung.com> 2019-09-23 21:22 ` Applied "ASoC: wm8994: Do not register inapplicable controls for WM1811" to the asoc tree Mark Brown 0 siblings, 2 replies; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:02 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski In case of WM1811 device there are currently being registered controls referring to registers not existing on that device. It has been noticed when getting values of "AIF1ADC2 Volume", "AIF1DAC2 Volume" controls was failing during ALSA state restoring at boot time: "amixer: Mixer hw:0 load error: Device or resource busy" Reading some registers through I2C was failing with EBUSY error and indeed these registers were not available according to the datasheet. To fix this controls not available on WM1811 are moved to a separate array and registered only for WM8994 and WM8958. There are some further differences between WM8994 and WM1811, e.g. registers 603h, 604h, 605h, which are not covered in this patch. Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> --- Changes since v1: - only Acked-by tags addition --- sound/soc/codecs/wm8994.c | 43 +++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index c3d06e8bc54f..d5fb7f5dd551 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c @@ -533,13 +533,10 @@ static SOC_ENUM_SINGLE_DECL(dac_osr, static SOC_ENUM_SINGLE_DECL(adc_osr, WM8994_OVERSAMPLING, 1, osr_text); -static const struct snd_kcontrol_new wm8994_snd_controls[] = { +static const struct snd_kcontrol_new wm8994_common_snd_controls[] = { SOC_DOUBLE_R_TLV("AIF1ADC1 Volume", WM8994_AIF1_ADC1_LEFT_VOLUME, WM8994_AIF1_ADC1_RIGHT_VOLUME, 1, 119, 0, digital_tlv), -SOC_DOUBLE_R_TLV("AIF1ADC2 Volume", WM8994_AIF1_ADC2_LEFT_VOLUME, - WM8994_AIF1_ADC2_RIGHT_VOLUME, - 1, 119, 0, digital_tlv), SOC_DOUBLE_R_TLV("AIF2ADC Volume", WM8994_AIF2_ADC_LEFT_VOLUME, WM8994_AIF2_ADC_RIGHT_VOLUME, 1, 119, 0, digital_tlv), @@ -556,8 +553,6 @@ SOC_ENUM("AIF2DACR Source", aif2dacr_src), SOC_DOUBLE_R_TLV("AIF1DAC1 Volume", WM8994_AIF1_DAC1_LEFT_VOLUME, WM8994_AIF1_DAC1_RIGHT_VOLUME, 1, 96, 0, digital_tlv), -SOC_DOUBLE_R_TLV("AIF1DAC2 Volume", WM8994_AIF1_DAC2_LEFT_VOLUME, - WM8994_AIF1_DAC2_RIGHT_VOLUME, 1, 96, 0, digital_tlv), SOC_DOUBLE_R_TLV("AIF2DAC Volume", WM8994_AIF2_DAC_LEFT_VOLUME, WM8994_AIF2_DAC_RIGHT_VOLUME, 1, 96, 0, digital_tlv), @@ -565,17 +560,12 @@ SOC_SINGLE_TLV("AIF1 Boost Volume", WM8994_AIF1_CONTROL_2, 10, 3, 0, aif_tlv), SOC_SINGLE_TLV("AIF2 Boost Volume", WM8994_AIF2_CONTROL_2, 10, 3, 0, aif_tlv), SOC_SINGLE("AIF1DAC1 EQ Switch", WM8994_AIF1_DAC1_EQ_GAINS_1, 0, 1, 0), -SOC_SINGLE("AIF1DAC2 EQ Switch", WM8994_AIF1_DAC2_EQ_GAINS_1, 0, 1, 0), SOC_SINGLE("AIF2 EQ Switch", WM8994_AIF2_EQ_GAINS_1, 0, 1, 0), WM8994_DRC_SWITCH("AIF1DAC1 DRC Switch", WM8994_AIF1_DRC1_1, 2), WM8994_DRC_SWITCH("AIF1ADC1L DRC Switch", WM8994_AIF1_DRC1_1, 1), WM8994_DRC_SWITCH("AIF1ADC1R DRC Switch", WM8994_AIF1_DRC1_1, 0), -WM8994_DRC_SWITCH("AIF1DAC2 DRC Switch", WM8994_AIF1_DRC2_1, 2), -WM8994_DRC_SWITCH("AIF1ADC2L DRC Switch", WM8994_AIF1_DRC2_1, 1), -WM8994_DRC_SWITCH("AIF1ADC2R DRC Switch", WM8994_AIF1_DRC2_1, 0), - WM8994_DRC_SWITCH("AIF2DAC DRC Switch", WM8994_AIF2_DRC_1, 2), WM8994_DRC_SWITCH("AIF2ADCL DRC Switch", WM8994_AIF2_DRC_1, 1), WM8994_DRC_SWITCH("AIF2ADCR DRC Switch", WM8994_AIF2_DRC_1, 0), @@ -594,9 +584,6 @@ SOC_SINGLE("Sidetone HPF Switch", WM8994_SIDETONE, 6, 1, 0), SOC_ENUM("AIF1ADC1 HPF Mode", aif1adc1_hpf), SOC_DOUBLE("AIF1ADC1 HPF Switch", WM8994_AIF1_ADC1_FILTERS, 12, 11, 1, 0), -SOC_ENUM("AIF1ADC2 HPF Mode", aif1adc2_hpf), -SOC_DOUBLE("AIF1ADC2 HPF Switch", WM8994_AIF1_ADC2_FILTERS, 12, 11, 1, 0), - SOC_ENUM("AIF2ADC HPF Mode", aif2adc_hpf), SOC_DOUBLE("AIF2ADC HPF Switch", WM8994_AIF2_ADC_FILTERS, 12, 11, 1, 0), @@ -637,6 +624,24 @@ SOC_SINGLE("AIF2DAC 3D Stereo Switch", WM8994_AIF2_DAC_FILTERS_2, 8, 1, 0), }; +/* Controls not available on WM1811 */ +static const struct snd_kcontrol_new wm8994_snd_controls[] = { +SOC_DOUBLE_R_TLV("AIF1ADC2 Volume", WM8994_AIF1_ADC2_LEFT_VOLUME, + WM8994_AIF1_ADC2_RIGHT_VOLUME, + 1, 119, 0, digital_tlv), +SOC_DOUBLE_R_TLV("AIF1DAC2 Volume", WM8994_AIF1_DAC2_LEFT_VOLUME, + WM8994_AIF1_DAC2_RIGHT_VOLUME, 1, 96, 0, digital_tlv), + +SOC_SINGLE("AIF1DAC2 EQ Switch", WM8994_AIF1_DAC2_EQ_GAINS_1, 0, 1, 0), + +WM8994_DRC_SWITCH("AIF1DAC2 DRC Switch", WM8994_AIF1_DRC2_1, 2), +WM8994_DRC_SWITCH("AIF1ADC2L DRC Switch", WM8994_AIF1_DRC2_1, 1), +WM8994_DRC_SWITCH("AIF1ADC2R DRC Switch", WM8994_AIF1_DRC2_1, 0), + +SOC_ENUM("AIF1ADC2 HPF Mode", aif1adc2_hpf), +SOC_DOUBLE("AIF1ADC2 HPF Switch", WM8994_AIF1_ADC2_FILTERS, 12, 11, 1, 0), +}; + static const struct snd_kcontrol_new wm8994_eq_controls[] = { SOC_SINGLE_TLV("AIF1DAC1 EQ1 Volume", WM8994_AIF1_DAC1_EQ_GAINS_1, 11, 31, 0, eq_tlv), @@ -4258,13 +4263,15 @@ static int wm8994_component_probe(struct snd_soc_component *component) wm8994_handle_pdata(wm8994); wm_hubs_add_analogue_controls(component); - snd_soc_add_component_controls(component, wm8994_snd_controls, - ARRAY_SIZE(wm8994_snd_controls)); + snd_soc_add_component_controls(component, wm8994_common_snd_controls, + ARRAY_SIZE(wm8994_common_snd_controls)); snd_soc_dapm_new_controls(dapm, wm8994_dapm_widgets, ARRAY_SIZE(wm8994_dapm_widgets)); switch (control->type) { case WM8994: + snd_soc_add_component_controls(component, wm8994_snd_controls, + ARRAY_SIZE(wm8994_snd_controls)); snd_soc_dapm_new_controls(dapm, wm8994_specific_dapm_widgets, ARRAY_SIZE(wm8994_specific_dapm_widgets)); if (control->revision < 4) { @@ -4284,8 +4291,10 @@ static int wm8994_component_probe(struct snd_soc_component *component) } break; case WM8958: + snd_soc_add_component_controls(component, wm8994_snd_controls, + ARRAY_SIZE(wm8994_snd_controls)); snd_soc_add_component_controls(component, wm8958_snd_controls, - ARRAY_SIZE(wm8958_snd_controls)); + ARRAY_SIZE(wm8958_snd_controls)); snd_soc_dapm_new_controls(dapm, wm8958_dapm_widgets, ARRAY_SIZE(wm8958_dapm_widgets)); if (control->revision < 1) { -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
[parent not found: <CGME20190920130711eucas1p29497b40981e4e0a24769ced4e06be208@eucas1p2.samsung.com>]
* [PATCH v2 10/10] ARM: exynos_defconfig: Enable Arndale audio driver [not found] ` <CGME20190920130711eucas1p29497b40981e4e0a24769ced4e06be208@eucas1p2.samsung.com> @ 2019-09-20 13:07 ` Sylwester Nawrocki 2019-10-02 17:20 ` Krzysztof Kozlowski 0 siblings, 1 reply; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:07 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski Enable audio driver for Exynos5250 based Arndale boards to improve testing coverage. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> --- arch/arm/configs/exynos_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/configs/exynos_defconfig b/arch/arm/configs/exynos_defconfig index 2e6a863d25aa..8d4d6bb5c47b 100644 --- a/arch/arm/configs/exynos_defconfig +++ b/arch/arm/configs/exynos_defconfig @@ -227,6 +227,7 @@ CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994=y CONFIG_SND_SOC_SMDK_WM8994_PCM=y CONFIG_SND_SOC_SNOW=y CONFIG_SND_SOC_ODROID=y +CONFIG_SND_SOC_ARNDALE=y CONFIG_SND_SIMPLE_CARD=y CONFIG_USB=y CONFIG_USB_ANNOUNCE_NEW_DEVICES=y -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
* Re: [PATCH v2 10/10] ARM: exynos_defconfig: Enable Arndale audio driver 2019-09-20 13:07 ` [PATCH v2 10/10] ARM: exynos_defconfig: Enable Arndale audio driver Sylwester Nawrocki @ 2019-10-02 17:20 ` Krzysztof Kozlowski 0 siblings, 0 replies; 30+ messages in thread From: Krzysztof Kozlowski @ 2019-10-02 17:20 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, broonie, linux-arm-kernel, m.szyprowski On Fri, Sep 20, 2019 at 03:07:02PM +0200, Sylwester Nawrocki wrote: > Enable audio driver for Exynos5250 based Arndale boards to improve > testing coverage. > > Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > --- > arch/arm/configs/exynos_defconfig | 1 + Thanks, applied. Best regards, Krzysztof _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Applied "ASoC: wm8994: Do not register inapplicable controls for WM1811" to the asoc tree 2019-09-20 13:02 ` [PATCH v2 01/10] ASoC: wm8994: Do not register inapplicable controls for WM1811 Sylwester Nawrocki [not found] ` <CGME20190920130711eucas1p29497b40981e4e0a24769ced4e06be208@eucas1p2.samsung.com> @ 2019-09-23 21:22 ` Mark Brown 1 sibling, 0 replies; 30+ messages in thread From: Mark Brown @ 2019-09-23 21:22 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, Krzysztof Kozlowski, robh+dt, Mark Brown, linux-arm-kernel, m.szyprowski The patch ASoC: wm8994: Do not register inapplicable controls for WM1811 has been applied to the asoc tree at https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-5.4 All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark From ca2347190adb5e4eece73a2b16e96e651c46246b Mon Sep 17 00:00:00 2001 From: Sylwester Nawrocki <s.nawrocki@samsung.com> Date: Fri, 20 Sep 2019 15:02:10 +0200 Subject: [PATCH] ASoC: wm8994: Do not register inapplicable controls for WM1811 In case of WM1811 device there are currently being registered controls referring to registers not existing on that device. It has been noticed when getting values of "AIF1ADC2 Volume", "AIF1DAC2 Volume" controls was failing during ALSA state restoring at boot time: "amixer: Mixer hw:0 load error: Device or resource busy" Reading some registers through I2C was failing with EBUSY error and indeed these registers were not available according to the datasheet. To fix this controls not available on WM1811 are moved to a separate array and registered only for WM8994 and WM8958. There are some further differences between WM8994 and WM1811, e.g. registers 603h, 604h, 605h, which are not covered in this patch. Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Link: https://lore.kernel.org/r/20190920130218.32690-2-s.nawrocki@samsung.com Signed-off-by: Mark Brown <broonie@kernel.org> --- sound/soc/codecs/wm8994.c | 43 +++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index c3d06e8bc54f..d5fb7f5dd551 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c @@ -533,13 +533,10 @@ static SOC_ENUM_SINGLE_DECL(dac_osr, static SOC_ENUM_SINGLE_DECL(adc_osr, WM8994_OVERSAMPLING, 1, osr_text); -static const struct snd_kcontrol_new wm8994_snd_controls[] = { +static const struct snd_kcontrol_new wm8994_common_snd_controls[] = { SOC_DOUBLE_R_TLV("AIF1ADC1 Volume", WM8994_AIF1_ADC1_LEFT_VOLUME, WM8994_AIF1_ADC1_RIGHT_VOLUME, 1, 119, 0, digital_tlv), -SOC_DOUBLE_R_TLV("AIF1ADC2 Volume", WM8994_AIF1_ADC2_LEFT_VOLUME, - WM8994_AIF1_ADC2_RIGHT_VOLUME, - 1, 119, 0, digital_tlv), SOC_DOUBLE_R_TLV("AIF2ADC Volume", WM8994_AIF2_ADC_LEFT_VOLUME, WM8994_AIF2_ADC_RIGHT_VOLUME, 1, 119, 0, digital_tlv), @@ -556,8 +553,6 @@ SOC_ENUM("AIF2DACR Source", aif2dacr_src), SOC_DOUBLE_R_TLV("AIF1DAC1 Volume", WM8994_AIF1_DAC1_LEFT_VOLUME, WM8994_AIF1_DAC1_RIGHT_VOLUME, 1, 96, 0, digital_tlv), -SOC_DOUBLE_R_TLV("AIF1DAC2 Volume", WM8994_AIF1_DAC2_LEFT_VOLUME, - WM8994_AIF1_DAC2_RIGHT_VOLUME, 1, 96, 0, digital_tlv), SOC_DOUBLE_R_TLV("AIF2DAC Volume", WM8994_AIF2_DAC_LEFT_VOLUME, WM8994_AIF2_DAC_RIGHT_VOLUME, 1, 96, 0, digital_tlv), @@ -565,17 +560,12 @@ SOC_SINGLE_TLV("AIF1 Boost Volume", WM8994_AIF1_CONTROL_2, 10, 3, 0, aif_tlv), SOC_SINGLE_TLV("AIF2 Boost Volume", WM8994_AIF2_CONTROL_2, 10, 3, 0, aif_tlv), SOC_SINGLE("AIF1DAC1 EQ Switch", WM8994_AIF1_DAC1_EQ_GAINS_1, 0, 1, 0), -SOC_SINGLE("AIF1DAC2 EQ Switch", WM8994_AIF1_DAC2_EQ_GAINS_1, 0, 1, 0), SOC_SINGLE("AIF2 EQ Switch", WM8994_AIF2_EQ_GAINS_1, 0, 1, 0), WM8994_DRC_SWITCH("AIF1DAC1 DRC Switch", WM8994_AIF1_DRC1_1, 2), WM8994_DRC_SWITCH("AIF1ADC1L DRC Switch", WM8994_AIF1_DRC1_1, 1), WM8994_DRC_SWITCH("AIF1ADC1R DRC Switch", WM8994_AIF1_DRC1_1, 0), -WM8994_DRC_SWITCH("AIF1DAC2 DRC Switch", WM8994_AIF1_DRC2_1, 2), -WM8994_DRC_SWITCH("AIF1ADC2L DRC Switch", WM8994_AIF1_DRC2_1, 1), -WM8994_DRC_SWITCH("AIF1ADC2R DRC Switch", WM8994_AIF1_DRC2_1, 0), - WM8994_DRC_SWITCH("AIF2DAC DRC Switch", WM8994_AIF2_DRC_1, 2), WM8994_DRC_SWITCH("AIF2ADCL DRC Switch", WM8994_AIF2_DRC_1, 1), WM8994_DRC_SWITCH("AIF2ADCR DRC Switch", WM8994_AIF2_DRC_1, 0), @@ -594,9 +584,6 @@ SOC_SINGLE("Sidetone HPF Switch", WM8994_SIDETONE, 6, 1, 0), SOC_ENUM("AIF1ADC1 HPF Mode", aif1adc1_hpf), SOC_DOUBLE("AIF1ADC1 HPF Switch", WM8994_AIF1_ADC1_FILTERS, 12, 11, 1, 0), -SOC_ENUM("AIF1ADC2 HPF Mode", aif1adc2_hpf), -SOC_DOUBLE("AIF1ADC2 HPF Switch", WM8994_AIF1_ADC2_FILTERS, 12, 11, 1, 0), - SOC_ENUM("AIF2ADC HPF Mode", aif2adc_hpf), SOC_DOUBLE("AIF2ADC HPF Switch", WM8994_AIF2_ADC_FILTERS, 12, 11, 1, 0), @@ -637,6 +624,24 @@ SOC_SINGLE("AIF2DAC 3D Stereo Switch", WM8994_AIF2_DAC_FILTERS_2, 8, 1, 0), }; +/* Controls not available on WM1811 */ +static const struct snd_kcontrol_new wm8994_snd_controls[] = { +SOC_DOUBLE_R_TLV("AIF1ADC2 Volume", WM8994_AIF1_ADC2_LEFT_VOLUME, + WM8994_AIF1_ADC2_RIGHT_VOLUME, + 1, 119, 0, digital_tlv), +SOC_DOUBLE_R_TLV("AIF1DAC2 Volume", WM8994_AIF1_DAC2_LEFT_VOLUME, + WM8994_AIF1_DAC2_RIGHT_VOLUME, 1, 96, 0, digital_tlv), + +SOC_SINGLE("AIF1DAC2 EQ Switch", WM8994_AIF1_DAC2_EQ_GAINS_1, 0, 1, 0), + +WM8994_DRC_SWITCH("AIF1DAC2 DRC Switch", WM8994_AIF1_DRC2_1, 2), +WM8994_DRC_SWITCH("AIF1ADC2L DRC Switch", WM8994_AIF1_DRC2_1, 1), +WM8994_DRC_SWITCH("AIF1ADC2R DRC Switch", WM8994_AIF1_DRC2_1, 0), + +SOC_ENUM("AIF1ADC2 HPF Mode", aif1adc2_hpf), +SOC_DOUBLE("AIF1ADC2 HPF Switch", WM8994_AIF1_ADC2_FILTERS, 12, 11, 1, 0), +}; + static const struct snd_kcontrol_new wm8994_eq_controls[] = { SOC_SINGLE_TLV("AIF1DAC1 EQ1 Volume", WM8994_AIF1_DAC1_EQ_GAINS_1, 11, 31, 0, eq_tlv), @@ -4258,13 +4263,15 @@ static int wm8994_component_probe(struct snd_soc_component *component) wm8994_handle_pdata(wm8994); wm_hubs_add_analogue_controls(component); - snd_soc_add_component_controls(component, wm8994_snd_controls, - ARRAY_SIZE(wm8994_snd_controls)); + snd_soc_add_component_controls(component, wm8994_common_snd_controls, + ARRAY_SIZE(wm8994_common_snd_controls)); snd_soc_dapm_new_controls(dapm, wm8994_dapm_widgets, ARRAY_SIZE(wm8994_dapm_widgets)); switch (control->type) { case WM8994: + snd_soc_add_component_controls(component, wm8994_snd_controls, + ARRAY_SIZE(wm8994_snd_controls)); snd_soc_dapm_new_controls(dapm, wm8994_specific_dapm_widgets, ARRAY_SIZE(wm8994_specific_dapm_widgets)); if (control->revision < 4) { @@ -4284,8 +4291,10 @@ static int wm8994_component_probe(struct snd_soc_component *component) } break; case WM8958: + snd_soc_add_component_controls(component, wm8994_snd_controls, + ARRAY_SIZE(wm8994_snd_controls)); snd_soc_add_component_controls(component, wm8958_snd_controls, - ARRAY_SIZE(wm8958_snd_controls)); + ARRAY_SIZE(wm8958_snd_controls)); snd_soc_dapm_new_controls(dapm, wm8958_dapm_widgets, ARRAY_SIZE(wm8958_dapm_widgets)); if (control->revision < 1) { -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
[parent not found: <CGME20190920130315eucas1p2a31543214fedcdfe86196f176f554a35@eucas1p2.samsung.com>]
* [PATCH v2 02/10] ASoC: samsung: arndale: Add missing OF node dereferencing [not found] ` <CGME20190920130315eucas1p2a31543214fedcdfe86196f176f554a35@eucas1p2.samsung.com> @ 2019-09-20 13:02 ` Sylwester Nawrocki 2019-09-23 9:08 ` Krzysztof Kozlowski 2019-09-23 21:22 ` Applied "ASoC: samsung: arndale: Add missing OF node dereferencing" to the asoc tree Mark Brown 0 siblings, 2 replies; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:02 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski Ensure there is no OF node references kept when the driver is removed/unbound. Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> --- Changes since v1: - rebased to beginning of the series --- sound/soc/samsung/arndale_rt5631.c | 34 ++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/sound/soc/samsung/arndale_rt5631.c b/sound/soc/samsung/arndale_rt5631.c index c213913eb984..fd8c6642fb0d 100644 --- a/sound/soc/samsung/arndale_rt5631.c +++ b/sound/soc/samsung/arndale_rt5631.c @@ -5,6 +5,7 @@ // Author: Claude <claude@insginal.co.kr> #include <linux/module.h> +#include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/clk.h> @@ -74,6 +75,17 @@ static struct snd_soc_card arndale_rt5631 = { .num_links = ARRAY_SIZE(arndale_rt5631_dai), }; +static void arndale_put_of_nodes(struct snd_soc_card *card) +{ + struct snd_soc_dai_link *dai_link; + int i; + + for_each_card_prelinks(card, i, dai_link) { + of_node_put(dai_link->cpus->of_node); + of_node_put(dai_link->codecs->of_node); + } +} + static int arndale_audio_probe(struct platform_device *pdev) { int n, ret; @@ -103,18 +115,31 @@ static int arndale_audio_probe(struct platform_device *pdev) if (!arndale_rt5631_dai[0].codecs->of_node) { dev_err(&pdev->dev, "Property 'samsung,audio-codec' missing or invalid\n"); - return -EINVAL; + ret = -EINVAL; + goto err_put_of_nodes; } } ret = devm_snd_soc_register_card(card->dev, card); + if (ret) { + dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", ret); + goto err_put_of_nodes; + } + return 0; - if (ret) - dev_err(&pdev->dev, "snd_soc_register_card() failed:%d\n", ret); - +err_put_of_nodes: + arndale_put_of_nodes(card); return ret; } +static int arndale_audio_remove(struct platform_device *pdev) +{ + struct snd_soc_card *card = platform_get_drvdata(pdev); + + arndale_put_of_nodes(card); + return 0; +} + static const struct of_device_id samsung_arndale_rt5631_of_match[] __maybe_unused = { { .compatible = "samsung,arndale-rt5631", }, { .compatible = "samsung,arndale-alc5631", }, @@ -129,6 +154,7 @@ static struct platform_driver arndale_audio_driver = { .of_match_table = of_match_ptr(samsung_arndale_rt5631_of_match), }, .probe = arndale_audio_probe, + .remove = arndale_audio_remove, }; module_platform_driver(arndale_audio_driver); -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
* Re: [PATCH v2 02/10] ASoC: samsung: arndale: Add missing OF node dereferencing 2019-09-20 13:02 ` [PATCH v2 02/10] ASoC: samsung: arndale: Add missing OF node dereferencing Sylwester Nawrocki @ 2019-09-23 9:08 ` Krzysztof Kozlowski 2019-09-23 21:22 ` Applied "ASoC: samsung: arndale: Add missing OF node dereferencing" to the asoc tree Mark Brown 1 sibling, 0 replies; 30+ messages in thread From: Krzysztof Kozlowski @ 2019-09-23 9:08 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, broonie, linux-arm-kernel, m.szyprowski On Fri, Sep 20, 2019 at 03:02:11PM +0200, Sylwester Nawrocki wrote: > Ensure there is no OF node references kept when the driver > is removed/unbound. > > Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> > Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > --- > Changes since v1: > - rebased to beginning of the series > --- > sound/soc/samsung/arndale_rt5631.c | 34 ++++++++++++++++++++++++++---- > 1 file changed, 30 insertions(+), 4 deletions(-) Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Best regards, Krzysztof _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Applied "ASoC: samsung: arndale: Add missing OF node dereferencing" to the asoc tree 2019-09-20 13:02 ` [PATCH v2 02/10] ASoC: samsung: arndale: Add missing OF node dereferencing Sylwester Nawrocki 2019-09-23 9:08 ` Krzysztof Kozlowski @ 2019-09-23 21:22 ` Mark Brown 1 sibling, 0 replies; 30+ messages in thread From: Mark Brown @ 2019-09-23 21:22 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, Krzysztof Kozlowski, robh+dt, Mark Brown, linux-arm-kernel, m.szyprowski The patch ASoC: samsung: arndale: Add missing OF node dereferencing has been applied to the asoc tree at https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-5.4 All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark From fb629fa2587d0c150792d87e3053664bfc8dc78c Mon Sep 17 00:00:00 2001 From: Sylwester Nawrocki <s.nawrocki@samsung.com> Date: Fri, 20 Sep 2019 15:02:11 +0200 Subject: [PATCH] ASoC: samsung: arndale: Add missing OF node dereferencing Ensure there is no OF node references kept when the driver is removed/unbound. Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Link: https://lore.kernel.org/r/20190920130218.32690-3-s.nawrocki@samsung.com Signed-off-by: Mark Brown <broonie@kernel.org> --- sound/soc/samsung/arndale_rt5631.c | 34 ++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/sound/soc/samsung/arndale_rt5631.c b/sound/soc/samsung/arndale_rt5631.c index c213913eb984..fd8c6642fb0d 100644 --- a/sound/soc/samsung/arndale_rt5631.c +++ b/sound/soc/samsung/arndale_rt5631.c @@ -5,6 +5,7 @@ // Author: Claude <claude@insginal.co.kr> #include <linux/module.h> +#include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/clk.h> @@ -74,6 +75,17 @@ static struct snd_soc_card arndale_rt5631 = { .num_links = ARRAY_SIZE(arndale_rt5631_dai), }; +static void arndale_put_of_nodes(struct snd_soc_card *card) +{ + struct snd_soc_dai_link *dai_link; + int i; + + for_each_card_prelinks(card, i, dai_link) { + of_node_put(dai_link->cpus->of_node); + of_node_put(dai_link->codecs->of_node); + } +} + static int arndale_audio_probe(struct platform_device *pdev) { int n, ret; @@ -103,18 +115,31 @@ static int arndale_audio_probe(struct platform_device *pdev) if (!arndale_rt5631_dai[0].codecs->of_node) { dev_err(&pdev->dev, "Property 'samsung,audio-codec' missing or invalid\n"); - return -EINVAL; + ret = -EINVAL; + goto err_put_of_nodes; } } ret = devm_snd_soc_register_card(card->dev, card); + if (ret) { + dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", ret); + goto err_put_of_nodes; + } + return 0; - if (ret) - dev_err(&pdev->dev, "snd_soc_register_card() failed:%d\n", ret); - +err_put_of_nodes: + arndale_put_of_nodes(card); return ret; } +static int arndale_audio_remove(struct platform_device *pdev) +{ + struct snd_soc_card *card = platform_get_drvdata(pdev); + + arndale_put_of_nodes(card); + return 0; +} + static const struct of_device_id samsung_arndale_rt5631_of_match[] __maybe_unused = { { .compatible = "samsung,arndale-rt5631", }, { .compatible = "samsung,arndale-alc5631", }, @@ -129,6 +154,7 @@ static struct platform_driver arndale_audio_driver = { .of_match_table = of_match_ptr(samsung_arndale_rt5631_of_match), }, .probe = arndale_audio_probe, + .remove = arndale_audio_remove, }; module_platform_driver(arndale_audio_driver); -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
[parent not found: <CGME20190920130316eucas1p2de713006a13c62c0b895c2e33e0d14c7@eucas1p2.samsung.com>]
* [PATCH v2 03/10] ASoC: wm8994: Add support for setting MCLK clock rate [not found] ` <CGME20190920130316eucas1p2de713006a13c62c0b895c2e33e0d14c7@eucas1p2.samsung.com> @ 2019-09-20 13:02 ` Sylwester Nawrocki 2019-09-23 9:10 ` Sylwester Nawrocki 2019-10-01 11:40 ` Applied "ASoC: wm8994: Add support for setting MCLK clock rate" to the asoc tree Mark Brown 0 siblings, 2 replies; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:02 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski Extend the set_sysclk() handler so we also set frequency of the MCLK1, MCLK2 clocks through clk API when those clocks are specified in DT. Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> --- Changes since v1: - getting of clocks moved from MFD to the CODEC's driver probe() --- sound/soc/codecs/wm8994.c | 48 +++++++++++++++++++++++++++++++++++---- sound/soc/codecs/wm8994.h | 10 +++++++- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index d5fb7f5dd551..f69545dced25 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c @@ -167,12 +167,12 @@ static int configure_aif_clock(struct snd_soc_component *component, int aif) switch (wm8994->sysclk[aif]) { case WM8994_SYSCLK_MCLK1: - rate = wm8994->mclk[0]; + rate = wm8994->mclk_rate[0]; break; case WM8994_SYSCLK_MCLK2: reg1 |= 0x8; - rate = wm8994->mclk[1]; + rate = wm8994->mclk_rate[1]; break; case WM8994_SYSCLK_FLL1: @@ -2372,12 +2372,29 @@ static int wm8994_set_fll(struct snd_soc_dai *dai, int id, int src, return _wm8994_set_fll(dai->component, id, src, freq_in, freq_out); } +static int wm8994_set_mclk_rate(struct wm8994_priv *wm8994, unsigned int id, + unsigned int *freq) +{ + int ret; + + if (!wm8994->mclk[id].clk || *freq == wm8994->mclk_rate[id]) + return 0; + + ret = clk_set_rate(wm8994->mclk[id].clk, *freq); + if (ret < 0) + return ret; + + *freq = clk_get_rate(wm8994->mclk[id].clk); + + return 0; +} + static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int freq, int dir) { struct snd_soc_component *component = dai->component; struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component); - int i; + int ret, i; switch (dai->id) { case 1: @@ -2392,7 +2409,12 @@ static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai, switch (clk_id) { case WM8994_SYSCLK_MCLK1: wm8994->sysclk[dai->id - 1] = WM8994_SYSCLK_MCLK1; - wm8994->mclk[0] = freq; + + ret = wm8994_set_mclk_rate(wm8994, dai->id - 1, &freq); + if (ret < 0) + return ret; + + wm8994->mclk_rate[0] = freq; dev_dbg(dai->dev, "AIF%d using MCLK1 at %uHz\n", dai->id, freq); break; @@ -2400,7 +2422,12 @@ static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai, case WM8994_SYSCLK_MCLK2: /* TODO: Set GPIO AF */ wm8994->sysclk[dai->id - 1] = WM8994_SYSCLK_MCLK2; - wm8994->mclk[1] = freq; + + ret = wm8994_set_mclk_rate(wm8994, dai->id - 1, &freq); + if (ret < 0) + return ret; + + wm8994->mclk_rate[1] = freq; dev_dbg(dai->dev, "AIF%d using MCLK2 at %uHz\n", dai->id, freq); break; @@ -4456,6 +4483,7 @@ static const struct snd_soc_component_driver soc_component_dev_wm8994 = { static int wm8994_probe(struct platform_device *pdev) { struct wm8994_priv *wm8994; + int ret; wm8994 = devm_kzalloc(&pdev->dev, sizeof(struct wm8994_priv), GFP_KERNEL); @@ -4467,6 +4495,16 @@ static int wm8994_probe(struct platform_device *pdev) wm8994->wm8994 = dev_get_drvdata(pdev->dev.parent); + wm8994->mclk[WM8994_MCLK1].id = "MCLK1"; + wm8994->mclk[WM8994_MCLK2].id = "MCLK2"; + + ret = devm_clk_bulk_get_optional(pdev->dev.parent, ARRAY_SIZE(wm8994->mclk), + wm8994->mclk); + if (ret < 0) { + dev_err(&pdev->dev, "Failed to get clocks: %d\n", ret); + return ret; + } + pm_runtime_enable(&pdev->dev); pm_runtime_idle(&pdev->dev); diff --git a/sound/soc/codecs/wm8994.h b/sound/soc/codecs/wm8994.h index 1d6f2abe1c11..41c4b126114d 100644 --- a/sound/soc/codecs/wm8994.h +++ b/sound/soc/codecs/wm8994.h @@ -6,6 +6,7 @@ #ifndef _WM8994_H #define _WM8994_H +#include <linux/clk.h> #include <sound/soc.h> #include <linux/firmware.h> #include <linux/completion.h> @@ -14,6 +15,12 @@ #include "wm_hubs.h" +enum { + WM8994_MCLK1, + WM8994_MCLK2, + WM8994_NUM_MCLK +}; + /* Sources for AIF1/2 SYSCLK - use with set_dai_sysclk() */ #define WM8994_SYSCLK_MCLK1 1 #define WM8994_SYSCLK_MCLK2 2 @@ -73,9 +80,10 @@ struct wm8994; struct wm8994_priv { struct wm_hubs_data hubs; struct wm8994 *wm8994; + struct clk_bulk_data mclk[WM8994_NUM_MCLK]; int sysclk[2]; int sysclk_rate[2]; - int mclk[2]; + int mclk_rate[2]; int aifclk[2]; int aifdiv[2]; int channels[2]; -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
* Re: [PATCH v2 03/10] ASoC: wm8994: Add support for setting MCLK clock rate 2019-09-20 13:02 ` [PATCH v2 03/10] ASoC: wm8994: Add support for setting MCLK clock rate Sylwester Nawrocki @ 2019-09-23 9:10 ` Sylwester Nawrocki 2019-09-23 9:25 ` Charles Keepax 2019-09-23 10:09 ` Krzysztof Kozlowski 2019-10-01 11:40 ` Applied "ASoC: wm8994: Add support for setting MCLK clock rate" to the asoc tree Mark Brown 1 sibling, 2 replies; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-23 9:10 UTC (permalink / raw) To: krzk, ckeepax Cc: devicetree, alsa-devel, linux-samsung-soc, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, broonie, linux-arm-kernel, m.szyprowski On 9/20/19 15:02, Sylwester Nawrocki wrote: > Extend the set_sysclk() handler so we also set frequency of the MCLK1, > MCLK2 clocks through clk API when those clocks are specified in DT. > > Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> > Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Sorry, I squashed other patch to this one but forgot to remove above tags, not sure if those still stand as there was rather significant change in the patch. > Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > --- > Changes since v1: > - getting of clocks moved from MFD to the CODEC's driver probe() > --- -- Regards, Sylwester _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v2 03/10] ASoC: wm8994: Add support for setting MCLK clock rate 2019-09-23 9:10 ` Sylwester Nawrocki @ 2019-09-23 9:25 ` Charles Keepax 2019-09-23 10:09 ` Krzysztof Kozlowski 1 sibling, 0 replies; 30+ messages in thread From: Charles Keepax @ 2019-09-23 9:25 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, b.zolnierkie, sbkim73, patches, broonie, lgirdwood, krzk, robh+dt, linux-arm-kernel, m.szyprowski On Mon, Sep 23, 2019 at 11:10:48AM +0200, Sylwester Nawrocki wrote: > On 9/20/19 15:02, Sylwester Nawrocki wrote: > > Extend the set_sysclk() handler so we also set frequency of the MCLK1, > > MCLK2 clocks through clk API when those clocks are specified in DT. > > > > Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> > > Acked-by: Krzysztof Kozlowski <krzk@kernel.org> > > Sorry, I squashed other patch to this one but forgot to remove above tags, > not sure if those still stand as there was rather significant change in > the patch. > I am happy with my tag being there. Thanks, Charles _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v2 03/10] ASoC: wm8994: Add support for setting MCLK clock rate 2019-09-23 9:10 ` Sylwester Nawrocki 2019-09-23 9:25 ` Charles Keepax @ 2019-09-23 10:09 ` Krzysztof Kozlowski 1 sibling, 0 replies; 30+ messages in thread From: Krzysztof Kozlowski @ 2019-09-23 10:09 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, broonie, linux-arm-kernel, m.szyprowski On Mon, Sep 23, 2019 at 11:10:48AM +0200, Sylwester Nawrocki wrote: > On 9/20/19 15:02, Sylwester Nawrocki wrote: > > Extend the set_sysclk() handler so we also set frequency of the MCLK1, > > MCLK2 clocks through clk API when those clocks are specified in DT. > > > > Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> > > Acked-by: Krzysztof Kozlowski <krzk@kernel.org> > > Sorry, I squashed other patch to this one but forgot to remove above tags, > not sure if those still stand as there was rather significant change in > the patch. It's good. For the record: Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Best regards, Krzysztof _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Applied "ASoC: wm8994: Add support for setting MCLK clock rate" to the asoc tree 2019-09-20 13:02 ` [PATCH v2 03/10] ASoC: wm8994: Add support for setting MCLK clock rate Sylwester Nawrocki 2019-09-23 9:10 ` Sylwester Nawrocki @ 2019-10-01 11:40 ` Mark Brown 1 sibling, 0 replies; 30+ messages in thread From: Mark Brown @ 2019-10-01 11:40 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, Krzysztof Kozlowski, robh+dt, Mark Brown, linux-arm-kernel, m.szyprowski The patch ASoC: wm8994: Add support for setting MCLK clock rate has been applied to the asoc tree at https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-5.5 All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark From 419e2f50833661cec15200d5ee7385daee733667 Mon Sep 17 00:00:00 2001 From: Sylwester Nawrocki <s.nawrocki@samsung.com> Date: Fri, 20 Sep 2019 15:02:12 +0200 Subject: [PATCH] ASoC: wm8994: Add support for setting MCLK clock rate Extend the set_sysclk() handler so we also set frequency of the MCLK1, MCLK2 clocks through clk API when those clocks are specified in DT. Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Link: https://lore.kernel.org/r/20190920130218.32690-4-s.nawrocki@samsung.com Signed-off-by: Mark Brown <broonie@kernel.org> --- sound/soc/codecs/wm8994.c | 48 +++++++++++++++++++++++++++++++++++---- sound/soc/codecs/wm8994.h | 10 +++++++- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index c3d06e8bc54f..35fbaa0138bf 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c @@ -167,12 +167,12 @@ static int configure_aif_clock(struct snd_soc_component *component, int aif) switch (wm8994->sysclk[aif]) { case WM8994_SYSCLK_MCLK1: - rate = wm8994->mclk[0]; + rate = wm8994->mclk_rate[0]; break; case WM8994_SYSCLK_MCLK2: reg1 |= 0x8; - rate = wm8994->mclk[1]; + rate = wm8994->mclk_rate[1]; break; case WM8994_SYSCLK_FLL1: @@ -2367,12 +2367,29 @@ static int wm8994_set_fll(struct snd_soc_dai *dai, int id, int src, return _wm8994_set_fll(dai->component, id, src, freq_in, freq_out); } +static int wm8994_set_mclk_rate(struct wm8994_priv *wm8994, unsigned int id, + unsigned int *freq) +{ + int ret; + + if (!wm8994->mclk[id].clk || *freq == wm8994->mclk_rate[id]) + return 0; + + ret = clk_set_rate(wm8994->mclk[id].clk, *freq); + if (ret < 0) + return ret; + + *freq = clk_get_rate(wm8994->mclk[id].clk); + + return 0; +} + static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int freq, int dir) { struct snd_soc_component *component = dai->component; struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component); - int i; + int ret, i; switch (dai->id) { case 1: @@ -2387,7 +2404,12 @@ static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai, switch (clk_id) { case WM8994_SYSCLK_MCLK1: wm8994->sysclk[dai->id - 1] = WM8994_SYSCLK_MCLK1; - wm8994->mclk[0] = freq; + + ret = wm8994_set_mclk_rate(wm8994, dai->id - 1, &freq); + if (ret < 0) + return ret; + + wm8994->mclk_rate[0] = freq; dev_dbg(dai->dev, "AIF%d using MCLK1 at %uHz\n", dai->id, freq); break; @@ -2395,7 +2417,12 @@ static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai, case WM8994_SYSCLK_MCLK2: /* TODO: Set GPIO AF */ wm8994->sysclk[dai->id - 1] = WM8994_SYSCLK_MCLK2; - wm8994->mclk[1] = freq; + + ret = wm8994_set_mclk_rate(wm8994, dai->id - 1, &freq); + if (ret < 0) + return ret; + + wm8994->mclk_rate[1] = freq; dev_dbg(dai->dev, "AIF%d using MCLK2 at %uHz\n", dai->id, freq); break; @@ -4447,6 +4474,7 @@ static const struct snd_soc_component_driver soc_component_dev_wm8994 = { static int wm8994_probe(struct platform_device *pdev) { struct wm8994_priv *wm8994; + int ret; wm8994 = devm_kzalloc(&pdev->dev, sizeof(struct wm8994_priv), GFP_KERNEL); @@ -4458,6 +4486,16 @@ static int wm8994_probe(struct platform_device *pdev) wm8994->wm8994 = dev_get_drvdata(pdev->dev.parent); + wm8994->mclk[WM8994_MCLK1].id = "MCLK1"; + wm8994->mclk[WM8994_MCLK2].id = "MCLK2"; + + ret = devm_clk_bulk_get_optional(pdev->dev.parent, ARRAY_SIZE(wm8994->mclk), + wm8994->mclk); + if (ret < 0) { + dev_err(&pdev->dev, "Failed to get clocks: %d\n", ret); + return ret; + } + pm_runtime_enable(&pdev->dev); pm_runtime_idle(&pdev->dev); diff --git a/sound/soc/codecs/wm8994.h b/sound/soc/codecs/wm8994.h index 1d6f2abe1c11..41c4b126114d 100644 --- a/sound/soc/codecs/wm8994.h +++ b/sound/soc/codecs/wm8994.h @@ -6,6 +6,7 @@ #ifndef _WM8994_H #define _WM8994_H +#include <linux/clk.h> #include <sound/soc.h> #include <linux/firmware.h> #include <linux/completion.h> @@ -14,6 +15,12 @@ #include "wm_hubs.h" +enum { + WM8994_MCLK1, + WM8994_MCLK2, + WM8994_NUM_MCLK +}; + /* Sources for AIF1/2 SYSCLK - use with set_dai_sysclk() */ #define WM8994_SYSCLK_MCLK1 1 #define WM8994_SYSCLK_MCLK2 2 @@ -73,9 +80,10 @@ struct wm8994; struct wm8994_priv { struct wm_hubs_data hubs; struct wm8994 *wm8994; + struct clk_bulk_data mclk[WM8994_NUM_MCLK]; int sysclk[2]; int sysclk_rate[2]; - int mclk[2]; + int mclk_rate[2]; int aifclk[2]; int aifdiv[2]; int channels[2]; -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
[parent not found: <CGME20190920130317eucas1p188d724710077d704f768798c6555c741@eucas1p1.samsung.com>]
* [PATCH v2 04/10] ASoC: wm8994: Add support for MCLKn clock gating [not found] ` <CGME20190920130317eucas1p188d724710077d704f768798c6555c741@eucas1p1.samsung.com> @ 2019-09-20 13:02 ` Sylwester Nawrocki 2019-09-23 8:51 ` Charles Keepax ` (2 more replies) 0 siblings, 3 replies; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:02 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski As an intermediate step before covering the clocking subsystem of the CODEC entirely by the clk API add handling of external CODEC's master clocks in DAPM events when the AIFn clocks are sourced directly from MCLKn; when FLLn are used we enable/disable respective MCLKn before/after FLLn is enabled/disabled. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> --- Changes since v1: - addressed review comments from Charles --- sound/soc/codecs/wm8994.c | 108 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 104 insertions(+), 4 deletions(-) diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index f69545dced25..15ce64a48a87 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c @@ -1038,6 +1038,45 @@ static bool wm8994_check_class_w_digital(struct snd_soc_component *component) return true; } +static int aif_mclk_set(struct snd_soc_component *component, int aif, bool enable) +{ + struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component); + unsigned int offset, val, clk_idx; + int ret; + + if (aif) + offset = 4; + else + offset = 0; + + val = snd_soc_component_read32(component, WM8994_AIF1_CLOCKING_1 + offset); + val &= WM8994_AIF1CLK_SRC_MASK; + + switch (val) { + case 0: + clk_idx = WM8994_MCLK1; + break; + case 1: + clk_idx = WM8994_MCLK2; + break; + default: + return 0; + } + + if (enable) { + ret = clk_prepare_enable(wm8994->mclk[clk_idx].clk); + if (ret < 0) { + dev_err(component->dev, "Failed to enable MCLK%d\n", + clk_idx); + return ret; + } + } else { + clk_disable_unprepare(wm8994->mclk[clk_idx].clk); + } + + return 0; +} + static int aif1clk_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { @@ -1045,7 +1084,7 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w, struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component); struct wm8994 *control = wm8994->wm8994; int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA; - int i; + int ret, i; int dac; int adc; int val; @@ -1061,6 +1100,10 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: + ret = aif_mclk_set(component, 0, true); + if (ret < 0) + return ret; + /* Don't enable timeslot 2 if not in use */ if (wm8994->channels[0] <= 2) mask &= ~(WM8994_AIF1DAC2L_ENA | WM8994_AIF1DAC2R_ENA); @@ -1133,6 +1176,12 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w, break; } + switch (event) { + case SND_SOC_DAPM_POST_PMD: + aif_mclk_set(component, 0, false); + break; + } + return 0; } @@ -1140,13 +1189,17 @@ static int aif2clk_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); - int i; + int ret, i; int dac; int adc; int val; switch (event) { case SND_SOC_DAPM_PRE_PMU: + ret = aif_mclk_set(component, 1, true); + if (ret < 0) + return ret; + val = snd_soc_component_read32(component, WM8994_AIF2_CONTROL_1); if ((val & WM8994_AIF2ADCL_SRC) && (val & WM8994_AIF2ADCR_SRC)) @@ -1218,6 +1271,12 @@ static int aif2clk_ev(struct snd_soc_dapm_widget *w, break; } + switch (event) { + case SND_SOC_DAPM_POST_PMD: + aif_mclk_set(component, 1, false); + break; + } + return 0; } @@ -1623,10 +1682,10 @@ SND_SOC_DAPM_POST("Late Disable PGA", late_disable_ev) static const struct snd_soc_dapm_widget wm8994_lateclk_widgets[] = { SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, aif1clk_ev, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | - SND_SOC_DAPM_PRE_PMD), + SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8994_AIF2_CLOCKING_1, 0, 0, aif2clk_ev, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | - SND_SOC_DAPM_PRE_PMD), + SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_PGA("Direct Voice", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_MIXER("SPKL", WM8994_POWER_MANAGEMENT_3, 8, 0, left_speaker_mixer, ARRAY_SIZE(left_speaker_mixer)), @@ -2141,6 +2200,7 @@ static int _wm8994_set_fll(struct snd_soc_component *component, int id, int src, u16 reg, clk1, aif_reg, aif_src; unsigned long timeout; bool was_enabled; + struct clk *mclk; switch (id) { case WM8994_FLL1: @@ -2216,6 +2276,27 @@ static int _wm8994_set_fll(struct snd_soc_component *component, int id, int src, snd_soc_component_update_bits(component, WM8994_FLL1_CONTROL_1 + reg_offset, WM8994_FLL1_ENA, 0); + /* Disable MCLK if needed before we possibly change to new clock parent */ + if (was_enabled) { + reg = snd_soc_component_read32(component, WM8994_FLL1_CONTROL_5 + + reg_offset); + reg = ((reg & WM8994_FLL1_REFCLK_SRC_MASK) + >> WM8994_FLL1_REFCLK_SRC_SHIFT) + 1; + + switch (reg) { + case WM8994_FLL_SRC_MCLK1: + mclk = wm8994->mclk[WM8994_MCLK1].clk; + break; + case WM8994_FLL_SRC_MCLK2: + mclk = wm8994->mclk[WM8994_MCLK2].clk; + break; + default: + mclk = NULL; + } + + clk_disable_unprepare(mclk); + } + if (wm8994->fll_byp && src == WM8994_FLL_SRC_BCLK && freq_in == freq_out && freq_out) { dev_dbg(component->dev, "Bypassing FLL%d\n", id + 1); @@ -2260,10 +2341,29 @@ static int _wm8994_set_fll(struct snd_soc_component *component, int id, int src, /* Clear any pending completion from a previous failure */ try_wait_for_completion(&wm8994->fll_locked[id]); + switch (src) { + case WM8994_FLL_SRC_MCLK1: + mclk = wm8994->mclk[WM8994_MCLK1].clk; + break; + case WM8994_FLL_SRC_MCLK2: + mclk = wm8994->mclk[WM8994_MCLK2].clk; + break; + default: + mclk = NULL; + } + /* Enable (with fractional mode if required) */ if (freq_out) { + ret = clk_prepare_enable(mclk); + if (ret < 0) { + dev_err(component->dev, "Failed to enable MCLK for FLL%d\n", + id + 1); + return ret; + } + /* Enable VMID if we need it */ if (!was_enabled) { + active_reference(component); switch (control->type) { -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
* Re: [PATCH v2 04/10] ASoC: wm8994: Add support for MCLKn clock gating 2019-09-20 13:02 ` [PATCH v2 04/10] ASoC: wm8994: Add support for MCLKn clock gating Sylwester Nawrocki @ 2019-09-23 8:51 ` Charles Keepax 2019-09-23 9:13 ` Sylwester Nawrocki 2019-09-23 9:09 ` Krzysztof Kozlowski 2019-10-01 11:40 ` Applied "ASoC: wm8994: Add support for MCLKn clock gating" to the asoc tree Mark Brown 2 siblings, 1 reply; 30+ messages in thread From: Charles Keepax @ 2019-09-23 8:51 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, b.zolnierkie, sbkim73, patches, broonie, lgirdwood, krzk, robh+dt, linux-arm-kernel, m.szyprowski On Fri, Sep 20, 2019 at 03:02:13PM +0200, Sylwester Nawrocki wrote: > As an intermediate step before covering the clocking subsystem > of the CODEC entirely by the clk API add handling of external CODEC's > master clocks in DAPM events when the AIFn clocks are sourced directly > from MCLKn; when FLLn are used we enable/disable respective MCLKn > before/after FLLn is enabled/disabled. > > Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > --- Looks good to me: Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Thanks, Charles _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v2 04/10] ASoC: wm8994: Add support for MCLKn clock gating 2019-09-23 8:51 ` Charles Keepax @ 2019-09-23 9:13 ` Sylwester Nawrocki 0 siblings, 0 replies; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-23 9:13 UTC (permalink / raw) To: Charles Keepax Cc: devicetree, alsa-devel, linux-samsung-soc, b.zolnierkie, sbkim73, patches, broonie, lgirdwood, krzk, robh+dt, linux-arm-kernel, m.szyprowski On 9/23/19 10:51, Charles Keepax wrote: > On Fri, Sep 20, 2019 at 03:02:13PM +0200, Sylwester Nawrocki wrote: >> As an intermediate step before covering the clocking subsystem >> of the CODEC entirely by the clk API add handling of external CODEC's >> master clocks in DAPM events when the AIFn clocks are sourced directly >> from MCLKn; when FLLn are used we enable/disable respective MCLKn >> before/after FLLn is enabled/disabled. >> >> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > > Looks good to me: > > Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Thanks a lot for reviewing! _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v2 04/10] ASoC: wm8994: Add support for MCLKn clock gating 2019-09-20 13:02 ` [PATCH v2 04/10] ASoC: wm8994: Add support for MCLKn clock gating Sylwester Nawrocki 2019-09-23 8:51 ` Charles Keepax @ 2019-09-23 9:09 ` Krzysztof Kozlowski 2019-10-01 11:40 ` Applied "ASoC: wm8994: Add support for MCLKn clock gating" to the asoc tree Mark Brown 2 siblings, 0 replies; 30+ messages in thread From: Krzysztof Kozlowski @ 2019-09-23 9:09 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, broonie, linux-arm-kernel, m.szyprowski On Fri, Sep 20, 2019 at 03:02:13PM +0200, Sylwester Nawrocki wrote: > As an intermediate step before covering the clocking subsystem > of the CODEC entirely by the clk API add handling of external CODEC's > master clocks in DAPM events when the AIFn clocks are sourced directly > from MCLKn; when FLLn are used we enable/disable respective MCLKn > before/after FLLn is enabled/disabled. > > Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > --- > Changes since v1: > - addressed review comments from Charles > --- > sound/soc/codecs/wm8994.c | 108 ++++++++++++++++++++++++++++++++++++-- > 1 file changed, 104 insertions(+), 4 deletions(-) Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Best regards, Krzysztof _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Applied "ASoC: wm8994: Add support for MCLKn clock gating" to the asoc tree 2019-09-20 13:02 ` [PATCH v2 04/10] ASoC: wm8994: Add support for MCLKn clock gating Sylwester Nawrocki 2019-09-23 8:51 ` Charles Keepax 2019-09-23 9:09 ` Krzysztof Kozlowski @ 2019-10-01 11:40 ` Mark Brown 2 siblings, 0 replies; 30+ messages in thread From: Mark Brown @ 2019-10-01 11:40 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, Krzysztof Kozlowski, robh+dt, Mark Brown, linux-arm-kernel, m.szyprowski The patch ASoC: wm8994: Add support for MCLKn clock gating has been applied to the asoc tree at https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-5.5 All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark From 001b83d395ab2acfddc46b73376f8dbdece89af7 Mon Sep 17 00:00:00 2001 From: Sylwester Nawrocki <s.nawrocki@samsung.com> Date: Fri, 20 Sep 2019 15:02:13 +0200 Subject: [PATCH] ASoC: wm8994: Add support for MCLKn clock gating As an intermediate step before covering the clocking subsystem of the CODEC entirely by the clk API add handling of external CODEC's master clocks in DAPM events when the AIFn clocks are sourced directly from MCLKn; when FLLn are used we enable/disable respective MCLKn before/after FLLn is enabled/disabled. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Link: https://lore.kernel.org/r/20190920130218.32690-5-s.nawrocki@samsung.com Signed-off-by: Mark Brown <broonie@kernel.org> --- sound/soc/codecs/wm8994.c | 108 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 104 insertions(+), 4 deletions(-) diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index 35fbaa0138bf..b633093afb9d 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c @@ -1033,6 +1033,45 @@ static bool wm8994_check_class_w_digital(struct snd_soc_component *component) return true; } +static int aif_mclk_set(struct snd_soc_component *component, int aif, bool enable) +{ + struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component); + unsigned int offset, val, clk_idx; + int ret; + + if (aif) + offset = 4; + else + offset = 0; + + val = snd_soc_component_read32(component, WM8994_AIF1_CLOCKING_1 + offset); + val &= WM8994_AIF1CLK_SRC_MASK; + + switch (val) { + case 0: + clk_idx = WM8994_MCLK1; + break; + case 1: + clk_idx = WM8994_MCLK2; + break; + default: + return 0; + } + + if (enable) { + ret = clk_prepare_enable(wm8994->mclk[clk_idx].clk); + if (ret < 0) { + dev_err(component->dev, "Failed to enable MCLK%d\n", + clk_idx); + return ret; + } + } else { + clk_disable_unprepare(wm8994->mclk[clk_idx].clk); + } + + return 0; +} + static int aif1clk_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { @@ -1040,7 +1079,7 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w, struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component); struct wm8994 *control = wm8994->wm8994; int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA; - int i; + int ret, i; int dac; int adc; int val; @@ -1056,6 +1095,10 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMU: + ret = aif_mclk_set(component, 0, true); + if (ret < 0) + return ret; + /* Don't enable timeslot 2 if not in use */ if (wm8994->channels[0] <= 2) mask &= ~(WM8994_AIF1DAC2L_ENA | WM8994_AIF1DAC2R_ENA); @@ -1128,6 +1171,12 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w, break; } + switch (event) { + case SND_SOC_DAPM_POST_PMD: + aif_mclk_set(component, 0, false); + break; + } + return 0; } @@ -1135,13 +1184,17 @@ static int aif2clk_ev(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); - int i; + int ret, i; int dac; int adc; int val; switch (event) { case SND_SOC_DAPM_PRE_PMU: + ret = aif_mclk_set(component, 1, true); + if (ret < 0) + return ret; + val = snd_soc_component_read32(component, WM8994_AIF2_CONTROL_1); if ((val & WM8994_AIF2ADCL_SRC) && (val & WM8994_AIF2ADCR_SRC)) @@ -1213,6 +1266,12 @@ static int aif2clk_ev(struct snd_soc_dapm_widget *w, break; } + switch (event) { + case SND_SOC_DAPM_POST_PMD: + aif_mclk_set(component, 1, false); + break; + } + return 0; } @@ -1618,10 +1677,10 @@ SND_SOC_DAPM_POST("Late Disable PGA", late_disable_ev) static const struct snd_soc_dapm_widget wm8994_lateclk_widgets[] = { SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, aif1clk_ev, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | - SND_SOC_DAPM_PRE_PMD), + SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8994_AIF2_CLOCKING_1, 0, 0, aif2clk_ev, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | - SND_SOC_DAPM_PRE_PMD), + SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_PGA("Direct Voice", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_MIXER("SPKL", WM8994_POWER_MANAGEMENT_3, 8, 0, left_speaker_mixer, ARRAY_SIZE(left_speaker_mixer)), @@ -2136,6 +2195,7 @@ static int _wm8994_set_fll(struct snd_soc_component *component, int id, int src, u16 reg, clk1, aif_reg, aif_src; unsigned long timeout; bool was_enabled; + struct clk *mclk; switch (id) { case WM8994_FLL1: @@ -2211,6 +2271,27 @@ static int _wm8994_set_fll(struct snd_soc_component *component, int id, int src, snd_soc_component_update_bits(component, WM8994_FLL1_CONTROL_1 + reg_offset, WM8994_FLL1_ENA, 0); + /* Disable MCLK if needed before we possibly change to new clock parent */ + if (was_enabled) { + reg = snd_soc_component_read32(component, WM8994_FLL1_CONTROL_5 + + reg_offset); + reg = ((reg & WM8994_FLL1_REFCLK_SRC_MASK) + >> WM8994_FLL1_REFCLK_SRC_SHIFT) + 1; + + switch (reg) { + case WM8994_FLL_SRC_MCLK1: + mclk = wm8994->mclk[WM8994_MCLK1].clk; + break; + case WM8994_FLL_SRC_MCLK2: + mclk = wm8994->mclk[WM8994_MCLK2].clk; + break; + default: + mclk = NULL; + } + + clk_disable_unprepare(mclk); + } + if (wm8994->fll_byp && src == WM8994_FLL_SRC_BCLK && freq_in == freq_out && freq_out) { dev_dbg(component->dev, "Bypassing FLL%d\n", id + 1); @@ -2255,10 +2336,29 @@ static int _wm8994_set_fll(struct snd_soc_component *component, int id, int src, /* Clear any pending completion from a previous failure */ try_wait_for_completion(&wm8994->fll_locked[id]); + switch (src) { + case WM8994_FLL_SRC_MCLK1: + mclk = wm8994->mclk[WM8994_MCLK1].clk; + break; + case WM8994_FLL_SRC_MCLK2: + mclk = wm8994->mclk[WM8994_MCLK2].clk; + break; + default: + mclk = NULL; + } + /* Enable (with fractional mode if required) */ if (freq_out) { + ret = clk_prepare_enable(mclk); + if (ret < 0) { + dev_err(component->dev, "Failed to enable MCLK for FLL%d\n", + id + 1); + return ret; + } + /* Enable VMID if we need it */ if (!was_enabled) { + active_reference(component); switch (control->type) { -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
[parent not found: <CGME20190920130318eucas1p126cc8be60118ffbf1f332626dde1c05a@eucas1p1.samsung.com>]
* [PATCH v2 05/10] ASoC: samsung: arndale: Simplify DAI link initialization [not found] ` <CGME20190920130318eucas1p126cc8be60118ffbf1f332626dde1c05a@eucas1p1.samsung.com> @ 2019-09-20 13:02 ` Sylwester Nawrocki 2019-10-01 11:21 ` Mark Brown 0 siblings, 1 reply; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:02 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski There is only one DAI link so we can drop an unnecessary loop statement. Use card->dai_link in place of direct static arndale_rt5631_dai[] array dereference as a prerequisite for adding support for other CODECs. Unnecessary assignment of dai_link->codecs->name to NULL is removed. Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> --- Changes since v1: - rebased due to reordering patches in the series --- sound/soc/samsung/arndale_rt5631.c | 42 +++++++++++++----------------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/sound/soc/samsung/arndale_rt5631.c b/sound/soc/samsung/arndale_rt5631.c index fd8c6642fb0d..004c84fafad9 100644 --- a/sound/soc/samsung/arndale_rt5631.c +++ b/sound/soc/samsung/arndale_rt5631.c @@ -88,36 +88,30 @@ static void arndale_put_of_nodes(struct snd_soc_card *card) static int arndale_audio_probe(struct platform_device *pdev) { - int n, ret; struct device_node *np = pdev->dev.of_node; struct snd_soc_card *card = &arndale_rt5631; + struct snd_soc_dai_link *dai_link; + int ret; card->dev = &pdev->dev; + dai_link = card->dai_link; + + dai_link->cpus->of_node = of_parse_phandle(np, "samsung,audio-cpu", 0); + if (!dai_link->cpus->of_node) { + dev_err(&pdev->dev, + "Property 'samsung,audio-cpu' missing or invalid\n"); + return -EINVAL; + } - for (n = 0; np && n < ARRAY_SIZE(arndale_rt5631_dai); n++) { - if (!arndale_rt5631_dai[n].cpus->dai_name) { - arndale_rt5631_dai[n].cpus->of_node = of_parse_phandle(np, - "samsung,audio-cpu", n); - - if (!arndale_rt5631_dai[n].cpus->of_node) { - dev_err(&pdev->dev, - "Property 'samsung,audio-cpu' missing or invalid\n"); - return -EINVAL; - } - } - if (!arndale_rt5631_dai[n].platforms->name) - arndale_rt5631_dai[n].platforms->of_node = - arndale_rt5631_dai[n].cpus->of_node; - - arndale_rt5631_dai[n].codecs->name = NULL; - arndale_rt5631_dai[n].codecs->of_node = of_parse_phandle(np, - "samsung,audio-codec", n); - if (!arndale_rt5631_dai[0].codecs->of_node) { - dev_err(&pdev->dev, + if (!dai_link->platforms->name) + dai_link->platforms->of_node = dai_link->cpus->of_node; + + dai_link->codecs->of_node = of_parse_phandle(np, "samsung,audio-codec", 0); + if (!dai_link->codecs->of_node) { + dev_err(&pdev->dev, "Property 'samsung,audio-codec' missing or invalid\n"); - ret = -EINVAL; - goto err_put_of_nodes; - } + ret = -EINVAL; + goto err_put_of_nodes; } ret = devm_snd_soc_register_card(card->dev, card); -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
* Re: [PATCH v2 05/10] ASoC: samsung: arndale: Simplify DAI link initialization 2019-09-20 13:02 ` [PATCH v2 05/10] ASoC: samsung: arndale: Simplify DAI link initialization Sylwester Nawrocki @ 2019-10-01 11:21 ` Mark Brown 0 siblings, 0 replies; 30+ messages in thread From: Mark Brown @ 2019-10-01 11:21 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, krzk, robh+dt, linux-arm-kernel, m.szyprowski [-- Attachment #1.1: Type: text/plain, Size: 424 bytes --] On Fri, Sep 20, 2019 at 03:02:14PM +0200, Sylwester Nawrocki wrote: > There is only one DAI link so we can drop an unnecessary loop statement. > Use card->dai_link in place of direct static arndale_rt5631_dai[] array > dereference as a prerequisite for adding support for other CODECs. > Unnecessary assignment of dai_link->codecs->name to NULL is removed. This doesn't apply against current code, please check and resend. [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] [-- Attachment #2: Type: text/plain, Size: 176 bytes --] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <CGME20190920130320eucas1p1ade2cf71fadfd442bcd79748e8512e09@eucas1p1.samsung.com>]
* [PATCH v2 06/10] ASoC: dt-bindings: Document "samsung,arndale-wm1811" compatible [not found] ` <CGME20190920130320eucas1p1ade2cf71fadfd442bcd79748e8512e09@eucas1p1.samsung.com> @ 2019-09-20 13:02 ` Sylwester Nawrocki 2019-10-01 11:40 ` Applied "ASoC: dt-bindings: Document "samsung, arndale-wm1811" compatible" to the asoc tree Mark Brown 0 siblings, 1 reply; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:02 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski Add compatible string for boards with WM1811 CODEC to the list. Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> --- Changes since v1: - none --- Documentation/devicetree/bindings/sound/arndale.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/sound/arndale.txt b/Documentation/devicetree/bindings/sound/arndale.txt index 0e76946385ae..17530120ccfc 100644 --- a/Documentation/devicetree/bindings/sound/arndale.txt +++ b/Documentation/devicetree/bindings/sound/arndale.txt @@ -1,8 +1,9 @@ Audio Binding for Arndale boards Required properties: -- compatible : Can be the following, - "samsung,arndale-rt5631" +- compatible : Can be one of the following: + "samsung,arndale-rt5631", + "samsung,arndale-wm1811" - samsung,audio-cpu: The phandle of the Samsung I2S controller - samsung,audio-codec: The phandle of the audio codec -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
* Applied "ASoC: dt-bindings: Document "samsung, arndale-wm1811" compatible" to the asoc tree 2019-09-20 13:02 ` [PATCH v2 06/10] ASoC: dt-bindings: Document "samsung,arndale-wm1811" compatible Sylwester Nawrocki @ 2019-10-01 11:40 ` Mark Brown 0 siblings, 0 replies; 30+ messages in thread From: Mark Brown @ 2019-10-01 11:40 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, Krzysztof Kozlowski, robh+dt, Mark Brown, linux-arm-kernel, m.szyprowski The patch ASoC: dt-bindings: Document "samsung, arndale-wm1811" compatible has been applied to the asoc tree at https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-5.5 All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark From f4528af69fdc112247a78599c6e8f7f618aff4e6 Mon Sep 17 00:00:00 2001 From: Sylwester Nawrocki <s.nawrocki@samsung.com> Date: Fri, 20 Sep 2019 15:02:15 +0200 Subject: [PATCH] ASoC: dt-bindings: Document "samsung, arndale-wm1811" compatible Add compatible string for boards with WM1811 CODEC to the list. Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Link: https://lore.kernel.org/r/20190920130218.32690-7-s.nawrocki@samsung.com Signed-off-by: Mark Brown <broonie@kernel.org> --- Documentation/devicetree/bindings/sound/arndale.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/sound/arndale.txt b/Documentation/devicetree/bindings/sound/arndale.txt index 0e76946385ae..17530120ccfc 100644 --- a/Documentation/devicetree/bindings/sound/arndale.txt +++ b/Documentation/devicetree/bindings/sound/arndale.txt @@ -1,8 +1,9 @@ Audio Binding for Arndale boards Required properties: -- compatible : Can be the following, - "samsung,arndale-rt5631" +- compatible : Can be one of the following: + "samsung,arndale-rt5631", + "samsung,arndale-wm1811" - samsung,audio-cpu: The phandle of the Samsung I2S controller - samsung,audio-codec: The phandle of the audio codec -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
[parent not found: <CGME20190920130321eucas1p2efe85adb3df4c546a7d81326b4c75873@eucas1p2.samsung.com>]
* [PATCH v2 07/10] ASoC: samsung: arndale: Add support for WM1811 CODEC [not found] ` <CGME20190920130321eucas1p2efe85adb3df4c546a7d81326b4c75873@eucas1p2.samsung.com> @ 2019-09-20 13:02 ` Sylwester Nawrocki 2019-09-23 9:16 ` Krzysztof Kozlowski 2019-10-01 11:22 ` Mark Brown 0 siblings, 2 replies; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:02 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski The Arndale boards come with different types of the audio daughter board. In order to support the WM1811 one we add new definition of an ASoC card which will be registered when the driver matches on "samsung,arndale-wm1811" compatible. There is no runtime detection of the audio daughter board type at the moment, compatible string of the audio card needs to be adjusted in DT, e.g. by the bootloader, depending on actual audio board (CODEC) used. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> --- Changes since v1: - removed unneeded __maybe_used attribute --- sound/soc/samsung/Kconfig | 2 + sound/soc/samsung/arndale_rt5631.c | 85 +++++++++++++++++++++++++----- 2 files changed, 74 insertions(+), 13 deletions(-) diff --git a/sound/soc/samsung/Kconfig b/sound/soc/samsung/Kconfig index 638983123d8f..6803cbfa9e46 100644 --- a/sound/soc/samsung/Kconfig +++ b/sound/soc/samsung/Kconfig @@ -199,6 +199,8 @@ config SND_SOC_ARNDALE_RT5631_ALC5631 depends on I2C select SND_SAMSUNG_I2S select SND_SOC_RT5631 + select MFD_WM8994 + select SND_SOC_WM8994 config SND_SOC_SAMSUNG_TM2_WM5110 tristate "SoC I2S Audio support for WM5110 on TM2 board" diff --git a/sound/soc/samsung/arndale_rt5631.c b/sound/soc/samsung/arndale_rt5631.c index 004c84fafad9..1e8badb1b8f9 100644 --- a/sound/soc/samsung/arndale_rt5631.c +++ b/sound/soc/samsung/arndale_rt5631.c @@ -14,10 +14,11 @@ #include <sound/pcm.h> #include <sound/pcm_params.h> +#include "../codecs/wm8994.h" #include "i2s.h" -static int arndale_hw_params(struct snd_pcm_substream *substream, - struct snd_pcm_hw_params *params) +static int arndale_rt5631_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; @@ -47,13 +48,45 @@ static int arndale_hw_params(struct snd_pcm_substream *substream, return 0; } -static struct snd_soc_ops arndale_ops = { - .hw_params = arndale_hw_params, +static struct snd_soc_ops arndale_rt5631_ops = { + .hw_params = arndale_rt5631_hw_params, +}; + +static int arndale_wm1811_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) +{ + struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct snd_soc_dai *codec_dai = rtd->codec_dai; + unsigned int rfs, rclk; + + /* Ensure AIF1CLK is >= 3 MHz for optimal performance */ + if (params_width(params) == 24) + rfs = 384; + else if (params_rate(params) == 8000 || params_rate(params) == 11025) + rfs = 512; + else + rfs = 256; + + rclk = params_rate(params) * rfs; + + /* + * We add 1 to the frequency value to ensure proper EPLL setting + * for each audio sampling rate (see epll_24mhz_tbl in drivers/clk/ + * samsung/clk-exynos5250.c for list of available EPLL rates). + * The CODEC uses clk API and the value will be rounded hence the MCLK1 + * clock's frequency will still be exact multiple of the sample rate. + */ + return snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_MCLK1, + rclk + 1, SND_SOC_CLOCK_IN); +} + +static struct snd_soc_ops arndale_wm1811_ops = { + .hw_params = arndale_wm1811_hw_params, }; SND_SOC_DAILINK_DEFS(rt5631_hifi, DAILINK_COMP_ARRAY(COMP_EMPTY()), - DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "rt5631-hifi")), + DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "rt5631-aif1")), DAILINK_COMP_ARRAY(COMP_EMPTY())); static struct snd_soc_dai_link arndale_rt5631_dai[] = { @@ -63,11 +96,28 @@ static struct snd_soc_dai_link arndale_rt5631_dai[] = { .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS, - .ops = &arndale_ops, + .ops = &arndale_rt5631_ops, SND_SOC_DAILINK_REG(rt5631_hifi), }, }; +SND_SOC_DAILINK_DEFS(wm1811_hifi, + DAILINK_COMP_ARRAY(COMP_EMPTY()), + DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "wm8994-aif1")), + DAILINK_COMP_ARRAY(COMP_EMPTY())); + +static struct snd_soc_dai_link arndale_wm1811_dai[] = { + { + .name = "WM1811 HiFi", + .stream_name = "Primary", + .dai_fmt = SND_SOC_DAIFMT_I2S + | SND_SOC_DAIFMT_NB_NF + | SND_SOC_DAIFMT_CBM_CFM, + .ops = &arndale_wm1811_ops, + SND_SOC_DAILINK_REG(wm1811_hifi), + }, +}; + static struct snd_soc_card arndale_rt5631 = { .name = "Arndale RT5631", .owner = THIS_MODULE, @@ -75,6 +125,13 @@ static struct snd_soc_card arndale_rt5631 = { .num_links = ARRAY_SIZE(arndale_rt5631_dai), }; +static struct snd_soc_card arndale_wm1811 = { + .name = "Arndale WM1811", + .owner = THIS_MODULE, + .dai_link = arndale_wm1811_dai, + .num_links = ARRAY_SIZE(arndale_wm1811_dai), +}; + static void arndale_put_of_nodes(struct snd_soc_card *card) { struct snd_soc_dai_link *dai_link; @@ -89,10 +146,11 @@ static void arndale_put_of_nodes(struct snd_soc_card *card) static int arndale_audio_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; - struct snd_soc_card *card = &arndale_rt5631; + struct snd_soc_card *card; struct snd_soc_dai_link *dai_link; int ret; + card = (struct snd_soc_card *)of_device_get_match_data(&pdev->dev); card->dev = &pdev->dev; dai_link = card->dai_link; @@ -134,18 +192,19 @@ static int arndale_audio_remove(struct platform_device *pdev) return 0; } -static const struct of_device_id samsung_arndale_rt5631_of_match[] __maybe_unused = { - { .compatible = "samsung,arndale-rt5631", }, - { .compatible = "samsung,arndale-alc5631", }, +static const struct of_device_id arndale_audio_of_match[] = { + { .compatible = "samsung,arndale-rt5631", .data = &arndale_rt5631 }, + { .compatible = "samsung,arndale-alc5631", .data = &arndale_rt5631 }, + { .compatible = "samsung,arndale-wm1811", .data = &arndale_wm1811 }, {}, }; -MODULE_DEVICE_TABLE(of, samsung_arndale_rt5631_of_match); +MODULE_DEVICE_TABLE(of, arndale_of_match); static struct platform_driver arndale_audio_driver = { .driver = { - .name = "arndale-audio", + .name = "arndale-audio", .pm = &snd_soc_pm_ops, - .of_match_table = of_match_ptr(samsung_arndale_rt5631_of_match), + .of_match_table = arndale_audio_of_match, }, .probe = arndale_audio_probe, .remove = arndale_audio_remove, -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
* Re: [PATCH v2 07/10] ASoC: samsung: arndale: Add support for WM1811 CODEC 2019-09-20 13:02 ` [PATCH v2 07/10] ASoC: samsung: arndale: Add support for WM1811 CODEC Sylwester Nawrocki @ 2019-09-23 9:16 ` Krzysztof Kozlowski 2019-10-01 11:22 ` Mark Brown 1 sibling, 0 replies; 30+ messages in thread From: Krzysztof Kozlowski @ 2019-09-23 9:16 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, broonie, linux-arm-kernel, m.szyprowski On Fri, Sep 20, 2019 at 03:02:16PM +0200, Sylwester Nawrocki wrote: > The Arndale boards come with different types of the audio daughter > board. In order to support the WM1811 one we add new definition of > an ASoC card which will be registered when the driver matches on > "samsung,arndale-wm1811" compatible. There is no runtime detection of > the audio daughter board type at the moment, compatible string of the > audio card needs to be adjusted in DT, e.g. by the bootloader, > depending on actual audio board (CODEC) used. > > Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > --- > Changes since v1: > - removed unneeded __maybe_used attribute > --- > sound/soc/samsung/Kconfig | 2 + > sound/soc/samsung/arndale_rt5631.c | 85 +++++++++++++++++++++++++----- > 2 files changed, 74 insertions(+), 13 deletions(-) Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Best regards, Krzysztof _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v2 07/10] ASoC: samsung: arndale: Add support for WM1811 CODEC 2019-09-20 13:02 ` [PATCH v2 07/10] ASoC: samsung: arndale: Add support for WM1811 CODEC Sylwester Nawrocki 2019-09-23 9:16 ` Krzysztof Kozlowski @ 2019-10-01 11:22 ` Mark Brown 1 sibling, 0 replies; 30+ messages in thread From: Mark Brown @ 2019-10-01 11:22 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, krzk, robh+dt, linux-arm-kernel, m.szyprowski [-- Attachment #1.1: Type: text/plain, Size: 599 bytes --] On Fri, Sep 20, 2019 at 03:02:16PM +0200, Sylwester Nawrocki wrote: > The Arndale boards come with different types of the audio daughter > board. In order to support the WM1811 one we add new definition of > an ASoC card which will be registered when the driver matches on > "samsung,arndale-wm1811" compatible. There is no runtime detection of > the audio daughter board type at the moment, compatible string of the > audio card needs to be adjusted in DT, e.g. by the bootloader, > depending on actual audio board (CODEC) used. This doesn't apply against current code, please check and resend. [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] [-- Attachment #2: Type: text/plain, Size: 176 bytes --] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <CGME20190920130323eucas1p218c6822eca3869eb0d3b7380497bbca4@eucas1p2.samsung.com>]
* [PATCH v2 08/10] ASoC: samsung: Rename Arndale card driver [not found] ` <CGME20190920130323eucas1p218c6822eca3869eb0d3b7380497bbca4@eucas1p2.samsung.com> @ 2019-09-20 13:02 ` Sylwester Nawrocki 2019-09-23 9:17 ` Krzysztof Kozlowski 2019-10-01 11:22 ` Mark Brown 0 siblings, 2 replies; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:02 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski Rename arndale_rt5631.c to just arnddale.c as we support other CODECs than RT5631. While at it replace spaces in Kconfig with tabs. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> --- Changes since v1: - new patch. --- sound/soc/samsung/Kconfig | 10 +++++----- sound/soc/samsung/Makefile | 4 ++-- sound/soc/samsung/{arndale_rt5631.c => arndale.c} | 0 3 files changed, 7 insertions(+), 7 deletions(-) rename sound/soc/samsung/{arndale_rt5631.c => arndale.c} (100%) diff --git a/sound/soc/samsung/Kconfig b/sound/soc/samsung/Kconfig index 6803cbfa9e46..1a0b163ca47b 100644 --- a/sound/soc/samsung/Kconfig +++ b/sound/soc/samsung/Kconfig @@ -194,11 +194,11 @@ config SND_SOC_ODROID help Say Y here to enable audio support for the Odroid XU3/XU4. -config SND_SOC_ARNDALE_RT5631_ALC5631 - tristate "Audio support for RT5631(ALC5631) on Arndale Board" - depends on I2C - select SND_SAMSUNG_I2S - select SND_SOC_RT5631 +config SND_SOC_ARNDALE + tristate "Audio support for Arndale Board" + depends on I2C + select SND_SAMSUNG_I2S + select SND_SOC_RT5631 select MFD_WM8994 select SND_SOC_WM8994 diff --git a/sound/soc/samsung/Makefile b/sound/soc/samsung/Makefile index c3b76035f69c..8f5dfe20b9f1 100644 --- a/sound/soc/samsung/Makefile +++ b/sound/soc/samsung/Makefile @@ -39,7 +39,7 @@ snd-soc-lowland-objs := lowland.o snd-soc-littlemill-objs := littlemill.o snd-soc-bells-objs := bells.o snd-soc-odroid-objs := odroid.o -snd-soc-arndale-rt5631-objs := arndale_rt5631.o +snd-soc-arndale-objs := arndale.o snd-soc-tm2-wm5110-objs := tm2_wm5110.o obj-$(CONFIG_SND_SOC_SAMSUNG_JIVE_WM8750) += snd-soc-jive-wm8750.o @@ -62,5 +62,5 @@ obj-$(CONFIG_SND_SOC_LOWLAND) += snd-soc-lowland.o obj-$(CONFIG_SND_SOC_LITTLEMILL) += snd-soc-littlemill.o obj-$(CONFIG_SND_SOC_BELLS) += snd-soc-bells.o obj-$(CONFIG_SND_SOC_ODROID) += snd-soc-odroid.o -obj-$(CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631) += snd-soc-arndale-rt5631.o +obj-$(CONFIG_SND_SOC_ARNDALE) += snd-soc-arndale.o obj-$(CONFIG_SND_SOC_SAMSUNG_TM2_WM5110) += snd-soc-tm2-wm5110.o diff --git a/sound/soc/samsung/arndale_rt5631.c b/sound/soc/samsung/arndale.c similarity index 100% rename from sound/soc/samsung/arndale_rt5631.c rename to sound/soc/samsung/arndale.c -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
* Re: [PATCH v2 08/10] ASoC: samsung: Rename Arndale card driver 2019-09-20 13:02 ` [PATCH v2 08/10] ASoC: samsung: Rename Arndale card driver Sylwester Nawrocki @ 2019-09-23 9:17 ` Krzysztof Kozlowski 2019-10-01 11:22 ` Mark Brown 1 sibling, 0 replies; 30+ messages in thread From: Krzysztof Kozlowski @ 2019-09-23 9:17 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, broonie, linux-arm-kernel, m.szyprowski On Fri, Sep 20, 2019 at 03:02:17PM +0200, Sylwester Nawrocki wrote: > Rename arndale_rt5631.c to just arnddale.c as we support other CODECs > than RT5631. While at it replace spaces in Kconfig with tabs. > > Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > --- > Changes since v1: > - new patch. > --- > sound/soc/samsung/Kconfig | 10 +++++----- > sound/soc/samsung/Makefile | 4 ++-- > sound/soc/samsung/{arndale_rt5631.c => arndale.c} | 0 > 3 files changed, 7 insertions(+), 7 deletions(-) > rename sound/soc/samsung/{arndale_rt5631.c => arndale.c} (100%) Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Best regards, Krzysztof _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v2 08/10] ASoC: samsung: Rename Arndale card driver 2019-09-20 13:02 ` [PATCH v2 08/10] ASoC: samsung: Rename Arndale card driver Sylwester Nawrocki 2019-09-23 9:17 ` Krzysztof Kozlowski @ 2019-10-01 11:22 ` Mark Brown 1 sibling, 0 replies; 30+ messages in thread From: Mark Brown @ 2019-10-01 11:22 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, krzk, robh+dt, linux-arm-kernel, m.szyprowski [-- Attachment #1.1: Type: text/plain, Size: 272 bytes --] On Fri, Sep 20, 2019 at 03:02:17PM +0200, Sylwester Nawrocki wrote: > Rename arndale_rt5631.c to just arnddale.c as we support other CODECs > than RT5631. While at it replace spaces in Kconfig with tabs. This doesn't apply against current code, please check and resend. [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] [-- Attachment #2: Type: text/plain, Size: 176 bytes --] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <CGME20190920130324eucas1p118bfab45306a29752bf4c1cfdd8f61a1@eucas1p1.samsung.com>]
* [PATCH v2 09/10] ARM: dts: arndale: Add audio support (WM1811 CODEC boards) [not found] ` <CGME20190920130324eucas1p118bfab45306a29752bf4c1cfdd8f61a1@eucas1p1.samsung.com> @ 2019-09-20 13:02 ` Sylwester Nawrocki 2019-10-02 14:42 ` Krzysztof Kozlowski 0 siblings, 1 reply; 30+ messages in thread From: Sylwester Nawrocki @ 2019-09-20 13:02 UTC (permalink / raw) To: broonie, krzk Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, Sylwester Nawrocki, linux-arm-kernel, m.szyprowski Add sound node and the clock configurations for the I2S controller for audio support on the Exynos5250 SoC Arndale boards with WM1811 based audio daughter board. We need to increase drive strength of the I2S bus, otherwise the audio CODEC doesn't work. Likely the CODEC's master clock is the main issue here. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> --- Changes since v1: - moved &clock, &clock_audss parts to preserve alphabetical order --- arch/arm/boot/dts/exynos5250-arndale.dts | 27 +++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/arch/arm/boot/dts/exynos5250-arndale.dts b/arch/arm/boot/dts/exynos5250-arndale.dts index dc6fa6fe83f1..7247efe2ec12 100644 --- a/arch/arm/boot/dts/exynos5250-arndale.dts +++ b/arch/arm/boot/dts/exynos5250-arndale.dts @@ -11,6 +11,7 @@ #include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/input/input.h> #include <dt-bindings/clock/samsung,s2mps11.h> +#include <dt-bindings/sound/samsung-i2s.h> #include "exynos5250.dtsi" / { @@ -135,6 +136,12 @@ }; }; + sound { + compatible = "samsung,arndale-wm1811"; + samsung,audio-cpu = <&i2s0>; + samsung,audio-codec = <&wm1811>; + }; + fixed-rate-clocks { xxti { compatible = "samsung,clock-xxti"; @@ -151,6 +158,16 @@ }; }; +&clock { + assigned-clocks = <&clock CLK_FOUT_EPLL>; + assigned-clock-rates = <49152000>; +}; + +&clock_audss { + assigned-clocks = <&clock_audss EXYNOS_MOUT_AUDSS>; + assigned-clock-parents = <&clock CLK_FOUT_EPLL>; +}; + &cpu0 { cpu0-supply = <&buck2_reg>; }; @@ -502,9 +519,11 @@ &i2c_3 { status = "okay"; - wm1811a@1a { + wm1811: codec@1a { compatible = "wlf,wm1811"; reg = <0x1a>; + clocks = <&i2s0 CLK_I2S_CDCLK>; + clock-names = "MCLK1"; AVDD2-supply = <&main_dc_reg>; CPVDD-supply = <&main_dc_reg>; @@ -540,9 +559,15 @@ }; &i2s0 { + assigned-clocks = <&i2s0 CLK_I2S_RCLK_SRC>; + assigned-clock-parents = <&clock_audss EXYNOS_I2S_BUS>; status = "okay"; }; +&i2s0_bus { + samsung,pin-drv = <EXYNOS4_PIN_DRV_LV2>; +}; + &mixer { status = "okay"; }; -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 30+ messages in thread
* Re: [PATCH v2 09/10] ARM: dts: arndale: Add audio support (WM1811 CODEC boards) 2019-09-20 13:02 ` [PATCH v2 09/10] ARM: dts: arndale: Add audio support (WM1811 CODEC boards) Sylwester Nawrocki @ 2019-10-02 14:42 ` Krzysztof Kozlowski 0 siblings, 0 replies; 30+ messages in thread From: Krzysztof Kozlowski @ 2019-10-02 14:42 UTC (permalink / raw) To: Sylwester Nawrocki Cc: devicetree, alsa-devel, linux-samsung-soc, ckeepax, b.zolnierkie, sbkim73, patches, lgirdwood, robh+dt, broonie, linux-arm-kernel, m.szyprowski On Fri, Sep 20, 2019 at 03:02:18PM +0200, Sylwester Nawrocki wrote: > Add sound node and the clock configurations for the I2S controller > for audio support on the Exynos5250 SoC Arndale boards with > WM1811 based audio daughter board. > > We need to increase drive strength of the I2S bus, otherwise > the audio CODEC doesn't work. Likely the CODEC's master clock > is the main issue here. > > Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > --- > Changes since v1: > - moved &clock, &clock_audss parts to preserve alphabetical order > --- > arch/arm/boot/dts/exynos5250-arndale.dts | 27 +++++++++++++++++++++++- > 1 file changed, 26 insertions(+), 1 deletion(-) This does not apply. Please rebase and resend. Best regards, Krzysztof _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 30+ messages in thread
end of thread, other threads:[~2019-10-02 17:20 UTC | newest] Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20190920130238eucas1p147fca337fa84592ac7f83760449e26a1@eucas1p1.samsung.com> 2019-09-20 13:02 ` [PATCH v2 00/10] Basic sound support for Arndale board / wm8994 updates Sylwester Nawrocki [not found] ` <CGME20190920130313eucas1p27758c613ab3a10296b92974f14bd521d@eucas1p2.samsung.com> 2019-09-20 13:02 ` [PATCH v2 01/10] ASoC: wm8994: Do not register inapplicable controls for WM1811 Sylwester Nawrocki [not found] ` <CGME20190920130711eucas1p29497b40981e4e0a24769ced4e06be208@eucas1p2.samsung.com> 2019-09-20 13:07 ` [PATCH v2 10/10] ARM: exynos_defconfig: Enable Arndale audio driver Sylwester Nawrocki 2019-10-02 17:20 ` Krzysztof Kozlowski 2019-09-23 21:22 ` Applied "ASoC: wm8994: Do not register inapplicable controls for WM1811" to the asoc tree Mark Brown [not found] ` <CGME20190920130315eucas1p2a31543214fedcdfe86196f176f554a35@eucas1p2.samsung.com> 2019-09-20 13:02 ` [PATCH v2 02/10] ASoC: samsung: arndale: Add missing OF node dereferencing Sylwester Nawrocki 2019-09-23 9:08 ` Krzysztof Kozlowski 2019-09-23 21:22 ` Applied "ASoC: samsung: arndale: Add missing OF node dereferencing" to the asoc tree Mark Brown [not found] ` <CGME20190920130316eucas1p2de713006a13c62c0b895c2e33e0d14c7@eucas1p2.samsung.com> 2019-09-20 13:02 ` [PATCH v2 03/10] ASoC: wm8994: Add support for setting MCLK clock rate Sylwester Nawrocki 2019-09-23 9:10 ` Sylwester Nawrocki 2019-09-23 9:25 ` Charles Keepax 2019-09-23 10:09 ` Krzysztof Kozlowski 2019-10-01 11:40 ` Applied "ASoC: wm8994: Add support for setting MCLK clock rate" to the asoc tree Mark Brown [not found] ` <CGME20190920130317eucas1p188d724710077d704f768798c6555c741@eucas1p1.samsung.com> 2019-09-20 13:02 ` [PATCH v2 04/10] ASoC: wm8994: Add support for MCLKn clock gating Sylwester Nawrocki 2019-09-23 8:51 ` Charles Keepax 2019-09-23 9:13 ` Sylwester Nawrocki 2019-09-23 9:09 ` Krzysztof Kozlowski 2019-10-01 11:40 ` Applied "ASoC: wm8994: Add support for MCLKn clock gating" to the asoc tree Mark Brown [not found] ` <CGME20190920130318eucas1p126cc8be60118ffbf1f332626dde1c05a@eucas1p1.samsung.com> 2019-09-20 13:02 ` [PATCH v2 05/10] ASoC: samsung: arndale: Simplify DAI link initialization Sylwester Nawrocki 2019-10-01 11:21 ` Mark Brown [not found] ` <CGME20190920130320eucas1p1ade2cf71fadfd442bcd79748e8512e09@eucas1p1.samsung.com> 2019-09-20 13:02 ` [PATCH v2 06/10] ASoC: dt-bindings: Document "samsung,arndale-wm1811" compatible Sylwester Nawrocki 2019-10-01 11:40 ` Applied "ASoC: dt-bindings: Document "samsung, arndale-wm1811" compatible" to the asoc tree Mark Brown [not found] ` <CGME20190920130321eucas1p2efe85adb3df4c546a7d81326b4c75873@eucas1p2.samsung.com> 2019-09-20 13:02 ` [PATCH v2 07/10] ASoC: samsung: arndale: Add support for WM1811 CODEC Sylwester Nawrocki 2019-09-23 9:16 ` Krzysztof Kozlowski 2019-10-01 11:22 ` Mark Brown [not found] ` <CGME20190920130323eucas1p218c6822eca3869eb0d3b7380497bbca4@eucas1p2.samsung.com> 2019-09-20 13:02 ` [PATCH v2 08/10] ASoC: samsung: Rename Arndale card driver Sylwester Nawrocki 2019-09-23 9:17 ` Krzysztof Kozlowski 2019-10-01 11:22 ` Mark Brown [not found] ` <CGME20190920130324eucas1p118bfab45306a29752bf4c1cfdd8f61a1@eucas1p1.samsung.com> 2019-09-20 13:02 ` [PATCH v2 09/10] ARM: dts: arndale: Add audio support (WM1811 CODEC boards) Sylwester Nawrocki 2019-10-02 14:42 ` Krzysztof Kozlowski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).