Commit ba5d553b authored by Dragos Tarcatu's avatar Dragos Tarcatu Committed by Mark Brown

ASoC: rsnd: add support for 8 bit S8 format

This patch adds support for SNDRV_PCM_FMTBIT_S8 format.
Signed-off-by: default avatarDragos Tarcatu <dragos_tarcatu@mentor.com>
Signed-off-by: default avatarJiada Wang <jiada_wang@mentor.com>
Signed-off-by: default avatarTimo Wischer <twischer@de.adit-jv.com>
[Kuninori: tidyup for upstream]
Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: default avatarHiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 3791b3ee
...@@ -102,7 +102,9 @@ ...@@ -102,7 +102,9 @@
#include "rsnd.h" #include "rsnd.h"
#define RSND_RATES SNDRV_PCM_RATE_8000_192000 #define RSND_RATES SNDRV_PCM_RATE_8000_192000
#define RSND_FMTS (SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S16_LE) #define RSND_FMTS (SNDRV_PCM_FMTBIT_S8 |\
SNDRV_PCM_FMTBIT_S16_LE |\
SNDRV_PCM_FMTBIT_S24_LE)
static const struct of_device_id rsnd_of_match[] = { static const struct of_device_id rsnd_of_match[] = {
{ .compatible = "renesas,rcar_sound-gen1", .data = (void *)RSND_GEN1 }, { .compatible = "renesas,rcar_sound-gen1", .data = (void *)RSND_GEN1 },
...@@ -280,6 +282,8 @@ u32 rsnd_get_adinr_bit(struct rsnd_mod *mod, struct rsnd_dai_stream *io) ...@@ -280,6 +282,8 @@ u32 rsnd_get_adinr_bit(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
struct device *dev = rsnd_priv_to_dev(priv); struct device *dev = rsnd_priv_to_dev(priv);
switch (snd_pcm_format_width(runtime->format)) { switch (snd_pcm_format_width(runtime->format)) {
case 8:
return 16 << 16;
case 16: case 16:
return 8 << 16; return 8 << 16;
case 24: case 24:
...@@ -331,7 +335,7 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io) ...@@ -331,7 +335,7 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
target = cmd ? cmd : ssiu; target = cmd ? cmd : ssiu;
} }
/* Non target mod or 24bit data needs normal DALIGN */ /* Non target mod or non 16bit needs normal DALIGN */
if ((snd_pcm_format_width(runtime->format) != 16) || if ((snd_pcm_format_width(runtime->format) != 16) ||
(mod != target)) (mod != target))
return 0x76543210; return 0x76543210;
...@@ -367,7 +371,7 @@ u32 rsnd_get_busif_shift(struct rsnd_dai_stream *io, struct rsnd_mod *mod) ...@@ -367,7 +371,7 @@ u32 rsnd_get_busif_shift(struct rsnd_dai_stream *io, struct rsnd_mod *mod)
* HW 24bit data is located as 0x******00 * HW 24bit data is located as 0x******00
* *
*/ */
if (snd_pcm_format_width(runtime->format) == 16) if (snd_pcm_format_width(runtime->format) != 24)
return 0; return 0;
for (i = 0; i < ARRAY_SIZE(playback_mods); i++) { for (i = 0; i < ARRAY_SIZE(playback_mods); i++) {
......
...@@ -400,6 +400,9 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod, ...@@ -400,6 +400,9 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
cr_own &= ~DWL_MASK; cr_own &= ~DWL_MASK;
switch (snd_pcm_format_width(runtime->format)) { switch (snd_pcm_format_width(runtime->format)) {
case 8:
cr_own |= DWL_8;
break;
case 16: case 16:
cr_own |= DWL_16; cr_own |= DWL_16;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment