ALSA: oxygen: add the separate SPI waiting function
authorRoman Volkov <v1ron@mail.ru>
Fri, 24 Jan 2014 12:18:02 +0000 (16:18 +0400)
committerClemens Ladisch <clemens@ladisch.de>
Wed, 29 Jan 2014 19:45:43 +0000 (20:45 +0100)
The oxygen_wait_spi() function now performs waiting when the
SPI bus completes a transaction. Introduce the timeout error
checking and increase timeout to 200 from 40.

Signed-off-by: Roman Volkov <v1ron@mail.ru>
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
sound/pci/oxygen/oxygen_io.c

index 521eae458348c723bd87519cd4fcdbd0530c2f00..4b88c7a332e4842432df81749389f0492a905c13 100644 (file)
@@ -194,6 +194,24 @@ void oxygen_write_ac97_masked(struct oxygen *chip, unsigned int codec,
 }
 EXPORT_SYMBOL(oxygen_write_ac97_masked);
 
+static int oxygen_wait_spi(struct oxygen *chip)
+{
+       unsigned int count;
+
+       /*
+        * Higher timeout to be sure: 200 us;
+        * actual transaction should not need more than 40 us.
+        */
+       for (count = 50; count > 0; count--) {
+               udelay(4);
+               if ((oxygen_read8(chip, OXYGEN_SPI_CONTROL) &
+                                               OXYGEN_SPI_BUSY) == 0)
+                       return 0;
+       }
+       snd_printk(KERN_ERR "oxygen: SPI wait timeout\n");
+       return -EIO;
+}
+
 void oxygen_write_spi(struct oxygen *chip, u8 control, unsigned int data)
 {
        unsigned int count;