hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/sound/soc/sh/rcar/gen.c
....@@ -26,8 +26,8 @@
2626 struct regmap *regmap[RSND_BASE_MAX];
2727
2828 /* RSND_REG_MAX base */
29
- struct regmap_field *regs[RSND_REG_MAX];
30
- const char *reg_name[RSND_REG_MAX];
29
+ struct regmap_field *regs[REG_MAX];
30
+ const char *reg_name[REG_MAX];
3131 };
3232
3333 #define rsnd_priv_to_gen(p) ((struct rsnd_gen *)(p)->gen)
....@@ -49,11 +49,11 @@
4949 }
5050 /* single address mapping */
5151 #define RSND_GEN_S_REG(id, offset) \
52
- RSND_REG_SET(RSND_REG_##id, offset, 0, #id)
52
+ RSND_REG_SET(id, offset, 0, #id)
5353
5454 /* multi address mapping */
5555 #define RSND_GEN_M_REG(id, offset, _id_offset) \
56
- RSND_REG_SET(RSND_REG_##id, offset, _id_offset, #id)
56
+ RSND_REG_SET(id, offset, _id_offset, #id)
5757
5858 /*
5959 * basic function
....@@ -71,9 +71,17 @@
7171 return 1;
7272 }
7373
74
-u32 rsnd_read(struct rsnd_priv *priv,
75
- struct rsnd_mod *mod, enum rsnd_reg reg)
74
+static int rsnd_mod_id_cmd(struct rsnd_mod *mod)
7675 {
76
+ if (mod->ops->id_cmd)
77
+ return mod->ops->id_cmd(mod);
78
+
79
+ return rsnd_mod_id(mod);
80
+}
81
+
82
+u32 rsnd_mod_read(struct rsnd_mod *mod, enum rsnd_reg reg)
83
+{
84
+ struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
7785 struct device *dev = rsnd_priv_to_dev(priv);
7886 struct rsnd_gen *gen = rsnd_priv_to_gen(priv);
7987 u32 val;
....@@ -81,35 +89,36 @@
8189 if (!rsnd_is_accessible_reg(priv, gen, reg))
8290 return 0;
8391
84
- regmap_fields_read(gen->regs[reg], rsnd_mod_id(mod), &val);
92
+ regmap_fields_read(gen->regs[reg], rsnd_mod_id_cmd(mod), &val);
8593
86
- dev_dbg(dev, "r %s[%d] - %-18s (%4d) : %08x\n",
87
- rsnd_mod_name(mod), rsnd_mod_id(mod),
94
+ dev_dbg(dev, "r %s - %-18s (%4d) : %08x\n",
95
+ rsnd_mod_name(mod),
8896 rsnd_reg_name(gen, reg), reg, val);
8997
9098 return val;
9199 }
92100
93
-void rsnd_write(struct rsnd_priv *priv,
94
- struct rsnd_mod *mod,
95
- enum rsnd_reg reg, u32 data)
101
+void rsnd_mod_write(struct rsnd_mod *mod,
102
+ enum rsnd_reg reg, u32 data)
96103 {
104
+ struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
97105 struct device *dev = rsnd_priv_to_dev(priv);
98106 struct rsnd_gen *gen = rsnd_priv_to_gen(priv);
99107
100108 if (!rsnd_is_accessible_reg(priv, gen, reg))
101109 return;
102110
103
- regmap_fields_force_write(gen->regs[reg], rsnd_mod_id(mod), data);
111
+ regmap_fields_force_write(gen->regs[reg], rsnd_mod_id_cmd(mod), data);
104112
105
- dev_dbg(dev, "w %s[%d] - %-18s (%4d) : %08x\n",
106
- rsnd_mod_name(mod), rsnd_mod_id(mod),
113
+ dev_dbg(dev, "w %s - %-18s (%4d) : %08x\n",
114
+ rsnd_mod_name(mod),
107115 rsnd_reg_name(gen, reg), reg, data);
108116 }
109117
110
-void rsnd_bset(struct rsnd_priv *priv, struct rsnd_mod *mod,
111
- enum rsnd_reg reg, u32 mask, u32 data)
118
+void rsnd_mod_bset(struct rsnd_mod *mod,
119
+ enum rsnd_reg reg, u32 mask, u32 data)
112120 {
121
+ struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
113122 struct device *dev = rsnd_priv_to_dev(priv);
114123 struct rsnd_gen *gen = rsnd_priv_to_gen(priv);
115124
....@@ -117,10 +126,10 @@
117126 return;
118127
119128 regmap_fields_force_update_bits(gen->regs[reg],
120
- rsnd_mod_id(mod), mask, data);
129
+ rsnd_mod_id_cmd(mod), mask, data);
121130
122
- dev_dbg(dev, "b %s[%d] - %-18s (%4d) : %08x/%08x\n",
123
- rsnd_mod_name(mod), rsnd_mod_id(mod),
131
+ dev_dbg(dev, "b %s - %-18s (%4d) : %08x/%08x\n",
132
+ rsnd_mod_name(mod),
124133 rsnd_reg_name(gen, reg), reg, data, mask);
125134
126135 }
....@@ -215,16 +224,69 @@
215224 RSND_GEN_S_REG(SSI_SYS_STATUS5, 0x884),
216225 RSND_GEN_S_REG(SSI_SYS_STATUS6, 0x888),
217226 RSND_GEN_S_REG(SSI_SYS_STATUS7, 0x88c),
227
+ RSND_GEN_S_REG(SSI_SYS_INT_ENABLE0, 0x850),
228
+ RSND_GEN_S_REG(SSI_SYS_INT_ENABLE1, 0x854),
229
+ RSND_GEN_S_REG(SSI_SYS_INT_ENABLE2, 0x858),
230
+ RSND_GEN_S_REG(SSI_SYS_INT_ENABLE3, 0x85c),
231
+ RSND_GEN_S_REG(SSI_SYS_INT_ENABLE4, 0x890),
232
+ RSND_GEN_S_REG(SSI_SYS_INT_ENABLE5, 0x894),
233
+ RSND_GEN_S_REG(SSI_SYS_INT_ENABLE6, 0x898),
234
+ RSND_GEN_S_REG(SSI_SYS_INT_ENABLE7, 0x89c),
218235 RSND_GEN_S_REG(HDMI0_SEL, 0x9e0),
219236 RSND_GEN_S_REG(HDMI1_SEL, 0x9e4),
220237
221238 /* FIXME: it needs SSI_MODE2/3 in the future */
222
- RSND_GEN_M_REG(SSI_BUSIF_MODE, 0x0, 0x80),
223
- RSND_GEN_M_REG(SSI_BUSIF_ADINR, 0x4, 0x80),
224
- RSND_GEN_M_REG(SSI_BUSIF_DALIGN,0x8, 0x80),
225
- RSND_GEN_M_REG(SSI_MODE, 0xc, 0x80),
226
- RSND_GEN_M_REG(SSI_CTRL, 0x10, 0x80),
227
- RSND_GEN_M_REG(SSI_INT_ENABLE, 0x18, 0x80),
239
+ RSND_GEN_M_REG(SSI_BUSIF0_MODE, 0x0, 0x80),
240
+ RSND_GEN_M_REG(SSI_BUSIF0_ADINR, 0x4, 0x80),
241
+ RSND_GEN_M_REG(SSI_BUSIF0_DALIGN, 0x8, 0x80),
242
+ RSND_GEN_M_REG(SSI_BUSIF1_MODE, 0x20, 0x80),
243
+ RSND_GEN_M_REG(SSI_BUSIF1_ADINR, 0x24, 0x80),
244
+ RSND_GEN_M_REG(SSI_BUSIF1_DALIGN, 0x28, 0x80),
245
+ RSND_GEN_M_REG(SSI_BUSIF2_MODE, 0x40, 0x80),
246
+ RSND_GEN_M_REG(SSI_BUSIF2_ADINR, 0x44, 0x80),
247
+ RSND_GEN_M_REG(SSI_BUSIF2_DALIGN, 0x48, 0x80),
248
+ RSND_GEN_M_REG(SSI_BUSIF3_MODE, 0x60, 0x80),
249
+ RSND_GEN_M_REG(SSI_BUSIF3_ADINR, 0x64, 0x80),
250
+ RSND_GEN_M_REG(SSI_BUSIF3_DALIGN, 0x68, 0x80),
251
+ RSND_GEN_M_REG(SSI_BUSIF4_MODE, 0x500, 0x80),
252
+ RSND_GEN_M_REG(SSI_BUSIF4_ADINR, 0x504, 0x80),
253
+ RSND_GEN_M_REG(SSI_BUSIF4_DALIGN, 0x508, 0x80),
254
+ RSND_GEN_M_REG(SSI_BUSIF5_MODE, 0x520, 0x80),
255
+ RSND_GEN_M_REG(SSI_BUSIF5_ADINR, 0x524, 0x80),
256
+ RSND_GEN_M_REG(SSI_BUSIF5_DALIGN, 0x528, 0x80),
257
+ RSND_GEN_M_REG(SSI_BUSIF6_MODE, 0x540, 0x80),
258
+ RSND_GEN_M_REG(SSI_BUSIF6_ADINR, 0x544, 0x80),
259
+ RSND_GEN_M_REG(SSI_BUSIF6_DALIGN, 0x548, 0x80),
260
+ RSND_GEN_M_REG(SSI_BUSIF7_MODE, 0x560, 0x80),
261
+ RSND_GEN_M_REG(SSI_BUSIF7_ADINR, 0x564, 0x80),
262
+ RSND_GEN_M_REG(SSI_BUSIF7_DALIGN, 0x568, 0x80),
263
+ RSND_GEN_M_REG(SSI_MODE, 0xc, 0x80),
264
+ RSND_GEN_M_REG(SSI_CTRL, 0x10, 0x80),
265
+ RSND_GEN_M_REG(SSI_INT_ENABLE, 0x18, 0x80),
266
+ RSND_GEN_S_REG(SSI9_BUSIF0_MODE, 0x48c),
267
+ RSND_GEN_S_REG(SSI9_BUSIF0_ADINR, 0x484),
268
+ RSND_GEN_S_REG(SSI9_BUSIF0_DALIGN, 0x488),
269
+ RSND_GEN_S_REG(SSI9_BUSIF1_MODE, 0x4a0),
270
+ RSND_GEN_S_REG(SSI9_BUSIF1_ADINR, 0x4a4),
271
+ RSND_GEN_S_REG(SSI9_BUSIF1_DALIGN, 0x4a8),
272
+ RSND_GEN_S_REG(SSI9_BUSIF2_MODE, 0x4c0),
273
+ RSND_GEN_S_REG(SSI9_BUSIF2_ADINR, 0x4c4),
274
+ RSND_GEN_S_REG(SSI9_BUSIF2_DALIGN, 0x4c8),
275
+ RSND_GEN_S_REG(SSI9_BUSIF3_MODE, 0x4e0),
276
+ RSND_GEN_S_REG(SSI9_BUSIF3_ADINR, 0x4e4),
277
+ RSND_GEN_S_REG(SSI9_BUSIF3_DALIGN, 0x4e8),
278
+ RSND_GEN_S_REG(SSI9_BUSIF4_MODE, 0xd80),
279
+ RSND_GEN_S_REG(SSI9_BUSIF4_ADINR, 0xd84),
280
+ RSND_GEN_S_REG(SSI9_BUSIF4_DALIGN, 0xd88),
281
+ RSND_GEN_S_REG(SSI9_BUSIF5_MODE, 0xda0),
282
+ RSND_GEN_S_REG(SSI9_BUSIF5_ADINR, 0xda4),
283
+ RSND_GEN_S_REG(SSI9_BUSIF5_DALIGN, 0xda8),
284
+ RSND_GEN_S_REG(SSI9_BUSIF6_MODE, 0xdc0),
285
+ RSND_GEN_S_REG(SSI9_BUSIF6_ADINR, 0xdc4),
286
+ RSND_GEN_S_REG(SSI9_BUSIF6_DALIGN, 0xdc8),
287
+ RSND_GEN_S_REG(SSI9_BUSIF7_MODE, 0xde0),
288
+ RSND_GEN_S_REG(SSI9_BUSIF7_ADINR, 0xde4),
289
+ RSND_GEN_S_REG(SSI9_BUSIF7_DALIGN, 0xde8),
228290 };
229291
230292 static const struct rsnd_regmap_field_conf conf_scu[] = {