[ALSA] hda-intel - Add NVidia support
[powerpc.git] / sound / pci / cs4281.c
index d7e06b3..dc87e01 100644 (file)
@@ -56,17 +56,6 @@ MODULE_PARM_DESC(enable, "Enable CS4281 soundcard.");
 module_param_array(dual_codec, bool, NULL, 0444);
 MODULE_PARM_DESC(dual_codec, "Secondary Codec ID (0 = disabled).");
 
-/*
- *
- */
-
-#ifndef PCI_VENDOR_ID_CIRRUS
-#define PCI_VENDOR_ID_CIRRUS            0x1013
-#endif
-#ifndef PCI_DEVICE_ID_CIRRUS_4281
-#define PCI_DEVICE_ID_CIRRUS_4281      0x6005
-#endif
-
 /*
  *  Direct registers
  */
@@ -206,7 +195,10 @@ MODULE_PARM_DESC(dual_codec, "Secondary Codec ID (0 = disabled).");
 
 #define BA0_PMCS               0x0344  /* Power Management Control/Status */
 #define BA0_CWPR               0x03e0  /* Configuration Write Protect */
+
 #define BA0_EPPMC              0x03e4  /* Extended PCI Power Management Control */
+#define BA0_EPPMC_FPDN         (1<<14) /* Full Power DowN */
+
 #define BA0_GPIOR              0x03e8  /* GPIO Pin Interface Register */
 
 #define BA0_SPMC               0x03ec  /* Serial Port Power Management Control (& ASDIN2 enable) */
@@ -539,7 +531,7 @@ static void snd_cs4281_delay(unsigned int delay)
        }
 }
 
-inline static void snd_cs4281_delay_long(void)
+static inline void snd_cs4281_delay_long(void)
 {
        set_current_state(TASK_UNINTERRUPTIBLE);
        schedule_timeout(1);
@@ -1335,11 +1327,6 @@ static inline int snd_cs4281_create_gameport(cs4281_t *chip) { return -ENOSYS; }
 static inline void snd_cs4281_free_gameport(cs4281_t *chip) { }
 #endif /* CONFIG_GAMEPORT || (MODULE && CONFIG_GAMEPORT_MODULE) */
 
-
-/*
-
- */
-
 static int snd_cs4281_free(cs4281_t *chip)
 {
        snd_cs4281_free_gameport(chip);
@@ -1396,7 +1383,7 @@ static int __devinit snd_cs4281_create(snd_card_t * card,
        *rchip = NULL;
        if ((err = pci_enable_device(pci)) < 0)
                return err;
-       chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
+       chip = kzalloc(sizeof(*chip), GFP_KERNEL);
        if (chip == NULL) {
                pci_disable_device(pci);
                return -ENOMEM;
@@ -1461,6 +1448,11 @@ static int snd_cs4281_chip_init(cs4281_t *chip)
        int timeout;
        int retry_count = 2;
 
+       /* Having EPPMC.FPDN=1 prevent proper chip initialisation */
+       tmp = snd_cs4281_peekBA0(chip, BA0_EPPMC);
+       if (tmp & BA0_EPPMC_FPDN)
+               snd_cs4281_pokeBA0(chip, BA0_EPPMC, tmp & ~BA0_EPPMC_FPDN);
+
       __retry:
        tmp = snd_cs4281_peekBA0(chip, BA0_CFLR);
        if (tmp != BA0_CFLR_DEFAULT) {
@@ -2116,6 +2108,7 @@ static int cs4281_resume(snd_card_t *card)
 
 static struct pci_driver driver = {
        .name = "CS4281",
+       .owner = THIS_MODULE,
        .id_table = snd_cs4281_ids,
        .probe = snd_cs4281_probe,
        .remove = __devexit_p(snd_cs4281_remove),
@@ -2124,7 +2117,7 @@ static struct pci_driver driver = {
        
 static int __init alsa_card_cs4281_init(void)
 {
-       return pci_module_init(&driver);
+       return pci_register_driver(&driver);
 }
 
 static void __exit alsa_card_cs4281_exit(void)