diff options
| -rw-r--r-- | drivers/ide/pci/aec62xx.c | 35 | 
1 files changed, 13 insertions, 22 deletions
| diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c index bed32d0eaa37..7067df2590c3 100644 --- a/drivers/ide/pci/aec62xx.c +++ b/drivers/ide/pci/aec62xx.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* | 
| 2 | * linux/drivers/ide/pci/aec62xx.c Version 0.21 Apr 21, 2007 | 2 | * linux/drivers/ide/pci/aec62xx.c Version 0.22 Apr 23, 2007 | 
| 3 | * | 3 | * | 
| 4 | * Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org> | 
| 5 | * Copyright (C) 2007 MontaVista Software, Inc. <source@mvista.com> | 5 | * Copyright (C) 2007 MontaVista Software, Inc. <source@mvista.com> | 
| @@ -239,14 +239,6 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) | |||
| 239 | } | 239 | } | 
| 240 | 240 | ||
| 241 | hwif->ultra_mask = hwif->cds->udma_mask; | 241 | hwif->ultra_mask = hwif->cds->udma_mask; | 
| 242 | |||
| 243 | /* atp865 and atp865r */ | ||
| 244 | if (hwif->ultra_mask == 0x3f) { | ||
| 245 | /* check bit 0x10 of DMA status register */ | ||
| 246 | if (inb(pci_resource_start(dev, 4) + 2) & 0x10) | ||
| 247 | hwif->ultra_mask = 0x7f; /* udma0-6 */ | ||
| 248 | } | ||
| 249 | |||
| 250 | hwif->mwdma_mask = 0x07; | 242 | hwif->mwdma_mask = 0x07; | 
| 251 | 243 | ||
| 252 | hwif->ide_dma_check = &aec62xx_config_drive_xfer_rate; | 244 | hwif->ide_dma_check = &aec62xx_config_drive_xfer_rate; | 
| @@ -287,16 +279,12 @@ static int __devinit init_setup_aec62xx(struct pci_dev *dev, ide_pci_device_t *d | |||
| 287 | 279 | ||
| 288 | static int __devinit init_setup_aec6x80(struct pci_dev *dev, ide_pci_device_t *d) | 280 | static int __devinit init_setup_aec6x80(struct pci_dev *dev, ide_pci_device_t *d) | 
| 289 | { | 281 | { | 
| 290 | unsigned long bar4reg = pci_resource_start(dev, 4); | 282 | unsigned long dma_base = pci_resource_start(dev, 4); | 
| 291 | 283 | ||
| 292 | if (inb(bar4reg+2) & 0x10) { | 284 | if (inb(dma_base + 2) & 0x10) { | 
| 293 | strcpy(d->name, "AEC6880"); | 285 | d->name = (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R) ? | 
| 294 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R) | 286 | "AEC6880R" : "AEC6880"; | 
| 295 | strcpy(d->name, "AEC6880R"); | 287 | d->udma_mask = 0x7f; /* udma0-6 */ | 
| 296 | } else { | ||
| 297 | strcpy(d->name, "AEC6280"); | ||
| 298 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R) | ||
| 299 | strcpy(d->name, "AEC6280R"); | ||
| 300 | } | 288 | } | 
| 301 | 289 | ||
| 302 | return ide_setup_pci_device(dev, d); | 290 | return ide_setup_pci_device(dev, d); | 
| @@ -336,7 +324,7 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = { | |||
| 336 | .bootable = NEVER_BOARD, | 324 | .bootable = NEVER_BOARD, | 
| 337 | .udma_mask = 0x1f, /* udma0-4 */ | 325 | .udma_mask = 0x1f, /* udma0-4 */ | 
| 338 | },{ /* 3 */ | 326 | },{ /* 3 */ | 
| 339 | .name = "AEC6X80", | 327 | .name = "AEC6280", | 
| 340 | .init_setup = init_setup_aec6x80, | 328 | .init_setup = init_setup_aec6x80, | 
| 341 | .init_chipset = init_chipset_aec62xx, | 329 | .init_chipset = init_chipset_aec62xx, | 
| 342 | .init_hwif = init_hwif_aec62xx, | 330 | .init_hwif = init_hwif_aec62xx, | 
| @@ -346,7 +334,7 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = { | |||
| 346 | .bootable = OFF_BOARD, | 334 | .bootable = OFF_BOARD, | 
| 347 | .udma_mask = 0x3f, /* udma0-5 */ | 335 | .udma_mask = 0x3f, /* udma0-5 */ | 
| 348 | },{ /* 4 */ | 336 | },{ /* 4 */ | 
| 349 | .name = "AEC6X80R", | 337 | .name = "AEC6280R", | 
| 350 | .init_setup = init_setup_aec6x80, | 338 | .init_setup = init_setup_aec6x80, | 
| 351 | .init_chipset = init_chipset_aec62xx, | 339 | .init_chipset = init_chipset_aec62xx, | 
| 352 | .init_hwif = init_hwif_aec62xx, | 340 | .init_hwif = init_hwif_aec62xx, | 
| @@ -366,13 +354,16 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = { | |||
| 366 | * | 354 | * | 
| 367 | * Called when the PCI registration layer (or the IDE initialization) | 355 | * Called when the PCI registration layer (or the IDE initialization) | 
| 368 | * finds a device matching our IDE device tables. | 356 | * finds a device matching our IDE device tables. | 
| 357 | * | ||
| 358 | * NOTE: since we're going to modify the 'name' field for AEC-6[26]80[R] | ||
| 359 | * chips, pass a local copy of 'struct pci_device_id' down the call chain. | ||
| 369 | */ | 360 | */ | 
| 370 | 361 | ||
| 371 | static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 362 | static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 
| 372 | { | 363 | { | 
| 373 | ide_pci_device_t *d = &aec62xx_chipsets[id->driver_data]; | 364 | ide_pci_device_t d = aec62xx_chipsets[id->driver_data]; | 
| 374 | 365 | ||
| 375 | return d->init_setup(dev, d); | 366 | return d.init_setup(dev, &d); | 
| 376 | } | 367 | } | 
| 377 | 368 | ||
| 378 | static struct pci_device_id aec62xx_pci_tbl[] = { | 369 | static struct pci_device_id aec62xx_pci_tbl[] = { | 
