Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 198903
b: refs/heads/master
c: a24a6b2
h: refs/heads/master
i:
  198901: a6fa916
  198899: ed9a7b6
  198895: 728f728
v: v3
  • Loading branch information
Geert Uytterhoeven committed May 26, 2010
1 parent 3bd633b commit 1a4d27c
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 56 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2b21d5e47bb9b07f90cf213c885867cf11f99976
refs/heads/master: a24a6b22254bca8d54be6c8b7d8730d09f1058cc
11 changes: 11 additions & 0 deletions trunk/arch/m68k/amiga/platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,13 @@ static const struct resource a3000_scsi_resource __initconst = {
};


static const struct resource a4000t_scsi_resource __initconst = {
.start = 0xdd0000,
.end = 0xdd0fff,
.flags = IORESOURCE_MEM,
};


static int __init amiga_init_devices(void)
{
if (!MACH_IS_AMIGA)
Expand All @@ -88,6 +95,10 @@ static int __init amiga_init_devices(void)
platform_device_register_simple("amiga-a3000-scsi", -1,
&a3000_scsi_resource, 1);

if (AMIGAHW_PRESENT(A4000_SCSI))
platform_device_register_simple("amiga-a4000t-scsi", -1,
&a4000t_scsi_resource, 1);

return 0;
}

Expand Down
101 changes: 46 additions & 55 deletions trunk/drivers/scsi/a4000t.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,6 @@

#include "53c700.h"

MODULE_AUTHOR("Alan Hourihane <alanh@fairlite.demon.co.uk> / Kars de Jong <jongk@linux-m68k.org>");
MODULE_DESCRIPTION("Amiga A4000T NCR53C710 driver");
MODULE_LICENSE("GPL");


static struct scsi_host_template a4000t_scsi_driver_template = {
.name = "A4000T builtin SCSI",
Expand All @@ -32,116 +28,111 @@ static struct scsi_host_template a4000t_scsi_driver_template = {
.module = THIS_MODULE,
};

static struct platform_device *a4000t_scsi_device;

#define A4000T_SCSI_ADDR 0xdd0040
#define A4000T_SCSI_OFFSET 0x40

static int __devinit a4000t_probe(struct platform_device *dev)
static int __init amiga_a4000t_scsi_probe(struct platform_device *pdev)
{
struct Scsi_Host *host;
struct resource *res;
phys_addr_t scsi_addr;
struct NCR_700_Host_Parameters *hostdata;
struct Scsi_Host *host;

if (!(MACH_IS_AMIGA && AMIGAHW_PRESENT(A4000_SCSI)))
goto out;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res)
return -ENODEV;

if (!request_mem_region(A4000T_SCSI_ADDR, 0x1000,
if (!request_mem_region(res->start, resource_size(res),
"A4000T builtin SCSI"))
goto out;
return -EBUSY;

hostdata = kzalloc(sizeof(struct NCR_700_Host_Parameters), GFP_KERNEL);
hostdata = kzalloc(sizeof(struct NCR_700_Host_Parameters),
GFP_KERNEL);
if (!hostdata) {
printk(KERN_ERR "a4000t-scsi: Failed to allocate host data\n");
dev_err(&pdev->dev, "Failed to allocate host data\n");
goto out_release;
}

scsi_addr = res->start + A4000T_SCSI_OFFSET;

/* Fill in the required pieces of hostdata */
hostdata->base = (void __iomem *)ZTWO_VADDR(A4000T_SCSI_ADDR);
hostdata->base = (void __iomem *)ZTWO_VADDR(scsi_addr);
hostdata->clock = 50;
hostdata->chip710 = 1;
hostdata->dmode_extra = DMODE_FC2;
hostdata->dcntl_extra = EA_710;

/* and register the chip */
host = NCR_700_detect(&a4000t_scsi_driver_template, hostdata,
&dev->dev);
&pdev->dev);
if (!host) {
printk(KERN_ERR "a4000t-scsi: No host detected; "
"board configuration problem?\n");
dev_err(&pdev->dev,
"No host detected; board configuration problem?\n");
goto out_free;
}

host->this_id = 7;
host->base = A4000T_SCSI_ADDR;
host->base = scsi_addr;
host->irq = IRQ_AMIGA_PORTS;

if (request_irq(host->irq, NCR_700_intr, IRQF_SHARED, "a4000t-scsi",
host)) {
printk(KERN_ERR "a4000t-scsi: request_irq failed\n");
dev_err(&pdev->dev, "request_irq failed\n");
goto out_put_host;
}

platform_set_drvdata(dev, host);
platform_set_drvdata(pdev, host);
scsi_scan_host(host);

return 0;

out_put_host:
scsi_host_put(host);
out_free:
kfree(hostdata);
out_release:
release_mem_region(A4000T_SCSI_ADDR, 0x1000);
out:
release_mem_region(res->start, resource_size(res));
return -ENODEV;
}

static __devexit int a4000t_device_remove(struct platform_device *dev)
static int __exit amiga_a4000t_scsi_remove(struct platform_device *pdev)
{
struct Scsi_Host *host = platform_get_drvdata(dev);
struct Scsi_Host *host = platform_get_drvdata(pdev);
struct NCR_700_Host_Parameters *hostdata = shost_priv(host);
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

scsi_remove_host(host);

NCR_700_release(host);
kfree(hostdata);
free_irq(host->irq, host);
release_mem_region(A4000T_SCSI_ADDR, 0x1000);

release_mem_region(res->start, resource_size(res));
return 0;
}

static struct platform_driver a4000t_scsi_driver = {
.driver = {
.name = "a4000t-scsi",
.owner = THIS_MODULE,
static struct platform_driver amiga_a4000t_scsi_driver = {
.remove = __exit_p(amiga_a4000t_scsi_remove),
.driver = {
.name = "amiga-a4000t-scsi",
.owner = THIS_MODULE,
},
.probe = a4000t_probe,
.remove = __devexit_p(a4000t_device_remove),
};

static int __init a4000t_scsi_init(void)
static int __init amiga_a4000t_scsi_init(void)
{
int err;

err = platform_driver_register(&a4000t_scsi_driver);
if (err)
return err;

a4000t_scsi_device = platform_device_register_simple("a4000t-scsi",
-1, NULL, 0);
if (IS_ERR(a4000t_scsi_device)) {
platform_driver_unregister(&a4000t_scsi_driver);
return PTR_ERR(a4000t_scsi_device);
}

return err;
return platform_driver_probe(&amiga_a4000t_scsi_driver,
amiga_a4000t_scsi_probe);
}

static void __exit a4000t_scsi_exit(void)
module_init(amiga_a4000t_scsi_init);

static void __exit amiga_a4000t_scsi_exit(void)
{
platform_device_unregister(a4000t_scsi_device);
platform_driver_unregister(&a4000t_scsi_driver);
platform_driver_unregister(&amiga_a4000t_scsi_driver);
}

module_init(a4000t_scsi_init);
module_exit(a4000t_scsi_exit);
module_exit(amiga_a4000t_scsi_exit);

MODULE_AUTHOR("Alan Hourihane <alanh@fairlite.demon.co.uk> / "
"Kars de Jong <jongk@linux-m68k.org>");
MODULE_DESCRIPTION("Amiga A4000T NCR53C710 driver");
MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:amiga-a4000t-scsi");

0 comments on commit 1a4d27c

Please sign in to comment.