Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

m68k: amiga - A4000T SCSI platform device conversion

Acked-by: James Bottomley <James.Bottomley@suse.de>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>

+57 -55
+11
arch/m68k/amiga/platform.c
··· 65 65 }; 66 66 67 67 68 + static const struct resource a4000t_scsi_resource __initconst = { 69 + .start = 0xdd0000, 70 + .end = 0xdd0fff, 71 + .flags = IORESOURCE_MEM, 72 + }; 73 + 74 + 68 75 static int __init amiga_init_devices(void) 69 76 { 70 77 if (!MACH_IS_AMIGA) ··· 94 87 if (AMIGAHW_PRESENT(A3000_SCSI)) 95 88 platform_device_register_simple("amiga-a3000-scsi", -1, 96 89 &a3000_scsi_resource, 1); 90 + 91 + if (AMIGAHW_PRESENT(A4000_SCSI)) 92 + platform_device_register_simple("amiga-a4000t-scsi", -1, 93 + &a4000t_scsi_resource, 1); 97 94 98 95 return 0; 99 96 }
+46 -55
drivers/scsi/a4000t.c
··· 20 20 21 21 #include "53c700.h" 22 22 23 - MODULE_AUTHOR("Alan Hourihane <alanh@fairlite.demon.co.uk> / Kars de Jong <jongk@linux-m68k.org>"); 24 - MODULE_DESCRIPTION("Amiga A4000T NCR53C710 driver"); 25 - MODULE_LICENSE("GPL"); 26 - 27 23 28 24 static struct scsi_host_template a4000t_scsi_driver_template = { 29 25 .name = "A4000T builtin SCSI", ··· 28 32 .module = THIS_MODULE, 29 33 }; 30 34 31 - static struct platform_device *a4000t_scsi_device; 32 35 33 - #define A4000T_SCSI_ADDR 0xdd0040 36 + #define A4000T_SCSI_OFFSET 0x40 34 37 35 - static int __devinit a4000t_probe(struct platform_device *dev) 38 + static int __init amiga_a4000t_scsi_probe(struct platform_device *pdev) 36 39 { 37 - struct Scsi_Host *host; 40 + struct resource *res; 41 + phys_addr_t scsi_addr; 38 42 struct NCR_700_Host_Parameters *hostdata; 43 + struct Scsi_Host *host; 39 44 40 - if (!(MACH_IS_AMIGA && AMIGAHW_PRESENT(A4000_SCSI))) 41 - goto out; 45 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 46 + if (!res) 47 + return -ENODEV; 42 48 43 - if (!request_mem_region(A4000T_SCSI_ADDR, 0x1000, 49 + if (!request_mem_region(res->start, resource_size(res), 44 50 "A4000T builtin SCSI")) 45 - goto out; 51 + return -EBUSY; 46 52 47 - hostdata = kzalloc(sizeof(struct NCR_700_Host_Parameters), GFP_KERNEL); 53 + hostdata = kzalloc(sizeof(struct NCR_700_Host_Parameters), 54 + GFP_KERNEL); 48 55 if (!hostdata) { 49 - printk(KERN_ERR "a4000t-scsi: Failed to allocate host data\n"); 56 + dev_err(&pdev->dev, "Failed to allocate host data\n"); 50 57 goto out_release; 51 58 } 52 59 60 + scsi_addr = res->start + A4000T_SCSI_OFFSET; 61 + 53 62 /* Fill in the required pieces of hostdata */ 54 - hostdata->base = (void __iomem *)ZTWO_VADDR(A4000T_SCSI_ADDR); 63 + hostdata->base = (void __iomem *)ZTWO_VADDR(scsi_addr); 55 64 hostdata->clock = 50; 56 65 hostdata->chip710 = 1; 57 66 hostdata->dmode_extra = DMODE_FC2; ··· 64 63 65 64 /* and register the chip */ 66 65 host = NCR_700_detect(&a4000t_scsi_driver_template, hostdata, 67 - &dev->dev); 66 + &pdev->dev); 68 67 if (!host) { 69 - printk(KERN_ERR "a4000t-scsi: No host detected; " 70 - "board configuration problem?\n"); 68 + dev_err(&pdev->dev, 69 + "No host detected; board configuration problem?\n"); 71 70 goto out_free; 72 71 } 73 72 74 73 host->this_id = 7; 75 - host->base = A4000T_SCSI_ADDR; 74 + host->base = scsi_addr; 76 75 host->irq = IRQ_AMIGA_PORTS; 77 76 78 77 if (request_irq(host->irq, NCR_700_intr, IRQF_SHARED, "a4000t-scsi", 79 78 host)) { 80 - printk(KERN_ERR "a4000t-scsi: request_irq failed\n"); 79 + dev_err(&pdev->dev, "request_irq failed\n"); 81 80 goto out_put_host; 82 81 } 83 82 84 - platform_set_drvdata(dev, host); 83 + platform_set_drvdata(pdev, host); 85 84 scsi_scan_host(host); 86 - 87 85 return 0; 88 86 89 87 out_put_host: ··· 90 90 out_free: 91 91 kfree(hostdata); 92 92 out_release: 93 - release_mem_region(A4000T_SCSI_ADDR, 0x1000); 94 - out: 93 + release_mem_region(res->start, resource_size(res)); 95 94 return -ENODEV; 96 95 } 97 96 98 - static __devexit int a4000t_device_remove(struct platform_device *dev) 97 + static int __exit amiga_a4000t_scsi_remove(struct platform_device *pdev) 99 98 { 100 - struct Scsi_Host *host = platform_get_drvdata(dev); 99 + struct Scsi_Host *host = platform_get_drvdata(pdev); 101 100 struct NCR_700_Host_Parameters *hostdata = shost_priv(host); 101 + struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 102 102 103 103 scsi_remove_host(host); 104 - 105 104 NCR_700_release(host); 106 105 kfree(hostdata); 107 106 free_irq(host->irq, host); 108 - release_mem_region(A4000T_SCSI_ADDR, 0x1000); 109 - 107 + release_mem_region(res->start, resource_size(res)); 110 108 return 0; 111 109 } 112 110 113 - static struct platform_driver a4000t_scsi_driver = { 114 - .driver = { 115 - .name = "a4000t-scsi", 116 - .owner = THIS_MODULE, 111 + static struct platform_driver amiga_a4000t_scsi_driver = { 112 + .remove = __exit_p(amiga_a4000t_scsi_remove), 113 + .driver = { 114 + .name = "amiga-a4000t-scsi", 115 + .owner = THIS_MODULE, 117 116 }, 118 - .probe = a4000t_probe, 119 - .remove = __devexit_p(a4000t_device_remove), 120 117 }; 121 118 122 - static int __init a4000t_scsi_init(void) 119 + static int __init amiga_a4000t_scsi_init(void) 123 120 { 124 - int err; 125 - 126 - err = platform_driver_register(&a4000t_scsi_driver); 127 - if (err) 128 - return err; 129 - 130 - a4000t_scsi_device = platform_device_register_simple("a4000t-scsi", 131 - -1, NULL, 0); 132 - if (IS_ERR(a4000t_scsi_device)) { 133 - platform_driver_unregister(&a4000t_scsi_driver); 134 - return PTR_ERR(a4000t_scsi_device); 135 - } 136 - 137 - return err; 121 + return platform_driver_probe(&amiga_a4000t_scsi_driver, 122 + amiga_a4000t_scsi_probe); 138 123 } 139 124 140 - static void __exit a4000t_scsi_exit(void) 125 + module_init(amiga_a4000t_scsi_init); 126 + 127 + static void __exit amiga_a4000t_scsi_exit(void) 141 128 { 142 - platform_device_unregister(a4000t_scsi_device); 143 - platform_driver_unregister(&a4000t_scsi_driver); 129 + platform_driver_unregister(&amiga_a4000t_scsi_driver); 144 130 } 145 131 146 - module_init(a4000t_scsi_init); 147 - module_exit(a4000t_scsi_exit); 132 + module_exit(amiga_a4000t_scsi_exit); 133 + 134 + MODULE_AUTHOR("Alan Hourihane <alanh@fairlite.demon.co.uk> / " 135 + "Kars de Jong <jongk@linux-m68k.org>"); 136 + MODULE_DESCRIPTION("Amiga A4000T NCR53C710 driver"); 137 + MODULE_LICENSE("GPL"); 138 + MODULE_ALIAS("platform:amiga-a4000t-scsi");