]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
[ALSA] ca0106: Add more symbol SPI register names and use them
authorTrent Piepho <xyzzy@speakeasy.org>
Wed, 25 Jul 2007 16:40:39 +0000 (18:40 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 16 Oct 2007 13:57:59 +0000 (15:57 +0200)
Add more symbol name for SPI register values.  Change the SPI_XXX_BIT defines
from the bit number to a mask.  Saves having to write (1<<SPI_XXX_BIT) all the
time to convert to mask.  We never end up wanting the bit number.
Use all the symbol names for the SPI DAC init sequence.  The sequence is
exactly the same as it was before.

Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/ca0106/ca0106.h
sound/pci/ca0106/ca0106_main.c
sound/pci/ca0106/ca0106_mixer.c

index 47d923821403ccd22730a60730f5f2f989c4abad..75da1746e758d221f9c80b473ac2bf8913c2983c 100644 (file)
 #define SPI_REG_MASK   0x1ff   /* 16-bit SPI writes have a 7-bit address */
 #define SPI_REG_SHIFT  9       /* followed by 9 bits of data */
 
+#define SPI_LDA1_REG           0       /* digital attenuation */
+#define SPI_RDA1_REG           1
+#define SPI_LDA2_REG           4
+#define SPI_RDA2_REG           5
+#define SPI_LDA3_REG           6
+#define SPI_RDA3_REG           7
+#define SPI_LDA4_REG           13
+#define SPI_RDA4_REG           14
+#define SPI_MASTDA_REG         8
+
+#define SPI_DA_BIT_UPDATE      (1<<8)  /* update attenuation values */
+#define SPI_DA_BIT_0dB         0xff    /* 0 dB */
+#define SPI_DA_BIT_infdB       0x00    /* inf dB attenuation (mute) */
+
+#define SPI_PL_REG             2
+#define SPI_PL_BIT_L_M         (0<<5)  /* left channel = mute */
+#define SPI_PL_BIT_L_L         (1<<5)  /* left channel = left */
+#define SPI_PL_BIT_L_R         (2<<5)  /* left channel = right */
+#define SPI_PL_BIT_L_C         (3<<5)  /* left channel = (L+R)/2 */
+#define SPI_PL_BIT_R_M         (0<<7)  /* right channel = mute */
+#define SPI_PL_BIT_R_L         (1<<7)  /* right channel = left */
+#define SPI_PL_BIT_R_R         (2<<7)  /* right channel = right */
+#define SPI_PL_BIT_R_C         (3<<7)  /* right channel = (L+R)/2 */
+#define SPI_IZD_REG            2
+#define SPI_IZD_BIT            (1<<4)  /* infinite zero detect */
+
+#define SPI_FMT_REG            3
+#define SPI_FMT_BIT_RJ         (0<<0)  /* right justified mode */
+#define SPI_FMT_BIT_LJ         (1<<0)  /* left justified mode */
+#define SPI_FMT_BIT_I2S                (2<<0)  /* I2S mode */
+#define SPI_FMT_BIT_DSP                (3<<0)  /* DSP Modes A or B */
+#define SPI_LRP_REG            3
+#define SPI_LRP_BIT            (1<<2)  /* invert LRCLK polarity */
+#define SPI_BCP_REG            3
+#define SPI_BCP_BIT            (1<<3)  /* invert BCLK polarity */
+#define SPI_IWL_REG            3
+#define SPI_IWL_BIT_16         (0<<4)  /* 16-bit world length */
+#define SPI_IWL_BIT_20         (1<<4)  /* 20-bit world length */
+#define SPI_IWL_BIT_24         (2<<4)  /* 24-bit world length */
+#define SPI_IWL_BIT_32         (3<<4)  /* 32-bit world length */
+
+#define SPI_MS_REG             10
+#define SPI_MS_BIT             (1<<5)  /* master mode */
+#define SPI_RATE_REG           10      /* only applies in master mode */
+#define SPI_RATE_BIT_128       (0<<6)  /* MCLK = LRCLK * 128 */
+#define SPI_RATE_BIT_192       (1<<6)
+#define SPI_RATE_BIT_256       (2<<6)
+#define SPI_RATE_BIT_384       (3<<6)
+#define SPI_RATE_BIT_512       (4<<6)
+#define SPI_RATE_BIT_768       (5<<6)
+
 /* They really do label the bit for the 4th channel "4" and not "3" */
 #define SPI_DMUTE0_REG         9
 #define SPI_DMUTE1_REG         9
 #define SPI_DMUTE2_REG         9
 #define SPI_DMUTE4_REG         15
-#define SPI_DMUTE0_BIT         3
-#define SPI_DMUTE1_BIT         4
-#define SPI_DMUTE2_BIT         5
-#define SPI_DMUTE4_BIT         2
+#define SPI_DMUTE0_BIT         (1<<3)
+#define SPI_DMUTE1_BIT         (1<<4)
+#define SPI_DMUTE2_BIT         (1<<5)
+#define SPI_DMUTE4_BIT         (1<<2)
 
 #define SPI_PHASE0_REG         3
 #define SPI_PHASE1_REG         3
 #define SPI_PHASE2_REG         3
 #define SPI_PHASE4_REG         15
-#define SPI_PHASE0_BIT         6
-#define SPI_PHASE1_BIT         7
-#define SPI_PHASE2_BIT         8
-#define SPI_PHASE4_BIT         3
+#define SPI_PHASE0_BIT         (1<<6)
+#define SPI_PHASE1_BIT         (1<<7)
+#define SPI_PHASE2_BIT         (1<<8)
+#define SPI_PHASE4_BIT         (1<<3)
 
 #define SPI_PDWN_REG           2       /* power down all DACs */
-#define SPI_PDWN_BIT           2
+#define SPI_PDWN_BIT           (1<<2)
 #define SPI_DACD0_REG          10      /* power down individual DACs */
 #define SPI_DACD1_REG          10
 #define SPI_DACD2_REG          10
 #define SPI_DACD4_REG          15
-#define SPI_DACD0_BIT          1
-#define SPI_DACD1_BIT          2
-#define SPI_DACD2_BIT          3
-#define SPI_DACD4_BIT          0       /* datasheet error says it's 1 */
+#define SPI_DACD0_BIT          (1<<1)
+#define SPI_DACD1_BIT          (1<<2)
+#define SPI_DACD2_BIT          (1<<3)
+#define SPI_DACD4_BIT          (1<<0)  /* datasheet error says it's 1 */
 
 #define SPI_PWRDNALL_REG       10      /* power down everything */
-#define SPI_PWRDNALL_BIT       4
+#define SPI_PWRDNALL_BIT       (1<<4)
 
 #include "ca_midi.h"
 
index 36b7cdda7c415e9c414f4c97aef772208fb5290b..252710e4f5c8a8ed8e12360562a0050c8f740ee3 100644 (file)
@@ -467,10 +467,10 @@ static const int spi_dacd_reg[] = {
        [PCM_UNKNOWN_CHANNEL]   = SPI_DACD1_REG,
 };
 static const int spi_dacd_bit[] = {
-       [PCM_FRONT_CHANNEL]     = 1<<SPI_DACD4_BIT,
-       [PCM_REAR_CHANNEL]      = 1<<SPI_DACD0_BIT,
-       [PCM_CENTER_LFE_CHANNEL]= 1<<SPI_DACD2_BIT,
-       [PCM_UNKNOWN_CHANNEL]   = 1<<SPI_DACD1_BIT,
+       [PCM_FRONT_CHANNEL]     = SPI_DACD4_BIT,
+       [PCM_REAR_CHANNEL]      = SPI_DACD0_BIT,
+       [PCM_CENTER_LFE_CHANNEL]= SPI_DACD2_BIT,
+       [PCM_UNKNOWN_CHANNEL]   = SPI_DACD1_BIT,
 };
 
 /* open_playback callback */
@@ -1258,28 +1258,29 @@ static int __devinit snd_ca0106_pcm(struct snd_ca0106 *emu, int device, struct s
        return 0;
 }
 
+#define SPI_REG(reg, value)    (((reg) << SPI_REG_SHIFT) | (value))
 static unsigned int spi_dac_init[] = {
-       0x00ff,
-       0x02ff,
-       0x0400,
-       0x0520,
-       0x0620, /* Set 24 bit. Was 0x0600 */
-       0x08ff,
-       0x0aff,
-       0x0cff,
-       0x0eff,
-       0x10ff,
-       0x1200,
-       0x1400,
-       0x1480,
-       0x1800,
-       0x1aff,
-       0x1cff,
-       0x1e00,
-       0x0530,
-       0x0602,
-       0x0622,
-       0x140e,
+       SPI_REG(SPI_LDA1_REG,   SPI_DA_BIT_0dB), /* 0dB dig. attenuation */
+       SPI_REG(SPI_RDA1_REG,   SPI_DA_BIT_0dB),
+       SPI_REG(SPI_PL_REG,     0x00),
+       SPI_REG(SPI_PL_REG,     SPI_PL_BIT_L_L | SPI_PL_BIT_R_R),
+       SPI_REG(SPI_FMT_REG,    SPI_FMT_BIT_RJ | SPI_IWL_BIT_24),
+       SPI_REG(SPI_LDA2_REG,   SPI_DA_BIT_0dB),
+       SPI_REG(SPI_RDA2_REG,   SPI_DA_BIT_0dB),
+       SPI_REG(SPI_LDA3_REG,   SPI_DA_BIT_0dB),
+       SPI_REG(SPI_RDA3_REG,   SPI_DA_BIT_0dB),
+       SPI_REG(SPI_MASTDA_REG, SPI_DA_BIT_0dB),
+       SPI_REG(9,              0x00),
+       SPI_REG(SPI_MS_REG,     0x00),
+       SPI_REG(SPI_MS_REG,     SPI_RATE_BIT_256),
+       SPI_REG(12,             0x00),
+       SPI_REG(SPI_LDA4_REG,   SPI_DA_BIT_0dB),
+       SPI_REG(SPI_RDA4_REG,   SPI_DA_BIT_0dB),
+       SPI_REG(15,             0x00),
+       SPI_REG(SPI_PL_REG,     SPI_PL_BIT_L_L | SPI_PL_BIT_R_R | SPI_IZD_BIT),
+       SPI_REG(SPI_FMT_REG,    SPI_FMT_BIT_I2S),
+       SPI_REG(SPI_FMT_REG,    SPI_FMT_BIT_I2S | SPI_IWL_BIT_24),
+       SPI_REG(SPI_MS_REG,     SPI_DACD0_BIT | SPI_DACD1_BIT | SPI_DACD2_BIT),
 };
 
 static unsigned int i2c_adc_init[][2] = {
index 18a0525a6b5c9661fcbc1acc5aa769c056000f78..be519a17dfa513eb22eb610f98c2c0fbfaaf6d87 100644 (file)
@@ -599,7 +599,7 @@ static struct snd_kcontrol_new snd_ca0106_volume_i2c_adc_ctls[] __devinitdata =
        .info   = spi_mute_info,                                \
        .get    = spi_mute_get,                                 \
        .put    = spi_mute_put,                                 \
-       .private_value = (reg<<SPI_REG_SHIFT) | (1<<bit)        \
+       .private_value = (reg<<SPI_REG_SHIFT) | (bit)           \
 }
 
 static struct snd_kcontrol_new snd_ca0106_volume_spi_dac_ctls[]