diff -urN linux/Documentation/Configure.help linux-2.2.3-mcd/Documentation/Configure.help
--- linux/Documentation/Configure.help  Mon Mar  8 18:14:35 1999
+++ linux-2.2.3-mcd/Documentation/Configure.help        Mon Mar 22 09:45:20 1999
@@ -6503,9 +6503,6 @@
  (PhotoCDs). There is a new driver (next question) which can do
  this. If you want that one, say N here.

-  If the driver doesn't work out of the box, you might want to have a
-  look at drivers/cdrom/mcd.h.
-
  If you say Y here, you should also say Y or M to "ISO 9660 CDROM
  filesystem support" below, because that's the filesystem used on
  CDROMs.
@@ -6514,6 +6511,32 @@
  inserted in and removed from the running kernel whenever you want).
  The module will be called mcd.o. If you want to compile it as a
  module, say M here and read Documentation/modules.txt.
+
+IRQ channel for Mitsumi CD-ROM
+CONFIG_MCD_IRQ
+  This allows you to specify default value of interrupt number used by
+  the driver. This setting can be overridden at boot time by passing "mcd="
+  parameter to the kernel or module load time (if you compiled this as a
+  module).
+
+I/O base address for Mitsumi CD-ROM
+CONFIG_MCD_BASE
+  This allows you to specify default value (in hex) of I/O base address
+  used by the driver. This setting can be overridden at boot time by
+  passing "mcd=" parameter to the kernel or module load time (if you
+  compiled this as a module).
+
+Number of times to retry a command
+CONFIG_MCD_RETRY_ATTEMPTS
+  The value you set controls the number of times Mitsumi CD-ROM driver (mcd)
+  will retry a command before giving up.
+  Usually, it is safe to leave this parameter at its default value.
+
+Delay (in ticks = jiffies) for internal timeouts
+CONFIG_MCD_STATUS_DELAY
+  The value you set controls various internal timeouts used by the driver.
+  Usually, it is safe to leave this parameter at its default value, though
+  you might want to increase this if you get lots of timeouts.

Mitsumi [XA/MultiSession] support
CONFIG_MCDX
diff -urN linux/drivers/cdrom/Config.in linux-2.2.3-mcd/drivers/cdrom/Config.in
--- linux/drivers/cdrom/Config.in       Sun Dec 28 20:05:45 1997
+++ linux-2.2.3-mcd/drivers/cdrom/Config.in     Mon Mar 22 09:48:39 1999
@@ -14,6 +14,12 @@
  fi
fi
tristate 'Mitsumi (standard) [no XA/Multisession] CDROM support' CONFIG_MCD
+if [ "$CONFIG_MCD" != "n" ]; then
+   int 'MCD IRQ' CONFIG_MCD_IRQ 11
+   hex 'MCD I/O base (hex)' CONFIG_MCD_BASE 300
+   int 'MCD status delay (ticks)' CONFIG_MCD_STATUS_DELAY 1000
+   int 'MCD retry attempts' CONFIG_MCD_RETRY_ATTEMPTS 10
+fi
tristate 'Mitsumi [XA/MultiSession] CDROM support' CONFIG_MCDX
tristate 'Optics Storage DOLPHIN 8000AT CDROM support' CONFIG_OPTCD
tristate 'Philips/LMS CM206 CDROM support' CONFIG_CM206
diff -urN linux/drivers/cdrom/mcd.c linux-2.2.3-mcd/drivers/cdrom/mcd.c
--- linux/drivers/cdrom/mcd.c   Wed Nov  4 20:09:43 1998
+++ linux-2.2.3-mcd/drivers/cdrom/mcd.c Mon Mar 22 09:53:58 1999
@@ -67,6 +67,7 @@
       a CD.

       November 1997 -- ported to the Uniform CD-ROM driver by Erik Andersen.
+       March    1999 -- made mcd.h parameters CONFIG options (Tigran Aivazian).
*/

#include <linux/module.h>
@@ -83,6 +84,7 @@
#include <linux/string.h>
#include <linux/delay.h>
#include <linux/init.h>
+#include <linux/config.h>

