.get_status     = rsnd_mod_get_status,
        .id             = rsnd_ctu_id,
        .id_sub         = rsnd_ctu_id_sub,
+       .id_cmd         = rsnd_mod_id_raw,
 };
 
 struct rsnd_mod *rsnd_ctu_mod_get(struct rsnd_priv *priv, int id)
 
        return 1;
 }
 
+static int rsnd_mod_id_cmd(struct rsnd_mod *mod)
+{
+       if (mod->ops->id_cmd)
+               return mod->ops->id_cmd(mod);
+
+       return rsnd_mod_id(mod);
+}
+
 u32 rsnd_read(struct rsnd_priv *priv,
              struct rsnd_mod *mod, enum rsnd_reg reg)
 {
        if (!rsnd_is_accessible_reg(priv, gen, reg))
                return 0;
 
-       regmap_fields_read(gen->regs[reg], rsnd_mod_id(mod), &val);
+       regmap_fields_read(gen->regs[reg], rsnd_mod_id_cmd(mod), &val);
 
        dev_dbg(dev, "r %s - %-18s (%4d) : %08x\n",
                rsnd_mod_name(mod),
        if (!rsnd_is_accessible_reg(priv, gen, reg))
                return;
 
-       regmap_fields_force_write(gen->regs[reg], rsnd_mod_id(mod), data);
+       regmap_fields_force_write(gen->regs[reg], rsnd_mod_id_cmd(mod), data);
 
        dev_dbg(dev, "w %s - %-18s (%4d) : %08x\n",
                rsnd_mod_name(mod),
                return;
 
        regmap_fields_force_update_bits(gen->regs[reg],
-                                       rsnd_mod_id(mod), mask, data);
+                                       rsnd_mod_id_cmd(mod), mask, data);
 
        dev_dbg(dev, "b %s - %-18s (%4d) : %08x/%08x\n",
                rsnd_mod_name(mod),