Commit dd5a5f79 authored by Ondrej Zary's avatar Ondrej Zary Committed by Martin K. Petersen

atp870u: Remove chip_ver from struct atp_unit

chip_ver is used for wide chip detection only. Remove it and use a local
variable instead (for 870; 880 and 885 are always wide).
Signed-off-by: default avatarOndrej Zary <linux@rainbow-software.org>
Reviewed-by: default avatarHannes Reinicke <hare@suse.de>
Acked-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent b1e85063
...@@ -954,7 +954,7 @@ static unsigned char fun_scam(struct atp_unit *dev, unsigned short int *val) ...@@ -954,7 +954,7 @@ static unsigned char fun_scam(struct atp_unit *dev, unsigned short int *val)
return j; return j;
} }
static void tscam(struct Scsi_Host *host) static void tscam(struct Scsi_Host *host, bool wide_chip)
{ {
unsigned char i, j, k; unsigned char i, j, k;
...@@ -983,7 +983,7 @@ static void tscam(struct Scsi_Host *host) ...@@ -983,7 +983,7 @@ static void tscam(struct Scsi_Host *host)
m = 1; m = 1;
m <<= dev->host_id[0]; m <<= dev->host_id[0];
j = 16; j = 16;
if (dev->chip_ver < 4) { if (!wide_chip) {
m |= 0xff00; m |= 0xff00;
j = 8; j = 8;
} }
...@@ -1012,7 +1012,7 @@ static void tscam(struct Scsi_Host *host) ...@@ -1012,7 +1012,7 @@ static void tscam(struct Scsi_Host *host)
k = i; k = i;
} }
atp_writeb_io(dev, 0, 0x15, k); atp_writeb_io(dev, 0, 0x15, k);
if (dev->chip_ver == 4) if (wide_chip)
atp_writeb_io(dev, 0, 0x1b, 0x01); atp_writeb_io(dev, 0, 0x1b, 0x01);
else else
atp_writeb_io(dev, 0, 0x1b, 0x00); atp_writeb_io(dev, 0, 0x1b, 0x00);
...@@ -1278,25 +1278,11 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1278,25 +1278,11 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
atpdev->pdev = pdev; atpdev->pdev = pdev;
pci_set_drvdata(pdev, atpdev); pci_set_drvdata(pdev, atpdev);
switch (ent->device) {
case PCI_DEVICE_ID_ARTOP_AEC7610:
atpdev->chip_ver = pdev->revision;
break;
case PCI_DEVICE_ID_ARTOP_AEC7612UW:
case PCI_DEVICE_ID_ARTOP_AEC7612SUW:
case ATP880_DEVID1:
case ATP880_DEVID2:
case ATP885_DEVID:
atpdev->chip_ver = 0x04;
default:
break;
}
base_io = pci_resource_start(pdev, 0); base_io = pci_resource_start(pdev, 0);
base_io &= 0xfffffff8; base_io &= 0xfffffff8;
atpdev->baseport = base_io; atpdev->baseport = base_io;
if ((ent->device == ATP880_DEVID1)||(ent->device == ATP880_DEVID2)) { if ((ent->device == ATP880_DEVID1)||(ent->device == ATP880_DEVID2)) {
atpdev->chip_ver = pdev->revision;
pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803 pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803
atpdev->ioport[0] = base_io + 0x40; atpdev->ioport[0] = base_io + 0x40;
...@@ -1390,7 +1376,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1390,7 +1376,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
atp_set_host_id(atpdev, 0, host_id); atp_set_host_id(atpdev, 0, host_id);
tscam(shpnt); tscam(shpnt, true);
atp_is(atpdev, 0, true, atp_readb_base(atpdev, 0x3f) & 0x40); atp_is(atpdev, 0, true, atp_readb_base(atpdev, 0x3f) & 0x40);
atp_writeb_base(atpdev, 0x38, 0xb0); atp_writeb_base(atpdev, 0x38, 0xb0);
shpnt->max_id = 16; shpnt->max_id = 16;
...@@ -1536,6 +1522,11 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1536,6 +1522,11 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
shpnt->irq = pdev->irq; shpnt->irq = pdev->irq;
} else { } else {
bool wide_chip =
(ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 &&
pdev->revision == 4) ||
(ent->device == PCI_DEVICE_ID_ARTOP_AEC7612UW) ||
(ent->device == PCI_DEVICE_ID_ARTOP_AEC7612SUW);
error = pci_read_config_byte(pdev, 0x49, &host_id); error = pci_read_config_byte(pdev, 0x49, &host_id);
printk(KERN_INFO " ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: " printk(KERN_INFO " ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: "
...@@ -1569,7 +1560,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1569,7 +1560,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
} }
spin_lock_irqsave(shpnt->host_lock, flags); spin_lock_irqsave(shpnt->host_lock, flags);
if (atpdev->chip_ver > 0x07) /* check if atp876 chip then enable terminator */ if (pdev->revision > 0x07) /* check if atp876 chip then enable terminator */
atp_writeb_base(atpdev, 0x3e, 0x00); atp_writeb_base(atpdev, 0x3e, 0x00);
k = (atp_readb_base(atpdev, 0x3a) & 0xf3) | 0x10; k = (atp_readb_base(atpdev, 0x3a) & 0xf3) | 0x10;
...@@ -1580,15 +1571,13 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1580,15 +1571,13 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
mdelay(32); mdelay(32);
atp_set_host_id(atpdev, 0, host_id); atp_set_host_id(atpdev, 0, host_id);
tscam(shpnt);
tscam(shpnt, wide_chip);
atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) | 0x10); atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) | 0x10);
atp_is(atpdev, 0, atpdev->chip_ver == 4, 0); atp_is(atpdev, 0, wide_chip, 0);
atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) & 0xef); atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) & 0xef);
atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20); atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20);
if (atpdev->chip_ver == 4) shpnt->max_id = wide_chip ? 16 : 8;
shpnt->max_id = 16;
else
shpnt->max_id = 8;
shpnt->this_id = host_id; shpnt->this_id = host_id;
shpnt->unique_id = base_io; shpnt->unique_id = base_io;
shpnt->io_port = base_io; shpnt->io_port = base_io;
......
...@@ -32,7 +32,6 @@ struct atp_unit ...@@ -32,7 +32,6 @@ struct atp_unit
unsigned char quhd[2]; unsigned char quhd[2];
unsigned char quend[2]; unsigned char quend[2];
unsigned char global_map[2]; unsigned char global_map[2];
unsigned char chip_ver;
unsigned char scam_on; unsigned char scam_on;
unsigned char host_id[2]; unsigned char host_id[2];
unsigned int working[2]; unsigned int working[2];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment