diff options
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[] = { |