diff options
author | Ondrej Zary <linux@rainbow-software.org> | 2015-11-17 19:24:25 +0100 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2015-11-26 04:08:53 +0100 |
commit | f5f53a38c2f8671f9fc249c711411ba44d76a618 (patch) | |
tree | f9ad9d737dc860129587ae75ea8b247951ce8e03 /drivers/scsi/atp870u.c | |
parent | atp870u: Remove scam_on from struct atp_unit (diff) | |
download | linux-f5f53a38c2f8671f9fc249c711411ba44d76a618.tar.xz linux-f5f53a38c2f8671f9fc249c711411ba44d76a618.zip |
atp870u: Initialize tables earlier
Call _init_tables before chip-specific initialization. This avoids code
duplication and fixes a bug(?) in 880 init where the values read from flash
into atpdev->sp are then overwritten by calling init_tables.
Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Reviewed-by: Hannes Reinicke <hare@suse.de>
Acked-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/atp870u.c')
-rw-r--r-- | drivers/scsi/atp870u.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c index dd0b520f7dd4..3c66539e5781 100644 --- a/drivers/scsi/atp870u.c +++ b/drivers/scsi/atp870u.c @@ -1298,6 +1298,12 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) shpnt->unique_id = shpnt->io_port; shpnt->irq = pdev->irq; + err = atp870u_init_tables(shpnt); + if (err) { + dev_err(&pdev->dev, "Unable to allocate tables for Acard controller\n"); + goto unregister; + } + if (is880(atpdev)) { pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803 @@ -1366,11 +1372,6 @@ flash_ok_880: atpdev->async[0] = ~(atpdev->async[0]); atp_writeb_base(atpdev, 0x35, atpdev->global_map[0]); - if (atp870u_init_tables(shpnt) < 0) { - printk(KERN_ERR "Unable to allocate tables for Acard controller\n"); - err = -ENOMEM; - goto unregister; - } k = atp_readb_base(atpdev, 0x38) & 0x80; atp_writeb_base(atpdev, 0x38, k); @@ -1398,11 +1399,6 @@ flash_ok_880: atpdev->pciport[0] = shpnt->io_port + 0x40; atpdev->pciport[1] = shpnt->io_port + 0x50; - if (atp870u_init_tables(shpnt) < 0) { - err = -ENOMEM; - goto unregister; - } - c = atp_readb_base(atpdev, 0x29); atp_writeb_base(atpdev, 0x29, c | 0x04); @@ -1533,12 +1529,6 @@ flash_ok_885: atpdev->ultra_map[0] = 0xffff; } - - if (atp870u_init_tables(shpnt) < 0) { - err = -ENOMEM; - goto unregister; - } - if (pdev->revision > 0x07) /* check if atp876 chip then enable terminator */ atp_writeb_base(atpdev, 0x3e, 0x00); |