Message ID | 20240630165304.323095-1-wahrenst@gmx.net (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | ARM: bcm2835: Implement initial S2Idle for Raspberry Pi | expand |
On 6/30/2024 5:53 PM, Stefan Wahren wrote: > This adds suspend/resume support for the 8250_bcm2835aux > driver to provide power management support on attached > devices. > > Signed-off-by: Stefan Wahren <wahrenst@gmx.net> > --- > > Since i don't have a RS485 setup, any test feedback would be great. > > drivers/tty/serial/8250/8250_bcm2835aux.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/drivers/tty/serial/8250/8250_bcm2835aux.c b/drivers/tty/serial/8250/8250_bcm2835aux.c > index 121a5ce86050..cccd2a09cb6f 100644 > --- a/drivers/tty/serial/8250/8250_bcm2835aux.c > +++ b/drivers/tty/serial/8250/8250_bcm2835aux.c > @@ -213,11 +213,34 @@ static const struct acpi_device_id bcm2835aux_serial_acpi_match[] = { > }; > MODULE_DEVICE_TABLE(acpi, bcm2835aux_serial_acpi_match); > > +static int __maybe_unused bcm2835aux_suspend(struct device *dev) > +{ > + struct bcm2835aux_data *data = dev_get_drvdata(dev); > + > + serial8250_suspend_port(data->line); Don't you also need to disable the clock here, unless the device is a wake-up source, and conversely re-enable the clock upon resume?
Hi Florian, Am 04.07.24 um 16:12 schrieb Florian Fainelli: > > > On 6/30/2024 5:53 PM, Stefan Wahren wrote: >> This adds suspend/resume support for the 8250_bcm2835aux >> driver to provide power management support on attached >> devices. >> >> Signed-off-by: Stefan Wahren <wahrenst@gmx.net> >> --- >> >> Since i don't have a RS485 setup, any test feedback would be great. >> >> drivers/tty/serial/8250/8250_bcm2835aux.c | 23 +++++++++++++++++++++++ >> 1 file changed, 23 insertions(+) >> >> diff --git a/drivers/tty/serial/8250/8250_bcm2835aux.c >> b/drivers/tty/serial/8250/8250_bcm2835aux.c >> index 121a5ce86050..cccd2a09cb6f 100644 >> --- a/drivers/tty/serial/8250/8250_bcm2835aux.c >> +++ b/drivers/tty/serial/8250/8250_bcm2835aux.c >> @@ -213,11 +213,34 @@ static const struct acpi_device_id >> bcm2835aux_serial_acpi_match[] = { >> }; >> MODULE_DEVICE_TABLE(acpi, bcm2835aux_serial_acpi_match); >> >> +static int __maybe_unused bcm2835aux_suspend(struct device *dev) >> +{ >> + struct bcm2835aux_data *data = dev_get_drvdata(dev); >> + >> + serial8250_suspend_port(data->line); > > Don't you also need to disable the clock here, unless the device is a > wake-up source, and conversely re-enable the clock upon resume? at first I experiment with the pm implementation from 8250_uniphier.c, but this didn't work as soon as I drop "no_console_suspend" from the Kernel cmdline. Maybe that's the wrong pattern.
diff --git a/drivers/tty/serial/8250/8250_bcm2835aux.c b/drivers/tty/serial/8250/8250_bcm2835aux.c index 121a5ce86050..cccd2a09cb6f 100644 --- a/drivers/tty/serial/8250/8250_bcm2835aux.c +++ b/drivers/tty/serial/8250/8250_bcm2835aux.c @@ -213,11 +213,34 @@ static const struct acpi_device_id bcm2835aux_serial_acpi_match[] = { }; MODULE_DEVICE_TABLE(acpi, bcm2835aux_serial_acpi_match); +static int __maybe_unused bcm2835aux_suspend(struct device *dev) +{ + struct bcm2835aux_data *data = dev_get_drvdata(dev); + + serial8250_suspend_port(data->line); + + return 0; +} + +static int __maybe_unused bcm2835aux_resume(struct device *dev) +{ + struct bcm2835aux_data *data = dev_get_drvdata(dev); + + serial8250_resume_port(data->line); + + return 0; +} + +static const struct dev_pm_ops bcm2835aux_dev_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(bcm2835aux_suspend, bcm2835aux_resume) +}; + static struct platform_driver bcm2835aux_serial_driver = { .driver = { .name = "bcm2835-aux-uart", .of_match_table = bcm2835aux_serial_match, .acpi_match_table = bcm2835aux_serial_acpi_match, + .pm = &bcm2835aux_dev_pm_ops, }, .probe = bcm2835aux_serial_probe, .remove_new = bcm2835aux_serial_remove,
This adds suspend/resume support for the 8250_bcm2835aux driver to provide power management support on attached devices. Signed-off-by: Stefan Wahren <wahrenst@gmx.net> --- Since i don't have a RS485 setup, any test feedback would be great. drivers/tty/serial/8250/8250_bcm2835aux.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) -- 2.34.1