=======================================================
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.
