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 ---