lkml.org 
[lkml]   [2006]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 3/5] Char: isicom, augment card_reset
    From
    Date
    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>

    ---
    commit 405c17b09b010b41f6ec2388a11777e4048c7976
    tree 4954b33027ee87193bfe91109d6fbc8b12c4e71a
    parent e7087b32ad4b5ee1240fa7f9ba46a9b4566fe424
    author Jiri Slaby <jirislaby@gmail.com> Fri, 15 Dec 2006 22:20:14 +0059
    committer Jiri Slaby <jirislaby@gmail.com> Fri, 15 Dec 2006 22:20:14 +0059

    drivers/char/isicom.c | 39 ++++++++++++++++++++++-----------------
    1 files changed, 22 insertions(+), 17 deletions(-)

    diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c
    index 5d2c345..7968160 100644
    --- a/drivers/char/isicom.c
    +++ b/drivers/char/isicom.c
    @@ -1501,7 +1501,7 @@ 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,
    @@ -1509,27 +1509,35 @@ static int __devinit reset_card(struct pci_dev *pdev,

    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:
    @@ -1537,16 +1545,13 @@ static int __devinit reset_card(struct pci_dev *pdev,
    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;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-12-16 02:37    [W:0.023 / U:0.356 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site