Lines Matching refs:dev

53 	int (*clk_enable_func)(const struct device *dev, uint32_t clk);
54 int (*pwr_on_func)(const struct device *dev);
87 static inline int pwr_on_arm_pl011(const struct device *dev) in pwr_on_arm_pl011() argument
92 static inline int clk_enable_arm_pl011(const struct device *dev, uint32_t clk) in clk_enable_arm_pl011() argument
114 static void pl011_enable(const struct device *dev) in pl011_enable() argument
116 get_uart(dev)->cr |= PL011_CR_UARTEN; in pl011_enable()
119 static void pl011_disable(const struct device *dev) in pl011_disable() argument
121 get_uart(dev)->cr &= ~PL011_CR_UARTEN; in pl011_disable()
124 static void pl011_enable_fifo(const struct device *dev) in pl011_enable_fifo() argument
126 get_uart(dev)->lcr_h |= PL011_LCRH_FEN; in pl011_enable_fifo()
129 static void pl011_disable_fifo(const struct device *dev) in pl011_disable_fifo() argument
131 get_uart(dev)->lcr_h &= ~PL011_LCRH_FEN; in pl011_disable_fifo()
134 static void pl011_set_flow_control(const struct device *dev, bool rts, bool cts) in pl011_set_flow_control() argument
137 get_uart(dev)->cr |= PL011_CR_RTSEn; in pl011_set_flow_control()
139 get_uart(dev)->cr &= ~PL011_CR_RTSEn; in pl011_set_flow_control()
142 get_uart(dev)->cr |= PL011_CR_CTSEn; in pl011_set_flow_control()
144 get_uart(dev)->cr &= ~PL011_CR_CTSEn; in pl011_set_flow_control()
148 static int pl011_set_baudrate(const struct device *dev, in pl011_set_baudrate() argument
164 get_uart(dev)->ibrd = bauddiv >> PL011_FBRD_WIDTH; in pl011_set_baudrate()
165 get_uart(dev)->fbrd = bauddiv & ((1u << PL011_FBRD_WIDTH) - 1u); in pl011_set_baudrate()
173 get_uart(dev)->lcr_h = get_uart(dev)->lcr_h; in pl011_set_baudrate()
178 static bool pl011_is_readable(const struct device *dev) in pl011_is_readable() argument
180 struct pl011_data *data = dev->data; in pl011_is_readable()
183 (!(get_uart(dev)->cr & PL011_CR_UARTEN) || !(get_uart(dev)->cr & PL011_CR_RXE))) { in pl011_is_readable()
187 return (get_uart(dev)->fr & PL011_FR_RXFE) == 0U; in pl011_is_readable()
190 static int pl011_poll_in(const struct device *dev, unsigned char *c) in pl011_poll_in() argument
192 if (!pl011_is_readable(dev)) { in pl011_poll_in()
197 *c = (unsigned char)get_uart(dev)->dr; in pl011_poll_in()
199 return get_uart(dev)->rsr & PL011_RSR_ERROR_MASK; in pl011_poll_in()
202 static void pl011_poll_out(const struct device *dev, in pl011_poll_out() argument
206 while (get_uart(dev)->fr & PL011_FR_TXFF) { in pl011_poll_out()
211 get_uart(dev)->dr = (uint32_t)c; in pl011_poll_out()
214 static int pl011_err_check(const struct device *dev) in pl011_err_check() argument
218 if (get_uart(dev)->rsr & PL011_RSR_ECR_OE) { in pl011_err_check()
222 if (get_uart(dev)->rsr & PL011_RSR_ECR_BE) { in pl011_err_check()
226 if (get_uart(dev)->rsr & PL011_RSR_ECR_PE) { in pl011_err_check()
230 if (get_uart(dev)->rsr & PL011_RSR_ECR_FE) { in pl011_err_check()
237 static int pl011_runtime_configure_internal(const struct device *dev, in pl011_runtime_configure_internal() argument
241 const struct pl011_config *config = dev->config; in pl011_runtime_configure_internal()
242 struct pl011_data *data = dev->data; in pl011_runtime_configure_internal()
251 pl011_disable(dev); in pl011_runtime_configure_internal()
252 pl011_disable_fifo(dev); in pl011_runtime_configure_internal()
255 lcrh = get_uart(dev)->lcr_h & ~(PL011_LCRH_FORMAT_MASK | PL011_LCRH_STP2); in pl011_runtime_configure_internal()
301 pl011_set_flow_control(dev, false, false); in pl011_runtime_configure_internal()
304 pl011_set_flow_control(dev, true, true); in pl011_runtime_configure_internal()
311 ret = pl011_set_baudrate(dev, data->clk_freq, cfg->baudrate); in pl011_runtime_configure_internal()
317 get_uart(dev)->lcr_h = lcrh; in pl011_runtime_configure_internal()
324 pl011_enable_fifo(dev); in pl011_runtime_configure_internal()
326 pl011_enable(dev); in pl011_runtime_configure_internal()
335 static int pl011_runtime_configure(const struct device *dev, in pl011_runtime_configure() argument
338 return pl011_runtime_configure_internal(dev, cfg, true); in pl011_runtime_configure()
341 static int pl011_runtime_config_get(const struct device *dev, in pl011_runtime_config_get() argument
344 struct pl011_data *data = dev->data; in pl011_runtime_config_get()
353 static int pl011_fifo_fill(const struct device *dev, in pl011_fifo_fill() argument
358 while (!(get_uart(dev)->fr & PL011_FR_TXFF) && (len - num_tx > 0)) { in pl011_fifo_fill()
359 get_uart(dev)->dr = tx_data[num_tx++]; in pl011_fifo_fill()
364 static int pl011_fifo_read(const struct device *dev, in pl011_fifo_read() argument
369 while ((len - num_rx > 0) && !(get_uart(dev)->fr & PL011_FR_RXFE)) { in pl011_fifo_read()
370 rx_data[num_rx++] = get_uart(dev)->dr; in pl011_fifo_read()
376 static void pl011_irq_tx_enable(const struct device *dev) in pl011_irq_tx_enable() argument
378 struct pl011_data *data = dev->data; in pl011_irq_tx_enable()
380 get_uart(dev)->imsc |= PL011_IMSC_TXIM; in pl011_irq_tx_enable()
408 while (get_uart(dev)->imsc & PL011_IMSC_TXIM) { in pl011_irq_tx_enable()
410 data->irq_cb(dev, data->irq_cb_data); in pl011_irq_tx_enable()
415 static void pl011_irq_tx_disable(const struct device *dev) in pl011_irq_tx_disable() argument
417 struct pl011_data *data = dev->data; in pl011_irq_tx_disable()
420 get_uart(dev)->imsc &= ~PL011_IMSC_TXIM; in pl011_irq_tx_disable()
423 static int pl011_irq_tx_complete(const struct device *dev) in pl011_irq_tx_complete() argument
426 return ((get_uart(dev)->fr & PL011_FR_BUSY) == 0); in pl011_irq_tx_complete()
429 static int pl011_irq_tx_ready(const struct device *dev) in pl011_irq_tx_ready() argument
431 struct pl011_data *data = dev->data; in pl011_irq_tx_ready()
433 if (!data->sbsa && !(get_uart(dev)->cr & PL011_CR_TXE)) { in pl011_irq_tx_ready()
437 return ((get_uart(dev)->imsc & PL011_IMSC_TXIM) && in pl011_irq_tx_ready()
439 (get_uart(dev)->ris & PL011_RIS_TXRIS || get_uart(dev)->fr & PL011_FR_TXFE)); in pl011_irq_tx_ready()
442 static void pl011_irq_rx_enable(const struct device *dev) in pl011_irq_rx_enable() argument
444 get_uart(dev)->imsc |= PL011_IMSC_RXIM | PL011_IMSC_RTIM; in pl011_irq_rx_enable()
447 static void pl011_irq_rx_disable(const struct device *dev) in pl011_irq_rx_disable() argument
449 get_uart(dev)->imsc &= ~(PL011_IMSC_RXIM | PL011_IMSC_RTIM); in pl011_irq_rx_disable()
452 static int pl011_irq_rx_ready(const struct device *dev) in pl011_irq_rx_ready() argument
454 struct pl011_data *data = dev->data; in pl011_irq_rx_ready()
456 if (!data->sbsa && !(get_uart(dev)->cr & PL011_CR_RXE)) { in pl011_irq_rx_ready()
460 return ((get_uart(dev)->imsc & PL011_IMSC_RXIM) && in pl011_irq_rx_ready()
461 (!(get_uart(dev)->fr & PL011_FR_RXFE))); in pl011_irq_rx_ready()
464 static void pl011_irq_err_enable(const struct device *dev) in pl011_irq_err_enable() argument
467 get_uart(dev)->imsc |= PL011_IMSC_ERROR_MASK; in pl011_irq_err_enable()
470 static void pl011_irq_err_disable(const struct device *dev) in pl011_irq_err_disable() argument
472 get_uart(dev)->imsc &= ~PL011_IMSC_ERROR_MASK; in pl011_irq_err_disable()
475 static int pl011_irq_is_pending(const struct device *dev) in pl011_irq_is_pending() argument
477 return pl011_irq_rx_ready(dev) || pl011_irq_tx_ready(dev); in pl011_irq_is_pending()
480 static int pl011_irq_update(const struct device *dev) in pl011_irq_update() argument
485 static void pl011_irq_callback_set(const struct device *dev, in pl011_irq_callback_set() argument
489 struct pl011_data *data = dev->data; in pl011_irq_callback_set()
522 static int pl011_init(const struct device *dev) in pl011_init() argument
524 const struct pl011_config *config = dev->config; in pl011_init()
525 struct pl011_data *data = dev->data; in pl011_init()
528 DEVICE_MMIO_MAP(dev, K_MEM_CACHE_NONE); in pl011_init()
531 if (config->reset.dev) { in pl011_init()
560 ret = config->pwr_on_func(dev); in pl011_init()
564 pl011_disable(dev); in pl011_init()
565 pl011_disable_fifo(dev); in pl011_init()
569 ret = config->clk_enable_func(dev, data->clk_freq); in pl011_init()
575 pl011_runtime_configure_internal(dev, &data->uart_cfg, false); in pl011_init()
578 get_uart(dev)->ifls = FIELD_PREP(PL011_IFLS_TXIFLSEL_M, TXIFLSEL_1_8_FULL) in pl011_init()
583 pl011_enable_fifo(dev); in pl011_init()
587 get_uart(dev)->imsc = 0U; in pl011_init()
588 get_uart(dev)->icr = PL011_IMSC_MASK_ALL; in pl011_init()
591 get_uart(dev)->dmacr = 0U; in pl011_init()
593 get_uart(dev)->cr &= ~PL011_CR_SIREN; in pl011_init()
594 get_uart(dev)->cr |= PL011_CR_RXE | PL011_CR_TXE; in pl011_init()
598 config->irq_config_func(dev); in pl011_init()
602 pl011_enable(dev); in pl011_init()
651 void pl011_isr(const struct device *dev) in pl011_isr() argument
653 struct pl011_data *data = dev->data; in pl011_isr()
658 data->irq_cb(dev, data->irq_cb_data); in pl011_isr()
676 static void pl011_irq_config_func_##n(const struct device *dev) \
734 static void pl011_irq_config_func_sbsa_##n(const struct device *dev) \