| .. | .. |
|---|
| 26 | 26 | struct regmap *regmap[RSND_BASE_MAX]; |
|---|
| 27 | 27 | |
|---|
| 28 | 28 | /* 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]; |
|---|
| 31 | 31 | }; |
|---|
| 32 | 32 | |
|---|
| 33 | 33 | #define rsnd_priv_to_gen(p) ((struct rsnd_gen *)(p)->gen) |
|---|
| .. | .. |
|---|
| 49 | 49 | } |
|---|
| 50 | 50 | /* single address mapping */ |
|---|
| 51 | 51 | #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) |
|---|
| 53 | 53 | |
|---|
| 54 | 54 | /* multi address mapping */ |
|---|
| 55 | 55 | #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) |
|---|
| 57 | 57 | |
|---|
| 58 | 58 | /* |
|---|
| 59 | 59 | * basic function |
|---|
| .. | .. |
|---|
| 71 | 71 | return 1; |
|---|
| 72 | 72 | } |
|---|
| 73 | 73 | |
|---|
| 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) |
|---|
| 76 | 75 | { |
|---|
| 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); |
|---|
| 77 | 85 | struct device *dev = rsnd_priv_to_dev(priv); |
|---|
| 78 | 86 | struct rsnd_gen *gen = rsnd_priv_to_gen(priv); |
|---|
| 79 | 87 | u32 val; |
|---|
| .. | .. |
|---|
| 81 | 89 | if (!rsnd_is_accessible_reg(priv, gen, reg)) |
|---|
| 82 | 90 | return 0; |
|---|
| 83 | 91 | |
|---|
| 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); |
|---|
| 85 | 93 | |
|---|
| 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), |
|---|
| 88 | 96 | rsnd_reg_name(gen, reg), reg, val); |
|---|
| 89 | 97 | |
|---|
| 90 | 98 | return val; |
|---|
| 91 | 99 | } |
|---|
| 92 | 100 | |
|---|
| 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) |
|---|
| 96 | 103 | { |
|---|
| 104 | + struct rsnd_priv *priv = rsnd_mod_to_priv(mod); |
|---|
| 97 | 105 | struct device *dev = rsnd_priv_to_dev(priv); |
|---|
| 98 | 106 | struct rsnd_gen *gen = rsnd_priv_to_gen(priv); |
|---|
| 99 | 107 | |
|---|
| 100 | 108 | if (!rsnd_is_accessible_reg(priv, gen, reg)) |
|---|
| 101 | 109 | return; |
|---|
| 102 | 110 | |
|---|
| 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); |
|---|
| 104 | 112 | |
|---|
| 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), |
|---|
| 107 | 115 | rsnd_reg_name(gen, reg), reg, data); |
|---|
| 108 | 116 | } |
|---|
| 109 | 117 | |
|---|
| 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) |
|---|
| 112 | 120 | { |
|---|
| 121 | + struct rsnd_priv *priv = rsnd_mod_to_priv(mod); |
|---|
| 113 | 122 | struct device *dev = rsnd_priv_to_dev(priv); |
|---|
| 114 | 123 | struct rsnd_gen *gen = rsnd_priv_to_gen(priv); |
|---|
| 115 | 124 | |
|---|
| .. | .. |
|---|
| 117 | 126 | return; |
|---|
| 118 | 127 | |
|---|
| 119 | 128 | regmap_fields_force_update_bits(gen->regs[reg], |
|---|
| 120 | | - rsnd_mod_id(mod), mask, data); |
|---|
| 129 | + rsnd_mod_id_cmd(mod), mask, data); |
|---|
| 121 | 130 | |
|---|
| 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), |
|---|
| 124 | 133 | rsnd_reg_name(gen, reg), reg, data, mask); |
|---|
| 125 | 134 | |
|---|
| 126 | 135 | } |
|---|
| .. | .. |
|---|
| 215 | 224 | RSND_GEN_S_REG(SSI_SYS_STATUS5, 0x884), |
|---|
| 216 | 225 | RSND_GEN_S_REG(SSI_SYS_STATUS6, 0x888), |
|---|
| 217 | 226 | 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), |
|---|
| 218 | 235 | RSND_GEN_S_REG(HDMI0_SEL, 0x9e0), |
|---|
| 219 | 236 | RSND_GEN_S_REG(HDMI1_SEL, 0x9e4), |
|---|
| 220 | 237 | |
|---|
| 221 | 238 | /* 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), |
|---|
| 228 | 290 | }; |
|---|
| 229 | 291 | |
|---|
| 230 | 292 | static const struct rsnd_regmap_field_conf conf_scu[] = { |
|---|