i2c-pxa: only define 'blue_murder'-function if DEBUG is #defined
[safe/jmp/linux-2.6] / drivers / scsi / gvp11.c
index 2f6c113..48f4068 100644 (file)
@@ -1,7 +1,7 @@
 #include <linux/types.h>
 #include <linux/mm.h>
+#include <linux/slab.h>
 #include <linux/blkdev.h>
-#include <linux/sched.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
 
@@ -55,8 +55,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)
     static int scsi_alloc_out_of_range = 0;
 
     /* use bounce buffer if the physical address is bad */
-    if (addr & HDATA(cmd->device->host)->dma_xfer_mask ||
-       (!dir_in && mm_end_of_chunk (addr, cmd->SCp.this_residual)))
+    if (addr & HDATA(cmd->device->host)->dma_xfer_mask)
     {
        HDATA(cmd->device->host)->dma_bounce_len = (cmd->SCp.this_residual + 511)
            & ~0x1ff;
@@ -324,16 +323,23 @@ int __init gvp11_detect(struct scsi_host_template *tpnt)
         */
        regs.SASR = &(DMA(instance)->SASR);
        regs.SCMD = &(DMA(instance)->SCMD);
+       HDATA(instance)->no_sync = 0xff;
+       HDATA(instance)->fast = 0;
+       HDATA(instance)->dma_mode = CTRL_DMA;
        wd33c93_init(instance, regs, dma_setup, dma_stop,
                     (epc & GVP_SCSICLKMASK) ? WD33C93_FS_8_10
                                             : WD33C93_FS_12_15);
 
-       request_irq(IRQ_AMIGA_PORTS, gvp11_intr, IRQF_SHARED, "GVP11 SCSI",
-                   instance);
+       if (request_irq(IRQ_AMIGA_PORTS, gvp11_intr, IRQF_SHARED, "GVP11 SCSI",
+                       instance))
+               goto unregister;
        DMA(instance)->CNTR = GVP11_DMAC_INT_ENABLE;
        num_gvp11++;
        continue;
 
+unregister:
+       scsi_unregister(instance);
+       wd33c93_release();
 release:
        release_mem_region(address, 256);
     }