/* #define REALLY_SLOW_IO  */
#include <asm/system.h>
@@ -155,8 +157,8 @@
int mitsumi_bug_93_wait = 0;
#endif /* WORK_AROUND_MITSUMI_BUG_93 */

-static short mcd_port = MCD_BASE_ADDR; /* used as "mcd" by "insmod" */
-static int   mcd_irq  = MCD_INTR_NR; /* must directly follow mcd_port */
+static short mcd_port = CONFIG_MCD_BASE; /* used as "mcd" by "insmod" */
+static int   mcd_irq  = CONFIG_MCD_IRQ; /* must directly follow mcd_port */
MODULE_PARM(mcd, "1-2i");

static int McdTimeout, McdTries;
@@ -273,11 +275,11 @@
{
       int st, retry;

-       for (retry = 0; retry < MCD_RETRY_ATTEMPTS; retry++)
+       for (retry = 0; retry < CONFIG_MCD_RETRY_ATTEMPTS; retry++)
       {
               outb(MCMD_GET_STATUS, MCDPORT(0));    /* send get-status cmd */

-               st = getMcdStatus(MCD_STATUS_DELAY);
+               st = getMcdStatus(CONFIG_MCD_STATUS_DELAY);
               if (st != -1)
                       break;
       }
@@ -295,10 +297,10 @@
{
       int retry, st;

-       for (retry = 0; retry < MCD_RETRY_ATTEMPTS; retry++)
+       for (retry = 0; retry < CONFIG_MCD_RETRY_ATTEMPTS; retry++)
       {
               sendMcdCmd(MCMD_PLAY_READ, arg);
-               st = getMcdStatus(2 * MCD_STATUS_DELAY);
+               st = getMcdStatus(2 * CONFIG_MCD_STATUS_DELAY);
               if (st != -1)
                       break;
       }
@@ -316,7 +318,7 @@
                       /* all drives can at least stop! */
               if (audioStatus == CDROM_AUDIO_PLAY) {
               outb(MCMD_STOP, MCDPORT(0));
-               i = getMcdStatus(MCD_STATUS_DELAY);
+               i = getMcdStatus(CONFIG_MCD_STATUS_DELAY);
               }

                audioStatus = CDROM_AUDIO_NO_STATUS;
@@ -327,7 +329,7 @@
                 * But nothing we can do about that in software!
                 * So just read the status and forget it. - Jon.
                 */
-                i = getMcdStatus(MCD_STATUS_DELAY);
+                i = getMcdStatus(CONFIG_MCD_STATUS_DELAY);
                return 0;
       }
       else
@@ -380,7 +382,7 @@

       case CDROMSTOP:      /* Spin down the drive */
               outb(MCMD_STOP, MCDPORT(0));
-               i = getMcdStatus(MCD_STATUS_DELAY);
+               i = getMcdStatus(CONFIG_MCD_STATUS_DELAY);

               /* should we do anything if it fails? */

@@ -392,7 +394,7 @@
                       return -EINVAL;

               outb(MCMD_STOP, MCDPORT(0));
-               i = getMcdStatus(MCD_STATUS_DELAY);
+               i = getMcdStatus(CONFIG_MCD_STATUS_DELAY);

               if (GetQChannelInfo(&qInfo) < 0)
               {
@@ -460,7 +462,7 @@

               if (audioStatus == CDROM_AUDIO_PLAY) {
                 outb(MCMD_STOP, MCDPORT(0));
-                 i = getMcdStatus(MCD_STATUS_DELAY);
+                 i = getMcdStatus(CONFIG_MCD_STATUS_DELAY);
                 audioStatus = CDROM_AUDIO_NO_STATUS;
               }

@@ -561,7 +563,7 @@
               outb(volctrl->channel1, MCDPORT(0));
               outb(255, MCDPORT(0));

-               i = getMcdStatus(MCD_STATUS_DELAY);
+               i = getMcdStatus(CONFIG_MCD_STATUS_DELAY);
               if (i < 0)
                       return -EIO;

@@ -706,13 +708,13 @@
       printk(" (Read error)"); /* Bitch about the problem. */

       /* Time to get fancy! If at 2x speed and 1 error, drop to 1x speed! */
-       /* Interesting how it STAYS at MCD_RETRY_ATTEMPTS on first error! */
+       /* Interesting how it STAYS at CONFIG_MCD_RETRY_ATTEMPTS on first error! */
       /* But I find that rather HANDY!!! */
       /* Neat! it REALLY WORKS on those LOW QUALITY CD's!!! Smile! :) */
       /* AJK [06/17/95] */

       /* Slap the CD down to single speed! */
-       if (mcdDouble == 1 && McdTries == MCD_RETRY_ATTEMPTS && MCMD_DATA_READ == MCMD_2X_READ)
+       if (mcdDouble == 1 && McdTries == CONFIG_MCD_RETRY_ATTEMPTS && MCMD_DATA_READ == MCMD_2X_READ)
               {
               MCMD_DATA_READ = MCMD_PLAY_READ; /* Uhhh, Ummmm, muhuh-huh! */
               mcd1xhold = SINGLE_HOLD_SECTORS; /* Hey Beavis! */
@@ -722,7 +724,7 @@
      printk("\n");
      mcd_invalidate_buffers();
#ifdef WARN_IF_READ_FAILURE
-      if (McdTries == MCD_RETRY_ATTEMPTS)
+      if (McdTries == CONFIG_MCD_RETRY_ATTEMPTS)
       printk("mcd: read of block %d failed\n", mcd_next_bn);
#endif
      if (!McdTries--)
@@ -737,7 +739,7 @@
       }
       if (CURRENT_VALID)
         end_request(0);
-       McdTries = MCD_RETRY_ATTEMPTS;
+       McdTries = CONFIG_MCD_RETRY_ATTEMPTS;
      }
    }
    mcd_error = 0;
