| .. | .. |
|---|
| 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); |
|---|