.. | .. |
---|
33 | 33 | #define DRV_NAME "pata_falcon" |
---|
34 | 34 | #define DRV_VERSION "0.1.0" |
---|
35 | 35 | |
---|
36 | | -#define ATA_HD_BASE 0xfff00000 |
---|
37 | 36 | #define ATA_HD_CONTROL 0x39 |
---|
38 | 37 | |
---|
39 | 38 | static struct scsi_host_template pata_falcon_sht = { |
---|
.. | .. |
---|
120 | 119 | .set_mode = pata_falcon_set_mode, |
---|
121 | 120 | }; |
---|
122 | 121 | |
---|
123 | | -static int pata_falcon_init_one(void) |
---|
| 122 | +static int __init pata_falcon_init_one(struct platform_device *pdev) |
---|
124 | 123 | { |
---|
| 124 | + struct resource *res; |
---|
125 | 125 | struct ata_host *host; |
---|
126 | 126 | struct ata_port *ap; |
---|
127 | | - struct platform_device *pdev; |
---|
128 | 127 | void __iomem *base; |
---|
129 | 128 | |
---|
130 | | - if (!MACH_IS_ATARI || !ATARIHW_PRESENT(IDE)) |
---|
| 129 | + dev_info(&pdev->dev, "Atari Falcon PATA controller\n"); |
---|
| 130 | + |
---|
| 131 | + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
---|
| 132 | + if (!res) |
---|
131 | 133 | return -ENODEV; |
---|
132 | 134 | |
---|
133 | | - pr_info(DRV_NAME ": Atari Falcon PATA controller\n"); |
---|
134 | | - |
---|
135 | | - pdev = platform_device_register_simple(DRV_NAME, 0, NULL, 0); |
---|
136 | | - if (IS_ERR(pdev)) |
---|
137 | | - return PTR_ERR(pdev); |
---|
138 | | - |
---|
139 | | - if (!devm_request_mem_region(&pdev->dev, ATA_HD_BASE, 0x40, DRV_NAME)) { |
---|
140 | | - pr_err(DRV_NAME ": resources busy\n"); |
---|
| 135 | + if (!devm_request_mem_region(&pdev->dev, res->start, |
---|
| 136 | + resource_size(res), DRV_NAME)) { |
---|
| 137 | + dev_err(&pdev->dev, "resources busy\n"); |
---|
141 | 138 | return -EBUSY; |
---|
142 | 139 | } |
---|
143 | 140 | |
---|
.. | .. |
---|
152 | 149 | ap->flags |= ATA_FLAG_SLAVE_POSS | ATA_FLAG_NO_IORDY; |
---|
153 | 150 | ap->flags |= ATA_FLAG_PIO_POLLING; |
---|
154 | 151 | |
---|
155 | | - base = (void __iomem *)ATA_HD_BASE; |
---|
| 152 | + base = (void __iomem *)res->start; |
---|
156 | 153 | ap->ioaddr.data_addr = base; |
---|
157 | 154 | ap->ioaddr.error_addr = base + 1 + 1 * 4; |
---|
158 | 155 | ap->ioaddr.feature_addr = base + 1 + 1 * 4; |
---|
.. | .. |
---|
174 | 171 | return ata_host_activate(host, 0, NULL, 0, &pata_falcon_sht); |
---|
175 | 172 | } |
---|
176 | 173 | |
---|
177 | | -module_init(pata_falcon_init_one); |
---|
| 174 | +static int __exit pata_falcon_remove_one(struct platform_device *pdev) |
---|
| 175 | +{ |
---|
| 176 | + struct ata_host *host = platform_get_drvdata(pdev); |
---|
| 177 | + |
---|
| 178 | + ata_host_detach(host); |
---|
| 179 | + |
---|
| 180 | + return 0; |
---|
| 181 | +} |
---|
| 182 | + |
---|
| 183 | +static struct platform_driver pata_falcon_driver = { |
---|
| 184 | + .remove = __exit_p(pata_falcon_remove_one), |
---|
| 185 | + .driver = { |
---|
| 186 | + .name = "atari-falcon-ide", |
---|
| 187 | + }, |
---|
| 188 | +}; |
---|
| 189 | + |
---|
| 190 | +module_platform_driver_probe(pata_falcon_driver, pata_falcon_init_one); |
---|
178 | 191 | |
---|
179 | 192 | MODULE_AUTHOR("Bartlomiej Zolnierkiewicz"); |
---|
180 | 193 | MODULE_DESCRIPTION("low-level driver for Atari Falcon PATA"); |
---|
181 | 194 | MODULE_LICENSE("GPL v2"); |
---|
| 195 | +MODULE_ALIAS("platform:atari-falcon-ide"); |
---|
182 | 196 | MODULE_VERSION(DRV_VERSION); |
---|