lkml.org 
[lkml]   [2008]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH] ricoh_mmc: Use suspend/resume_noirq (v2)
    From
    If ricoh_mmc suspends before sdhci_pci, it will pull the card
    out from under the controller, which could leave the system in
    a very confused state.

    Using suspend/resume_noirq ensures that sdhci_pci suspends first
    and resumes second.

    Signed-off-by: Philip Langdale <philipl@overt.org>
    Acked-by: Pierre Ossman <drzeus@drzeus.cx>
    ---

    ricoh_mmc.c | 20 ++++++++++++++++----
    1 file changed, 16 insertions(+), 4 deletions(-)

    diff --git a/drivers/mmc/host/ricoh_mmc.c b/drivers/mmc/host/ricoh_mmc.c
    index 1837719..b4958a7 100644
    --- a/drivers/mmc/host/ricoh_mmc.c
    +++ b/drivers/mmc/host/ricoh_mmc.c
    @@ -194,10 +194,14 @@ static void __devexit ricoh_mmc_remove(struct pci_dev *pdev)
    pci_set_drvdata(pdev, NULL);
    }

    -static int ricoh_mmc_suspend(struct pci_dev *pdev, pm_message_t state)
    +static int ricoh_mmc_suspend_noirq(struct device *dev)
    {
    + struct pci_dev *pdev = NULL;
    struct pci_dev *fw_dev = NULL;

    + pdev = to_pci_dev(dev);
    + BUG_ON(pdev == NULL);
    +
    fw_dev = pci_get_drvdata(pdev);
    BUG_ON(fw_dev == NULL);

    @@ -208,10 +212,14 @@ static int ricoh_mmc_suspend(struct pci_dev *pdev, pm_message_t state)
    return 0;
    }

    -static int ricoh_mmc_resume(struct pci_dev *pdev)
    +static int ricoh_mmc_resume_noirq(struct device *dev)
    {
    + struct pci_dev *pdev = NULL;
    struct pci_dev *fw_dev = NULL;

    + pdev = to_pci_dev(dev);
    + BUG_ON(pdev == NULL);
    +
    fw_dev = pci_get_drvdata(pdev);
    BUG_ON(fw_dev == NULL);

    @@ -222,13 +230,17 @@ static int ricoh_mmc_resume(struct pci_dev *pdev)
    return 0;
    }

    +static struct dev_pm_ops ricoh_mmc_pm_opts = {
    + .suspend_noirq = ricoh_mmc_suspend_noirq,
    + .resume_noirq = ricoh_mmc_resume_noirq,
    +};
    +
    static struct pci_driver ricoh_mmc_driver = {
    .name = DRIVER_NAME,
    .id_table = pci_ids,
    .probe = ricoh_mmc_probe,
    .remove = __devexit_p(ricoh_mmc_remove),
    - .suspend = ricoh_mmc_suspend,
    - .resume = ricoh_mmc_resume,
    + .driver.pm = &ricoh_mmc_pm_opts,
    };

    /*****************************************************************************\


    \
     
     \ /
      Last update: 2008-12-06 23:39    [W:0.021 / U:2.280 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site