HDA_DSP_REG_POLL_INTERVAL_US,
                                        HDA_DSP_BASEFW_TIMEOUT_US);
 
+       /*
+        * even in case of errors we still need to stop the DMAs,
+        * but we return the initial error should the DMA stop also fail
+        */
+
        ret = cl_trigger(sdev, stream, SNDRV_PCM_TRIGGER_STOP);
        if (ret < 0) {
                dev_err(sdev->dev, "error: DMA trigger stop failed\n");
-               return ret;
+               if (!status)
+                       status = ret;
        }
 
        return status;
        /*
         * Perform codeloader stream cleanup.
         * This should be done even if firmware loading fails.
+        * If the cleanup also fails, we return the initial error
         */
        ret1 = cl_cleanup(sdev, &sdev->dmab, stream);
        if (ret1 < 0) {
                dev_err(sdev->dev, "error: Code loader DSP cleanup failed\n");
 
                /* set return value to indicate cleanup failure */
-               ret = ret1;
+               if (!ret)
+                       ret = ret1;
        }
 
        /*