aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/sh/rcar/gen.c16
-rw-r--r--sound/soc/sh/rcar/rsnd.h4
2 files changed, 20 insertions, 0 deletions
diff --git a/sound/soc/sh/rcar/gen.c b/sound/soc/sh/rcar/gen.c
index 8c7dc51b1c4f..48f704b1d80e 100644
--- a/sound/soc/sh/rcar/gen.c
+++ b/sound/soc/sh/rcar/gen.c
@@ -103,6 +103,22 @@ void rsnd_write(struct rsnd_priv *priv,
103 regmap_fields_write(gen->regs[reg], rsnd_mod_id(mod), data); 103 regmap_fields_write(gen->regs[reg], rsnd_mod_id(mod), data);
104} 104}
105 105
106void rsnd_force_write(struct rsnd_priv *priv,
107 struct rsnd_mod *mod,
108 enum rsnd_reg reg, u32 data)
109{
110 struct device *dev = rsnd_priv_to_dev(priv);
111 struct rsnd_gen *gen = rsnd_priv_to_gen(priv);
112
113 if (!rsnd_is_accessible_reg(priv, gen, reg))
114 return;
115
116 dev_dbg(dev, "w %s[%d] - %4d : %08x\n",
117 rsnd_mod_name(mod), rsnd_mod_id(mod), reg, data);
118
119 regmap_fields_force_write(gen->regs[reg], rsnd_mod_id(mod), data);
120}
121
106void rsnd_bset(struct rsnd_priv *priv, struct rsnd_mod *mod, 122void rsnd_bset(struct rsnd_priv *priv, struct rsnd_mod *mod,
107 enum rsnd_reg reg, u32 mask, u32 data) 123 enum rsnd_reg reg, u32 mask, u32 data)
108{ 124{
diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h
index 09fcc54a8ee0..f729646e3d18 100644
--- a/sound/soc/sh/rcar/rsnd.h
+++ b/sound/soc/sh/rcar/rsnd.h
@@ -157,12 +157,16 @@ struct rsnd_dai_stream;
157 rsnd_read(rsnd_mod_to_priv(m), m, RSND_REG_##r) 157 rsnd_read(rsnd_mod_to_priv(m), m, RSND_REG_##r)
158#define rsnd_mod_write(m, r, d) \ 158#define rsnd_mod_write(m, r, d) \
159 rsnd_write(rsnd_mod_to_priv(m), m, RSND_REG_##r, d) 159 rsnd_write(rsnd_mod_to_priv(m), m, RSND_REG_##r, d)
160#define rsnd_mod_force_write(m, r, d) \
161 rsnd_force_write(rsnd_mod_to_priv(m), m, RSND_REG_##r, d)
160#define rsnd_mod_bset(m, r, s, d) \ 162#define rsnd_mod_bset(m, r, s, d) \
161 rsnd_bset(rsnd_mod_to_priv(m), m, RSND_REG_##r, s, d) 163 rsnd_bset(rsnd_mod_to_priv(m), m, RSND_REG_##r, s, d)
162 164
163u32 rsnd_read(struct rsnd_priv *priv, struct rsnd_mod *mod, enum rsnd_reg reg); 165u32 rsnd_read(struct rsnd_priv *priv, struct rsnd_mod *mod, enum rsnd_reg reg);
164void rsnd_write(struct rsnd_priv *priv, struct rsnd_mod *mod, 166void rsnd_write(struct rsnd_priv *priv, struct rsnd_mod *mod,
165 enum rsnd_reg reg, u32 data); 167 enum rsnd_reg reg, u32 data);
168void rsnd_force_write(struct rsnd_priv *priv, struct rsnd_mod *mod,
169 enum rsnd_reg reg, u32 data);
166void rsnd_bset(struct rsnd_priv *priv, struct rsnd_mod *mod, enum rsnd_reg reg, 170void rsnd_bset(struct rsnd_priv *priv, struct rsnd_mod *mod, enum rsnd_reg reg,
167 u32 mask, u32 data); 171 u32 mask, u32 data);
168u32 rsnd_get_adinr(struct rsnd_mod *mod, struct rsnd_dai_stream *io); 172u32 rsnd_get_adinr(struct rsnd_mod *mod, struct rsnd_dai_stream *io);