xref: /rk3399_rockchip-uboot/drivers/serial/serial_rockchip.c (revision 2fc24d5335a35a4880fdc04cf4d45754d29cd415)
1*2fc24d53SSimon Glass /*
2*2fc24d53SSimon Glass  * Copyright (c) 2015 Google, Inc
3*2fc24d53SSimon Glass  *
4*2fc24d53SSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
5*2fc24d53SSimon Glass  */
6*2fc24d53SSimon Glass 
7*2fc24d53SSimon Glass #include <common.h>
8*2fc24d53SSimon Glass #include <debug_uart.h>
9*2fc24d53SSimon Glass #include <dm.h>
10*2fc24d53SSimon Glass #include <dt-structs.h>
11*2fc24d53SSimon Glass #include <ns16550.h>
12*2fc24d53SSimon Glass #include <serial.h>
13*2fc24d53SSimon Glass #include <asm/arch/clock.h>
14*2fc24d53SSimon Glass 
15*2fc24d53SSimon Glass struct rockchip_uart_platdata {
16*2fc24d53SSimon Glass 	struct dtd_rockchip_rk3288_uart dtplat;
17*2fc24d53SSimon Glass 	struct ns16550_platdata plat;
18*2fc24d53SSimon Glass };
19*2fc24d53SSimon Glass 
20*2fc24d53SSimon Glass struct dtd_rockchip_rk3288_uart *dtplat, s_dtplat;
21*2fc24d53SSimon Glass 
22*2fc24d53SSimon Glass static int rockchip_serial_probe(struct udevice *dev)
23*2fc24d53SSimon Glass {
24*2fc24d53SSimon Glass 	struct rockchip_uart_platdata *plat = dev_get_platdata(dev);
25*2fc24d53SSimon Glass 
26*2fc24d53SSimon Glass 	/* Create some new platform data for the standard driver */
27*2fc24d53SSimon Glass 	plat->plat.base = plat->dtplat.reg[0];
28*2fc24d53SSimon Glass 	plat->plat.reg_shift = plat->dtplat.reg_shift;
29*2fc24d53SSimon Glass 	plat->plat.clock = plat->dtplat.clock_frequency;
30*2fc24d53SSimon Glass 	dev->platdata = &plat->plat;
31*2fc24d53SSimon Glass 
32*2fc24d53SSimon Glass 	return ns16550_serial_probe(dev);
33*2fc24d53SSimon Glass }
34*2fc24d53SSimon Glass 
35*2fc24d53SSimon Glass U_BOOT_DRIVER(rockchip_rk3288_uart) = {
36*2fc24d53SSimon Glass 	.name	= "rockchip_rk3288_uart",
37*2fc24d53SSimon Glass 	.id	= UCLASS_SERIAL,
38*2fc24d53SSimon Glass 	.priv_auto_alloc_size = sizeof(struct NS16550),
39*2fc24d53SSimon Glass 	.platdata_auto_alloc_size = sizeof(struct rockchip_uart_platdata),
40*2fc24d53SSimon Glass 	.probe	= rockchip_serial_probe,
41*2fc24d53SSimon Glass 	.ops	= &ns16550_serial_ops,
42*2fc24d53SSimon Glass 	.flags	= DM_FLAG_PRE_RELOC,
43*2fc24d53SSimon Glass };
44