2009-09-18 13:04:58 +02:00
/*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 2008 Maxime Bizon < mbizon @ freebox . fr >
*/
# include <linux/init.h>
# include <linux/kernel.h>
# include <linux/platform_device.h>
# include <bcm63xx_cpu.h>
2010-01-30 18:34:55 +01:00
static struct resource uart0_resources [ ] = {
2009-09-18 13:04:58 +02:00
{
2010-01-30 18:34:55 +01:00
/* start & end filled at runtime */
2009-09-18 13:04:58 +02:00
. flags = IORESOURCE_MEM ,
} ,
{
2010-01-30 18:34:55 +01:00
/* start filled at runtime */
2009-09-18 13:04:58 +02:00
. flags = IORESOURCE_IRQ ,
} ,
} ;
2010-01-30 18:34:55 +01:00
static struct resource uart1_resources [ ] = {
{
/* start & end filled at runtime */
. flags = IORESOURCE_MEM ,
} ,
{
/* start filled at runtime */
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bcm63xx_uart_devices [ ] = {
{
. name = " bcm63xx_uart " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( uart0_resources ) ,
. resource = uart0_resources ,
} ,
{
. name = " bcm63xx_uart " ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( uart1_resources ) ,
. resource = uart1_resources ,
}
2009-09-18 13:04:58 +02:00
} ;
2010-01-30 18:34:55 +01:00
int __init bcm63xx_uart_register ( unsigned int id )
2009-09-18 13:04:58 +02:00
{
2010-01-30 18:34:55 +01:00
if ( id > = ARRAY_SIZE ( bcm63xx_uart_devices ) )
return - ENODEV ;
2013-06-18 16:55:40 +00:00
if ( id = = 1 & & ( ! BCMCPU_IS_3368 ( ) & & ! BCMCPU_IS_6358 ( ) & &
! BCMCPU_IS_6368 ( ) ) )
2010-01-30 18:34:55 +01:00
return - ENODEV ;
if ( id = = 0 ) {
uart0_resources [ 0 ] . start = bcm63xx_regset_address ( RSET_UART0 ) ;
uart0_resources [ 0 ] . end = uart0_resources [ 0 ] . start +
RSET_UART_SIZE - 1 ;
uart0_resources [ 1 ] . start = bcm63xx_get_irq_number ( IRQ_UART0 ) ;
}
if ( id = = 1 ) {
uart1_resources [ 0 ] . start = bcm63xx_regset_address ( RSET_UART1 ) ;
uart1_resources [ 0 ] . end = uart1_resources [ 0 ] . start +
RSET_UART_SIZE - 1 ;
uart1_resources [ 1 ] . start = bcm63xx_get_irq_number ( IRQ_UART1 ) ;
}
return platform_device_register ( & bcm63xx_uart_devices [ id ] ) ;
2009-09-18 13:04:58 +02:00
}