From ce4cc465fcfa1e7fc7a75bd49dac4492e33555eb Mon Sep 17 00:00:00 2001 From: Christoph Schramm Date: Fri, 7 Jun 2019 17:51:30 +0200 Subject: [PATCH] driver: modem: add simple power management to modem receiver As modem receiver is using UART, it requires disabling of the UART and its callbacks to save power. This adds simple sleep/wake functions which should be called from defined device_pm functions in modem drivers later. Signed-off-by: Christoph Schramm --- drivers/modem/modem_receiver.c | 19 +++++++++++++++++++ drivers/modem/modem_receiver.h | 4 ++++ 2 files changed, 23 insertions(+) diff --git a/drivers/modem/modem_receiver.c b/drivers/modem/modem_receiver.c index 1a26cb696ec..d7799566125 100644 --- a/drivers/modem/modem_receiver.c +++ b/drivers/modem/modem_receiver.c @@ -193,6 +193,25 @@ int mdm_receiver_send(struct mdm_receiver_context *ctx, return 0; } +int mdm_receiver_sleep(struct mdm_receiver_context *ctx) +{ + uart_irq_rx_disable(ctx->uart_dev); +#ifdef DEVICE_PM_LOW_POWER_STATE + device_set_power_state(ctx->uart_dev, DEVICE_PM_LOW_POWER_STATE, NULL, NULL); +#endif + return 0; +} + +int mdm_receiver_wake(struct mdm_receiver_context *ctx) +{ +#ifdef DEVICE_PM_LOW_POWER_STATE + device_set_power_state(ctx->uart_dev, DEVICE_PM_ACTIVE_STATE, NULL, NULL); +#endif + uart_irq_rx_enable(ctx->uart_dev); + + return 0; +} + int mdm_receiver_register(struct mdm_receiver_context *ctx, const char *uart_dev_name, u8_t *buf, size_t size) diff --git a/drivers/modem/modem_receiver.h b/drivers/modem/modem_receiver.h index 73a02075e8f..2820b568a80 100644 --- a/drivers/modem/modem_receiver.h +++ b/drivers/modem/modem_receiver.h @@ -86,6 +86,10 @@ int mdm_receiver_register(struct mdm_receiver_context *ctx, const char *uart_dev_name, u8_t *buf, size_t size); +int mdm_receiver_sleep(struct mdm_receiver_context *ctx); + +int mdm_receiver_wake(struct mdm_receiver_context *ctx); + #ifdef __cplusplus } #endif