lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 3/4] misc: rtsx: Cleanup power management ops
    Date
    - Use cancel_delayed_work_sync to ensure there's no race with
    carddet_work.

    - Remove device_wakeup_disable to save some CPU cycles. If the device
    really has ACPI _DSW then the wakeup should be disabled in probe
    routine.

    - Remove fetch_vendor_settings from runtime resume routine, since they
    are already saved in "struct rtsx_pcr".

    - Move variable assignments to the top of the functions.

    Cc: Ricky WU <ricky_wu@realtek.com>
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    ---
    v4:
    - Move variable assignments to the top of the functions.

    v3:
    v2:
    - No change.

    drivers/misc/cardreader/rtsx_pcr.c | 34 ++++++++----------------------
    1 file changed, 9 insertions(+), 25 deletions(-)

    diff --git a/drivers/misc/cardreader/rtsx_pcr.c b/drivers/misc/cardreader/rtsx_pcr.c
    index f919290f01192..ec395a33faf8b 100644
    --- a/drivers/misc/cardreader/rtsx_pcr.c
    +++ b/drivers/misc/cardreader/rtsx_pcr.c
    @@ -1660,22 +1660,17 @@ static void rtsx_pci_remove(struct pci_dev *pcidev)
    static int __maybe_unused rtsx_pci_suspend(struct device *dev_d)
    {
    struct pci_dev *pcidev = to_pci_dev(dev_d);
    - struct pcr_handle *handle;
    - struct rtsx_pcr *pcr;
    + struct pcr_handle *handle = pci_get_drvdata(pcidev);
    + struct rtsx_pcr *pcr = handle->pcr;

    dev_dbg(&(pcidev->dev), "--> %s\n", __func__);

    - handle = pci_get_drvdata(pcidev);
    - pcr = handle->pcr;
    -
    - cancel_delayed_work(&pcr->carddet_work);
    + cancel_delayed_work_sync(&pcr->carddet_work);

    mutex_lock(&pcr->pcr_mutex);

    rtsx_pci_power_off(pcr, HOST_ENTER_S3);

    - device_wakeup_disable(dev_d);
    -
    mutex_unlock(&pcr->pcr_mutex);
    return 0;
    }
    @@ -1683,15 +1678,12 @@ static int __maybe_unused rtsx_pci_suspend(struct device *dev_d)
    static int __maybe_unused rtsx_pci_resume(struct device *dev_d)
    {
    struct pci_dev *pcidev = to_pci_dev(dev_d);
    - struct pcr_handle *handle;
    - struct rtsx_pcr *pcr;
    + struct pcr_handle *handle = pci_get_drvdata(pcidev);
    + struct rtsx_pcr *pcr = handle->pcr;
    int ret = 0;

    dev_dbg(&(pcidev->dev), "--> %s\n", __func__);

    - handle = pci_get_drvdata(pcidev);
    - pcr = handle->pcr;
    -
    mutex_lock(&pcr->pcr_mutex);

    ret = rtsx_pci_write_register(pcr, HOST_SLEEP_STATE, 0x03, 0x00);
    @@ -1711,13 +1703,11 @@ static int __maybe_unused rtsx_pci_resume(struct device *dev_d)

    static void rtsx_pci_shutdown(struct pci_dev *pcidev)
    {
    - struct pcr_handle *handle;
    - struct rtsx_pcr *pcr;
    + struct pcr_handle *handle = pci_get_drvdata(pcidev);
    + struct rtsx_pcr *pcr = handle->pcr;

    dev_dbg(&(pcidev->dev), "--> %s\n", __func__);

    - handle = pci_get_drvdata(pcidev);
    - pcr = handle->pcr;
    rtsx_pci_power_off(pcr, HOST_ENTER_S1);

    pci_disable_device(pcidev);
    @@ -1756,11 +1746,8 @@ static int rtsx_pci_runtime_idle(struct device *device)
    static int rtsx_pci_runtime_suspend(struct device *device)
    {
    struct pci_dev *pcidev = to_pci_dev(device);
    - struct pcr_handle *handle;
    - struct rtsx_pcr *pcr;
    -
    - handle = pci_get_drvdata(pcidev);
    - pcr = handle->pcr;
    + struct pcr_handle *handle = pci_get_drvdata(pcidev);
    + struct rtsx_pcr *pcr = handle->pcr;

    dev_dbg(device, "--> %s\n", __func__);

    @@ -1786,9 +1773,6 @@ static int rtsx_pci_runtime_resume(struct device *device)

    rtsx_pci_write_register(pcr, HOST_SLEEP_STATE, 0x03, 0x00);

    - if (pcr->ops->fetch_vendor_settings)
    - pcr->ops->fetch_vendor_settings(pcr);
    -
    rtsx_pci_init_hw(pcr);

    if (pcr->slots[RTSX_SD_CARD].p_dev != NULL) {
    --
    2.33.1
    \
     
     \ /
      Last update: 2022-01-24 06:49    [W:2.865 / U:0.460 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site