return NULL;
        }
 
+       spin_lock_irq(&bus->reg_lock);
        list_for_each_entry(stream, &bus->stream_list, list) {
                struct hdac_ext_stream *hstream =
                        stream_to_hdac_ext_stream(stream);
                 * is updated in snd_hdac_ext_stream_decouple().
                 */
                if (!res->decoupled)
-                       snd_hdac_ext_stream_decouple(bus, res, true);
-               spin_lock_irq(&bus->reg_lock);
+                       snd_hdac_ext_stream_decouple_locked(bus, res, true);
+
                res->link_locked = 1;
                res->link_substream = substream;
-               spin_unlock_irq(&bus->reg_lock);
        }
+       spin_unlock_irq(&bus->reg_lock);
 
        return res;
 }