int position_fix;
unsigned int initialized: 1;
unsigned int single_cmd: 1;
+ unsigned int polling_mode: 1;
};
/* driver types */
struct azx *chip = codec->bus->private_data;
int timeout = 50;
- while (chip->rirb.cmds) {
+ for (;;) {
+ if (chip->polling_mode) {
+ spin_lock_irq(&chip->reg_lock);
+ azx_update_rirb(chip);
+ spin_unlock_irq(&chip->reg_lock);
+ }
+ if (! chip->rirb.cmds)
+ break;
if (! --timeout) {
+ if (! chip->polling_mode) {
+ snd_printk(KERN_WARNING "hda_intel: "
+ "azx_get_response timeout, "
+ "switching to polling mode...\n");
+ chip->polling_mode = 1;
+ timeout = 50;
+ continue;
+ }
snd_printk(KERN_ERR
"hda_intel: azx_get_response timeout, "
"switching to single_cmd mode...\n");