 -- Documentation/cdrom/isp16

Docs by Eric van der Maarel <H.T.M.v.d.Maarel@marin.nl>

This is the README for version 0.6 of the cdrom interface on an
ISP16, MAD16 or Mozart sound card.

The detection and configuration of this interface used to be included
in both the sjcd and optcd cdrom driver. Drives supported by these
drivers came packed with Media Magic's multi media kit, which also
included the ISP16 card. The idea (thanks Leo Spiekman)
to move it from these drivers into a separate module and moreover, not to
rely on the MAD16 sound driver, are as follows:
-duplication of code in the kernel is a waste of resources and should
 be avoided;
-however, kernels and notably those included with Linux distributions
 (cf Slackware 3.0 included version 0.5 of the isp16 configuration
 code included in the drivers) don't always come with sound support
 included. Especially when they already include a bunch of cdrom drivers.
 Hence, the cdrom interface should be configurable _independently_ of
 sound support.

The ISP16, MAD16 and Mozart sound cards have an OPTi 82C928 or an
OPTi 82C929 chip.  The interface on these cards should work with
any cdrom attached to the card, which is 'electrically' compatible
with Sanyo/Panasonic, Sony or Mitsumi non-ide drives. However, the
command sets for any proprietary drives may differ
(and hence may not be supported in the kernel) from these four types.
For a fact I know the interface works and the way of configuration
as described in this documentation works in combination with the
sjcd (in Sanyo/Panasonic compatibility mode) cdrom drivers
(probably with the optcd (in Sony compatibility mode) as well).
If you have such an OPTi based sound card and you want to use the
cdrom interface with a cdrom drive supported by any of the other cdrom
drivers, it will probably work. Please let me know any experience you
might have).
I understand that cards based on the OPTi 82C929 chips may be configured
(hardware jumpers that is) as an IDE interface. Initialisation of such a
card in this mode is not supported (yet?).

The suggestion to configure the ISP16 etc. sound card by booting DOS and 
do a warm reboot to boot Linux somehow doesn't work, at least not
on my machine (IPC P90), with the OPTi 82C928 based card.

Booting the kernel through the boot manager LILO allows the use
of some command line options on the 'LILO boot:' prompt. At boot time
press Alt or Shift while the LILO prompt is written on the screen and enter
any kernel options. Alternatively these options may be used in
the appropriate section in /etc/lilo.conf. Adding 'append="<cmd_line_options>"'
will do the trick as well.
The syntax of 'cmd_line_options' is

        isp16=[<port>[,<irq>[,<dma>]]][[,]<drive_type>]

If there is no ISP16 or compatibles detected, there's probably no harm done.
These options indicate the values that your cdrom drive has been (or will be)
configured to use.
Valid values for the base i/o address are:
  port=0x340,0x320,0x330,0x360
for the interrupt request number 
  irq=0,3,5,7,9,10,11
for the direct memory access line
  dma=0,3,5,6,7
and for the type of drive
  drive_type=noisp16,Sanyo,Panasonic,Sony,Mitsumi.
Note that these options are case sensitive.
The values 0 for irq and dma indicate that they are not used, and
the drive will be used in 'polling' mode. The values 5 and 7 for irq
should be avoided in order to avoid any conflicts with optional
sound card configuration.
The syntax of the command line does not allow the specification of
irq when there's nothing specified for the base address and no
specification of dma when there is no specification of irq.
The value 'noisp16' for drive_type, which may be used as the first
non-integer option value (e.g. 'isp16=noisp16'), makes sure that probing
for and subsequent configuration of an ISP16-compatible card is skipped
all together. This can be useful to overcome possible conflicts which
may arise while the kernel is probing your hardware.
The default values are
  port=0x340
  irq=0
  dma=0
  drive_type=Sanyo
reflecting my own configuration. The defaults can be changed in
the file linux/drivers/cdrom/ips16.h.

The cdrom interface can be configured at run time by loading the
initialisation driver as a module. In that case, the interface
parameters can be set by giving appropriate values on the command
line. Configuring the driver can then be done by the following
command (assuming you have iso16.o installed in a proper place):

  insmod isp16.o isp16_cdrom_base=<port> isp16_cdrom_irq=<irq> \
    isp16_cdrom_dma=<dma> isp16_cdrom_type=<drive_type>

where port, irq, dma and drive_type can have any of the values mentioned
above.


Have fun!
