[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200412203149.GA5796@duo.ucw.cz>
Date: Sun, 12 Apr 2020 22:31:49 +0200
From: Pavel Machek <pavel@...x.de>
To: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Cc: linux-kernel@...r.kernel.org, stable@...r.kernel.org,
Hans de Goede <hdegoede@...hat.com>,
Chanwoo Choi <cw00.choi@...sung.com>
Subject: Re: [PATCH 4.19 19/54] extcon: axp288: Add wakeup support
Hi!
> commit 9c94553099efb2ba873cbdddfd416a8a09d0e5f1 upstream.
>
> On devices with an AXP288, we need to wakeup from suspend when a charger
> is plugged in, so that we can do charger-type detection and so that the
> axp288-charger driver, which listens for our extcon events, can configure
> the input-current-limit accordingly.
Will it do the same on charger disconnect?
Is that a tiny bit anti-social? I suspend a machine, unplug a charger,
put it into a bag.. but machine is now running.
On some machines (sharp zaurus) we catch such wakeups, do whatever
charging magic we need to do, and put machine back to sleep, so that
user does not see the wakeups (and so that we don't drain the
battery).
Best regards,
Pavel
> --- a/drivers/extcon/extcon-axp288.c
> +++ b/drivers/extcon/extcon-axp288.c
> @@ -428,9 +428,40 @@ static int axp288_extcon_probe(struct pl
> /* Start charger cable type detection */
> axp288_extcon_enable(info);
>
> + device_init_wakeup(dev, true);
> + platform_set_drvdata(pdev, info);
> +
> + return 0;
> +}
> +
> +static int __maybe_unused axp288_extcon_suspend(struct device *dev)
> +{
> + struct axp288_extcon_info *info = dev_get_drvdata(dev);
> +
> + if (device_may_wakeup(dev))
> + enable_irq_wake(info->irq[VBUS_RISING_IRQ]);
> +
> return 0;
> }
>
> +static int __maybe_unused axp288_extcon_resume(struct device *dev)
> +{
> + struct axp288_extcon_info *info = dev_get_drvdata(dev);
> +
> + /*
> + * Wakeup when a charger is connected to do charger-type
> + * connection and generate an extcon event which makes the
> + * axp288 charger driver set the input current limit.
> + */
> + if (device_may_wakeup(dev))
> + disable_irq_wake(info->irq[VBUS_RISING_IRQ]);
> +
> + return 0;
> +}
> +
> +static SIMPLE_DEV_PM_OPS(axp288_extcon_pm_ops, axp288_extcon_suspend,
> + axp288_extcon_resume);
> +
> static const struct platform_device_id axp288_extcon_table[] = {
> { .name = "axp288_extcon" },
> {},
> @@ -442,6 +473,7 @@ static struct platform_driver axp288_ext
> .id_table = axp288_extcon_table,
> .driver = {
> .name = "axp288_extcon",
> + .pm = &axp288_extcon_pm_ops,
> },
> };
>
>
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Download attachment "signature.asc" of type "application/pgp-signature" (196 bytes)
Powered by blists - more mailing lists