|
@@ -783,11 +783,13 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
|
|
|
{
|
|
|
struct azx *chip = bus->private_data;
|
|
|
unsigned long timeout;
|
|
|
+ unsigned long loopcounter;
|
|
|
int do_poll = 0;
|
|
|
|
|
|
again:
|
|
|
timeout = jiffies + msecs_to_jiffies(1000);
|
|
|
- for (;;) {
|
|
|
+
|
|
|
+ for (loopcounter = 0;; loopcounter++) {
|
|
|
if (chip->polling_mode || do_poll) {
|
|
|
spin_lock_irq(&chip->reg_lock);
|
|
|
azx_update_rirb(chip);
|
|
@@ -803,7 +805,7 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
|
|
|
}
|
|
|
if (time_after(jiffies, timeout))
|
|
|
break;
|
|
|
- if (bus->needs_damn_long_delay)
|
|
|
+ if (bus->needs_damn_long_delay || loopcounter > 3000)
|
|
|
msleep(2); /* temporary workaround */
|
|
|
else {
|
|
|
udelay(10);
|