drivers: esp32: UART - use dts config for HW flow Control

- dts updated for UART1/2
- Additional check added to _INIT macro to configure flow control mode
- Additional check added to _INIT macro to set CTS/RTS gpios values
- Additional check added for gpio config

Signed-off-by: Mohamed ElShahawi <ExtremeGTX@hotmail.com>
This commit is contained in:
Mohamed ElShahawi 2019-08-23 00:53:22 +02:00 committed by Kumar Gala
commit bcd9e49f3f
2 changed files with 72 additions and 59 deletions

View file

@ -45,6 +45,7 @@
rx-pin = <9>; rx-pin = <9>;
rts-pin = <11>; rts-pin = <11>;
cts-pin = <6>; cts-pin = <6>;
hw-flow-control;
}; };
&uart2 { &uart2 {
@ -53,4 +54,5 @@
rx-pin = <16>; rx-pin = <16>;
rts-pin = <7>; rts-pin = <7>;
cts-pin = <8>; cts-pin = <8>;
hw-flow-control;
}; };

View file

@ -211,14 +211,18 @@ static int uart_esp32_configure_pins(struct device *dev)
cfg->signals.rx_in, cfg->signals.rx_in,
false); false);
esp32_rom_gpio_matrix_out(cfg->pins.cts, if (cfg->pins.cts) {
cfg->signals.cts_in, esp32_rom_gpio_matrix_out(cfg->pins.cts,
false, cfg->signals.cts_in,
false); false,
false);
}
esp32_rom_gpio_matrix_in(cfg->pins.rts, if (cfg->pins.rts) {
cfg->signals.rts_out, esp32_rom_gpio_matrix_in(cfg->pins.rts,
false); cfg->signals.rts_out,
false);
}
return 0; return 0;
} }
@ -472,59 +476,66 @@ static const struct uart_driver_api uart_esp32_api = {
#endif #endif
#define ESP32_UART_INIT(idx) \ #define ESP32_UART_INIT(idx) \
ESP32_UART_IRQ_HANDLER_DECL(idx); \ ESP32_UART_IRQ_HANDLER_DECL(idx); \
static const struct uart_esp32_config uart_esp32_cfg_port_##idx = { \ static const struct uart_esp32_config uart_esp32_cfg_port_##idx = { \
.dev_conf = { \ .dev_conf = { \
.base = (u8_t *)DT_INST_##idx##_ESPRESSIF_ESP32_UART_BASE_ADDRESS, \ .base = (u8_t *)DT_INST_##idx##_ESPRESSIF_ESP32_UART_BASE_ADDRESS, \
.sys_clk_freq = DT_INST_0_CADENCE_TENSILICA_XTENSA_LX6_CLOCK_FREQUENCY, \ .sys_clk_freq = DT_INST_0_CADENCE_TENSILICA_XTENSA_LX6_CLOCK_FREQUENCY, \
ESP32_UART_IRQ_HANDLER_FUNC(idx) \ ESP32_UART_IRQ_HANDLER_FUNC(idx) \
}, \ }, \
\ \
.peripheral = { \ .peripheral = { \
.clk = DPORT_UART##idx##_CLK_EN, \ .clk = DPORT_UART##idx##_CLK_EN, \
.rst = DPORT_UART##idx##_RST, \ .rst = DPORT_UART##idx##_RST, \
}, \ }, \
\ \
.signals = { \ .signals = { \
.tx_out = U##idx##TXD_OUT_IDX, \ .tx_out = U##idx##TXD_OUT_IDX, \
.rx_in = U##idx##RXD_IN_IDX, \ .rx_in = U##idx##RXD_IN_IDX, \
.rts_out = U##idx##RTS_OUT_IDX, \ .rts_out = U##idx##RTS_OUT_IDX, \
.cts_in = U##idx##CTS_IN_IDX, \ .cts_in = U##idx##CTS_IN_IDX, \
}, \ }, \
\ \
.pins = { \ .pins = { \
.tx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_TX_PIN, \ .tx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_TX_PIN, \
.rx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RX_PIN, \ .rx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RX_PIN, \
.rts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RTS_PIN, \ COND_CODE_1(IS_ENABLED(DT_INST_##idx##_ESPRESSIF_ESP32_UART_HW_FLOW_CONTROL), \
.cts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_CTS_PIN, \ (.rts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RTS_PIN, \
}, \ .cts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_CTS_PIN, \
\ ), \
.irq = { \ (.rts = 0, \
.source = ETS_UART##idx##_INTR_SOURCE, \ .cts = 0 \
.line = DT_UART_ESP32_PORT_##idx##_IRQ_0, \ )) \
} \ }, \
}; \ \
\ .irq = { \
static struct uart_esp32_data uart_esp32_data_##idx = { \ .source = ETS_UART##idx##_INTR_SOURCE, \
.uart_config = { \ .line = DT_UART_ESP32_PORT_##idx##_IRQ_0, \
.baudrate = DT_INST_##idx##_ESPRESSIF_ESP32_UART_CURRENT_SPEED, \ } \
.parity = UART_CFG_PARITY_NONE, \ }; \
.stop_bits = UART_CFG_STOP_BITS_1, \ \
.data_bits = UART_CFG_DATA_BITS_8, \ static struct uart_esp32_data uart_esp32_data_##idx = { \
.flow_ctrl = UART_CFG_FLOW_CTRL_NONE \ .uart_config = { \
} \ .baudrate = DT_INST_##idx##_ESPRESSIF_ESP32_UART_CURRENT_SPEED, \
}; \ .parity = UART_CFG_PARITY_NONE, \
\ .stop_bits = UART_CFG_STOP_BITS_1, \
DEVICE_AND_API_INIT(uart_esp32_##idx, \ .data_bits = UART_CFG_DATA_BITS_8, \
DT_INST_##idx##_ESPRESSIF_ESP32_UART_LABEL, \ COND_CODE_1(IS_ENABLED(DT_INST_##idx##_ESPRESSIF_ESP32_UART_HW_FLOW_CONTROL), \
uart_esp32_init, \ (.flow_ctrl = UART_CFG_FLOW_CTRL_RTS_CTS), \
&uart_esp32_data_##idx, \ (.flow_ctrl = UART_CFG_FLOW_CTRL_NONE)) \
&uart_esp32_cfg_port_##idx, \ } \
PRE_KERNEL_1, \ }; \
CONFIG_KERNEL_INIT_PRIORITY_DEVICE, \ \
&uart_esp32_api); \ DEVICE_AND_API_INIT(uart_esp32_##idx, \
\ DT_INST_##idx##_ESPRESSIF_ESP32_UART_LABEL, \
uart_esp32_init, \
&uart_esp32_data_##idx, \
&uart_esp32_cfg_port_##idx, \
PRE_KERNEL_1, \
CONFIG_KERNEL_INIT_PRIORITY_DEVICE, \
&uart_esp32_api); \
\
ESP32_UART_IRQ_HANDLER(idx) ESP32_UART_IRQ_HANDLER(idx)
#ifdef DT_INST_0_ESPRESSIF_ESP32_UART #ifdef DT_INST_0_ESPRESSIF_ESP32_UART