ASoC: rsnd: use common rsnd_ssi_status_xxx()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 26 Oct 2015 08:42:09 +0000 (08:42 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 16 Nov 2015 10:09:29 +0000 (10:09 +0000)
Current ssi.c driver has random access to SSISR register. Let's use
common rsnd_ssi_status_xxx() function

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sh/rcar/ssi.c

index 86e51ce66b10a9709f9eb9d5d602d9745d238e8e..ad5539def58f103fb3bc506cb3668653d30771eb 100644 (file)
@@ -105,6 +105,16 @@ int rsnd_ssi_use_busif(struct rsnd_dai_stream *io)
        return use_busif;
 }
 
+static void rsnd_ssi_status_clear(struct rsnd_mod *mod)
+{
+       rsnd_mod_write(mod, SSISR, 0);
+}
+
+static u32 rsnd_ssi_status_get(struct rsnd_mod *mod)
+{
+       return rsnd_mod_read(mod, SSISR);
+}
+
 static void rsnd_ssi_status_check(struct rsnd_mod *mod,
                                  u32 bit)
 {
@@ -114,7 +124,7 @@ static void rsnd_ssi_status_check(struct rsnd_mod *mod,
        int i;
 
        for (i = 0; i < 1024; i++) {
-               status = rsnd_mod_read(mod, SSISR);
+               status = rsnd_ssi_status_get(mod);
                if (status & bit)
                        return;
 
@@ -245,7 +255,7 @@ static void rsnd_ssi_hw_start(struct rsnd_ssi *ssi,
                rsnd_mod_write(mod, SSIWSR, CONT);
 
        /* clear error status */
-       rsnd_mod_write(mod, SSISR, 0);
+       rsnd_ssi_status_clear(mod);
 
        ssi->usrcnt++;
 
@@ -406,17 +416,20 @@ static int rsnd_ssi_hw_params(struct rsnd_mod *mod,
        return 0;
 }
 
-static void rsnd_ssi_record_error(struct rsnd_ssi *ssi, u32 status)
+static u32 rsnd_ssi_record_error(struct rsnd_ssi *ssi)
 {
        struct rsnd_mod *mod = rsnd_mod_get(ssi);
+       u32 status = rsnd_ssi_status_get(mod);
 
        /* under/over flow error */
        if (status & (UIRQ | OIRQ)) {
                ssi->err++;
 
                /* clear error status */
-               rsnd_mod_write(mod, SSISR, 0);
+               rsnd_ssi_status_clear(mod);
        }
+
+       return status;
 }
 
 static int rsnd_ssi_start(struct rsnd_mod *mod,
@@ -442,7 +455,7 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
 
        rsnd_ssi_irq_disable(mod);
 
-       rsnd_ssi_record_error(ssi, rsnd_mod_read(mod, SSISR));
+       rsnd_ssi_record_error(ssi);
 
        rsnd_ssi_hw_stop(io, ssi);
 
@@ -467,7 +480,7 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
        if (!rsnd_io_is_working(io))
                goto rsnd_ssi_interrupt_out;
 
-       status = rsnd_mod_read(mod, SSISR);
+       status = rsnd_ssi_record_error(ssi);
 
        /* PIO only */
        if (!is_dma && (status & DIRQ)) {
@@ -500,8 +513,6 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
                rsnd_ssi_start(mod, io, priv);
        }
 
-       rsnd_ssi_record_error(ssi, status);
-
        if (ssi->err > 1024) {
                rsnd_ssi_irq_disable(mod);