[ALSA] remove incorrect usage of SNDRV_PCM_INFO_SYNC_START and snd_pcm_set_sync()
[deliverable/linux.git] / sound / pci / ca0106 / ca0106_main.c
index 36b7cdda7c415e9c414f4c97aef772208fb5290b..31d8db9f7a4c023950fb14c6caee50212ede553a 100644 (file)
@@ -274,10 +274,11 @@ static struct snd_ca0106_details ca0106_chip_details[] = {
 
 /* hardware definition */
 static struct snd_pcm_hardware snd_ca0106_playback_hw = {
-       .info =                 (SNDRV_PCM_INFO_MMAP | 
-                                SNDRV_PCM_INFO_INTERLEAVED |
-                                SNDRV_PCM_INFO_BLOCK_TRANSFER |
-                                SNDRV_PCM_INFO_MMAP_VALID),
+       .info =                 SNDRV_PCM_INFO_MMAP | 
+                               SNDRV_PCM_INFO_INTERLEAVED |
+                               SNDRV_PCM_INFO_BLOCK_TRANSFER |
+                               SNDRV_PCM_INFO_MMAP_VALID |
+                               SNDRV_PCM_INFO_SYNC_START,
        .formats =              SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE,
        .rates =                (SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
                                 SNDRV_PCM_RATE_192000),
@@ -467,10 +468,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 */
@@ -507,6 +508,7 @@ static int snd_ca0106_pcm_open_playback_channel(struct snd_pcm_substream *substr
                 return err;
        if ((err = snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 64)) < 0)
                 return err;
+       snd_pcm_set_sync(substream);
 
        if (chip->details->spi_dac && channel_id != PCM_FRONT_CHANNEL) {
                const int reg = spi_dacd_reg[channel_id];
@@ -853,6 +855,9 @@ static int snd_ca0106_pcm_trigger_playback(struct snd_pcm_substream *substream,
                break;
        }
         snd_pcm_group_for_each_entry(s, substream) {
+               if (snd_pcm_substream_chip(s) != emu ||
+                   s->stream != SNDRV_PCM_STREAM_PLAYBACK)
+                       continue;
                runtime = s->runtime;
                epcm = runtime->private_data;
                channel = epcm->channel_id;
@@ -1258,28 +1263,23 @@ 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,     SPI_PL_BIT_L_L | SPI_PL_BIT_R_R | SPI_IZD_BIT),
+       SPI_REG(SPI_FMT_REG,    SPI_FMT_BIT_I2S | 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,     SPI_DACD0_BIT | SPI_DACD1_BIT | SPI_DACD2_BIT),
+       SPI_REG(12,             0x00),
+       SPI_REG(SPI_LDA4_REG,   SPI_DA_BIT_0dB),
+       SPI_REG(SPI_RDA4_REG,   SPI_DA_BIT_0dB | SPI_DA_BIT_UPDATE),
+       SPI_REG(SPI_DACD4_REG,  0x00),
 };
 
 static unsigned int i2c_adc_init[][2] = {
This page took 0.029349 seconds and 5 git commands to generate.