|
18 | 18 | #include <linux/delay.h> |
19 | 19 | #include <linux/ide.h> |
20 | 20 | #include <linux/module.h> |
| 21 | +#include <linux/platform_device.h> |
21 | 22 |
|
22 | 23 | #include <asm/macintosh.h> |
23 | | -#include <asm/macints.h> |
24 | | -#include <asm/mac_baboon.h> |
| 24 | + |
| 25 | +#define DRV_NAME "mac_ide" |
25 | 26 |
|
26 | 27 | #define IDE_BASE 0x50F1A000 /* Base address of IDE controller */ |
27 | 28 |
|
@@ -100,42 +101,61 @@ static const char *mac_ide_name[] = |
100 | 101 | * Probe for a Macintosh IDE interface |
101 | 102 | */ |
102 | 103 |
|
103 | | -static int __init macide_init(void) |
| 104 | +static int mac_ide_probe(struct platform_device *pdev) |
104 | 105 | { |
105 | | - unsigned long base; |
106 | | - int irq; |
| 106 | + struct resource *mem, *irq; |
107 | 107 | struct ide_hw hw, *hws[] = { &hw }; |
108 | 108 | struct ide_port_info d = macide_port_info; |
| 109 | + struct ide_host *host; |
| 110 | + int rc; |
109 | 111 |
|
110 | 112 | if (!MACH_IS_MAC) |
111 | 113 | return -ENODEV; |
112 | 114 |
|
113 | | - switch (macintosh_config->ide_type) { |
114 | | - case MAC_IDE_QUADRA: |
115 | | - base = IDE_BASE; |
116 | | - irq = IRQ_NUBUS_F; |
117 | | - break; |
118 | | - case MAC_IDE_PB: |
119 | | - base = IDE_BASE; |
120 | | - irq = IRQ_NUBUS_C; |
121 | | - break; |
122 | | - case MAC_IDE_BABOON: |
123 | | - base = BABOON_BASE; |
124 | | - d.port_ops = NULL; |
125 | | - irq = IRQ_BABOON_1; |
126 | | - break; |
127 | | - default: |
| 115 | + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 116 | + if (!mem) |
| 117 | + return -ENODEV; |
| 118 | + |
| 119 | + irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); |
| 120 | + if (!irq) |
128 | 121 | return -ENODEV; |
| 122 | + |
| 123 | + if (!devm_request_mem_region(&pdev->dev, mem->start, |
| 124 | + resource_size(mem), DRV_NAME)) { |
| 125 | + dev_err(&pdev->dev, "resources busy\n"); |
| 126 | + return -EBUSY; |
129 | 127 | } |
130 | 128 |
|
131 | 129 | printk(KERN_INFO "ide: Macintosh %s IDE controller\n", |
132 | 130 | mac_ide_name[macintosh_config->ide_type - 1]); |
133 | 131 |
|
134 | | - macide_setup_ports(&hw, base, irq); |
| 132 | + macide_setup_ports(&hw, mem->start, irq->start); |
135 | 133 |
|
136 | | - return ide_host_add(&d, hws, 1, NULL); |
| 134 | + rc = ide_host_add(&d, hws, 1, &host); |
| 135 | + if (rc) |
| 136 | + return rc; |
| 137 | + |
| 138 | + platform_set_drvdata(pdev, host); |
| 139 | + return 0; |
137 | 140 | } |
138 | 141 |
|
139 | | -module_init(macide_init); |
| 142 | +static int mac_ide_remove(struct platform_device *pdev) |
| 143 | +{ |
| 144 | + struct ide_host *host = platform_get_drvdata(pdev); |
| 145 | + |
| 146 | + ide_host_remove(host); |
| 147 | + return 0; |
| 148 | +} |
| 149 | + |
| 150 | +static struct platform_driver mac_ide_driver = { |
| 151 | + .driver = { |
| 152 | + .name = DRV_NAME, |
| 153 | + }, |
| 154 | + .probe = mac_ide_probe, |
| 155 | + .remove = mac_ide_remove, |
| 156 | +}; |
| 157 | + |
| 158 | +module_platform_driver(mac_ide_driver); |
140 | 159 |
|
| 160 | +MODULE_ALIAS("platform:" DRV_NAME); |
141 | 161 | MODULE_LICENSE("GPL"); |
0 commit comments