@ -17,6 +17,8 @@
# include <dm/platform_data/serial_sh.h>
# include "serial_sh.h"
DECLARE_GLOBAL_DATA_PTR ;
# if defined(CONFIG_CPU_SH7760) || \
defined ( CONFIG_CPU_SH7780 ) | | \
defined ( CONFIG_CPU_SH7785 ) | | \
@ -201,9 +203,36 @@ static const struct dm_serial_ops sh_serial_ops = {
. setbrg = sh_serial_setbrg ,
} ;
# ifdef CONFIG_OF_CONTROL
static const struct udevice_id sh_serial_id [ ] = {
{ . compatible = " renesas,sci " , . data = PORT_SCI } ,
{ . compatible = " renesas,scif " , . data = PORT_SCIF } ,
{ . compatible = " renesas,scifa " , . data = PORT_SCIFA } ,
{ }
} ;
static int sh_serial_ofdata_to_platdata ( struct udevice * dev )
{
struct sh_serial_platdata * plat = dev_get_platdata ( dev ) ;
fdt_addr_t addr ;
addr = fdtdec_get_addr ( gd - > fdt_blob , dev - > of_offset , " reg " ) ;
if ( addr = = FDT_ADDR_T_NONE )
return - EINVAL ;
plat - > base = addr ;
plat - > clk = fdtdec_get_int ( gd - > fdt_blob , dev - > of_offset , " clock " , 1 ) ;
plat - > type = dev_get_driver_data ( dev ) ;
return 0 ;
}
# endif
U_BOOT_DRIVER ( serial_sh ) = {
. name = " serial_sh " ,
. id = UCLASS_SERIAL ,
. of_match = of_match_ptr ( sh_serial_id ) ,
. ofdata_to_platdata = of_match_ptr ( sh_serial_ofdata_to_platdata ) ,
. platdata_auto_alloc_size = sizeof ( struct sh_serial_platdata ) ,
. probe = sh_serial_probe ,
. ops = & sh_serial_ops ,
. flags = DM_FLAG_PRE_RELOC ,
@ -234,6 +263,8 @@ U_BOOT_DRIVER(serial_sh) = {
# if defined(CONFIG_SCIF_A)
# define SCIF_BASE_PORT PORT_SCIFA
# elif defined(CONFIG_SCI)
# define SCIF_BASE_PORT PORT_SCI
# else
# define SCIF_BASE_PORT PORT_SCIF
# endif