diff options
author | Tejun Heo <htejun@gmail.com> | 2007-04-17 10:44:08 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-04-28 14:16:06 -0400 |
commit | 5d728824efeda61d304153bfcf1378a3c18b7d70 (patch) | |
tree | 8a3d4ba0c1c650da5c161f11155e7c19f0fe78aa /drivers/ata/pata_mpiix.c | |
parent | 4447d35156169cf136e829eb6b5cac2d6370f2d9 (diff) |
libata: convert the remaining PATA drivers to new init model
Convert pdc_adma, pata_cs5520, pata_isapnp, pata_ixp4xx_cf,
pata_legacy, pata_mpc52xx, pata_mpiix, pata_pcmcia, pata_pdc2027x,
pata_platform, pata_qdi, pata_scc and pata_winbond to new init model.
* init_one()'s now follow more consistent init order
* cs5520 now registers one host with two ports, not two hosts. If any
of the two ports are disabled, it's made dummy as other drivers do.
Tested pdc_adma and pata_legacy. Both are as broken as before. The
rest are compile tested only.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/pata_mpiix.c')
-rw-r--r-- | drivers/ata/pata_mpiix.c | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/drivers/ata/pata_mpiix.c b/drivers/ata/pata_mpiix.c index 1718eaca731f..987c5fafab08 100644 --- a/drivers/ata/pata_mpiix.c +++ b/drivers/ata/pata_mpiix.c | |||
@@ -190,7 +190,6 @@ static struct ata_port_operations mpiix_port_ops = { | |||
190 | .qc_issue = mpiix_qc_issue_prot, | 190 | .qc_issue = mpiix_qc_issue_prot, |
191 | .data_xfer = ata_data_xfer, | 191 | .data_xfer = ata_data_xfer, |
192 | 192 | ||
193 | .irq_handler = ata_interrupt, | ||
194 | .irq_clear = ata_bmdma_irq_clear, | 193 | .irq_clear = ata_bmdma_irq_clear, |
195 | .irq_on = ata_irq_on, | 194 | .irq_on = ata_irq_on, |
196 | .irq_ack = ata_irq_ack, | 195 | .irq_ack = ata_irq_ack, |
@@ -201,8 +200,9 @@ static struct ata_port_operations mpiix_port_ops = { | |||
201 | static int mpiix_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 200 | static int mpiix_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
202 | { | 201 | { |
203 | /* Single threaded by the PCI probe logic */ | 202 | /* Single threaded by the PCI probe logic */ |
204 | static struct ata_probe_ent probe; | ||
205 | static int printed_version; | 203 | static int printed_version; |
204 | struct ata_host *host; | ||
205 | struct ata_port *ap; | ||
206 | void __iomem *cmd_addr, *ctl_addr; | 206 | void __iomem *cmd_addr, *ctl_addr; |
207 | u16 idetim; | 207 | u16 idetim; |
208 | int irq; | 208 | int irq; |
@@ -210,6 +210,10 @@ static int mpiix_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
210 | if (!printed_version++) | 210 | if (!printed_version++) |
211 | dev_printk(KERN_DEBUG, &dev->dev, "version " DRV_VERSION "\n"); | 211 | dev_printk(KERN_DEBUG, &dev->dev, "version " DRV_VERSION "\n"); |
212 | 212 | ||
213 | host = ata_host_alloc(&dev->dev, 1); | ||
214 | if (!host) | ||
215 | return -ENOMEM; | ||
216 | |||
213 | /* MPIIX has many functions which can be turned on or off according | 217 | /* MPIIX has many functions which can be turned on or off according |
214 | to other devices present. Make sure IDE is enabled before we try | 218 | to other devices present. Make sure IDE is enabled before we try |
215 | and use it */ | 219 | and use it */ |
@@ -238,27 +242,21 @@ static int mpiix_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
238 | without BARs set fools the setup. #2 If you pci_disable_device | 242 | without BARs set fools the setup. #2 If you pci_disable_device |
239 | the MPIIX your box goes castors up */ | 243 | the MPIIX your box goes castors up */ |
240 | 244 | ||
241 | INIT_LIST_HEAD(&probe.node); | 245 | ap = host->ports[0]; |
242 | probe.dev = pci_dev_to_dev(dev); | 246 | ap->ops = &mpiix_port_ops; |
243 | probe.port_ops = &mpiix_port_ops; | 247 | ap->pio_mask = 0x1F; |
244 | probe.sht = &mpiix_sht; | 248 | ap->flags |= ATA_FLAG_SLAVE_POSS; |
245 | probe.pio_mask = 0x1F; | ||
246 | probe.irq_flags = IRQF_SHARED; | ||
247 | probe.port_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST; | ||
248 | probe.n_ports = 1; | ||
249 | 249 | ||
250 | probe.irq = irq; | 250 | ap->ioaddr.cmd_addr = cmd_addr; |
251 | probe.port[0].cmd_addr = cmd_addr; | 251 | ap->ioaddr.ctl_addr = ctl_addr; |
252 | probe.port[0].ctl_addr = ctl_addr; | 252 | ap->ioaddr.altstatus_addr = ctl_addr; |
253 | probe.port[0].altstatus_addr = ctl_addr; | ||
254 | 253 | ||
255 | /* Let libata fill in the port details */ | 254 | /* Let libata fill in the port details */ |
256 | ata_std_ports(&probe.port[0]); | 255 | ata_std_ports(&ap->ioaddr); |
257 | 256 | ||
258 | /* Now add the port that is active */ | 257 | /* activate host */ |
259 | if (ata_device_add(&probe)) | 258 | return ata_host_activate(host, irq, ata_interrupt, IRQF_SHARED, |
260 | return 0; | 259 | &mpiix_sht); |
261 | return -ENODEV; | ||
262 | } | 260 | } |
263 | 261 | ||
264 | static const struct pci_device_id mpiix[] = { | 262 | static const struct pci_device_id mpiix[] = { |