lkml.org 
[lkml]   [2018]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 48/52] HID: intel_ish-hid: ipc: register more pm callbacks to support hibernation
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Even Xu <even.xu@intel.com>

    commit ebeaa367548e9e92dd9374b9464ff6e7d157117b upstream.

    Current ISH driver only registers suspend/resume PM callbacks which don't
    support hibernation (suspend to disk). Basically after hiberation, the ISH
    can't resume properly and user may not see sensor events (for example: screen
    rotation may not work).

    User will not see a crash or panic or anything except the following message
    in log:

    hid-sensor-hub 001F:8086:22D8.0001: timeout waiting for response from ISHTP device

    So this patch adds support for S4/hiberbation to ISH by using the
    SIMPLE_DEV_PM_OPS() MACRO instead of struct dev_pm_ops directly. The suspend
    and resume functions will now be used for both suspend to RAM and hibernation.

    If power management is disabled, SIMPLE_DEV_PM_OPS will do nothing, the suspend
    and resume related functions won't be used, so mark them as __maybe_unused to
    clarify that this is the intended behavior, and remove #ifdefs for power
    management.

    Cc: stable@vger.kernel.org
    Signed-off-by: Even Xu <even.xu@intel.com>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/hid/intel-ish-hid/ipc/pci-ish.c | 22 +++++++---------------
    1 file changed, 7 insertions(+), 15 deletions(-)

    --- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
    +++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
    @@ -204,8 +204,7 @@ static void ish_remove(struct pci_dev *p
    kfree(ishtp_dev);
    }

    -#ifdef CONFIG_PM
    -static struct device *ish_resume_device;
    +static struct device __maybe_unused *ish_resume_device;

    /* 50ms to get resume response */
    #define WAIT_FOR_RESUME_ACK_MS 50
    @@ -219,7 +218,7 @@ static struct device *ish_resume_device;
    * in that case a simple resume message is enough, others we need
    * a reset sequence.
    */
    -static void ish_resume_handler(struct work_struct *work)
    +static void __maybe_unused ish_resume_handler(struct work_struct *work)
    {
    struct pci_dev *pdev = to_pci_dev(ish_resume_device);
    struct ishtp_device *dev = pci_get_drvdata(pdev);
    @@ -261,7 +260,7 @@ static void ish_resume_handler(struct wo
    *
    * Return: 0 to the pm core
    */
    -static int ish_suspend(struct device *device)
    +static int __maybe_unused ish_suspend(struct device *device)
    {
    struct pci_dev *pdev = to_pci_dev(device);
    struct ishtp_device *dev = pci_get_drvdata(pdev);
    @@ -287,7 +286,7 @@ static int ish_suspend(struct device *de
    return 0;
    }

    -static DECLARE_WORK(resume_work, ish_resume_handler);
    +static __maybe_unused DECLARE_WORK(resume_work, ish_resume_handler);
    /**
    * ish_resume() - ISH resume callback
    * @device: device pointer
    @@ -296,7 +295,7 @@ static DECLARE_WORK(resume_work, ish_res
    *
    * Return: 0 to the pm core
    */
    -static int ish_resume(struct device *device)
    +static int __maybe_unused ish_resume(struct device *device)
    {
    struct pci_dev *pdev = to_pci_dev(device);
    struct ishtp_device *dev = pci_get_drvdata(pdev);
    @@ -310,21 +309,14 @@ static int ish_resume(struct device *dev
    return 0;
    }

    -static const struct dev_pm_ops ish_pm_ops = {
    - .suspend = ish_suspend,
    - .resume = ish_resume,
    -};
    -#define ISHTP_ISH_PM_OPS (&ish_pm_ops)
    -#else
    -#define ISHTP_ISH_PM_OPS NULL
    -#endif /* CONFIG_PM */
    +static SIMPLE_DEV_PM_OPS(ish_pm_ops, ish_suspend, ish_resume);

    static struct pci_driver ish_driver = {
    .name = KBUILD_MODNAME,
    .id_table = ish_pci_tbl,
    .probe = ish_probe,
    .remove = ish_remove,
    - .driver.pm = ISHTP_ISH_PM_OPS,
    + .driver.pm = &ish_pm_ops,
    };

    module_pci_driver(ish_driver);

    \
     
     \ /
      Last update: 2018-06-24 18:16    [W:2.628 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site