@@ -59,6 +59,60 @@ static void uart_rpi_poll_out(const struct device *dev, unsigned char c)
59
59
uart_hw -> dr = c ;
60
60
}
61
61
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
+
62
116
static int uart_rpi_init (const struct device * dev )
63
117
{
64
118
const struct uart_rpi_config * config = dev -> config ;
@@ -94,10 +148,7 @@ static int uart_rpi_init(const struct device *dev)
94
148
.parity = UART_CFG_PARITY_NONE ,
95
149
.stop_bits = UART_CFG_STOP_BITS_1
96
150
};
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 );
101
152
hw_clear_bits (& uart_hw -> lcr_h , UART_UARTLCR_H_FEN_BITS );
102
153
uart_hw -> dr = 0U ;
103
154
@@ -121,58 +172,17 @@ static int uart_rpi_configure(const struct device *dev, const struct uart_config
121
172
const struct uart_rpi_config * config = dev -> config ;
122
173
uart_inst_t * const uart_inst = config -> uart_dev ;
123
174
struct uart_rpi_data * data = dev -> data ;
124
- uart_parity_t parity = 0 ;
125
- uint data_bits = 0 ;
126
- uint stop_bits = 0 ;
127
175
uint baudrate = 0 ;
128
176
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 ) {
154
179
return - EINVAL ;
155
180
}
156
181
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 ) {
168
183
return - EINVAL ;
169
184
}
170
185
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 );
176
186
data -> uart_config = * cfg ;
177
187
return 0 ;
178
188
}
0 commit comments