extcon: axp288: Add wakeup support
commit 9c94553099
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.
Cc: stable@vger.kernel.org
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
5.4-rM2-2.2.x-imx-squashed
parent
4d60b72514
commit
899c38d930
|
@ -423,9 +423,40 @@ static int axp288_extcon_probe(struct platform_device *pdev)
|
||||||
/* Start charger cable type detection */
|
/* Start charger cable type detection */
|
||||||
axp288_extcon_enable(info);
|
axp288_extcon_enable(info);
|
||||||
|
|
||||||
|
device_init_wakeup(dev, true);
|
||||||
|
platform_set_drvdata(pdev, info);
|
||||||
|
|
||||||
return 0;
|
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[] = {
|
static const struct platform_device_id axp288_extcon_table[] = {
|
||||||
{ .name = "axp288_extcon" },
|
{ .name = "axp288_extcon" },
|
||||||
{},
|
{},
|
||||||
|
@ -437,6 +468,7 @@ static struct platform_driver axp288_extcon_driver = {
|
||||||
.id_table = axp288_extcon_table,
|
.id_table = axp288_extcon_table,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "axp288_extcon",
|
.name = "axp288_extcon",
|
||||||
|
.pm = &axp288_extcon_pm_ops,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue