diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 38d8ba90c52562cd40d52bdd39dc49caf27f85f1..09920ba55ba19d3ce6e24c617cbb53eeb578b728 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -1972,9 +1972,17 @@ static int azx_probe_continue(struct azx *chip)
 static void azx_remove(struct pci_dev *pci)
 {
 	struct snd_card *card = pci_get_drvdata(pci);
+	struct azx *chip;
+	struct hda_intel *hda;
+
+	if (card) {
+		/* flush the pending probing work */
+		chip = card->private_data;
+		hda = container_of(chip, struct hda_intel, chip);
+		flush_work(&hda->probe_work);
 
-	if (card)
 		snd_card_free(card);
+	}
 }
 
 static void azx_shutdown(struct pci_dev *pci)