--- linux-1.1.45/config.in	Wed Aug 17 13:04:19 1994
+++ linux/config.in	Wed Aug 17 17:31:03 1994
@@ -132,6 +132,7 @@
 comment 'CD-ROM drivers'
 
 bool 'Sony CDU31A/CDU33A CDROM driver support' CONFIG_CDU31A n
+bool 'Sony CDU535 CDROM driver support' CONFIG_CDU535 y
 bool 'Mitsumi CDROM driver support' CONFIG_MCD n
 bool 'Matsushita/Panasonic CDROM driver support' CONFIG_SBPCD n
 if [ "$CONFIG_SBPCD" = "y" ]; then
--- linux-1.1.45/drivers/block/Makefile	Fri Jul  8 08:36:03 1994
+++ linux/drivers/block/Makefile	Wed Aug 17 16:14:00 1994
@@ -64,6 +64,11 @@
 SRCS := $(SRCS) xd.c
 endif
 
+ifdef CONFIG_CDU535
+OBJS := $(OBJS) sonycd535.o
+SRCS := $(SRCS) sonycd535.c
+endif
+
 all: block.a
 
 block.a: $(OBJS)
--- linux-1.1.45/drivers/block/blk.h	Tue Aug  9 06:35:23 1994
+++ linux/drivers/block/blk.h	Wed Aug 17 19:28:02 1994
@@ -82,6 +82,9 @@
 extern unsigned long hd_init(unsigned long mem_start, unsigned long mem_end);
 extern unsigned long cdu31a_init(unsigned long mem_start, unsigned long mem_end);
 extern unsigned long mcd_init(unsigned long mem_start, unsigned long mem_end);
+#ifdef CONFIG_CDU535
+extern unsigned long init_sony535(unsigned long mem_start, unsigned long mem_end);
+#endif
 #ifdef CONFIG_SBPCD
 extern unsigned long sbpcd_init(unsigned long, unsigned long);
 #endif CONFIG_SBPCD
@@ -178,6 +181,14 @@
 
 #define DEVICE_NAME "CDU31A"
 #define DEVICE_REQUEST do_cdu31a_request
+#define DEVICE_NR(device) (MINOR(device))
+#define DEVICE_ON(device)
+#define DEVICE_OFF(device)
+
+#elif (MAJOR_NR == CDU535_CDROM_MAJOR)
+#define DEVICE_NAME "SONY-CDU535"
+#define DEVICE_INTR do_cdu535
+#define DEVICE_REQUEST do_cdu535_request
 #define DEVICE_NR(device) (MINOR(device))
 #define DEVICE_ON(device)
 #define DEVICE_OFF(device)
--- linux-1.1.45/drivers/block/ll_rw_blk.c	Wed Aug 10 16:25:58 1994
+++ linux/drivers/block/ll_rw_blk.c	Wed Aug 17 16:14:01 1994
@@ -347,6 +347,9 @@
 	int correct_size;
 	struct blk_dev_struct * dev;
 	int i;
+#if defined(CONFIG_CDU535) && defined(CONFIG_CDU31A)
+	int sonycd_save_mem_start;
+#endif
 
 	/* Make sure that the first block contains something reasonable */
 	while (!*bh) {
@@ -487,9 +490,24 @@
 #ifdef CONFIG_BLK_DEV_XD
 	mem_start = xd_init(mem_start,mem_end);
 #endif
+#if defined(CONFIG_CDU535) && defined(CONFIG_CDU31A)
+	{  /* since controllers for 535 and 31A can be at same location
+	    * we have to be careful.
+	    */
+		sonycd_save_mem_start = mem_start;
+		mem_start = cdu31a_init(mem_start,mem_end);
+		if ( mem_start == sonycd_save_mem_start ) {  /* CDU31A not found */
+			mem_start = init_sony535(mem_start,mem_end);
+		}
+	}
+#else
 #ifdef CONFIG_CDU31A
 	mem_start = cdu31a_init(mem_start,mem_end);
 #endif
+#ifdef CONFIG_CDU535
+	mem_start = init_sony535(mem_start,mem_end);
+#endif
+#endif  /* CONFIG_CDU31A && CONFIG_CDU535 */
 #ifdef CONFIG_MCD
 	mem_start = mcd_init(mem_start,mem_end);
 #endif