ASoC: rsnd: add support for 8 bit S8 format
authorDragos Tarcatu <dragos_tarcatu@mentor.com>
Mon, 3 Sep 2018 07:06:29 +0000 (07:06 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 3 Sep 2018 13:37:13 +0000 (14:37 +0100)
This patch adds support for SNDRV_PCM_FMTBIT_S8 format.

Signed-off-by: Dragos Tarcatu <dragos_tarcatu@mentor.com>
Signed-off-by: Jiada Wang <jiada_wang@mentor.com>
Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
[Kuninori: tidyup for upstream]
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sh/rcar/core.c
sound/soc/sh/rcar/ssi.c

index 8a417768b7ef7d7a3c92f058cb61f26756d262f1..cd0ff1eef463eedddc2f3d879934baafa432ef87 100644 (file)
 #include "rsnd.h"
 
 #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[] = {
        { .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)
        struct device *dev = rsnd_priv_to_dev(priv);
 
        switch (snd_pcm_format_width(runtime->format)) {
+       case 8:
+               return 16 << 16;
        case 16:
                return 8 << 16;
        case 24:
@@ -331,7 +335,7 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
                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) ||
            (mod != target))
                return 0x76543210;
@@ -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
         *
         */
-       if (snd_pcm_format_width(runtime->format) == 16)
+       if (snd_pcm_format_width(runtime->format) != 24)
                return 0;
 
        for (i = 0; i < ARRAY_SIZE(playback_mods); i++) {
index f707f53748bd1a6935556ae6fa841f1be26823b8..765ecc06c7c9ba5f77599795278623471b9af35e 100644 (file)
@@ -400,6 +400,9 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
 
        cr_own &= ~DWL_MASK;
        switch (snd_pcm_format_width(runtime->format)) {
+       case 8:
+               cr_own |= DWL_8;
+               break;
        case 16:
                cr_own |= DWL_16;
                break;