ALSA: hda - Don't actually write registers for caps overwrites
authorTakashi Iwai <tiwai@suse.de>
Wed, 10 Jun 2015 08:27:00 +0000 (10:27 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 10 Jun 2015 08:31:10 +0000 (10:31 +0200)
Along with the transition to regmap for managing the cached parameter
reads, the caps overwrite was also moved to regmap cache.  The cache
change itself works, but it still tries to write the non-existing verb
(the HDA parameter is read-only) wrongly.  It's harmless in most
cases, but some chips are picky and may result in the codec
communication stall.

This patch avoids it just by adding the missing flag check in
reg_write ops.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/hda/hdac_regmap.c

index 7371e0c3926f32a9104b521d0bf70f1c35f0740f..c4f5e61d4404d319d451638971e59022b0a580b7 100644 (file)
@@ -265,6 +265,9 @@ static int hda_reg_write(void *context, unsigned int reg, unsigned int val)
        unsigned int verb;
        int i, bytes, err;
 
+       if (codec->caps_overwriting)
+               return 0;
+
        reg &= ~0x00080000U; /* drop GET bit */
        reg |= (codec->addr << 28);
        verb = get_verb(reg);