aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/pata_mpiix.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-04-17 10:44:08 -0400
committerJeff Garzik <jeff@garzik.org>2007-04-28 14:16:06 -0400
commit5d728824efeda61d304153bfcf1378a3c18b7d70 (patch)
tree8a3d4ba0c1c650da5c161f11155e7c19f0fe78aa /drivers/ata/pata_mpiix.c
parent4447d35156169cf136e829eb6b5cac2d6370f2d9 (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.c36
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 = {
201static int mpiix_init_one(struct pci_dev *dev, const struct pci_device_id *id) 200static 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
264static const struct pci_device_id mpiix[] = { 262static const struct pci_device_id mpiix[] = {