diff options
Diffstat (limited to 'drivers/ide/pci/pdc202xx_old.c')
-rw-r--r-- | drivers/ide/pci/pdc202xx_old.c | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c index e54dc653b8c4..6ff2def58da0 100644 --- a/drivers/ide/pci/pdc202xx_old.c +++ b/drivers/ide/pci/pdc202xx_old.c | |||
@@ -20,6 +20,8 @@ | |||
20 | 20 | ||
21 | #include <asm/io.h> | 21 | #include <asm/io.h> |
22 | 22 | ||
23 | #define DRV_NAME "pdc202xx_old" | ||
24 | |||
23 | #define PDC202XX_DEBUG_DRIVE_INFO 0 | 25 | #define PDC202XX_DEBUG_DRIVE_INFO 0 |
24 | 26 | ||
25 | static const char *pdc_quirk_drives[] = { | 27 | static const char *pdc_quirk_drives[] = { |
@@ -263,8 +265,7 @@ static void pdc202xx_dma_timeout(ide_drive_t *drive) | |||
263 | ide_dma_timeout(drive); | 265 | ide_dma_timeout(drive); |
264 | } | 266 | } |
265 | 267 | ||
266 | static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev, | 268 | static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev) |
267 | const char *name) | ||
268 | { | 269 | { |
269 | unsigned long dmabase = pci_resource_start(dev, 4); | 270 | unsigned long dmabase = pci_resource_start(dev, 4); |
270 | u8 udma_speed_flag = 0, primary_mode = 0, secondary_mode = 0; | 271 | u8 udma_speed_flag = 0, primary_mode = 0, secondary_mode = 0; |
@@ -304,8 +305,8 @@ static void __devinit pdc202ata4_fixup_irq(struct pci_dev *dev, | |||
304 | if (irq != irq2) { | 305 | if (irq != irq2) { |
305 | pci_write_config_byte(dev, | 306 | pci_write_config_byte(dev, |
306 | (PCI_INTERRUPT_LINE)|0x80, irq); /* 0xbc */ | 307 | (PCI_INTERRUPT_LINE)|0x80, irq); /* 0xbc */ |
307 | printk(KERN_INFO "%s: PCI config space interrupt " | 308 | printk(KERN_INFO "%s %s: PCI config space interrupt " |
308 | "mirror fixed\n", name); | 309 | "mirror fixed\n", name, pci_name(dev)); |
309 | } | 310 | } |
310 | } | 311 | } |
311 | } | 312 | } |
@@ -350,9 +351,9 @@ static const struct ide_dma_ops pdc2026x_dma_ops = { | |||
350 | .dma_timeout = pdc202xx_dma_timeout, | 351 | .dma_timeout = pdc202xx_dma_timeout, |
351 | }; | 352 | }; |
352 | 353 | ||
353 | #define DECLARE_PDC2026X_DEV(name_str, udma, extra_flags) \ | 354 | #define DECLARE_PDC2026X_DEV(udma, extra_flags) \ |
354 | { \ | 355 | { \ |
355 | .name = name_str, \ | 356 | .name = DRV_NAME, \ |
356 | .init_chipset = init_chipset_pdc202xx, \ | 357 | .init_chipset = init_chipset_pdc202xx, \ |
357 | .port_ops = &pdc2026x_port_ops, \ | 358 | .port_ops = &pdc2026x_port_ops, \ |
358 | .dma_ops = &pdc2026x_dma_ops, \ | 359 | .dma_ops = &pdc2026x_dma_ops, \ |
@@ -363,8 +364,8 @@ static const struct ide_dma_ops pdc2026x_dma_ops = { | |||
363 | } | 364 | } |
364 | 365 | ||
365 | static const struct ide_port_info pdc202xx_chipsets[] __devinitdata = { | 366 | static const struct ide_port_info pdc202xx_chipsets[] __devinitdata = { |
366 | { /* 0 */ | 367 | { /* 0: PDC20246 */ |
367 | .name = "PDC20246", | 368 | .name = DRV_NAME, |
368 | .init_chipset = init_chipset_pdc202xx, | 369 | .init_chipset = init_chipset_pdc202xx, |
369 | .port_ops = &pdc20246_port_ops, | 370 | .port_ops = &pdc20246_port_ops, |
370 | .dma_ops = &pdc20246_dma_ops, | 371 | .dma_ops = &pdc20246_dma_ops, |
@@ -374,10 +375,10 @@ static const struct ide_port_info pdc202xx_chipsets[] __devinitdata = { | |||
374 | .udma_mask = ATA_UDMA2, | 375 | .udma_mask = ATA_UDMA2, |
375 | }, | 376 | }, |
376 | 377 | ||
377 | /* 1 */ DECLARE_PDC2026X_DEV("PDC20262", ATA_UDMA4, 0), | 378 | /* 1: PDC2026{2,3} */ |
378 | /* 2 */ DECLARE_PDC2026X_DEV("PDC20263", ATA_UDMA4, 0), | 379 | DECLARE_PDC2026X_DEV(ATA_UDMA4, 0), |
379 | /* 3 */ DECLARE_PDC2026X_DEV("PDC20265", ATA_UDMA5, IDE_HFLAG_RQSIZE_256), | 380 | /* 2: PDC2026{5,7} */ |
380 | /* 4 */ DECLARE_PDC2026X_DEV("PDC20267", ATA_UDMA5, IDE_HFLAG_RQSIZE_256), | 381 | DECLARE_PDC2026X_DEV(ATA_UDMA5, IDE_HFLAG_RQSIZE_256), |
381 | }; | 382 | }; |
382 | 383 | ||
383 | /** | 384 | /** |
@@ -396,31 +397,32 @@ static int __devinit pdc202xx_init_one(struct pci_dev *dev, const struct pci_dev | |||
396 | 397 | ||
397 | d = &pdc202xx_chipsets[idx]; | 398 | d = &pdc202xx_chipsets[idx]; |
398 | 399 | ||
399 | if (idx < 3) | 400 | if (idx < 2) |
400 | pdc202ata4_fixup_irq(dev, d->name); | 401 | pdc202ata4_fixup_irq(dev, d->name); |
401 | 402 | ||
402 | if (idx == 3) { | 403 | if (dev->vendor == PCI_DEVICE_ID_PROMISE_20265) { |
403 | struct pci_dev *bridge = dev->bus->self; | 404 | struct pci_dev *bridge = dev->bus->self; |
404 | 405 | ||
405 | if (bridge && | 406 | if (bridge && |
406 | bridge->vendor == PCI_VENDOR_ID_INTEL && | 407 | bridge->vendor == PCI_VENDOR_ID_INTEL && |
407 | (bridge->device == PCI_DEVICE_ID_INTEL_I960 || | 408 | (bridge->device == PCI_DEVICE_ID_INTEL_I960 || |
408 | bridge->device == PCI_DEVICE_ID_INTEL_I960RM)) { | 409 | bridge->device == PCI_DEVICE_ID_INTEL_I960RM)) { |
409 | printk(KERN_INFO "ide: Skipping Promise PDC20265 " | 410 | printk(KERN_INFO DRV_NAME " %s: skipping Promise " |
410 | "attached to I2O RAID controller\n"); | 411 | "PDC20265 attached to I2O RAID controller\n", |
412 | pci_name(dev)); | ||
411 | return -ENODEV; | 413 | return -ENODEV; |
412 | } | 414 | } |
413 | } | 415 | } |
414 | 416 | ||
415 | return ide_setup_pci_device(dev, d); | 417 | return ide_pci_init_one(dev, d, NULL); |
416 | } | 418 | } |
417 | 419 | ||
418 | static const struct pci_device_id pdc202xx_pci_tbl[] = { | 420 | static const struct pci_device_id pdc202xx_pci_tbl[] = { |
419 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20246), 0 }, | 421 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20246), 0 }, |
420 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20262), 1 }, | 422 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20262), 1 }, |
421 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20263), 2 }, | 423 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20263), 1 }, |
422 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20265), 3 }, | 424 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20265), 2 }, |
423 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20267), 4 }, | 425 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20267), 2 }, |
424 | { 0, }, | 426 | { 0, }, |
425 | }; | 427 | }; |
426 | MODULE_DEVICE_TABLE(pci, pdc202xx_pci_tbl); | 428 | MODULE_DEVICE_TABLE(pci, pdc202xx_pci_tbl); |
@@ -429,6 +431,7 @@ static struct pci_driver driver = { | |||
429 | .name = "Promise_Old_IDE", | 431 | .name = "Promise_Old_IDE", |
430 | .id_table = pdc202xx_pci_tbl, | 432 | .id_table = pdc202xx_pci_tbl, |
431 | .probe = pdc202xx_init_one, | 433 | .probe = pdc202xx_init_one, |
434 | .remove = ide_pci_remove, | ||
432 | }; | 435 | }; |
433 | 436 | ||
434 | static int __init pdc202xx_ide_init(void) | 437 | static int __init pdc202xx_ide_init(void) |
@@ -436,7 +439,13 @@ static int __init pdc202xx_ide_init(void) | |||
436 | return ide_pci_register_driver(&driver); | 439 | return ide_pci_register_driver(&driver); |
437 | } | 440 | } |
438 | 441 | ||
442 | static void __exit pdc202xx_ide_exit(void) | ||
443 | { | ||
444 | pci_unregister_driver(&driver); | ||
445 | } | ||
446 | |||
439 | module_init(pdc202xx_ide_init); | 447 | module_init(pdc202xx_ide_init); |
448 | module_exit(pdc202xx_ide_exit); | ||
440 | 449 | ||
441 | MODULE_AUTHOR("Andre Hedrick, Frank Tiernan"); | 450 | MODULE_AUTHOR("Andre Hedrick, Frank Tiernan"); |
442 | MODULE_DESCRIPTION("PCI driver module for older Promise IDE"); | 451 | MODULE_DESCRIPTION("PCI driver module for older Promise IDE"); |