lkml.org 
[lkml]   [2008]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch v5 13/16] MMC: S3C24XX: Add media presence test to request handling.
    Ensure that we have physical media present before attempting to
    send a request to a card. This ensures that we do not get flooded
    by errors from commands that can never be completed timing out.

    Signed-off-by: Ben Dooks <ben-linux@fluff.org>

    Index: linux-2.6.26-rc8-next20080627/drivers/mmc/host/s3cmci.c
    ===================================================================
    --- linux-2.6.26-rc8-next20080627.orig/drivers/mmc/host/s3cmci.c 2008-06-30 12:36:57.000000000 +0100
    +++ linux-2.6.26-rc8-next20080627/drivers/mmc/host/s3cmci.c 2008-06-30 15:23:42.000000000 +0100
    @@ -984,6 +984,18 @@ static void s3cmci_send_request(struct m
    enable_irq(host->irq);
    }

    +static int s3cmci_card_present(struct s3cmci_host *host)
    +{
    + struct s3c24xx_mci_pdata *pdata = host->pdata;
    + int ret;
    +
    + if (pdata->gpio_detect == 0)
    + return -ENOSYS;
    +
    + ret = s3c2410_gpio_getpin(pdata->gpio_detect) ? 0 : 1;
    + return ret ^ pdata->detect_invert;
    +}
    +
    static void s3cmci_request(struct mmc_host *mmc, struct mmc_request *mrq)
    {
    struct s3cmci_host *host = mmc_priv(mmc);
    @@ -992,7 +1004,12 @@ static void s3cmci_request(struct mmc_ho
    host->cmd_is_stop = 0;
    host->mrq = mrq;

    - s3cmci_send_request(mmc);
    + if (s3cmci_card_present(host) == 0) {
    + dbg(host, dbg_err, "%s: no medium present\n", __func__);
    + host->mrq->cmd->error = -ENOMEDIUM;
    + mmc_request_done(mmc, mrq);
    + } else
    + s3cmci_send_request(mmc);
    }

    static void s3cmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
    Index: linux-2.6.26-rc8-next20080627/include/asm-arm/plat-s3c24xx/mci.h
    ===================================================================
    --- linux-2.6.26-rc8-next20080627.orig/include/asm-arm/plat-s3c24xx/mci.h 2008-06-30 12:36:42.000000000 +0100
    +++ linux-2.6.26-rc8-next20080627/include/asm-arm/plat-s3c24xx/mci.h 2008-06-30 12:37:19.000000000 +0100
    @@ -3,6 +3,7 @@

    struct s3c24xx_mci_pdata {
    unsigned int wprotect_invert : 1;
    + unsigned int detect_invert : 1; /* set => detect active high. */

    unsigned int gpio_detect;
    unsigned int gpio_wprotect;
    --
    Ben (ben@fluff.org, http://www.fluff.org/)

    'a smiley only costs 4 bytes'


    \
     
     \ /
      Last update: 2008-06-30 23:53    [W:0.020 / U:32.312 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site