281 lines
11 KiB
Plaintext
281 lines
11 KiB
Plaintext
=======================================================
|
|
Documentation for the NeoMagic 256AV/256ZX sound driver
|
|
=======================================================
|
|
|
|
You're looking at version 1.1 of the driver. (Woohoo!) It has been
|
|
successfully tested against the following laptop models:
|
|
|
|
Sony Z505S/Z505SX/Z505DX/Z505RX
|
|
Sony F150, F160, F180, F250, F270, F280, PCG-F26
|
|
Dell Latitude CPi, CPt (various submodels)
|
|
|
|
There are a few caveats, which is why you should read the entirety of
|
|
this document first.
|
|
|
|
This driver was developed without any support or assistance from
|
|
NeoMagic. There is no warranty, expressed, implied, or otherwise. It
|
|
is free software in the public domain; feel free to use it, sell it,
|
|
give it to your best friends, even claim that you wrote it (but why?!)
|
|
but don't go whining to me, NeoMagic, Sony, Dell, or anyone else
|
|
when it blows up your computer.
|
|
|
|
Version 1.1 contains a change to try and detect non-AC97 versions of
|
|
the hardware, and not install itself appropriately. It should also
|
|
reinitialize the hardware on an APM resume event, assuming that APM
|
|
was configured into your kernel.
|
|
|
|
============
|
|
Installation
|
|
============
|
|
|
|
Enable the sound drivers, the OSS sound drivers, and then the NM256
|
|
driver. The NM256 driver *must* be configured as a module (it won't
|
|
give you any other choice).
|
|
|
|
Next, do the usual "make modules" and "make modules_install".
|
|
Finally, insmod the soundcore, sound and nm256 modules.
|
|
|
|
When the nm256 driver module is loaded, you should see a couple of
|
|
confirmation messages in the kernel logfile indicating that it found
|
|
the device (the device does *not* use any I/O ports or DMA channels).
|
|
Now try playing a wav file, futz with the CD-ROM if you have one, etc.
|
|
|
|
The NM256 is entirely a PCI-based device, and all the necessary
|
|
information is automatically obtained from the card. It can only be
|
|
configured as a module in a vain attempt to prevent people from
|
|
hurting themselves. It works correctly if it shares an IRQ with
|
|
another device (it normally shares IRQ 9 with the builtin eepro100
|
|
ethernet on the Sony Z505 laptops).
|
|
|
|
It does not run the card in any sort of compatibility mode. It will
|
|
not work on laptops that have the SB16-compatible, AD1848-compatible
|
|
or CS4232-compatible codec/mixer; you will want to use the appropriate
|
|
compatible OSS driver with these chipsets. I cannot provide any
|
|
assistance with machines using the SB16, AD1848 or CS4232 compatible
|
|
versions. (The driver now attempts to detect the mixer version, and
|
|
will refuse to load if it believes the hardware is not
|
|
AC97-compatible.)
|
|
|
|
The sound support is very basic, but it does include simultaneous
|
|
playback and record capability. The mixer support is also quite
|
|
simple, although this is in keeping with the rather limited
|
|
functionality of the chipset.
|
|
|
|
There is no hardware synthesizer available, as the Losedows OPL-3 and
|
|
MIDI support is done via hardware emulation.
|
|
|
|
Only three recording devices are available on the Sony: the
|
|
microphone, the CD-ROM input, and the volume device (which corresponds
|
|
to the stereo output). (Other devices may be available on other
|
|
models of laptops.) The Z505 series does not have a builtin CD-ROM,
|
|
so of course the CD-ROM input doesn't work. It does work on laptops
|
|
with a builtin CD-ROM drive.
|
|
|
|
The mixer device does not appear to have any tone controls, at least
|
|
on the Z505 series. The mixer module checks for tone controls in the
|
|
AC97 mixer, and will enable them if they are available.
|
|
|
|
==============
|
|
Known problems
|
|
==============
|
|
|
|
* There are known problems with PCMCIA cards and the eepro100 ethernet
|
|
driver on the Z505S/Z505SX/Z505DX. Keep reading.
|
|
|
|
* There are also potential problems with using a virtual X display, and
|
|
also problems loading the module after the X server has been started.
|
|
Keep reading.
|
|
|
|
* The volume control isn't anywhere near linear. Sorry. This will be
|
|
fixed eventually, when I get sufficiently annoyed with it. (I doubt
|
|
it will ever be fixed now, since I've never gotten sufficiently
|
|
annoyed with it and nobody else seems to care.)
|
|
|
|
* There are reports that the CD-ROM volume is very low. Since I do not
|
|
have a CD-ROM equipped laptop, I cannot test this (it's kinda hard to
|
|
do remotely).
|
|
|
|
* Only 8 fixed-rate speeds are supported. This is mainly a chipset
|
|
limitation. It may be possible to support other speeds in the future.
|
|
|
|
* There is no support for the telephone mixer/codec. There is support
|
|
for a phonein/phoneout device in the mixer driver; whether or not
|
|
it does anything is anyone's guess. (Reports on this would be
|
|
appreciated. You'll have to figure out how to get the phone to
|
|
go off-hook before it'll work, tho.)
|
|
|
|
* This driver was not written with any cooperation or support from
|
|
NeoMagic. If you have any questions about this, see their website
|
|
for their official stance on supporting open source drivers.
|
|
|
|
============
|
|
Video memory
|
|
============
|
|
|
|
The NeoMagic sound engine uses a portion of the display memory to hold
|
|
the sound buffer. (Crazy, eh?) The NeoMagic video BIOS sets up a
|
|
special pointer at the top of video RAM to indicate where the top of
|
|
the audio buffer should be placed.
|
|
|
|
At the present time XFree86 is apparently not aware of this. It will
|
|
thus write over either the pointer or the sound buffer with abandon.
|
|
(Accelerated-X seems to do a better job here.)
|
|
|
|
This implies a few things:
|
|
|
|
* Sometimes the NM256 driver has to guess at where the buffer
|
|
should be placed, especially if the module is loaded after the
|
|
X server is started. It's usually correct, but it will consistently
|
|
fail on the Sony F250.
|
|
|
|
* Virtual screens greater than 1024x768x16 under XFree86 are
|
|
problematic on laptops with only 2.5MB of screen RAM. This
|
|
includes all of the 256AV-equipped laptops. (Virtual displays
|
|
may or may not work on the 256ZX, which has at least 4MB of
|
|
video RAM.)
|
|
|
|
If you start having problems with random noise being output either
|
|
constantly (this is the usual symptom on the F250), or when windows
|
|
are moved around (this is the usual symptom when using a virtual
|
|
screen), the best fix is to
|
|
|
|
* Don't use a virtual frame buffer.
|
|
* Make sure you load the NM256 module before the X server is
|
|
started.
|
|
|
|
On the F250, it is possible to force the driver to load properly even
|
|
after the XFree86 server is started by doing:
|
|
|
|
insmod nm256 buffertop=0x25a800
|
|
|
|
This forces the audio buffers to the correct offset in screen RAM.
|
|
|
|
One user has reported a similar problem on the Sony F270, although
|
|
others apparently aren't seeing any problems. His suggested command
|
|
is
|
|
|
|
insmod nm256 buffertop=0x272800
|
|
|
|
=================
|
|
Official WWW site
|
|
=================
|
|
|
|
The official site for the NM256 driver is:
|
|
|
|
http://www.uglx.org/sony.html
|
|
|
|
You should always be able to get the latest version of the driver there,
|
|
and the driver will be supported for the foreseeable future.
|
|
|
|
==============
|
|
Z505RX and IDE
|
|
==============
|
|
|
|
There appears to be a problem with the IDE chipset on the Z505RX; one
|
|
of the symptoms is that sound playback periodically hangs (when the
|
|
disk is accessed). The user reporting the problem also reported that
|
|
enabling all of the IDE chipset workarounds in the kernel solved the
|
|
problem, tho obviously only one of them should be needed--if someone
|
|
can give me more details I would appreciate it.
|
|
|
|
==============================
|
|
Z505S/Z505SX on-board Ethernet
|
|
==============================
|
|
|
|
If you're using the on-board Ethernet Pro/100 ethernet support on the Z505
|
|
series, I strongly encourage you to download the latest eepro100 driver from
|
|
Donald Becker's site:
|
|
|
|
ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/test/eepro100.c
|
|
|
|
There was a reported problem on the Z505SX that if the ethernet
|
|
interface is disabled and reenabled while the sound driver is loaded,
|
|
the machine would lock up. I have included a workaround that is
|
|
working satisfactorily. However, you may occasionally see a message
|
|
about "Releasing interrupts, over 1000 bad interrupts" which indicates
|
|
that the workaround is doing its job.
|
|
|
|
==================================
|
|
PCMCIA and the Z505S/Z505SX/Z505DX
|
|
==================================
|
|
|
|
There is also a known problem with the Sony Z505S and Z505SX hanging
|
|
if a PCMCIA card is inserted while the ethernet driver is loaded, or
|
|
in some cases if the laptop is suspended. This is caused by tons of
|
|
spurious IRQ 9s, probably generated from the PCMCIA or ACPI bridges.
|
|
|
|
There is currently no fix for the problem that works in every case.
|
|
The only known workarounds are to disable the ethernet interface
|
|
before inserting or removing a PCMCIA card, or with some cards
|
|
disabling the PCMCIA card before ejecting it will also help the
|
|
problem with the laptop hanging when the card is ejected.
|
|
|
|
One user has reported that setting the tcic's cs_irq to some value
|
|
other than 9 (like 11) fixed the problem. This doesn't work on my
|
|
Z505S, however--changing the value causes the cardmgr to stop seeing
|
|
card insertions and removals, cards don't seem to work correctly, and
|
|
I still get hangs if a card is inserted when the kernel is booted.
|
|
|
|
Using the latest ethernet driver and pcmcia package allows me to
|
|
insert an Adaptec 1480A SlimScsi card without the laptop hanging,
|
|
although I still have to shut down the card before ejecting or
|
|
powering down the laptop. However, similar experiments with a DE-660
|
|
ethernet card still result in hangs when the card is inserted. I am
|
|
beginning to think that the interrupts are CardBus-related, since the
|
|
Adaptec card is a CardBus card, and the DE-660 is not; however, I
|
|
don't have any other CardBus cards to test with.
|
|
|
|
======
|
|
Thanks
|
|
======
|
|
|
|
First, I want to thank everyone (except NeoMagic of course) for their
|
|
generous support and encouragement. I'd like to list everyone's name
|
|
here that replied during the development phase, but the list is
|
|
amazingly long.
|
|
|
|
I will be rather unfair and single out a few people, however:
|
|
|
|
Justin Maurer, for being the first random net.person to try it,
|
|
and for letting me login to his Z505SX to get it working there
|
|
|
|
Edi Weitz for trying out several different versions, and giving
|
|
me a lot of useful feedback
|
|
|
|
Greg Rumple for letting me login remotely to get the driver
|
|
functional on the 256ZX, for his assistance on tracking
|
|
down all sorts of random stuff, and for trying out Accel-X
|
|
|
|
Zach Brown, for the initial AC97 mixer interface design
|
|
|
|
Jeff Garzik, for various helpful suggestions on the AC97
|
|
interface
|
|
|
|
"Mr. Bumpy" for feedback on the Z505RX
|
|
|
|
Bill Nottingham, for generous assistance in getting the mixer ID
|
|
code working
|
|
|
|
=================
|
|
Previous versions
|
|
=================
|
|
|
|
Versions prior to 0.3 (aka `noname') had problems with weird artifacts
|
|
in the output and failed to set the recording rate properly. These
|
|
problems have long since been fixed.
|
|
|
|
Versions prior to 0.5 had problems with clicks in the output when
|
|
anything other than 16-bit stereo sound was being played, and also had
|
|
periodic clicks when recording.
|
|
|
|
Version 0.7 first incorporated support for the NM256ZX chipset, which
|
|
is found on some Dell Latitude laptops (the CPt, and apparently
|
|
some CPi models as well). It also included the generic AC97
|
|
mixer module.
|
|
|
|
Version 0.75 renamed all the functions and files with slightly more
|
|
generic names.
|
|
|
|
Note that previous versions of this document claimed that recording was
|
|
8-bit only; it actually has been working for 16-bits all along.
|