http://www.nakack.net/?p=19
Shuttle SN25P Sound
I just bought a new machine a few days ago and lo and behold, the sound
isn't supported yet. It's the onboard sound chip from a shuttle
FN25 board in the SN25P chassis (nforce4, socket 939). Or, at least not
out of the box in ubuntu hoary. The driver that this thing uses is the
'ice1724' module.
Here's how I got it to work...
1st off, when I would modprobe the default kernel module, I'd receive
these messages in the kernel ring buffer (dmesg):
ice1724: Invalid EEPROM (size = 255)
ICE1724: probe of 0000:05:06.0 failed with error -5
Hmm... not good... It has to be something retarded like a PCI
Product/Vendor ID. I did a quick google search and found this thread on
groups. It explains just what I thought. The Subvendor PCI-ID is
different from what was expected. I guess it's a new chip, that or
shuttle changed it.
Anyways, I was able to get the sub-vendor ID from lspci...
forgue@roanoke:~ $ sudo lspci -d 1412:1724 -nvx
0000:05:06.0 0401: 1412:1724 (rev 01)
Subsystem: 1297:5036
Flags: bus master, medium devsel, latency 32, IRQ 18
I/O ports at a000 [size=32]
I/O ports at a400 [size=128]
Capabilities: [80] Power Management version 1
00: 12 14 24 17 05 00 10 02 01 00 01 04 00 20 00 00
10: 01 a0 00 00 01 a4 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 97 12 36 50
30: 00 00 00 00 80 00 00 00 00 00 00 00 0c 01 00 00
Pay attention to the 5 bytes starting at offset 2b. These 5 bytes are
the subvendor ID for this card.
Get a copy of the kernel source, preferably from your distribution and
edit:
sound/pci/ice1712/vt1720_mobo.h
Change line 32 from:
#define VT1720_SUBDEVICE_ZNF3_150 0x0f2745f6
to:
#define VT1720_SUBDEVICE_ZNF3_150 0x97123650
Make sure that the hex string matches the bytes you looked at earlier.
Recompile the module and load it into the running kernel. Viola (I hate
you peter), you should have sound.
Here's a patch against 2.6.11 that I made:
diff -ur linux-source-2.6.11.orig/sound/pci/ice1712/vt1720_mobo.c
linux-source-2.6.11/sound/pci/ice1712/vt1720_mobo.c
--- linux-source-2.6.11.orig/sound/pci/ice1712/vt1720_mobo.c 2005-03-31
23:32:59.000000000 -0500
+++ linux-source-2.6.11/sound/pci/ice1712/vt1720_mobo.c 2005-03-31
23:33:48.000000000 -0500
@@ -101,6 +101,15 @@
..eeprom_size = sizeof(k8x800_eeprom),
..eeprom_data = k8x800_eeprom,
},
+ {
+ .subvendor = VT1720_SUBDEVICE_FN25_NF4,
+ .name = "Shuttle FN25 Envy24PT/HT",
+ /* This chip is also identical to the k8x800 */
+ .chip_init = k8x800_init,
+ .build_controls = k8x800_add_controls,
+ .eeprom_size = sizeof(k8x800_eeprom),
+ .eeprom_data = k8x800_eeprom,
+ },
{ } /* terminator */
};
diff -ur linux-source-2.6.11.orig/sound/pci/ice1712/vt1720_mobo.h
linux-source-2.6.11/sound/pci/ice1712/vt1720_mobo.h
--- linux-source-2.6.11.orig/sound/pci/ice1712/vt1720_mobo.h 2005-03-31
23:32:59.000000000 -0500
+++ linux-source-2.6.11/sound/pci/ice1712/vt1720_mobo.h 2005-03-31
23:33:50.000000000 -0500
@@ -31,6 +31,7 @@
#define VT1720_SUBDEVICE_K8X800 0xf217052c
#define VT1720_SUBDEVICE_ZNF3_150 0x0f2745f6
#define VT1720_SUBDEVICE_ZNF3_250 0x0f2745f6
+#define VT1720_SUBDEVICE_FN25_NF4 0x97123650
extern struct snd_ice1712_card_info snd_vt1720_mobo_cards[];
And this is typical for Linux.
What a joke, what a waste of time and what a collection of poorly
programmed junk.
Linux may be ready for a server in a lights out data center but to
expect desktop users to go through the above kind of crap in order to
make sound, BASIC SOUND, work is insane.
And lest you think Linux is unfriendly just to audio, you can find many
similar experiences with:
Printers
Video Cards.
Scanners.
USB devices
RAID controllers.
Firewire ports
and so forth.....
Just try and get dual displays working with Linux.
Sure hope you know how to use vi because you will be dead without it
unless you are an emacs expert in which case you and linux are a
perfect pair.
Linux is a hostile,buggy, alpha quality unfriendly system that is best
suited to people who are willing to choose their hardware to work and
are willing to compile their own kernals and write their own drivers if
need be.
Ira Wexler