Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1d19db4 authored by Sergei Shtylyov's avatar Sergei Shtylyov Committed by Bartlomiej Zolnierkiewicz
Browse files

aec62xx: rework init_setup_aec6x80()



Rework init_setup_aec6x80() so that it won't rewrite the constant name strings
anymore -- in order to do this:

- in aec62xx_init_one(), pass a local copy of 'struct pci_device_id' down the
  call chain;

- change the names for in aec62xx_chipsets[] to default to AEC-6280[R];

- override the 'name' field in init_setup_aec6x80() only if bit 4 of the DMA
  status register is set.

While at it, also change the 'udma_mask' field for AEC-6x80R chips in this
function and remove the code doing the same from the init_hwif() method...

Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 83a6d4ab
Loading
Loading
Loading
Loading
+13 −22
Original line number Original line Diff line number Diff line
/*
/*
 * linux/drivers/ide/pci/aec62xx.c		Version 0.21	Apr 21, 2007
 * linux/drivers/ide/pci/aec62xx.c		Version 0.22	Apr 23, 2007
 *
 *
 * Copyright (C) 1999-2002	Andre Hedrick <andre@linux-ide.org>
 * Copyright (C) 1999-2002	Andre Hedrick <andre@linux-ide.org>
 * Copyright (C) 2007		MontaVista Software, Inc. <source@mvista.com>
 * Copyright (C) 2007		MontaVista Software, Inc. <source@mvista.com>
@@ -239,14 +239,6 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
	}
	}


	hwif->ultra_mask = hwif->cds->udma_mask;
	hwif->ultra_mask = hwif->cds->udma_mask;

	/* atp865 and atp865r */
	if (hwif->ultra_mask == 0x3f) {
		/* check bit 0x10 of DMA status register */
		if (inb(pci_resource_start(dev, 4) + 2) & 0x10)
 			hwif->ultra_mask = 0x7f; /* udma0-6 */
	}

	hwif->mwdma_mask = 0x07;
	hwif->mwdma_mask = 0x07;


	hwif->ide_dma_check	= &aec62xx_config_drive_xfer_rate;
	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


static int __devinit init_setup_aec6x80(struct pci_dev *dev, ide_pci_device_t *d)
static int __devinit init_setup_aec6x80(struct pci_dev *dev, ide_pci_device_t *d)
{
{
	unsigned long bar4reg = pci_resource_start(dev, 4);
	unsigned long dma_base = pci_resource_start(dev, 4);


	if (inb(bar4reg+2) & 0x10) {
	if (inb(dma_base + 2) & 0x10) {
		strcpy(d->name, "AEC6880");
		d->name = (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R) ?
		if (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R)
			  "AEC6880R" : "AEC6880";
			strcpy(d->name, "AEC6880R");
		d->udma_mask = 0x7f; /* udma0-6 */
	} else {
		strcpy(d->name, "AEC6280");
		if (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R)
			strcpy(d->name, "AEC6280R");
	}
	}


	return ide_setup_pci_device(dev, d);
	return ide_setup_pci_device(dev, d);
@@ -336,7 +324,7 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
		.bootable	= NEVER_BOARD,
		.bootable	= NEVER_BOARD,
		.udma_mask	= 0x1f, /* udma0-4 */
		.udma_mask	= 0x1f, /* udma0-4 */
	},{	/* 3 */
	},{	/* 3 */
		.name		= "AEC6X80",
		.name		= "AEC6280",
		.init_setup	= init_setup_aec6x80,
		.init_setup	= init_setup_aec6x80,
		.init_chipset	= init_chipset_aec62xx,
		.init_chipset	= init_chipset_aec62xx,
		.init_hwif	= init_hwif_aec62xx,
		.init_hwif	= init_hwif_aec62xx,
@@ -346,7 +334,7 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
		.bootable	= OFF_BOARD,
		.bootable	= OFF_BOARD,
		.udma_mask	= 0x3f, /* udma0-5 */
		.udma_mask	= 0x3f, /* udma0-5 */
	},{	/* 4 */
	},{	/* 4 */
		.name		= "AEC6X80R",
		.name		= "AEC6280R",
		.init_setup	= init_setup_aec6x80,
		.init_setup	= init_setup_aec6x80,
		.init_chipset	= init_chipset_aec62xx,
		.init_chipset	= init_chipset_aec62xx,
		.init_hwif	= init_hwif_aec62xx,
		.init_hwif	= init_hwif_aec62xx,
@@ -366,13 +354,16 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
 *
 *
 *	Called when the PCI registration layer (or the IDE initialization)
 *	Called when the PCI registration layer (or the IDE initialization)
 *	finds a device matching our IDE device tables.
 *	finds a device matching our IDE device tables.
 *
 *	NOTE: since we're going to modify the 'name' field for AEC-6[26]80[R]
 *	chips, pass a local copy of 'struct pci_device_id' down the call chain.
 */
 */
 
 
static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_device_id *id)
static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_device_id *id)
{
{
	ide_pci_device_t *d = &aec62xx_chipsets[id->driver_data];
	ide_pci_device_t d = aec62xx_chipsets[id->driver_data];


	return d->init_setup(dev, d);
	return d.init_setup(dev, &d);
}
}


static struct pci_device_id aec62xx_pci_tbl[] = {
static struct pci_device_id aec62xx_pci_tbl[] = {