drivers: serial: cc32xx: add support for pinctrl

Driver will configure pins using the pinctrl API now.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
This commit is contained in:
Gerard Marull-Paretas 2023-06-12 13:58:36 +02:00 committed by Anas Nashif
commit ecc241e0ce
2 changed files with 11 additions and 0 deletions

View file

@ -6,5 +6,6 @@ config UART_CC32XX
depends on DT_HAS_TI_CC32XX_UART_ENABLED
select SERIAL_HAS_DRIVER
select SERIAL_SUPPORT_INTERRUPT
select PINCTRL
help
This option enables the CC32XX UART driver, for UART_0.

View file

@ -9,6 +9,7 @@
#include <zephyr/kernel.h>
#include <zephyr/arch/cpu.h>
#include <zephyr/drivers/uart.h>
#include <zephyr/drivers/pinctrl.h>
/* Driverlib includes */
#include <inc/hw_types.h>
@ -21,6 +22,7 @@
struct uart_cc32xx_dev_config {
unsigned long base;
uint32_t sys_clk_freq;
const struct pinctrl_dev_config *pcfg;
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
uart_irq_config_func_t irq_config_func;
#endif
@ -53,12 +55,18 @@ static int uart_cc32xx_init(const struct device *dev)
{
const struct uart_cc32xx_dev_config *config = dev->config;
const struct uart_cc32xx_dev_data_t *data = dev->data;
int ret;
MAP_PRCMPeripheralClkEnable(data->prcm,
PRCM_RUN_MODE_CLK | PRCM_SLP_MODE_CLK);
MAP_PRCMPeripheralReset(data->prcm);
ret = pinctrl_apply_state(config->pcfg, PINCTRL_STATE_DEFAULT);
if (ret < 0) {
return ret;
}
/* This also calls MAP_UARTEnable() to enable the FIFOs: */
MAP_UARTConfigSetExpClk(config->base,
MAP_PRCMPeripheralClockGet(data->prcm),
@ -305,6 +313,7 @@ static const struct uart_driver_api uart_cc32xx_driver_api = {
};
#define UART_32XX_DEVICE(idx) \
PINCTRL_DT_INST_DEFINE(idx); \
IF_ENABLED(CONFIG_UART_INTERRUPT_DRIVEN, \
(static void uart_cc32xx_cfg_func_##idx(const struct device *dev) \
{ \
@ -319,6 +328,7 @@ IF_ENABLED(CONFIG_UART_INTERRUPT_DRIVEN, \
static const struct uart_cc32xx_dev_config uart_cc32xx_dev_cfg_##idx = { \
.base = DT_INST_REG_ADDR(idx), \
.sys_clk_freq = DT_INST_PROP_BY_PHANDLE(idx, clocks, clock_frequency),\
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(idx), \
IF_ENABLED(CONFIG_UART_INTERRUPT_DRIVEN, \
(.irq_config_func = uart_cc32xx_cfg_func_##idx,)) \
}; \