xref: /openbmc/linux/arch/sh/boards/board-edosk7760.c (revision 3db91708)
13db91708SLuca Santini /*
23db91708SLuca Santini  * Renesas Europe EDOSK7760 Board Support
33db91708SLuca Santini  *
43db91708SLuca Santini  * Copyright (C) 2008 SPES Societa' Progettazione Elettronica e Software Ltd.
53db91708SLuca Santini  * Author: Luca Santini <luca.santini@spesonline.com>
63db91708SLuca Santini  *
73db91708SLuca Santini  * This program is free software; you can redistribute it and/or modify
83db91708SLuca Santini  * it under the terms of the GNU General Public License as published by
93db91708SLuca Santini  * the Free Software Foundation; either version 2 of the License, or
103db91708SLuca Santini  * (at your option) any later version.
113db91708SLuca Santini  *
123db91708SLuca Santini  * This program is distributed in the hope that it will be useful,
133db91708SLuca Santini  * but WITHOUT ANY WARRANTY; without even the implied warranty of
143db91708SLuca Santini  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
153db91708SLuca Santini  * GNU General Public License for more details.
163db91708SLuca Santini  *
173db91708SLuca Santini  * You should have received a copy of the GNU General Public License
183db91708SLuca Santini  * along with this program; if not, write to the Free Software
193db91708SLuca Santini  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
203db91708SLuca Santini  */
213db91708SLuca Santini #include <linux/init.h>
223db91708SLuca Santini #include <linux/types.h>
233db91708SLuca Santini #include <linux/platform_device.h>
243db91708SLuca Santini #include <linux/smc91x.h>
253db91708SLuca Santini #include <linux/interrupt.h>
263db91708SLuca Santini #include <linux/i2c.h>
273db91708SLuca Santini #include <asm/machvec.h>
283db91708SLuca Santini #include <asm/io.h>
293db91708SLuca Santini #include <asm/addrspace.h>
303db91708SLuca Santini #include <asm/delay.h>
313db91708SLuca Santini #include <asm/i2c-sh7760.h>
323db91708SLuca Santini 
333db91708SLuca Santini /* Bus state controller registers for CS4 area */
343db91708SLuca Santini #define BSC_CS4BCR	0xA4FD0010
353db91708SLuca Santini #define BSC_CS4WCR	0xA4FD0030
363db91708SLuca Santini 
373db91708SLuca Santini #define SMC_IOBASE	0xA2000000
383db91708SLuca Santini #define SMC_IO_OFFSET	0x300
393db91708SLuca Santini #define SMC_IOADDR	(SMC_IOBASE + SMC_IO_OFFSET)
403db91708SLuca Santini 
413db91708SLuca Santini #define ETHERNET_IRQ	5
423db91708SLuca Santini 
433db91708SLuca Santini /* i2c initialization functions */
443db91708SLuca Santini static struct sh7760_i2c_platdata i2c_pd = {
453db91708SLuca Santini 	.speed_khz	= 400,
463db91708SLuca Santini };
473db91708SLuca Santini 
483db91708SLuca Santini static struct resource sh7760_i2c1_res[] = {
493db91708SLuca Santini 	{
503db91708SLuca Santini 		.start	= SH7760_I2C1_MMIO,
513db91708SLuca Santini 		.end	= SH7760_I2C1_MMIOEND,
523db91708SLuca Santini 		.flags	= IORESOURCE_MEM,
533db91708SLuca Santini 	},{
543db91708SLuca Santini 		.start	= SH7760_I2C1_IRQ,
553db91708SLuca Santini 		.end	= SH7760_I2C1_IRQ,
563db91708SLuca Santini 		.flags	= IORESOURCE_IRQ,
573db91708SLuca Santini 	},
583db91708SLuca Santini };
593db91708SLuca Santini 
603db91708SLuca Santini static struct platform_device sh7760_i2c1_dev = {
613db91708SLuca Santini 	.dev    = {
623db91708SLuca Santini 		.platform_data	= &i2c_pd,
633db91708SLuca Santini 	},
643db91708SLuca Santini 
653db91708SLuca Santini 	.name		= SH7760_I2C_DEVNAME,
663db91708SLuca Santini 	.id		= 1,
673db91708SLuca Santini 	.resource	= sh7760_i2c1_res,
683db91708SLuca Santini 	.num_resources	= ARRAY_SIZE(sh7760_i2c1_res),
693db91708SLuca Santini };
703db91708SLuca Santini 
713db91708SLuca Santini static struct resource sh7760_i2c0_res[] = {
723db91708SLuca Santini 	{
733db91708SLuca Santini 		.start	= SH7760_I2C0_MMIO,
743db91708SLuca Santini 		.end	= SH7760_I2C0_MMIOEND,
753db91708SLuca Santini 		.flags	= IORESOURCE_MEM,
763db91708SLuca Santini 	}, {
773db91708SLuca Santini 		.start	= SH7760_I2C0_IRQ,
783db91708SLuca Santini 		.end	= SH7760_I2C0_IRQ,
793db91708SLuca Santini 		.flags	= IORESOURCE_IRQ,
803db91708SLuca Santini 	},
813db91708SLuca Santini };
823db91708SLuca Santini 
833db91708SLuca Santini static struct platform_device sh7760_i2c0_dev = {
843db91708SLuca Santini 	.dev    = {
853db91708SLuca Santini 		.platform_data	= &i2c_pd,
863db91708SLuca Santini 	},
873db91708SLuca Santini 	.name		= SH7760_I2C_DEVNAME,
883db91708SLuca Santini 	.id		= 0,
893db91708SLuca Santini 	.resource	= sh7760_i2c0_res,
903db91708SLuca Santini 	.num_resources	= ARRAY_SIZE(sh7760_i2c0_res),
913db91708SLuca Santini };
923db91708SLuca Santini 
933db91708SLuca Santini /* eth initialization functions */
943db91708SLuca Santini static struct smc91x_platdata smc91x_info = {
953db91708SLuca Santini 	.flags = SMC91X_USE_16BIT | SMC91X_IO_SHIFT_1 | IORESOURCE_IRQ_LOWLEVEL,
963db91708SLuca Santini };
973db91708SLuca Santini 
983db91708SLuca Santini static struct resource smc91x_res[] = {
993db91708SLuca Santini 	[0] = {
1003db91708SLuca Santini 		.start	= SMC_IOADDR,
1013db91708SLuca Santini 		.end	= SMC_IOADDR + 0x1f,
1023db91708SLuca Santini 		.flags	= IORESOURCE_MEM,
1033db91708SLuca Santini 	},
1043db91708SLuca Santini 	[1] = {
1053db91708SLuca Santini 		.start	= ETHERNET_IRQ,
1063db91708SLuca Santini 		.end	= ETHERNET_IRQ,
1073db91708SLuca Santini 		.flags	= IORESOURCE_IRQ ,
1083db91708SLuca Santini 	}
1093db91708SLuca Santini };
1103db91708SLuca Santini 
1113db91708SLuca Santini static struct platform_device smc91x_dev = {
1123db91708SLuca Santini 	.name		= "smc91x",
1133db91708SLuca Santini 	.id		= -1,
1143db91708SLuca Santini 	.num_resources	= ARRAY_SIZE(smc91x_res),
1153db91708SLuca Santini 	.resource	= smc91x_res,
1163db91708SLuca Santini 
1173db91708SLuca Santini 	.dev	= {
1183db91708SLuca Santini 		.platform_data	= &smc91x_info,
1193db91708SLuca Santini 	},
1203db91708SLuca Santini };
1213db91708SLuca Santini 
1223db91708SLuca Santini /* platform init code */
1233db91708SLuca Santini static struct platform_device *edosk7760_devices[] __initdata = {
1243db91708SLuca Santini 	&sh7760_i2c0_dev,
1253db91708SLuca Santini 	&sh7760_i2c1_dev,
1263db91708SLuca Santini 	&smc91x_dev,
1273db91708SLuca Santini };
1283db91708SLuca Santini 
1293db91708SLuca Santini static int __init init_edosk7760_devices(void)
1303db91708SLuca Santini {
1313db91708SLuca Santini 	plat_irq_setup_pins(IRQ_MODE_IRQ);
1323db91708SLuca Santini 
1333db91708SLuca Santini 	return platform_add_devices(edosk7760_devices,
1343db91708SLuca Santini 				    ARRAY_SIZE(edosk7760_devices));
1353db91708SLuca Santini }
1363db91708SLuca Santini __initcall(init_edosk7760_devices);
1373db91708SLuca Santini 
1383db91708SLuca Santini /*
1393db91708SLuca Santini  * The Machine Vector
1403db91708SLuca Santini  */
1413db91708SLuca Santini struct sh_machine_vector mv_edosk7760 __initmv = {
1423db91708SLuca Santini 	.mv_name	= "EDOSK7760",
1433db91708SLuca Santini 	.mv_nr_irqs	= 128,
1443db91708SLuca Santini };
145