diff options
author | Claudiu Beznea <claudiu.beznea@microchip.com> | 2022-02-04 15:57:50 +0200 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2022-02-24 19:05:28 +0100 |
commit | e58cd453d58b20c6a6f34d3591640aa19aa14d25 (patch) | |
tree | a4fef5f5d79575a7a60b516482ee114c1dbc932e /target/linux/at91/patches-5.10/192-ASoC-codecs-ad193x-add-support-for-96kHz-and-192kHz-.patch | |
parent | 3ed992a99630457f660761ce199e3d2a00f06168 (diff) | |
download | upstream-e58cd453d58b20c6a6f34d3591640aa19aa14d25.tar.gz upstream-e58cd453d58b20c6a6f34d3591640aa19aa14d25.tar.bz2 upstream-e58cd453d58b20c6a6f34d3591640aa19aa14d25.zip |
at91: add kernel support for sama7g5 soc
Add kernel support for SAMA7G5 by back-porting mainline kernel patches.
Among SAMA7G5 features could be remembered:
- ARM Cortex-A7
- double data rate multi-port dynamic RAM controller supporting DDR2,
DDR3, DDR3L, LPDDR2, LPDDR3 up to 533MHz
- peripherals for audio, video processing
- 1 gigabit + 1 megabit Ethernet controllers
- 6 CAN controllers
- trust zone support
- DVFS for CPU
- criptography IPs
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Diffstat (limited to 'target/linux/at91/patches-5.10/192-ASoC-codecs-ad193x-add-support-for-96kHz-and-192kHz-.patch')
-rw-r--r-- | target/linux/at91/patches-5.10/192-ASoC-codecs-ad193x-add-support-for-96kHz-and-192kHz-.patch | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/target/linux/at91/patches-5.10/192-ASoC-codecs-ad193x-add-support-for-96kHz-and-192kHz-.patch b/target/linux/at91/patches-5.10/192-ASoC-codecs-ad193x-add-support-for-96kHz-and-192kHz-.patch new file mode 100644 index 0000000000..54fe85861f --- /dev/null +++ b/target/linux/at91/patches-5.10/192-ASoC-codecs-ad193x-add-support-for-96kHz-and-192kHz-.patch @@ -0,0 +1,98 @@ +From 1c906a59a60887e1b997ebab63f19f33a1c69a3e Mon Sep 17 00:00:00 2001 +From: Codrin Ciubotariu <codrin.ciubotariu@microchip.com> +Date: Tue, 3 Aug 2021 13:48:25 +0300 +Subject: [PATCH 192/247] ASoC: codecs: ad193x: add support for 96kHz and + 192kHz playback rates + +ad193x devices support 96KHz and 192KHz sampling rates, when PLL/MCLK is +referenced to 48kHz. +Tested on ad1934. + +Signed-off-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com> +Link: https://lore.kernel.org/r/20210803104825.2198335-1-codrin.ciubotariu@microchip.com +Signed-off-by: Mark Brown <broonie@kernel.org> +--- + sound/soc/codecs/ad193x.c | 30 ++++++++++++++++++++++++++++-- + sound/soc/codecs/ad193x.h | 4 ++++ + 2 files changed, 32 insertions(+), 2 deletions(-) + +diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c +index f37ab7eda615..278a55af158b 100644 +--- a/sound/soc/codecs/ad193x.c ++++ b/sound/soc/codecs/ad193x.c +@@ -316,6 +316,13 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream, + int word_len = 0, master_rate = 0; + struct snd_soc_component *component = dai->component; + struct ad193x_priv *ad193x = snd_soc_component_get_drvdata(component); ++ bool is_playback = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; ++ u8 dacc0; ++ ++ dev_dbg(dai->dev, "%s() rate=%u format=%#x width=%u channels=%u\n", ++ __func__, params_rate(params), params_format(params), ++ params_width(params), params_channels(params)); ++ + + /* bit size */ + switch (params_width(params)) { +@@ -346,6 +353,25 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream, + break; + } + ++ if (is_playback) { ++ switch (params_rate(params)) { ++ case 48000: ++ dacc0 = AD193X_DAC_SR_48; ++ break; ++ case 96000: ++ dacc0 = AD193X_DAC_SR_96; ++ break; ++ case 192000: ++ dacc0 = AD193X_DAC_SR_192; ++ break; ++ default: ++ dev_err(dai->dev, "invalid sampling rate: %d\n", params_rate(params)); ++ return -EINVAL; ++ } ++ ++ regmap_update_bits(ad193x->regmap, AD193X_DAC_CTRL0, AD193X_DAC_SR_MASK, dacc0); ++ } ++ + regmap_update_bits(ad193x->regmap, AD193X_PLL_CLK_CTRL0, + AD193X_PLL_INPUT_MASK, master_rate); + +@@ -385,7 +411,7 @@ static struct snd_soc_dai_driver ad193x_dai = { + .stream_name = "Playback", + .channels_min = 2, + .channels_max = 8, +- .rates = SNDRV_PCM_RATE_48000, ++ .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_192000, + .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S16_LE | + SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE, + }, +@@ -407,7 +433,7 @@ static struct snd_soc_dai_driver ad193x_no_adc_dai = { + .stream_name = "Playback", + .channels_min = 2, + .channels_max = 8, +- .rates = SNDRV_PCM_RATE_48000, ++ .rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_192000, + .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S16_LE | + SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE, + }, +diff --git a/sound/soc/codecs/ad193x.h b/sound/soc/codecs/ad193x.h +index 377854712c20..61f4648861d5 100644 +--- a/sound/soc/codecs/ad193x.h ++++ b/sound/soc/codecs/ad193x.h +@@ -37,6 +37,10 @@ int ad193x_probe(struct device *dev, struct regmap *regmap, + #define AD193X_PLL_CLK_SRC_MCLK (1 << 1) + #define AD193X_DAC_CTRL0 0x02 + #define AD193X_DAC_POWERDOWN 0x01 ++#define AD193X_DAC_SR_MASK 0x06 ++#define AD193X_DAC_SR_48 (0 << 1) ++#define AD193X_DAC_SR_96 (1 << 1) ++#define AD193X_DAC_SR_192 (2 << 1) + #define AD193X_DAC_SERFMT_MASK 0xC0 + #define AD193X_DAC_SERFMT_STEREO (0 << 6) + #define AD193X_DAC_SERFMT_TDM (1 << 6) +-- +2.32.0 + |