rockchip: serial: Add an of-platdata driver for rockchip
Add a driver that works with of-platdata. It sets up the platform data and calls the standard ns16550 driver. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
b2927fbaa8
commit
2fc24d5335
@ -312,6 +312,15 @@ config SYS_NS16550
|
||||
be used. It can be a constant or a function to get clock, eg,
|
||||
get_serial_clock().
|
||||
|
||||
config ROCKCHIP_SERIAL
|
||||
bool "Rockchip on-chip UART support"
|
||||
depends on DM_SERIAL && SPL_OF_PLATDATA
|
||||
help
|
||||
Select this to enable a debug UART for Rockchip devices when using
|
||||
CONFIG_OF_PLATDATA (i.e. a compiled-in device tree replacemenmt).
|
||||
This uses the ns16550 driver, converting the platdata from of-platdata
|
||||
to the ns16550 format.
|
||||
|
||||
config SANDBOX_SERIAL
|
||||
bool "Sandbox UART support"
|
||||
depends on SANDBOX
|
||||
|
@ -28,6 +28,9 @@ obj-$(CONFIG_S5P) += serial_s5p.o
|
||||
obj-$(CONFIG_MXC_UART) += serial_mxc.o
|
||||
obj-$(CONFIG_PXA_SERIAL) += serial_pxa.o
|
||||
obj-$(CONFIG_MESON_SERIAL) += serial_meson.o
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
obj-$(CONFIG_ROCKCHIP_SERIAL) += serial_rockchip.o
|
||||
endif
|
||||
obj-$(CONFIG_S3C24X0_SERIAL) += serial_s3c24x0.o
|
||||
obj-$(CONFIG_XILINX_UARTLITE) += serial_xuartlite.o
|
||||
obj-$(CONFIG_SANDBOX_SERIAL) += sandbox.o
|
||||
|
43
drivers/serial/serial_rockchip.c
Normal file
43
drivers/serial/serial_rockchip.c
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Google, Inc
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <debug_uart.h>
|
||||
#include <dm.h>
|
||||
#include <dt-structs.h>
|
||||
#include <ns16550.h>
|
||||
#include <serial.h>
|
||||
#include <asm/arch/clock.h>
|
||||
|
||||
struct rockchip_uart_platdata {
|
||||
struct dtd_rockchip_rk3288_uart dtplat;
|
||||
struct ns16550_platdata plat;
|
||||
};
|
||||
|
||||
struct dtd_rockchip_rk3288_uart *dtplat, s_dtplat;
|
||||
|
||||
static int rockchip_serial_probe(struct udevice *dev)
|
||||
{
|
||||
struct rockchip_uart_platdata *plat = dev_get_platdata(dev);
|
||||
|
||||
/* Create some new platform data for the standard driver */
|
||||
plat->plat.base = plat->dtplat.reg[0];
|
||||
plat->plat.reg_shift = plat->dtplat.reg_shift;
|
||||
plat->plat.clock = plat->dtplat.clock_frequency;
|
||||
dev->platdata = &plat->plat;
|
||||
|
||||
return ns16550_serial_probe(dev);
|
||||
}
|
||||
|
||||
U_BOOT_DRIVER(rockchip_rk3288_uart) = {
|
||||
.name = "rockchip_rk3288_uart",
|
||||
.id = UCLASS_SERIAL,
|
||||
.priv_auto_alloc_size = sizeof(struct NS16550),
|
||||
.platdata_auto_alloc_size = sizeof(struct rockchip_uart_platdata),
|
||||
.probe = rockchip_serial_probe,
|
||||
.ops = &ns16550_serial_ops,
|
||||
.flags = DM_FLAG_PRE_RELOC,
|
||||
};
|
Loading…
Reference in New Issue
Block a user