oxygen.c (18f24839f18f1934c1e37e86ce8f3fecbb0328c9) | oxygen.c (2146dcfd15ad55cfdd18b45e1e6601d6a86f0cbe) |
---|---|
1/* 2 * C-Media CMI8788 driver for C-Media's reference design and similar models 3 * 4 * Copyright (c) Clemens Ladisch <clemens@ladisch.de> 5 * 6 * 7 * This driver is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License, version 2. --- 56 unchanged lines hidden (view full) --- 65module_param_array(enable, bool, NULL, 0444); 66MODULE_PARM_DESC(enable, "enable card"); 67 68enum { 69 MODEL_CMEDIA_REF, 70 MODEL_MERIDIAN, 71 MODEL_CLARO, 72 MODEL_CLARO_HALO, | 1/* 2 * C-Media CMI8788 driver for C-Media's reference design and similar models 3 * 4 * Copyright (c) Clemens Ladisch <clemens@ladisch.de> 5 * 6 * 7 * This driver is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License, version 2. --- 56 unchanged lines hidden (view full) --- 65module_param_array(enable, bool, NULL, 0444); 66MODULE_PARM_DESC(enable, "enable card"); 67 68enum { 69 MODEL_CMEDIA_REF, 70 MODEL_MERIDIAN, 71 MODEL_CLARO, 72 MODEL_CLARO_HALO, |
73 MODEL_HIFIER, 74 MODEL_HG2PCI, | 73 MODEL_FANTASIA, 74 MODEL_2CH_OUTPUT, |
75}; 76 77static DEFINE_PCI_DEVICE_TABLE(oxygen_ids) = { 78 /* C-Media's reference design */ 79 { OXYGEN_PCI_SUBID(0x10b0, 0x0216), .driver_data = MODEL_CMEDIA_REF }, 80 { OXYGEN_PCI_SUBID(0x10b0, 0x0218), .driver_data = MODEL_CMEDIA_REF }, 81 { OXYGEN_PCI_SUBID(0x10b0, 0x0219), .driver_data = MODEL_CMEDIA_REF }, 82 { OXYGEN_PCI_SUBID(0x13f6, 0x0001), .driver_data = MODEL_CMEDIA_REF }, 83 { OXYGEN_PCI_SUBID(0x13f6, 0x0010), .driver_data = MODEL_CMEDIA_REF }, 84 { OXYGEN_PCI_SUBID(0x13f6, 0x8788), .driver_data = MODEL_CMEDIA_REF }, 85 { OXYGEN_PCI_SUBID(0x147a, 0xa017), .driver_data = MODEL_CMEDIA_REF }, 86 { OXYGEN_PCI_SUBID(0x1a58, 0x0910), .driver_data = MODEL_CMEDIA_REF }, 87 /* Kuroutoshikou CMI8787-HG2PCI */ | 75}; 76 77static DEFINE_PCI_DEVICE_TABLE(oxygen_ids) = { 78 /* C-Media's reference design */ 79 { OXYGEN_PCI_SUBID(0x10b0, 0x0216), .driver_data = MODEL_CMEDIA_REF }, 80 { OXYGEN_PCI_SUBID(0x10b0, 0x0218), .driver_data = MODEL_CMEDIA_REF }, 81 { OXYGEN_PCI_SUBID(0x10b0, 0x0219), .driver_data = MODEL_CMEDIA_REF }, 82 { OXYGEN_PCI_SUBID(0x13f6, 0x0001), .driver_data = MODEL_CMEDIA_REF }, 83 { OXYGEN_PCI_SUBID(0x13f6, 0x0010), .driver_data = MODEL_CMEDIA_REF }, 84 { OXYGEN_PCI_SUBID(0x13f6, 0x8788), .driver_data = MODEL_CMEDIA_REF }, 85 { OXYGEN_PCI_SUBID(0x147a, 0xa017), .driver_data = MODEL_CMEDIA_REF }, 86 { OXYGEN_PCI_SUBID(0x1a58, 0x0910), .driver_data = MODEL_CMEDIA_REF }, 87 /* Kuroutoshikou CMI8787-HG2PCI */ |
88 { OXYGEN_PCI_SUBID(0x13f6, 0xffff), .driver_data = MODEL_HG2PCI }, | 88 { OXYGEN_PCI_SUBID(0x13f6, 0xffff), .driver_data = MODEL_2CH_OUTPUT }, |
89 /* TempoTec HiFier Fantasia */ | 89 /* TempoTec HiFier Fantasia */ |
90 { OXYGEN_PCI_SUBID(0x14c3, 0x1710), .driver_data = MODEL_HIFIER }, 91 { OXYGEN_PCI_SUBID(0x14c3, 0x1711), .driver_data = MODEL_HIFIER }, | 90 { OXYGEN_PCI_SUBID(0x14c3, 0x1710), .driver_data = MODEL_FANTASIA }, 91 /* TempoTec HiFier Serenade */ 92 { OXYGEN_PCI_SUBID(0x14c3, 0x1711), .driver_data = MODEL_2CH_OUTPUT }, |
92 /* AuzenTech X-Meridian */ 93 { OXYGEN_PCI_SUBID(0x415a, 0x5431), .driver_data = MODEL_MERIDIAN }, 94 /* HT-Omega Claro */ 95 { OXYGEN_PCI_SUBID(0x7284, 0x9761), .driver_data = MODEL_CLARO }, 96 /* HT-Omega Claro halo */ 97 { OXYGEN_PCI_SUBID(0x7284, 0x9781), .driver_data = MODEL_CLARO_HALO }, 98 { } 99}; --- 139 unchanged lines hidden (view full) --- 239 240static void claro_halo_init(struct oxygen *chip) 241{ 242 ak4396_init(chip); 243 ak5385_init(chip); 244 claro_enable_hp(chip); 245} 246 | 93 /* AuzenTech X-Meridian */ 94 { OXYGEN_PCI_SUBID(0x415a, 0x5431), .driver_data = MODEL_MERIDIAN }, 95 /* HT-Omega Claro */ 96 { OXYGEN_PCI_SUBID(0x7284, 0x9761), .driver_data = MODEL_CLARO }, 97 /* HT-Omega Claro halo */ 98 { OXYGEN_PCI_SUBID(0x7284, 0x9781), .driver_data = MODEL_CLARO_HALO }, 99 { } 100}; --- 139 unchanged lines hidden (view full) --- 240 241static void claro_halo_init(struct oxygen *chip) 242{ 243 ak4396_init(chip); 244 ak5385_init(chip); 245 claro_enable_hp(chip); 246} 247 |
247static void hifier_init(struct oxygen *chip) | 248static void fantasia_init(struct oxygen *chip) |
248{ 249 ak4396_init(chip); 250 snd_component_add(chip->card, "CS5340"); 251} 252 | 249{ 250 ak4396_init(chip); 251 snd_component_add(chip->card, "CS5340"); 252} 253 |
253static void hg2pci_init(struct oxygen *chip) | 254static void stereo_output_init(struct oxygen *chip) |
254{ 255 ak4396_init(chip); 256} 257 258static void generic_cleanup(struct oxygen *chip) 259{ 260} 261 --- 316 unchanged lines hidden (view full) --- 578 chip->model.suspend = claro_suspend; 579 chip->model.resume = claro_resume; 580 chip->model.set_adc_params = set_ak5385_params; 581 chip->model.device_config = PLAYBACK_0_TO_I2S | 582 PLAYBACK_1_TO_SPDIF | 583 CAPTURE_0_FROM_I2S_2 | 584 CAPTURE_1_FROM_SPDIF; 585 break; | 255{ 256 ak4396_init(chip); 257} 258 259static void generic_cleanup(struct oxygen *chip) 260{ 261} 262 --- 316 unchanged lines hidden (view full) --- 579 chip->model.suspend = claro_suspend; 580 chip->model.resume = claro_resume; 581 chip->model.set_adc_params = set_ak5385_params; 582 chip->model.device_config = PLAYBACK_0_TO_I2S | 583 PLAYBACK_1_TO_SPDIF | 584 CAPTURE_0_FROM_I2S_2 | 585 CAPTURE_1_FROM_SPDIF; 586 break; |
586 case MODEL_HIFIER: 587 case MODEL_HG2PCI: | 587 case MODEL_FANTASIA: 588 case MODEL_2CH_OUTPUT: |
588 chip->model.shortname = "C-Media CMI8787"; 589 chip->model.chip = "CMI8787"; | 589 chip->model.shortname = "C-Media CMI8787"; 590 chip->model.chip = "CMI8787"; |
590 if (id->driver_data == MODEL_HIFIER) 591 chip->model.init = hifier_init; | 591 if (id->driver_data == MODEL_FANTASIA) 592 chip->model.init = fantasia_init; |
592 else | 593 else |
593 chip->model.init = hg2pci_init; | 594 chip->model.init = stereo_output_init; |
594 chip->model.resume = stereo_resume; 595 chip->model.mixer_init = generic_mixer_init; 596 chip->model.set_adc_params = set_no_params; 597 chip->model.device_config = PLAYBACK_0_TO_I2S | 598 PLAYBACK_1_TO_SPDIF; | 595 chip->model.resume = stereo_resume; 596 chip->model.mixer_init = generic_mixer_init; 597 chip->model.set_adc_params = set_no_params; 598 chip->model.device_config = PLAYBACK_0_TO_I2S | 599 PLAYBACK_1_TO_SPDIF; |
599 if (id->driver_data == MODEL_HIFIER) | 600 if (id->driver_data == MODEL_FANTASIA) |
600 chip->model.device_config |= CAPTURE_0_FROM_I2S_1; 601 chip->model.dac_channels = 2; 602 break; 603 } 604 if (id->driver_data == MODEL_MERIDIAN || 605 id->driver_data == MODEL_CLARO_HALO) { 606 chip->model.misc_flags = OXYGEN_MISC_MIDI; 607 chip->model.device_config |= MIDI_OUTPUT | MIDI_INPUT; --- 46 unchanged lines hidden --- | 601 chip->model.device_config |= CAPTURE_0_FROM_I2S_1; 602 chip->model.dac_channels = 2; 603 break; 604 } 605 if (id->driver_data == MODEL_MERIDIAN || 606 id->driver_data == MODEL_CLARO_HALO) { 607 chip->model.misc_flags = OXYGEN_MISC_MIDI; 608 chip->model.device_config |= MIDI_OUTPUT | MIDI_INPUT; --- 46 unchanged lines hidden --- |