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