OSDN Git Service

ASoC: rsnd: rsnd_write() / rsnd_bset() uses regmap _force_ function
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 15 Feb 2016 05:26:51 +0000 (05:26 +0000)
committerMark Brown <broonie@kernel.org>
Wed, 2 Mar 2016 03:59:17 +0000 (12:59 +0900)
Some R-Car sound requests picky register access which needs *force*
register write.
Some status register needs to set 1 to clear status, but we might
read 1 from its register. In such case, current regmap does nothing
and driver will be forever loop
To reduce code complexity, this patch uses regmap _force_
function for all register access.

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

index 271d29a..46c0ba7 100644 (file)
@@ -104,23 +104,6 @@ void rsnd_write(struct rsnd_priv *priv,
        if (!rsnd_is_accessible_reg(priv, gen, reg))
                return;
 
-       regmap_fields_write(gen->regs[reg], rsnd_mod_id(mod), data);
-
-       dev_dbg(dev, "w %s[%d] - %-18s (%4d) : %08x\n",
-               rsnd_mod_name(mod), rsnd_mod_id(mod),
-               rsnd_reg_name(gen, reg), reg, data);
-}
-
-void rsnd_force_write(struct rsnd_priv *priv,
-                     struct rsnd_mod *mod,
-                     enum rsnd_reg reg, u32 data)
-{
-       struct device *dev = rsnd_priv_to_dev(priv);
-       struct rsnd_gen *gen = rsnd_priv_to_gen(priv);
-
-       if (!rsnd_is_accessible_reg(priv, gen, reg))
-               return;
-
        regmap_fields_force_write(gen->regs[reg], rsnd_mod_id(mod), data);
 
        dev_dbg(dev, "w %s[%d] - %-18s (%4d) : %08x\n",
@@ -137,8 +120,8 @@ void rsnd_bset(struct rsnd_priv *priv, struct rsnd_mod *mod,
        if (!rsnd_is_accessible_reg(priv, gen, reg))
                return;
 
-       regmap_fields_update_bits(gen->regs[reg], rsnd_mod_id(mod),
-                                 mask, data);
+       regmap_fields_force_update_bits(gen->regs[reg],
+                                       rsnd_mod_id(mod), mask, data);
 
        dev_dbg(dev, "b %s[%d] - %-18s (%4d) : %08x/%08x\n",
                rsnd_mod_name(mod), rsnd_mod_id(mod),
index 5f613eb..305cc08 100644 (file)
@@ -182,8 +182,6 @@ struct rsnd_dai_stream;
        rsnd_read(rsnd_mod_to_priv(m), m, RSND_REG_##r)
 #define rsnd_mod_write(m, r, d) \
        rsnd_write(rsnd_mod_to_priv(m), m, RSND_REG_##r, d)
-#define rsnd_mod_force_write(m, r, d) \
-       rsnd_force_write(rsnd_mod_to_priv(m), m, RSND_REG_##r, d)
 #define rsnd_mod_bset(m, r, s, d) \
        rsnd_bset(rsnd_mod_to_priv(m), m, RSND_REG_##r, s, d)