Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

Bootlin logo

Elixir Cross Referencer

Loading...
/*
 * Copyright (c) 2017 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/* Include esp-idf headers first to avoid redefining BIT() macro */
#include <rom/ets_sys.h>

#include <soc.h>
#include <uart.h>
#include <errno.h>

static void esp32_uart_tx(struct device *dev,
				   unsigned char c)
{
	ARG_UNUSED(dev);

	esp32_rom_uart_tx_one_char(c);
}

static int esp32_uart_rx(struct device *dev, unsigned char *p_char)
{
	ARG_UNUSED(dev);

	switch (esp32_rom_uart_rx_one_char(p_char)) {
	case OK:
		return 0;
	case PENDING:
		return -EINPROGRESS;
	case BUSY:
		return -EBUSY;
	case CANCEL:
		return -ECANCELED;
	default:
		return -EIO;
	}
}

static int esp32_uart_init(struct device *dev)
{
	ARG_UNUSED(dev);

	esp32_rom_uart_attach();

	return 0;
}

static const struct uart_driver_api esp32_uart_api = {
	.poll_in = &esp32_uart_rx,
	.poll_out = &esp32_uart_tx,
	.err_check = NULL,
};

DEVICE_AND_API_INIT(esp32_uart, "ROMUART",
		    esp32_uart_init, NULL, NULL,
		    PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE,
		    &esp32_uart_api);