return 0;
 }
 
+static int rsnd_soc_dai_startup(struct snd_pcm_substream *substream,
+                               struct snd_soc_dai *dai)
+{
+       struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
+       struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream);
+
+       /*
+        * call rsnd_dai_call without spinlock
+        */
+       return rsnd_dai_call(nolock_start, io, priv);
+}
+
+static void rsnd_soc_dai_shutdown(struct snd_pcm_substream *substream,
+                                 struct snd_soc_dai *dai)
+{
+       struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
+       struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream);
+
+       /*
+        * call rsnd_dai_call without spinlock
+        */
+       rsnd_dai_call(nolock_stop, io, priv);
+}
+
 static const struct snd_soc_dai_ops rsnd_soc_dai_ops = {
+       .startup        = rsnd_soc_dai_startup,
+       .shutdown       = rsnd_soc_dai_shutdown,
        .trigger        = rsnd_soc_dai_trigger,
        .set_fmt        = rsnd_soc_dai_set_fmt,
        .set_tdm_slot   = rsnd_soc_set_dai_tdm_slot,
 
        int (*fallback)(struct rsnd_mod *mod,
                        struct rsnd_dai_stream *io,
                        struct rsnd_priv *priv);
+       int (*nolock_start)(struct rsnd_mod *mod,
+                   struct rsnd_dai_stream *io,
+                   struct rsnd_priv *priv);
+       int (*nolock_stop)(struct rsnd_mod *mod,
+                   struct rsnd_dai_stream *io,
+                   struct rsnd_priv *priv);
 };
 
 struct rsnd_dai_stream;
 /*
  * status
  *
- * 0xH0000CB0
+ * 0xH0000CBA
  *
+ * A   0: nolock_start 1: nolock_stop
  * B   0: init         1: quit
  * C   0: start        1: stop
  *
  * H   0: fallback
  * H   0: hw_params
  */
+#define __rsnd_mod_shift_nolock_start  0
+#define __rsnd_mod_shift_nolock_stop   0
 #define __rsnd_mod_shift_init          4
 #define __rsnd_mod_shift_quit          4
 #define __rsnd_mod_shift_start         8
 
 #define __rsnd_mod_add_probe           0
 #define __rsnd_mod_add_remove          0
+#define __rsnd_mod_add_nolock_start     1
+#define __rsnd_mod_add_nolock_stop     -1
 #define __rsnd_mod_add_init             1
 #define __rsnd_mod_add_quit            -1
 #define __rsnd_mod_add_start            1
 #define __rsnd_mod_call_pcm_new                0
 #define __rsnd_mod_call_fallback       0
 #define __rsnd_mod_call_hw_params      0
+#define __rsnd_mod_call_nolock_start   0
+#define __rsnd_mod_call_nolock_stop    1
 
 #define rsnd_mod_to_priv(mod) ((mod)->priv)
 #define rsnd_mod_id(mod) ((mod) ? (mod)->id : -1)