Skip to content

Commit a216287

Browse files
committed
drivers: serial: convert Zephyr constants to rpi-hal constants
rpi-hal function "uart_set_format" expects data width in the range of 5..8. So I created a new function “uart_rpi_set_format” which contains common parts of “uart_rpi_configure”. Signed-off-by: Jan Hilsdorf <[email protected]>
1 parent 1374415 commit a216287

File tree

1 file changed

+58
-48
lines changed

1 file changed

+58
-48
lines changed

drivers/serial/uart_rpi_pico.c

+58-48
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,60 @@ static void uart_rpi_poll_out(const struct device *dev, unsigned char c)
5959
uart_hw->dr = c;
6060
}
6161

62+
static int uart_rpi_set_format(const struct device *dev, const struct uart_config *cfg)
63+
{
64+
const struct uart_rpi_config *config = dev->config;
65+
uart_inst_t * const uart_inst = config->uart_dev;
66+
uart_parity_t parity = 0;
67+
uint data_bits = 0;
68+
uint stop_bits = 0;
69+
70+
switch (cfg->data_bits) {
71+
case UART_CFG_DATA_BITS_5:
72+
data_bits = 5;
73+
break;
74+
case UART_CFG_DATA_BITS_6:
75+
data_bits = 6;
76+
break;
77+
case UART_CFG_DATA_BITS_7:
78+
data_bits = 7;
79+
break;
80+
case UART_CFG_DATA_BITS_8:
81+
data_bits = 8;
82+
break;
83+
default:
84+
return -EINVAL;
85+
}
86+
87+
switch (cfg->stop_bits) {
88+
case UART_CFG_STOP_BITS_1:
89+
stop_bits = 1;
90+
break;
91+
case UART_CFG_STOP_BITS_2:
92+
stop_bits = 2;
93+
break;
94+
default:
95+
return -EINVAL;
96+
}
97+
98+
switch (cfg->parity) {
99+
case UART_CFG_PARITY_NONE:
100+
parity = UART_PARITY_NONE;
101+
break;
102+
case UART_CFG_PARITY_EVEN:
103+
parity = UART_PARITY_EVEN;
104+
break;
105+
case UART_CFG_PARITY_ODD:
106+
parity = UART_PARITY_ODD;
107+
break;
108+
default:
109+
return -EINVAL;
110+
}
111+
112+
uart_set_format(uart_inst, data_bits, stop_bits, parity);
113+
return 0;
114+
}
115+
62116
static int uart_rpi_init(const struct device *dev)
63117
{
64118
const struct uart_rpi_config *config = dev->config;
@@ -94,10 +148,7 @@ static int uart_rpi_init(const struct device *dev)
94148
.parity = UART_CFG_PARITY_NONE,
95149
.stop_bits = UART_CFG_STOP_BITS_1
96150
};
97-
uart_set_format(uart_inst,
98-
data->uart_config.data_bits,
99-
data->uart_config.stop_bits,
100-
data->uart_config.parity);
151+
uart_rpi_set_format(dev, &data->uart_config);
101152
hw_clear_bits(&uart_hw->lcr_h, UART_UARTLCR_H_FEN_BITS);
102153
uart_hw->dr = 0U;
103154

@@ -121,58 +172,17 @@ static int uart_rpi_configure(const struct device *dev, const struct uart_config
121172
const struct uart_rpi_config *config = dev->config;
122173
uart_inst_t * const uart_inst = config->uart_dev;
123174
struct uart_rpi_data *data = dev->data;
124-
uart_parity_t parity = 0;
125-
uint data_bits = 0;
126-
uint stop_bits = 0;
127175
uint baudrate = 0;
128176

129-
switch (cfg->data_bits) {
130-
case UART_CFG_DATA_BITS_5:
131-
data_bits = 5;
132-
break;
133-
case UART_CFG_DATA_BITS_6:
134-
data_bits = 6;
135-
break;
136-
case UART_CFG_DATA_BITS_7:
137-
data_bits = 7;
138-
break;
139-
case UART_CFG_DATA_BITS_8:
140-
data_bits = 8;
141-
break;
142-
default:
143-
return -EINVAL;
144-
}
145-
146-
switch (cfg->stop_bits) {
147-
case UART_CFG_STOP_BITS_1:
148-
stop_bits = 1;
149-
break;
150-
case UART_CFG_STOP_BITS_2:
151-
stop_bits = 2;
152-
break;
153-
default:
177+
baudrate = uart_set_baudrate(uart_inst, cfg->baudrate);
178+
if (baudrate == 0) {
154179
return -EINVAL;
155180
}
156181

157-
switch (cfg->parity) {
158-
case UART_CFG_PARITY_NONE:
159-
parity = UART_PARITY_NONE;
160-
break;
161-
case UART_CFG_PARITY_EVEN:
162-
parity = UART_PARITY_EVEN;
163-
break;
164-
case UART_CFG_PARITY_ODD:
165-
parity = UART_PARITY_ODD;
166-
break;
167-
default:
182+
if (uart_rpi_set_format(dev, cfg) != 0) {
168183
return -EINVAL;
169184
}
170185

171-
baudrate = uart_set_baudrate(uart_inst, cfg->baudrate);
172-
if (baudrate == 0) {
173-
return -EINVAL;
174-
}
175-
uart_set_format(uart_inst, data_bits, stop_bits, parity);
176186
data->uart_config = *cfg;
177187
return 0;
178188
}

0 commit comments

Comments
 (0)