--- mixer_alsa9.cpp.old	2020-05-05 14:26:54.000000000 +0200
+++ mixer_alsa9.cpp	2020-05-05 15:02:01.029482302 +0200
@@ -202,6 +202,10 @@
 	bool canRecord = false;
 	bool canMute = false;
 	bool canCapture = false;
+	bool canPlay = false;
+	bool isPlaySwitch = false;
+	bool isCaptureSwitch = false;
+	bool isEnum = false;
 	long maxVolumePlay= 0, minVolumePlay= 0;
 	long maxVolumeRec = 0, minVolumeRec = 0;
 	validDevice = true;
@@ -226,6 +230,7 @@
 	    Volume* volPlay = 0, *volCapture = 0;
 	    TQPtrList<TQString> enumList;
 	    if ( snd_mixer_selem_is_enumerated(elem) ) {
+		isEnum = true;
 		cc = MixDevice::ENUM;
 		volPlay = new Volume(); // Dummy, unused
 		volCapture = new Volume();
@@ -261,6 +266,7 @@
 				? Volume::MLEFT : (Volume::ChannelMask)(Volume::MLEFT | Volume::MRIGHT);
 			chn = (Volume::ChannelMask) (chn | chnTmp);
 			cc = MixDevice::SLIDER;
+			canPlay = true;
 			volPlay = new Volume( chn, maxVolumePlay, minVolumePlay );
 		} else {
 			volPlay = new Volume();
@@ -285,15 +291,19 @@
 		if ( snd_mixer_selem_has_playback_switch ( elem ) ) {
 			//kdDebug(67100) << "has_playback_switch()" << endl;
 			canMute = true;
+			isPlaySwitch = true;
 		}
 		if ( snd_mixer_selem_has_capture_switch ( elem ) )	{
 			//kdDebug(67100) << "has_capture_switch()" << endl;
 			canRecord = true;
+			isCaptureSwitch = true;
 		}
 		if ( snd_mixer_selem_has_common_switch ( elem ) ) {
 			//kdDebug(67100) << "has_common_switch()" << endl;
 			canMute = true;
 			canRecord = true;
+			isPlaySwitch = true;
+			isCaptureSwitch = true;
 		}
 
 		if ( /*snd_mixer_selem_has_common_switch ( elem ) || */
@@ -301,34 +311,59 @@
 		{
 		    // Everything unknown is handled as switch
 		    cc = MixDevice::SWITCH;
+		    isPlaySwitch = true;
 		}
 	    } // is ordinary mixer element (NOT an enum)
 
-		MixDevice* md = new MixDevice( mixerIdx,
-				   canCapture ? *volCapture : *volPlay,
-				   canCapture ? true : canRecord,
-				   canMute,
-				   snd_mixer_selem_id_get_name( sid ),
-				   ct,
-				   cc );
+		if (canPlay || isPlaySwitch || isEnum)
+		{
+			MixDevice* md = new MixDevice( mixerIdx,
+					   *volPlay,
+					   false,
+					   canMute,
+					   snd_mixer_selem_id_get_name( sid ),
+					   ct,
+					   cc );
 
-			m_mixDevices.append( md );
+				m_mixDevices.append( md );
 
 
-		if (!masterChosen && ct==MixDevice::VOLUME) {
-		// Determine a nicer MasterVolume
-		m_recommendedMaster = md;
-		masterChosen = true;
+			if (!masterChosen && ct==MixDevice::VOLUME) {
+			// Determine a nicer MasterVolume
+			m_recommendedMaster = md;
+			masterChosen = true;
+			}
+
+			if ( enumList.count() > 0 ) {
+			  int maxEnumId= enumList.count();
+			  TQPtrList<TQString>& enumValuesRef = md->enumValues(); // retrieve a ref
+			  for (int i=0; i<maxEnumId; i++ ) {
+			    // we have an enum. Lets set the names of the enum items in the MixDevice
+			    // the enum names are assumed to be static!
+			    enumValuesRef.append(enumList.at(i) );
+			  }
+			}
 		}
+		if (canCapture || isCaptureSwitch)
+		{
+			MixDevice* md = new MixDevice( mixerIdx,
+					   *volCapture,
+					   true,
+					   canMute,
+					   snd_mixer_selem_id_get_name( sid ),
+					   ct,
+					   cc );
 
-		if ( enumList.count() > 0 ) {
-		  int maxEnumId= enumList.count();
-		  TQPtrList<TQString>& enumValuesRef = md->enumValues(); // retrieve a ref
-		  for (int i=0; i<maxEnumId; i++ ) {
-		    // we have an enum. Lets set the names of the enum items in the MixDevice
-		    // the enum names are assumed to be static!
-		    enumValuesRef.append(enumList.at(i) );
-		  }
+				m_mixDevices.append( md );
+			if ( enumList.count() > 0 ) {
+			  int maxEnumId= enumList.count();
+			  TQPtrList<TQString>& enumValuesRef = md->enumValues(); // retrieve a ref
+			  for (int i=0; i<maxEnumId; i++ ) {
+			    // we have an enum. Lets set the names of the enum items in the MixDevice
+			    // the enum names are assumed to be static!
+			    enumValuesRef.append(enumList.at(i) );
+			  }
+			}
 		}
 		//kdDebug(67100) << "ALSA create MDW, vol= " << *vol << endl;
 		delete volPlay;
