driver: uart: add wake-up support for uart device.

This CL configures the UART wake-up event triggered from a falling edge
(START condition) on CR_SIN pin. It also includes:

1. Introduce wui_maps property in yaml file to present relationship
   between Wake-Up Input (WUI) and UART device.
2. Implement wake-up mechanism by MIWU api functions.

Signed-off-by: Mulin Chao <MLChao@nuvoton.com>
This commit is contained in:
Mulin Chao 2020-08-14 16:46:30 +08:00 committed by Carles Cufí
commit 288e35ab1a
3 changed files with 30 additions and 0 deletions

View file

@ -7,10 +7,12 @@
#define DT_DRV_COMPAT nuvoton_npcx_uart
#include <assert.h>
#include <drivers/gpio.h>
#include <drivers/uart.h>
#include <drivers/clock_control.h>
#include <kernel.h>
#include <soc.h>
#include "soc_miwu.h"
#include <logging/log.h>
LOG_MODULE_REGISTER(uart_npcx, LOG_LEVEL_ERR);
@ -20,6 +22,8 @@ struct uart_npcx_config {
struct uart_device_config uconf;
/* clock configuration */
struct npcx_clk_cfg clk_cfg;
/* int-mux configuration */
const struct npcx_wui wui_map;
/* pinmux configuration */
const uint8_t alts_size;
const struct npcx_alt *alts_list;
@ -334,6 +338,19 @@ static int uart_npcx_init(struct device *dev)
config->uconf.irq_config_func(dev);
#endif
#if defined(CONFIG_SYS_POWER_DEEP_SLEEP_STATES)
/*
* Configure the UART wake-up event triggered from a falling edge
* on CR_SIN pin. No need for callback function.
*/
soc_miwu_interrupt_configure(&config->wui_map,
NPCX_MIWU_MODE_EDGE, NPCX_MIWU_TRIG_LOW);
/* Enable irq of interrupt-input module */
soc_miwu_irq_enable(&config->wui_map);
#endif
/* Configure pin-mux for uart device */
soc_pinctrl_mux_configure(config->alts_list, config->alts_size, 1);

View file

@ -72,6 +72,7 @@
interrupts = <33 0>;
clocks = <&pcc NPCX_CLOCK_BUS_APB2 NPCX_PWDWN_CTL1 4>;
pinctrl = <&alta_uart1_sl1>; /* PIN10.11 */
wui_map = <&wui_cr_sin1>;
status = "disabled";
label = "UART_1";
};
@ -82,6 +83,7 @@
interrupts = <32 0>;
clocks = <&pcc NPCX_CLOCK_BUS_APB2 NPCX_PWDWN_CTL7 6>;
pinctrl = <&alta_uart2_sl>; /* PIN75.86 */
wui_map = <&wui_cr_sin2>;
status = "disabled";
label = "UART_2";
};

View file

@ -16,3 +16,14 @@ properties:
type: phandles
required: true
description: configurations of pinmux controllers
wui_map:
type: phandle
required: true
description: mapping item between wui and source device
description: |
Mapping table between Wake-Up Input (WUI) and its source device.
For example the WUI mapping on NPCX7 UART1 would be
wui_map = <&wui_cr_sin1>;
required: true