ALSA: oxygen: fix SPI clocks slower than 6.25 MHz
authorClemens Ladisch <clemens@ladisch.de>
Mon, 10 Jan 2011 15:01:17 +0000 (16:01 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 10 Jan 2011 15:46:00 +0000 (16:46 +0100)
Fix wrong register bits for SPI clock cycle times longer than 160 ns,
and adjust the polling loop timeout for these speeds.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/oxygen/oxygen_io.c
sound/pci/oxygen/oxygen_regs.h

index 09b2b2a36df5200f35e75af487673a6ea9e215ce..f5164b1e1c80bd1c11b695425175af98ce74185c 100644 (file)
@@ -197,11 +197,11 @@ void oxygen_write_spi(struct oxygen *chip, u8 control, unsigned int data)
 {
        unsigned int count;
 
-       /* should not need more than 7.68 us (24 * 320 ns) */
+       /* should not need more than 30.72 us (24 * 1.28 us) */
        count = 10;
        while ((oxygen_read8(chip, OXYGEN_SPI_CONTROL) & OXYGEN_SPI_BUSY)
               && count > 0) {
-               udelay(1);
+               udelay(4);
                --count;
        }
 
index 4dcd41b782586b7d7d9251a4c75aef37c36a4169..331d3d96fa2148db33398288e7e3b23002d3a04b 100644 (file)
 #define  OXYGEN_SPI_DATA_LENGTH_MASK   0x02
 #define  OXYGEN_SPI_DATA_LENGTH_2      0x00
 #define  OXYGEN_SPI_DATA_LENGTH_3      0x02
-#define  OXYGEN_SPI_CLOCK_MASK         0xc0
+#define  OXYGEN_SPI_CLOCK_MASK         0x0c
 #define  OXYGEN_SPI_CLOCK_160          0x00    /* ns */
-#define  OXYGEN_SPI_CLOCK_320          0x40
-#define  OXYGEN_SPI_CLOCK_640          0x80
-#define  OXYGEN_SPI_CLOCK_1280         0xc0
+#define  OXYGEN_SPI_CLOCK_320          0x04
+#define  OXYGEN_SPI_CLOCK_640          0x08
+#define  OXYGEN_SPI_CLOCK_1280         0x0c
 #define  OXYGEN_SPI_CODEC_MASK         0x70    /* 0..5 */
 #define  OXYGEN_SPI_CODEC_SHIFT                4
 #define  OXYGEN_SPI_CEN_MASK           0x80