6912601 audiocmi volume control non-functional on CMI8768
authorGarrett D'Amore <gdamore@opensolaris.org>
Tue, 22 Dec 2009 21:03:06 -0800
changeset 11386 818b0d2a69dd
parent 11385 ede182582de2
child 11387 0072514d53c7
6912601 audiocmi volume control non-functional on CMI8768
usr/src/uts/common/io/audio/drv/audiocmi/audiocmi.c
usr/src/uts/common/io/audio/drv/audiocmi/audiocmi.h
--- a/usr/src/uts/common/io/audio/drv/audiocmi/audiocmi.c	Tue Dec 22 20:59:01 2009 -0800
+++ b/usr/src/uts/common/io/audio/drv/audiocmi/audiocmi.c	Tue Dec 22 21:03:06 2009 -0800
@@ -706,7 +706,11 @@
 static void
 cmpci_add_controls(cmpci_dev_t *dev)
 {
-	cmpci_alloc_ctrl(dev, CTL_VOLUME, 75);
+	if (dev->softvol) {
+		(void) audio_dev_add_soft_volume(dev->adev);
+	} else {
+		cmpci_alloc_ctrl(dev, CTL_VOLUME, 75);
+	}
 	cmpci_alloc_ctrl(dev, CTL_LINEOUT, 90 | (90 << 8));
 	cmpci_alloc_ctrl(dev, CTL_SPEAKER, 75);
 	cmpci_alloc_ctrl(dev, CTL_MIC, 32);
@@ -1105,6 +1109,7 @@
 		} else if ((val & INTCTRL_MDL_068) == INTCTRL_MDL_068) {
 			audio_dev_set_version(adev, "CMI-8768");
 			dev->maxch = 8;
+			dev->softvol = B_TRUE;	/* No hardware PCM volume */
 		} else if ((val & INTCTRL_MDL_055) == INTCTRL_MDL_055) {
 			audio_dev_set_version(adev, "CMI-8738-055");
 			dev->maxch = 6;
--- a/usr/src/uts/common/io/audio/drv/audiocmi/audiocmi.h	Tue Dec 22 20:59:01 2009 -0800
+++ b/usr/src/uts/common/io/audio/drv/audiocmi/audiocmi.h	Tue Dec 22 21:03:06 2009 -0800
@@ -302,17 +302,13 @@
 	ddi_acc_handle_t	acch;
 	caddr_t			regs;
 
+	boolean_t		softvol;
+
 	int			pintrs;
 	int			rintrs;
 	ddi_intr_handle_t	ihandle;
 	kstat_t			*ksp;
 
-	int			model;
-#define	MDL_CM8738		1
-#define	MDL_CM8338A		2
-#define	MDL_CM8338B		3
-#define	MDL_CM8768		4
-
 	int			maxch;
 
 	boolean_t		suspended;