2019-05-19 16:51:31 +03:00
// SPDX-License-Identifier: GPL-2.0-or-later
2007-05-11 16:29:59 +04:00
/*
* Registration of Cobalt UART platform device .
*
2009-07-02 19:39:38 +04:00
* Copyright ( C ) 2007 Yoichi Yuasa < yuasa @ linux - mips . org >
2007-05-11 16:29:59 +04:00
*/
# include <linux/errno.h>
# include <linux/init.h>
# include <linux/ioport.h>
# include <linux/platform_device.h>
# include <linux/serial_8250.h>
# include <cobalt.h>
2007-09-13 18:51:26 +04:00
# include <irq.h>
2007-05-11 16:29:59 +04:00
static struct resource cobalt_uart_resource [ ] __initdata = {
{
. start = 0x1c800000 ,
. end = 0x1c800007 ,
. flags = IORESOURCE_MEM ,
} ,
{
2007-09-13 18:51:26 +04:00
. start = SERIAL_IRQ ,
. end = SERIAL_IRQ ,
2007-05-11 16:29:59 +04:00
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct plat_serial8250_port cobalt_serial8250_port [ ] = {
{
2007-09-13 18:51:26 +04:00
. irq = SERIAL_IRQ ,
2007-05-11 16:29:59 +04:00
. uartclk = 18432000 ,
. iotype = UPIO_MEM ,
. flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST ,
. mapbase = 0x1c800000 ,
} ,
{ } ,
} ;
static __init int cobalt_uart_add ( void )
{
struct platform_device * pdev ;
int retval ;
/*
2007-07-30 00:19:02 +04:00
* Cobalt Qube1 has no UART .
2007-05-11 16:29:59 +04:00
*/
2007-07-30 00:19:02 +04:00
if ( cobalt_board_id = = COBALT_BRD_ID_QUBE1 )
2007-05-11 16:29:59 +04:00
return 0 ;
pdev = platform_device_alloc ( " serial8250 " , - 1 ) ;
if ( ! pdev )
return - ENOMEM ;
pdev - > id = PLAT8250_DEV_PLATFORM ;
pdev - > dev . platform_data = cobalt_serial8250_port ;
retval = platform_device_add_resources ( pdev , cobalt_uart_resource , ARRAY_SIZE ( cobalt_uart_resource ) ) ;
if ( retval )
goto err_free_device ;
retval = platform_device_add ( pdev ) ;
if ( retval )
goto err_free_device ;
return 0 ;
err_free_device :
platform_device_put ( pdev ) ;
return retval ;
}
device_initcall ( cobalt_uart_add ) ;