@@ -746,7 +748,7 @@
       /* Switch back to Double speed if enough GOOD sectors were read! */

       /* Are we a double speed with a crappy CD?! */
-    if (mcdDouble == 1 && McdTries == MCD_RETRY_ATTEMPTS && MCMD_DATA_READ == MCMD_PLAY_READ)
+    if (mcdDouble == 1 && McdTries == CONFIG_MCD_RETRY_ATTEMPTS && MCMD_DATA_READ == MCMD_PLAY_READ)
       {
       /* We ARE a double speed and we ARE bitching! */
       if (mcd1xhold == 0) /* Okay, Like are we STILL at single speed? */
@@ -1102,7 +1104,7 @@
                        current->state = TASK_INTERRUPTIBLE;
                        schedule_timeout(HZ);
                }
-        } while (((st & MST_READY) == 0) && count++ < MCD_RETRY_ATTEMPTS);
+        } while (((st & MST_READY) == 0) && count++ < CONFIG_MCD_RETRY_ATTEMPTS);

        if (updateToc() < 0)
                       return -EIO;
@@ -1457,14 +1459,14 @@
       unsigned char notUsed;
       int retry;

-       for (retry = 0; retry < MCD_RETRY_ATTEMPTS; retry++)
+       for (retry = 0; retry < CONFIG_MCD_RETRY_ATTEMPTS; retry++)
       {
               outb(MCMD_GET_Q_CHANNEL, MCDPORT(0));
-               if (getMcdStatus(MCD_STATUS_DELAY) != -1)
+               if (getMcdStatus(CONFIG_MCD_STATUS_DELAY) != -1)
                       break;
       }

-       if (retry >= MCD_RETRY_ATTEMPTS)
+       if (retry >= CONFIG_MCD_RETRY_ATTEMPTS)
               return -1;

       if (getValue(&qp -> ctrl_addr) < 0) return -1;
