Message ID | 20240812184150.1079924-1-mmaslanka@google.com (mailing list archive) |
---|---|
State | Handled Elsewhere, archived |
Headers | show |
Series | [v6,1/2] clocksource: acpi_pm: Add external callback for suspend/resume | expand |
Hi, On 8/12/24 8:41 PM, Marek Maslanka wrote: > Provides the capability to register an external callback for the ACPI PM > timer, which is called during the suspend and resume processes. > > Signed-off-by: Marek Maslanka <mmaslanka@google.com> Thanks, patch looks good to me: Reviewed-by: Hans de Goede <hdegoede@redhat.com> Regards, Hans > > --- > Changes in v6: > - Add the acpi_pmtmr_unregister_suspend_resume_callback function to remove callback > - Add EXPORT_SYMBOL_GPL to the added functions > - Link to v5: https://lore.kernel.org/lkml/20240812043741.3434744-1-mmaslanka@google.com/ > --- > --- > drivers/clocksource/acpi_pm.c | 32 ++++++++++++++++++++++++++++++++ > include/linux/acpi_pmtmr.h | 13 +++++++++++++ > 2 files changed, 45 insertions(+) > > diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c > index 82338773602ca..b4330a01a566b 100644 > --- a/drivers/clocksource/acpi_pm.c > +++ b/drivers/clocksource/acpi_pm.c > @@ -25,6 +25,10 @@ > #include <asm/io.h> > #include <asm/time.h> > > +static void *suspend_resume_cb_data; > + > +static void (*suspend_resume_callback)(void *data, bool suspend); > + > /* > * The I/O port the PMTMR resides at. > * The location is detected during setup_arch(), > @@ -58,6 +62,32 @@ u32 acpi_pm_read_verified(void) > return v2; > } > > +void acpi_pmtmr_register_suspend_resume_callback(void (*cb)(void *data, bool suspend), void *data) > +{ > + suspend_resume_callback = cb; > + suspend_resume_cb_data = data; > +} > +EXPORT_SYMBOL_GPL(acpi_pmtmr_register_suspend_resume_callback); > + > +void acpi_pmtmr_unregister_suspend_resume_callback(void) > +{ > + suspend_resume_callback = NULL; > + suspend_resume_cb_data = NULL; > +} > +EXPORT_SYMBOL_GPL(acpi_pmtmr_unregister_suspend_resume_callback); > + > +static void acpi_pm_suspend(struct clocksource *cs) > +{ > + if (suspend_resume_callback) > + suspend_resume_callback(suspend_resume_cb_data, true); > +} > + > +static void acpi_pm_resume(struct clocksource *cs) > +{ > + if (suspend_resume_callback) > + suspend_resume_callback(suspend_resume_cb_data, false); > +} > + > static u64 acpi_pm_read(struct clocksource *cs) > { > return (u64)read_pmtmr(); > @@ -69,6 +99,8 @@ static struct clocksource clocksource_acpi_pm = { > .read = acpi_pm_read, > .mask = (u64)ACPI_PM_MASK, > .flags = CLOCK_SOURCE_IS_CONTINUOUS, > + .suspend = acpi_pm_suspend, > + .resume = acpi_pm_resume, > }; > > > diff --git a/include/linux/acpi_pmtmr.h b/include/linux/acpi_pmtmr.h > index 50d88bf1498d7..0ded9220d379c 100644 > --- a/include/linux/acpi_pmtmr.h > +++ b/include/linux/acpi_pmtmr.h > @@ -26,6 +26,19 @@ static inline u32 acpi_pm_read_early(void) > return acpi_pm_read_verified() & ACPI_PM_MASK; > } > > +/** > + * Register callback for suspend and resume event > + * > + * @cb Callback triggered on suspend and resume > + * @data Data passed with the callback > + */ > +void acpi_pmtmr_register_suspend_resume_callback(void (*cb)(void *data, bool suspend), void *data); > + > +/** > + * Remove registered callback for suspend and resume event > + */ > +void acpi_pmtmr_unregister_suspend_resume_callback(void); > + > #else > > static inline u32 acpi_pm_read_early(void)
Hi, On 8/12/24 8:41 PM, Marek Maslanka wrote: > Provides the capability to register an external callback for the ACPI PM > timer, which is called during the suspend and resume processes. > > Signed-off-by: Marek Maslanka <mmaslanka@google.com> Daniel / Thomas I believe this series is ready for merging now, do you want to merge this through the tree for drivers/clocksource ? Or shall I merge this through the platform-drivers-x86 tree ? In case of the latter may I please have your Acked-by for patch 1/2 for ths ? Regards, Hans > > --- > Changes in v6: > - Add the acpi_pmtmr_unregister_suspend_resume_callback function to remove callback > - Add EXPORT_SYMBOL_GPL to the added functions > - Link to v5: https://lore.kernel.org/lkml/20240812043741.3434744-1-mmaslanka@google.com/ > --- > --- > drivers/clocksource/acpi_pm.c | 32 ++++++++++++++++++++++++++++++++ > include/linux/acpi_pmtmr.h | 13 +++++++++++++ > 2 files changed, 45 insertions(+) > > diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c > index 82338773602ca..b4330a01a566b 100644 > --- a/drivers/clocksource/acpi_pm.c > +++ b/drivers/clocksource/acpi_pm.c > @@ -25,6 +25,10 @@ > #include <asm/io.h> > #include <asm/time.h> > > +static void *suspend_resume_cb_data; > + > +static void (*suspend_resume_callback)(void *data, bool suspend); > + > /* > * The I/O port the PMTMR resides at. > * The location is detected during setup_arch(), > @@ -58,6 +62,32 @@ u32 acpi_pm_read_verified(void) > return v2; > } > > +void acpi_pmtmr_register_suspend_resume_callback(void (*cb)(void *data, bool suspend), void *data) > +{ > + suspend_resume_callback = cb; > + suspend_resume_cb_data = data; > +} > +EXPORT_SYMBOL_GPL(acpi_pmtmr_register_suspend_resume_callback); > + > +void acpi_pmtmr_unregister_suspend_resume_callback(void) > +{ > + suspend_resume_callback = NULL; > + suspend_resume_cb_data = NULL; > +} > +EXPORT_SYMBOL_GPL(acpi_pmtmr_unregister_suspend_resume_callback); > + > +static void acpi_pm_suspend(struct clocksource *cs) > +{ > + if (suspend_resume_callback) > + suspend_resume_callback(suspend_resume_cb_data, true); > +} > + > +static void acpi_pm_resume(struct clocksource *cs) > +{ > + if (suspend_resume_callback) > + suspend_resume_callback(suspend_resume_cb_data, false); > +} > + > static u64 acpi_pm_read(struct clocksource *cs) > { > return (u64)read_pmtmr(); > @@ -69,6 +99,8 @@ static struct clocksource clocksource_acpi_pm = { > .read = acpi_pm_read, > .mask = (u64)ACPI_PM_MASK, > .flags = CLOCK_SOURCE_IS_CONTINUOUS, > + .suspend = acpi_pm_suspend, > + .resume = acpi_pm_resume, > }; > > > diff --git a/include/linux/acpi_pmtmr.h b/include/linux/acpi_pmtmr.h > index 50d88bf1498d7..0ded9220d379c 100644 > --- a/include/linux/acpi_pmtmr.h > +++ b/include/linux/acpi_pmtmr.h > @@ -26,6 +26,19 @@ static inline u32 acpi_pm_read_early(void) > return acpi_pm_read_verified() & ACPI_PM_MASK; > } > > +/** > + * Register callback for suspend and resume event > + * > + * @cb Callback triggered on suspend and resume > + * @data Data passed with the callback > + */ > +void acpi_pmtmr_register_suspend_resume_callback(void (*cb)(void *data, bool suspend), void *data); > + > +/** > + * Remove registered callback for suspend and resume event > + */ > +void acpi_pmtmr_unregister_suspend_resume_callback(void); > + > #else > > static inline u32 acpi_pm_read_early(void)
On 19/08/2024 13:35, Hans de Goede wrote: > Hi, > > On 8/12/24 8:41 PM, Marek Maslanka wrote: >> Provides the capability to register an external callback for the ACPI PM >> timer, which is called during the suspend and resume processes. >> >> Signed-off-by: Marek Maslanka <mmaslanka@google.com> > > Daniel / Thomas I believe this series is ready for merging now, > do you want to merge this through the tree for drivers/clocksource ? > > Or shall I merge this through the platform-drivers-x86 tree ? > > In case of the latter may I please have your Acked-by for patch 1/2 for ths ? I'll pick them, thanks
diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c index 82338773602ca..b4330a01a566b 100644 --- a/drivers/clocksource/acpi_pm.c +++ b/drivers/clocksource/acpi_pm.c @@ -25,6 +25,10 @@ #include <asm/io.h> #include <asm/time.h> +static void *suspend_resume_cb_data; + +static void (*suspend_resume_callback)(void *data, bool suspend); + /* * The I/O port the PMTMR resides at. * The location is detected during setup_arch(), @@ -58,6 +62,32 @@ u32 acpi_pm_read_verified(void) return v2; } +void acpi_pmtmr_register_suspend_resume_callback(void (*cb)(void *data, bool suspend), void *data) +{ + suspend_resume_callback = cb; + suspend_resume_cb_data = data; +} +EXPORT_SYMBOL_GPL(acpi_pmtmr_register_suspend_resume_callback); + +void acpi_pmtmr_unregister_suspend_resume_callback(void) +{ + suspend_resume_callback = NULL; + suspend_resume_cb_data = NULL; +} +EXPORT_SYMBOL_GPL(acpi_pmtmr_unregister_suspend_resume_callback); + +static void acpi_pm_suspend(struct clocksource *cs) +{ + if (suspend_resume_callback) + suspend_resume_callback(suspend_resume_cb_data, true); +} + +static void acpi_pm_resume(struct clocksource *cs) +{ + if (suspend_resume_callback) + suspend_resume_callback(suspend_resume_cb_data, false); +} + static u64 acpi_pm_read(struct clocksource *cs) { return (u64)read_pmtmr(); @@ -69,6 +99,8 @@ static struct clocksource clocksource_acpi_pm = { .read = acpi_pm_read, .mask = (u64)ACPI_PM_MASK, .flags = CLOCK_SOURCE_IS_CONTINUOUS, + .suspend = acpi_pm_suspend, + .resume = acpi_pm_resume, }; diff --git a/include/linux/acpi_pmtmr.h b/include/linux/acpi_pmtmr.h index 50d88bf1498d7..0ded9220d379c 100644 --- a/include/linux/acpi_pmtmr.h +++ b/include/linux/acpi_pmtmr.h @@ -26,6 +26,19 @@ static inline u32 acpi_pm_read_early(void) return acpi_pm_read_verified() & ACPI_PM_MASK; } +/** + * Register callback for suspend and resume event + * + * @cb Callback triggered on suspend and resume + * @data Data passed with the callback + */ +void acpi_pmtmr_register_suspend_resume_callback(void (*cb)(void *data, bool suspend), void *data); + +/** + * Remove registered callback for suspend and resume event + */ +void acpi_pmtmr_unregister_suspend_resume_callback(void); + #else static inline u32 acpi_pm_read_early(void)
Provides the capability to register an external callback for the ACPI PM timer, which is called during the suspend and resume processes. Signed-off-by: Marek Maslanka <mmaslanka@google.com> --- Changes in v6: - Add the acpi_pmtmr_unregister_suspend_resume_callback function to remove callback - Add EXPORT_SYMBOL_GPL to the added functions - Link to v5: https://lore.kernel.org/lkml/20240812043741.3434744-1-mmaslanka@google.com/ --- --- drivers/clocksource/acpi_pm.c | 32 ++++++++++++++++++++++++++++++++ include/linux/acpi_pmtmr.h | 13 +++++++++++++ 2 files changed, 45 insertions(+)