Dell SBLive! (almost) fixed

Joseph Dunn joseph at magnesium.net
Wed Jun 9 22:33:37 GMT 2004


Hello hackers@,

I just helped a friend install FreeBSD 5.2.1 on his Dell desktop
machine, and we've been struggling to get his sound card working. His
system has an SBLive! card, we were unable to use it with the stock
snd_emu10k1 driver. However...

pciconf -lv output:
none3 at pci2:2:0: class=0x040100 card=0x10031102 chip=0x00061102 rev=0x00
hdr=0x00
    vendor   = 'Creative Labs'
    device   = 'emu10k1x Soundblaster Live! 5.1'
    class    = multimedia  
    subclass = audio

relevant lines from /usr/src/sys/dev/sound/pci/emu10k1.c:
#define EMU10K1_PCI_ID  0x00021102
#define EMU10K2_PCI_ID  0x00041102

As you can see, Dell has apparently changed the card's PCI ID, and thus
the driver is not detecting it. I modified emu10k1.c to include the PCI
ID (see attached diff). Now, the new snd_emu10k1 driver detects the
card:
pcm0: <Creative EMU10K1 (Dell)> port 0xdf20-0xdf3f irq 17 at device 2.0 on pci2
pcm0: <SigmaTel STAC9708/11 AC97 Codec>

This *appears* to be working, but when I tried to play an mp3 with
mpg123, I got this error, and no sound:
pcm0:play:0: play interrupt timeout, channel dead

Could anyone with experience in this area venture a guess as to the
problem?

Thanks,

Joseph
-------------- next part --------------
--- emu10k1.c	2004-06-09 11:26:37.000000000 -0500
+++ emu10k1.c.dell	2004-06-09 11:29:26.000000000 -0500
@@ -37,6 +37,7 @@
 /* -------------------------------------------------------------------- */
 
 #define	EMU10K1_PCI_ID	0x00021102
+#define	EMU10K1_DELL_PCI_ID	0x00061102
 #define	EMU10K2_PCI_ID	0x00041102
 #define	EMU_DEFAULT_BUFSZ	4096
 #define	EMU_CHANS	4
@@ -1441,6 +1442,10 @@
 	case EMU10K1_PCI_ID:
 		s = "Creative EMU10K1";
 		break;
+
+	case EMU10K1_DELL_PCI_ID:
+		s = "Creative EMU10K1 (Dell)";
+		break;
 /*
 	case EMU10K2_PCI_ID:
 		s = "Creative EMU10K2";
@@ -1595,6 +1600,10 @@
 		s = "Creative EMU10K1 Joystick";
 		device_quiet(dev);
 		break;
+	case 0x70041102:
+		s = "Creative EMU10K1 Joystick (Dell)";
+		device_quiet(dev);
+		break;
 	case 0x70031102:
 		s = "Creative EMU10K2 Joystick";
 		device_quiet(dev);


More information about the freebsd-hackers mailing list