aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/cmipci.c
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2007-08-27 03:20:31 -0400
committerJaroslav Kysela <perex@perex.cz>2007-10-16 09:59:28 -0400
commit133271fef52c06de52ea9a8ee27899f18dae9af2 (patch)
tree1a9b94c6a90bcaa33b1ab7b953f504d7a5abb1aa /sound/pci/cmipci.c
parentc9116ae45bd10eabe1e5cf88798092e184d8dbc2 (diff)
[ALSA] cmipci: reorganize chip version detection
Add a case for chip version 39 where no bit is set in register 0Ch, and move the detection of version 39 before that of 8768. This makes the logic more compatible with the driver on that other OS. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'sound/pci/cmipci.c')
-rw-r--r--sound/pci/cmipci.c44
1 files changed, 20 insertions, 24 deletions
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c
index 6021e5c402ea..cc0977a8a3d6 100644
--- a/sound/pci/cmipci.c
+++ b/sound/pci/cmipci.c
@@ -2625,46 +2625,42 @@ static void __devinit query_chip(struct cmipci *cm)
2625 if (! detect) { 2625 if (! detect) {
2626 /* check reg 08h, bit 24-28 */ 2626 /* check reg 08h, bit 24-28 */
2627 detect = snd_cmipci_read(cm, CM_REG_CHFORMAT) & CM_CHIP_MASK1; 2627 detect = snd_cmipci_read(cm, CM_REG_CHFORMAT) & CM_CHIP_MASK1;
2628 if (! detect) { 2628 switch (detect) {
2629 case 0:
2629 cm->chip_version = 33; 2630 cm->chip_version = 33;
2630 cm->max_channels = 2;
2631 if (cm->do_soft_ac3) 2631 if (cm->do_soft_ac3)
2632 cm->can_ac3_sw = 1; 2632 cm->can_ac3_sw = 1;
2633 else 2633 else
2634 cm->can_ac3_hw = 1; 2634 cm->can_ac3_hw = 1;
2635 cm->has_dual_dac = 1; 2635 break;
2636 } else { 2636 case 1:
2637 cm->chip_version = 37; 2637 cm->chip_version = 37;
2638 cm->max_channels = 2;
2639 cm->can_ac3_hw = 1; 2638 cm->can_ac3_hw = 1;
2640 cm->has_dual_dac = 1; 2639 break;
2640 default:
2641 cm->chip_version = 39;
2642 cm->can_ac3_hw = 1;
2643 break;
2641 } 2644 }
2645 cm->max_channels = 2;
2646 cm->has_dual_dac = 1;
2642 } else { 2647 } else {
2643 /* check reg 0Ch, bit 26 */ 2648 if (detect & CM_CHIP_039) {
2644 if (detect & CM_CHIP_8768) {
2645 cm->chip_version = 68;
2646 cm->max_channels = 8;
2647 cm->can_ac3_hw = 1;
2648 cm->has_dual_dac = 1;
2649 cm->can_multi_ch = 1;
2650 } else if (detect & CM_CHIP_055) {
2651 cm->chip_version = 55;
2652 cm->max_channels = 6;
2653 cm->can_ac3_hw = 1;
2654 cm->has_dual_dac = 1;
2655 cm->can_multi_ch = 1;
2656 } else if (detect & CM_CHIP_039) {
2657 cm->chip_version = 39; 2649 cm->chip_version = 39;
2658 if (detect & CM_CHIP_039_6CH) /* 4 or 6 channels */ 2650 if (detect & CM_CHIP_039_6CH) /* 4 or 6 channels */
2659 cm->max_channels = 6; 2651 cm->max_channels = 6;
2660 else 2652 else
2661 cm->max_channels = 4; 2653 cm->max_channels = 4;
2662 cm->can_ac3_hw = 1; 2654 } else if (detect & CM_CHIP_8768) {
2663 cm->has_dual_dac = 1; 2655 cm->chip_version = 68;
2664 cm->can_multi_ch = 1; 2656 cm->max_channels = 8;
2665 } else { 2657 } else {
2666 printk(KERN_ERR "chip %x version not supported\n", detect); 2658 cm->chip_version = 55;
2659 cm->max_channels = 6;
2667 } 2660 }
2661 cm->can_ac3_hw = 1;
2662 cm->has_dual_dac = 1;
2663 cm->can_multi_ch = 1;
2668 } 2664 }
2669} 2665}
2670 2666