@@ -1512,14 +1514,14 @@
{
       int retry;

-       for (retry = 0; retry < MCD_RETRY_ATTEMPTS; retry++)
+       for (retry = 0; retry < CONFIG_MCD_RETRY_ATTEMPTS; retry++)
       {
               outb(MCMD_GET_DISK_INFO, MCDPORT(0));
-               if (getMcdStatus(MCD_STATUS_DELAY) != -1)
+               if (getMcdStatus(CONFIG_MCD_STATUS_DELAY) != -1)
                       break;
       }

-       if (retry >= MCD_RETRY_ATTEMPTS)
+       if (retry >= CONFIG_MCD_RETRY_ATTEMPTS)
               return -1;

       if (getValue(&DiskInfo.first) < 0) return -1;
@@ -1568,26 +1570,26 @@

       i = DiskInfo.last + 3;

-       for (retry = 0; retry < MCD_RETRY_ATTEMPTS; retry++)
+       for (retry = 0; retry < CONFIG_MCD_RETRY_ATTEMPTS; retry++)
       {
               outb(MCMD_STOP, MCDPORT(0));
-               if (getMcdStatus(MCD_STATUS_DELAY) != -1)
+               if (getMcdStatus(CONFIG_MCD_STATUS_DELAY) != -1)
                       break;
       }

-       if (retry >= MCD_RETRY_ATTEMPTS)
+       if (retry >= CONFIG_MCD_RETRY_ATTEMPTS)
               return -1;

-       for (retry = 0; retry < MCD_RETRY_ATTEMPTS; retry++)
+       for (retry = 0; retry < CONFIG_MCD_RETRY_ATTEMPTS; retry++)
       {
               outb(MCMD_SET_MODE, MCDPORT(0));
               outb(0x05, MCDPORT(0));                 /* mode: toc */
               mcd_mode = 0x05;
-               if (getMcdStatus(MCD_STATUS_DELAY) != -1)
+               if (getMcdStatus(CONFIG_MCD_STATUS_DELAY) != -1)
                       break;
       }

-       if (retry >= MCD_RETRY_ATTEMPTS)
+       if (retry >= CONFIG_MCD_RETRY_ATTEMPTS)
               return -1;

       for (limit = 300; limit > 0; limit--)
@@ -1609,12 +1611,12 @@

       Toc[DiskInfo.last + 1].diskTime = DiskInfo.diskLength;

-       for (retry = 0; retry < MCD_RETRY_ATTEMPTS; retry++)
+       for (retry = 0; retry < CONFIG_MCD_RETRY_ATTEMPTS; retry++)
       {
                outb(MCMD_SET_MODE, MCDPORT(0));
                outb(0x01, MCDPORT(0));
               mcd_mode = 1;
-                if (getMcdStatus(MCD_STATUS_DELAY) != -1)
+                if (getMcdStatus(CONFIG_MCD_STATUS_DELAY) != -1)
                        break;
       }

diff -urN linux/drivers/cdrom/mcd.h linux-2.2.3-mcd/drivers/cdrom/mcd.h
--- linux/drivers/cdrom/mcd.h   Tue Dec  2 19:41:44 1997
+++ linux-2.2.3-mcd/drivers/cdrom/mcd.h Mon Mar 22 09:46:46 1999
@@ -21,26 +21,6 @@
 *
 */

-/* *** change this to set the I/O port address */
-#define MCD_BASE_ADDR          0x300
-
-/* *** change this to set the interrupt number */
-#define MCD_INTR_NR     11
-
-/* *** make the following line uncommented, if you're sure,
- * *** all configuration is done */
-
-/* #define I_WAS_HERE */
-
-
-
-
-/* Increase this if you get lots of timeouts */
-#define MCD_STATUS_DELAY       1000
-
-/* number of times to retry a command before giving up */
-#define MCD_RETRY_ATTEMPTS      10
-
/* port access macro */
#define MCDPORT(x)             (mcd_port + (x))

@@ -121,8 +101,3 @@
       struct msf      trackTime;
       struct msf      diskTime;
};
-
-#ifndef I_WAS_HERE
-#warning You have not edited mcd.h
-#warning Perhaps irq and i/o settings are wrong.
-#endif