瀏覽代碼

[ALSA] Workaround for invalid signature read of CS8427

Reading the signature of CS8427 over SPI/I2C fails on some devices
by mysterious reason.  In most cases, however, it succeeds at the
sequential read.  So, let's give a second chance to check the signature
again.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Takashi Iwai 17 年之前
父節點
當前提交
4eb4550ab3
共有 1 個文件被更改,包括 6 次插入0 次删除
  1. 6 0
      sound/i2c/cs8427.c

+ 6 - 0
sound/i2c/cs8427.c

@@ -228,6 +228,12 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,
 	
 	
 	snd_i2c_lock(bus);
 	snd_i2c_lock(bus);
 	err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER);
 	err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER);
+	if (err != CS8427_VER8427A) {
+		/* give second chance */
+		snd_printk(KERN_WARNING "invalid CS8427 signature 0x%x: "
+			   "let me try again...\n", err);
+		err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER);
+	}
 	if (err != CS8427_VER8427A) {
 	if (err != CS8427_VER8427A) {
 		snd_i2c_unlock(bus);
 		snd_i2c_unlock(bus);
 		snd_printk(KERN_ERR "unable to find CS8427 signature "
 		snd_printk(KERN_ERR "unable to find CS8427 signature "