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>
diff --git a/drivers/serial/uart_esp32.c b/drivers/serial/uart_esp32.c
index 14b2c70..f5bcd21 100644
--- a/drivers/serial/uart_esp32.c
+++ b/drivers/serial/uart_esp32.c
@@ -211,14 +211,18 @@
 				 cfg->signals.rx_in,
 				 false);
 
-	esp32_rom_gpio_matrix_out(cfg->pins.cts,
-				  cfg->signals.cts_in,
-				  false,
-				  false);
+	if (cfg->pins.cts) {
+		esp32_rom_gpio_matrix_out(cfg->pins.cts,
+					  cfg->signals.cts_in,
+					  false,
+					  false);
+	}
 
-	esp32_rom_gpio_matrix_in(cfg->pins.rts,
-				 cfg->signals.rts_out,
-				 false);
+	if (cfg->pins.rts) {
+		esp32_rom_gpio_matrix_in(cfg->pins.rts,
+					 cfg->signals.rts_out,
+					 false);
+	}
 
 	return 0;
 }
@@ -472,59 +476,66 @@
 
 #endif
 
-#define ESP32_UART_INIT(idx)								\
-ESP32_UART_IRQ_HANDLER_DECL(idx);						\
-static const struct uart_esp32_config uart_esp32_cfg_port_##idx = {		\
-	.dev_conf = {								\
-		.base = (u8_t *)DT_INST_##idx##_ESPRESSIF_ESP32_UART_BASE_ADDRESS,	\
+#define ESP32_UART_INIT(idx)								      \
+ESP32_UART_IRQ_HANDLER_DECL(idx);							      \
+static const struct uart_esp32_config uart_esp32_cfg_port_##idx = {			      \
+	.dev_conf = {									      \
+		.base = (u8_t *)DT_INST_##idx##_ESPRESSIF_ESP32_UART_BASE_ADDRESS,	      \
 		.sys_clk_freq = DT_INST_0_CADENCE_TENSILICA_XTENSA_LX6_CLOCK_FREQUENCY,	      \
-		ESP32_UART_IRQ_HANDLER_FUNC(idx)				\
-	},									\
-										\
-	.peripheral = {								\
-		.clk = DPORT_UART##idx##_CLK_EN,				\
-		.rst = DPORT_UART##idx##_RST,					\
-	},									\
-										\
-	.signals = {								\
-		.tx_out = U##idx##TXD_OUT_IDX,					\
-		.rx_in = U##idx##RXD_IN_IDX,					\
-		.rts_out = U##idx##RTS_OUT_IDX,					\
-		.cts_in = U##idx##CTS_IN_IDX,					\
-	},									\
-										\
-	.pins = {								\
-		.tx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_TX_PIN,		\
-		.rx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RX_PIN,		\
-		.rts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RTS_PIN,		\
-		.cts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_CTS_PIN,		\
-	},									\
-										\
-	.irq = {								\
-		.source = ETS_UART##idx##_INTR_SOURCE,				\
-		.line = DT_UART_ESP32_PORT_##idx##_IRQ_0,			\
-	}									\
-};										\
-										\
-static struct uart_esp32_data uart_esp32_data_##idx = {				\
-	.uart_config = {							\
-		.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,				\
-		.flow_ctrl = UART_CFG_FLOW_CTRL_NONE				\
-	}									\
-};										\
-										\
-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_FUNC(idx)					      \
+	},										      \
+											      \
+	.peripheral = {									      \
+		.clk = DPORT_UART##idx##_CLK_EN,					      \
+		.rst = DPORT_UART##idx##_RST,						      \
+	},										      \
+											      \
+	.signals = {									      \
+		.tx_out = U##idx##TXD_OUT_IDX,						      \
+		.rx_in = U##idx##RXD_IN_IDX,						      \
+		.rts_out = U##idx##RTS_OUT_IDX,						      \
+		.cts_in = U##idx##CTS_IN_IDX,						      \
+	},										      \
+											      \
+	.pins = {									      \
+		.tx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_TX_PIN,			      \
+		.rx = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RX_PIN,			      \
+		COND_CODE_1(IS_ENABLED(DT_INST_##idx##_ESPRESSIF_ESP32_UART_HW_FLOW_CONTROL), \
+			    (.rts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_RTS_PIN,	      \
+			     .cts = DT_INST_##idx##_ESPRESSIF_ESP32_UART_CTS_PIN,	      \
+			    ),								      \
+			    (.rts = 0,							      \
+			     .cts = 0							      \
+			    ))								      \
+	},										      \
+											      \
+	.irq = {									      \
+		.source = ETS_UART##idx##_INTR_SOURCE,					      \
+		.line = DT_UART_ESP32_PORT_##idx##_IRQ_0,				      \
+	}										      \
+};											      \
+											      \
+static struct uart_esp32_data uart_esp32_data_##idx = {					      \
+	.uart_config = {								      \
+		.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,					      \
+		COND_CODE_1(IS_ENABLED(DT_INST_##idx##_ESPRESSIF_ESP32_UART_HW_FLOW_CONTROL), \
+			    (.flow_ctrl = UART_CFG_FLOW_CTRL_RTS_CTS),			      \
+			    (.flow_ctrl = UART_CFG_FLOW_CTRL_NONE))			      \
+	}										      \
+};											      \
+											      \
+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)
 
 #ifdef DT_INST_0_ESPRESSIF_ESP32_UART