Skip to content

Commit

Permalink
[PATCH] Char: isicom, augment card_reset
Browse files Browse the repository at this point in the history
isicom, augment card_reset

- add 0xee to signatures
- change long delays to sleeps
- make one sleep shorter not to wait 3s
- portcount == 16 is also correct

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Jiri Slaby authored and Linus Torvalds committed Feb 11, 2007
1 parent 174f130 commit f0a0ba6
Showing 1 changed file with 22 additions and 17 deletions.
39 changes: 22 additions & 17 deletions drivers/char/isicom.c
Original file line number Diff line number Diff line change
Expand Up @@ -1510,52 +1510,57 @@ static int __devinit reset_card(struct pci_dev *pdev,
{
struct isi_board *board = pci_get_drvdata(pdev);
unsigned long base = board->base;
unsigned int portcount = 0;
unsigned int sig, portcount = 0;
int retval = 0;

dev_dbg(&pdev->dev, "ISILoad:Resetting Card%d at 0x%lx\n", card + 1,
base);

inw(base + 0x8);

mdelay(10);
msleep(10);

outw(0, base + 0x8); /* Reset */

msleep(3000);
msleep(1000);

*signature = inw(base + 0x4) & 0xff;
sig = inw(base + 0x4) & 0xff;

if (sig != 0xa5 && sig != 0xbb && sig != 0xcc && sig != 0xdd &&
sig != 0xee) {
dev_warn(&pdev->dev, "ISILoad:Card%u reset failure (Possible "
"bad I/O Port Address 0x%lx).\n", card + 1, base);
dev_dbg(&pdev->dev, "Sig=0x%x\n", sig);
retval = -EIO;
goto end;
}

msleep(10);

portcount = inw(base + 0x2);
if (!(inw(base + 0xe) & 0x1) || ((portcount != 0) &&
(portcount != 4) && (portcount != 8))) {
dev_dbg(&pdev->dev, "base+0x2=0x%lx, base+0xe=0x%lx\n",
inw(base + 0x2), inw(base + 0xe));
dev_err(&pdev->dev, "ISILoad:PCI Card%d reset failure "
"(Possible bad I/O Port Address 0x%lx).\n",
card + 1, base);
if (!inw(base + 0xe) & 0x1 || (portcount != 0 && portcount != 4 &&
portcount != 8 && portcount != 16)) {
dev_err(&pdev->dev, "ISILoad:PCI Card%d reset failure.",
card + 1);
retval = -EIO;
goto end;
}

switch (*signature) {
switch (sig) {
case 0xa5:
case 0xbb:
case 0xdd:
board->port_count = (portcount == 4) ? 4 : 8;
board->shift_count = 12;
break;
case 0xcc:
case 0xee:
board->port_count = 16;
board->shift_count = 11;
break;
default:
dev_warn(&pdev->dev, "ISILoad:Card%d reset failure (Possible "
"bad I/O Port Address 0x%lx).\n", card + 1, base);
dev_dbg(&pdev->dev, "Sig=0x%lx\n", signature);
retval = -EIO;
}
dev_info(&pdev->dev, "-Done\n");
*signature = sig;

end:
return retval;
Expand Down

0 comments on commit f0a0ba6

Please sign in to comment.