]> Pileus Git - ~andy/linux/blobdiff - sound/pci/oxygen/hifier.c
[ALSA] oxygen: use SPDIF input only if present
[~andy/linux] / sound / pci / oxygen / hifier.c
index 51c4d1ae9d023e6466d4860ac514f489551e4b69..50551ae0b3b41ecdd790212f967aeb6bd5e47928 100644 (file)
@@ -56,7 +56,7 @@ static void ak4396_write(struct oxygen *chip, u8 reg, u8 value)
 {
        oxygen_write_spi(chip, OXYGEN_SPI_TRIGGER  |
                         OXYGEN_SPI_DATA_LENGTH_2 |
-                        OXYGEN_SPI_CLOCK_320 |
+                        OXYGEN_SPI_CLOCK_160 |
                         (0 << OXYGEN_SPI_CODEC_SHIFT) |
                         OXYGEN_SPI_CEN_LATCH_CLOCK_HI,
                         AK4396_WRITE | (reg << 8) | value);
@@ -132,11 +132,6 @@ static int hifier_control_filter(struct snd_kcontrol_new *template)
                template->tlv.p = ak4396_db_scale;
        } else if (!strcmp(template->name, "Stereo Upmixing")) {
                return 1; /* stereo only - we don't need upmixing */
-       } else if (!strcmp(template->name,
-                          SNDRV_CTL_NAME_IEC958("", CAPTURE, MASK)) ||
-                  !strcmp(template->name,
-                          SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT))) {
-               return 1; /* no digital input */
        }
        return 0;
 }
@@ -150,6 +145,7 @@ static const struct oxygen_model model_hifier = {
        .shortname = "C-Media CMI8787",
        .longname = "C-Media Oxygen HD Audio",
        .chip = "CMI8788",
+       .owner = THIS_MODULE,
        .init = hifier_init,
        .control_filter = hifier_control_filter,
        .mixer_init = hifier_mixer_init,
@@ -159,11 +155,11 @@ static const struct oxygen_model model_hifier = {
        .update_dac_volume = update_ak4396_volume,
        .update_dac_mute = update_ak4396_mute,
        .model_data_size = sizeof(struct hifier_data),
+       .pcm_dev_cfg = PLAYBACK_0_TO_I2S |
+                      PLAYBACK_1_TO_SPDIF |
+                      CAPTURE_0_FROM_I2S_1,
        .dac_channels = 2,
-       .used_channels = OXYGEN_CHANNEL_A |
-                        OXYGEN_CHANNEL_SPDIF |
-                        OXYGEN_CHANNEL_MULTICH,
-       .function_flags = 0,
+       .function_flags = OXYGEN_FUNCTION_SPI,
        .dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
        .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
 };
@@ -180,7 +176,7 @@ static int __devinit hifier_probe(struct pci_dev *pci,
                ++dev;
                return -ENOENT;
        }
-       err = oxygen_pci_probe(pci, index[dev], id[dev], 0, &model_hifier);
+       err = oxygen_pci_probe(pci, index[dev], id[dev], &model_hifier);
        if (err >= 0)
                ++dev;
        return err;