16d9598e2SMagnus Damm /* 26d9598e2SMagnus Damm * sh73a0 processor support 36d9598e2SMagnus Damm * 46d9598e2SMagnus Damm * Copyright (C) 2010 Takashi Yoshii 56d9598e2SMagnus Damm * Copyright (C) 2010 Magnus Damm 66d9598e2SMagnus Damm * Copyright (C) 2008 Yoshihiro Shimoda 76d9598e2SMagnus Damm * 86d9598e2SMagnus Damm * This program is free software; you can redistribute it and/or modify 96d9598e2SMagnus Damm * it under the terms of the GNU General Public License as published by 106d9598e2SMagnus Damm * the Free Software Foundation; version 2 of the License. 116d9598e2SMagnus Damm * 126d9598e2SMagnus Damm * This program is distributed in the hope that it will be useful, 136d9598e2SMagnus Damm * but WITHOUT ANY WARRANTY; without even the implied warranty of 146d9598e2SMagnus Damm * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 156d9598e2SMagnus Damm * GNU General Public License for more details. 166d9598e2SMagnus Damm * 176d9598e2SMagnus Damm * You should have received a copy of the GNU General Public License 186d9598e2SMagnus Damm * along with this program; if not, write to the Free Software 196d9598e2SMagnus Damm * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 206d9598e2SMagnus Damm */ 216d9598e2SMagnus Damm #include <linux/kernel.h> 226d9598e2SMagnus Damm #include <linux/init.h> 236d9598e2SMagnus Damm #include <linux/interrupt.h> 246d9598e2SMagnus Damm #include <linux/irq.h> 256d9598e2SMagnus Damm #include <linux/platform_device.h> 266d9598e2SMagnus Damm #include <linux/delay.h> 276d9598e2SMagnus Damm #include <linux/input.h> 286d9598e2SMagnus Damm #include <linux/io.h> 296d9598e2SMagnus Damm #include <linux/serial_sci.h> 306d9598e2SMagnus Damm #include <linux/sh_intc.h> 316d9598e2SMagnus Damm #include <linux/sh_timer.h> 326d9598e2SMagnus Damm #include <mach/hardware.h> 336d9598e2SMagnus Damm #include <asm/mach-types.h> 346d9598e2SMagnus Damm #include <asm/mach/arch.h> 356d9598e2SMagnus Damm 366d9598e2SMagnus Damm static struct plat_sci_port scif0_platform_data = { 376d9598e2SMagnus Damm .mapbase = 0xe6c40000, 386d9598e2SMagnus Damm .flags = UPF_BOOT_AUTOCONF, 39f43dc23dSPaul Mundt .scscr = SCSCR_RE | SCSCR_TE, 40f43dc23dSPaul Mundt .scbrr_algo_id = SCBRR_ALGO_4, 416d9598e2SMagnus Damm .type = PORT_SCIFA, 426d9598e2SMagnus Damm .irqs = { gic_spi(72), gic_spi(72), 436d9598e2SMagnus Damm gic_spi(72), gic_spi(72) }, 446d9598e2SMagnus Damm }; 456d9598e2SMagnus Damm 466d9598e2SMagnus Damm static struct platform_device scif0_device = { 476d9598e2SMagnus Damm .name = "sh-sci", 486d9598e2SMagnus Damm .id = 0, 496d9598e2SMagnus Damm .dev = { 506d9598e2SMagnus Damm .platform_data = &scif0_platform_data, 516d9598e2SMagnus Damm }, 526d9598e2SMagnus Damm }; 536d9598e2SMagnus Damm 546d9598e2SMagnus Damm static struct plat_sci_port scif1_platform_data = { 556d9598e2SMagnus Damm .mapbase = 0xe6c50000, 566d9598e2SMagnus Damm .flags = UPF_BOOT_AUTOCONF, 57f43dc23dSPaul Mundt .scscr = SCSCR_RE | SCSCR_TE, 58f43dc23dSPaul Mundt .scbrr_algo_id = SCBRR_ALGO_4, 596d9598e2SMagnus Damm .type = PORT_SCIFA, 606d9598e2SMagnus Damm .irqs = { gic_spi(73), gic_spi(73), 616d9598e2SMagnus Damm gic_spi(73), gic_spi(73) }, 626d9598e2SMagnus Damm }; 636d9598e2SMagnus Damm 646d9598e2SMagnus Damm static struct platform_device scif1_device = { 656d9598e2SMagnus Damm .name = "sh-sci", 666d9598e2SMagnus Damm .id = 1, 676d9598e2SMagnus Damm .dev = { 686d9598e2SMagnus Damm .platform_data = &scif1_platform_data, 696d9598e2SMagnus Damm }, 706d9598e2SMagnus Damm }; 716d9598e2SMagnus Damm 726d9598e2SMagnus Damm static struct plat_sci_port scif2_platform_data = { 736d9598e2SMagnus Damm .mapbase = 0xe6c60000, 746d9598e2SMagnus Damm .flags = UPF_BOOT_AUTOCONF, 75f43dc23dSPaul Mundt .scscr = SCSCR_RE | SCSCR_TE, 76f43dc23dSPaul Mundt .scbrr_algo_id = SCBRR_ALGO_4, 776d9598e2SMagnus Damm .type = PORT_SCIFA, 786d9598e2SMagnus Damm .irqs = { gic_spi(74), gic_spi(74), 796d9598e2SMagnus Damm gic_spi(74), gic_spi(74) }, 806d9598e2SMagnus Damm }; 816d9598e2SMagnus Damm 826d9598e2SMagnus Damm static struct platform_device scif2_device = { 836d9598e2SMagnus Damm .name = "sh-sci", 846d9598e2SMagnus Damm .id = 2, 856d9598e2SMagnus Damm .dev = { 866d9598e2SMagnus Damm .platform_data = &scif2_platform_data, 876d9598e2SMagnus Damm }, 886d9598e2SMagnus Damm }; 896d9598e2SMagnus Damm 906d9598e2SMagnus Damm static struct plat_sci_port scif3_platform_data = { 916d9598e2SMagnus Damm .mapbase = 0xe6c70000, 926d9598e2SMagnus Damm .flags = UPF_BOOT_AUTOCONF, 93f43dc23dSPaul Mundt .scscr = SCSCR_RE | SCSCR_TE, 94f43dc23dSPaul Mundt .scbrr_algo_id = SCBRR_ALGO_4, 956d9598e2SMagnus Damm .type = PORT_SCIFA, 966d9598e2SMagnus Damm .irqs = { gic_spi(75), gic_spi(75), 976d9598e2SMagnus Damm gic_spi(75), gic_spi(75) }, 986d9598e2SMagnus Damm }; 996d9598e2SMagnus Damm 1006d9598e2SMagnus Damm static struct platform_device scif3_device = { 1016d9598e2SMagnus Damm .name = "sh-sci", 1026d9598e2SMagnus Damm .id = 3, 1036d9598e2SMagnus Damm .dev = { 1046d9598e2SMagnus Damm .platform_data = &scif3_platform_data, 1056d9598e2SMagnus Damm }, 1066d9598e2SMagnus Damm }; 1076d9598e2SMagnus Damm 1086d9598e2SMagnus Damm static struct plat_sci_port scif4_platform_data = { 1096d9598e2SMagnus Damm .mapbase = 0xe6c80000, 1106d9598e2SMagnus Damm .flags = UPF_BOOT_AUTOCONF, 111f43dc23dSPaul Mundt .scscr = SCSCR_RE | SCSCR_TE, 112f43dc23dSPaul Mundt .scbrr_algo_id = SCBRR_ALGO_4, 1136d9598e2SMagnus Damm .type = PORT_SCIFA, 1146d9598e2SMagnus Damm .irqs = { gic_spi(78), gic_spi(78), 1156d9598e2SMagnus Damm gic_spi(78), gic_spi(78) }, 1166d9598e2SMagnus Damm }; 1176d9598e2SMagnus Damm 1186d9598e2SMagnus Damm static struct platform_device scif4_device = { 1196d9598e2SMagnus Damm .name = "sh-sci", 1206d9598e2SMagnus Damm .id = 4, 1216d9598e2SMagnus Damm .dev = { 1226d9598e2SMagnus Damm .platform_data = &scif4_platform_data, 1236d9598e2SMagnus Damm }, 1246d9598e2SMagnus Damm }; 1256d9598e2SMagnus Damm 1266d9598e2SMagnus Damm static struct plat_sci_port scif5_platform_data = { 1276d9598e2SMagnus Damm .mapbase = 0xe6cb0000, 1286d9598e2SMagnus Damm .flags = UPF_BOOT_AUTOCONF, 129f43dc23dSPaul Mundt .scscr = SCSCR_RE | SCSCR_TE, 130f43dc23dSPaul Mundt .scbrr_algo_id = SCBRR_ALGO_4, 1316d9598e2SMagnus Damm .type = PORT_SCIFA, 1326d9598e2SMagnus Damm .irqs = { gic_spi(79), gic_spi(79), 1336d9598e2SMagnus Damm gic_spi(79), gic_spi(79) }, 1346d9598e2SMagnus Damm }; 1356d9598e2SMagnus Damm 1366d9598e2SMagnus Damm static struct platform_device scif5_device = { 1376d9598e2SMagnus Damm .name = "sh-sci", 1386d9598e2SMagnus Damm .id = 5, 1396d9598e2SMagnus Damm .dev = { 1406d9598e2SMagnus Damm .platform_data = &scif5_platform_data, 1416d9598e2SMagnus Damm }, 1426d9598e2SMagnus Damm }; 1436d9598e2SMagnus Damm 1446d9598e2SMagnus Damm static struct plat_sci_port scif6_platform_data = { 1456d9598e2SMagnus Damm .mapbase = 0xe6cc0000, 1466d9598e2SMagnus Damm .flags = UPF_BOOT_AUTOCONF, 147f43dc23dSPaul Mundt .scscr = SCSCR_RE | SCSCR_TE, 148f43dc23dSPaul Mundt .scbrr_algo_id = SCBRR_ALGO_4, 1496d9598e2SMagnus Damm .type = PORT_SCIFA, 1506d9598e2SMagnus Damm .irqs = { gic_spi(156), gic_spi(156), 1516d9598e2SMagnus Damm gic_spi(156), gic_spi(156) }, 1526d9598e2SMagnus Damm }; 1536d9598e2SMagnus Damm 1546d9598e2SMagnus Damm static struct platform_device scif6_device = { 1556d9598e2SMagnus Damm .name = "sh-sci", 1566d9598e2SMagnus Damm .id = 6, 1576d9598e2SMagnus Damm .dev = { 1586d9598e2SMagnus Damm .platform_data = &scif6_platform_data, 1596d9598e2SMagnus Damm }, 1606d9598e2SMagnus Damm }; 1616d9598e2SMagnus Damm 1626d9598e2SMagnus Damm static struct plat_sci_port scif7_platform_data = { 1636d9598e2SMagnus Damm .mapbase = 0xe6cd0000, 1646d9598e2SMagnus Damm .flags = UPF_BOOT_AUTOCONF, 165f43dc23dSPaul Mundt .scscr = SCSCR_RE | SCSCR_TE, 166f43dc23dSPaul Mundt .scbrr_algo_id = SCBRR_ALGO_4, 1676d9598e2SMagnus Damm .type = PORT_SCIFA, 1686d9598e2SMagnus Damm .irqs = { gic_spi(143), gic_spi(143), 1696d9598e2SMagnus Damm gic_spi(143), gic_spi(143) }, 1706d9598e2SMagnus Damm }; 1716d9598e2SMagnus Damm 1726d9598e2SMagnus Damm static struct platform_device scif7_device = { 1736d9598e2SMagnus Damm .name = "sh-sci", 1746d9598e2SMagnus Damm .id = 7, 1756d9598e2SMagnus Damm .dev = { 1766d9598e2SMagnus Damm .platform_data = &scif7_platform_data, 1776d9598e2SMagnus Damm }, 1786d9598e2SMagnus Damm }; 1796d9598e2SMagnus Damm 1806d9598e2SMagnus Damm static struct plat_sci_port scif8_platform_data = { 1816d9598e2SMagnus Damm .mapbase = 0xe6c30000, 1826d9598e2SMagnus Damm .flags = UPF_BOOT_AUTOCONF, 183f43dc23dSPaul Mundt .scscr = SCSCR_RE | SCSCR_TE, 184f43dc23dSPaul Mundt .scbrr_algo_id = SCBRR_ALGO_4, 1856d9598e2SMagnus Damm .type = PORT_SCIFB, 1866d9598e2SMagnus Damm .irqs = { gic_spi(80), gic_spi(80), 1876d9598e2SMagnus Damm gic_spi(80), gic_spi(80) }, 1886d9598e2SMagnus Damm }; 1896d9598e2SMagnus Damm 1906d9598e2SMagnus Damm static struct platform_device scif8_device = { 1916d9598e2SMagnus Damm .name = "sh-sci", 1926d9598e2SMagnus Damm .id = 8, 1936d9598e2SMagnus Damm .dev = { 1946d9598e2SMagnus Damm .platform_data = &scif8_platform_data, 1956d9598e2SMagnus Damm }, 1966d9598e2SMagnus Damm }; 1976d9598e2SMagnus Damm 1986d9598e2SMagnus Damm static struct sh_timer_config cmt10_platform_data = { 1996d9598e2SMagnus Damm .name = "CMT10", 2006d9598e2SMagnus Damm .channel_offset = 0x10, 2016d9598e2SMagnus Damm .timer_bit = 0, 2026d9598e2SMagnus Damm .clockevent_rating = 125, 2036d9598e2SMagnus Damm .clocksource_rating = 125, 2046d9598e2SMagnus Damm }; 2056d9598e2SMagnus Damm 2066d9598e2SMagnus Damm static struct resource cmt10_resources[] = { 2076d9598e2SMagnus Damm [0] = { 2086d9598e2SMagnus Damm .name = "CMT10", 2096d9598e2SMagnus Damm .start = 0xe6138010, 2106d9598e2SMagnus Damm .end = 0xe613801b, 2116d9598e2SMagnus Damm .flags = IORESOURCE_MEM, 2126d9598e2SMagnus Damm }, 2136d9598e2SMagnus Damm [1] = { 2146d9598e2SMagnus Damm .start = gic_spi(65), 2156d9598e2SMagnus Damm .flags = IORESOURCE_IRQ, 2166d9598e2SMagnus Damm }, 2176d9598e2SMagnus Damm }; 2186d9598e2SMagnus Damm 2196d9598e2SMagnus Damm static struct platform_device cmt10_device = { 2206d9598e2SMagnus Damm .name = "sh_cmt", 2216d9598e2SMagnus Damm .id = 10, 2226d9598e2SMagnus Damm .dev = { 2236d9598e2SMagnus Damm .platform_data = &cmt10_platform_data, 2246d9598e2SMagnus Damm }, 2256d9598e2SMagnus Damm .resource = cmt10_resources, 2266d9598e2SMagnus Damm .num_resources = ARRAY_SIZE(cmt10_resources), 2276d9598e2SMagnus Damm }; 2286d9598e2SMagnus Damm 2295010f3dbSMagnus Damm /* TMU */ 2305010f3dbSMagnus Damm static struct sh_timer_config tmu00_platform_data = { 2315010f3dbSMagnus Damm .name = "TMU00", 2325010f3dbSMagnus Damm .channel_offset = 0x4, 2335010f3dbSMagnus Damm .timer_bit = 0, 2345010f3dbSMagnus Damm .clockevent_rating = 200, 2355010f3dbSMagnus Damm }; 2365010f3dbSMagnus Damm 2375010f3dbSMagnus Damm static struct resource tmu00_resources[] = { 2385010f3dbSMagnus Damm [0] = { 2395010f3dbSMagnus Damm .name = "TMU00", 2405010f3dbSMagnus Damm .start = 0xfff60008, 2415010f3dbSMagnus Damm .end = 0xfff60013, 2425010f3dbSMagnus Damm .flags = IORESOURCE_MEM, 2435010f3dbSMagnus Damm }, 2445010f3dbSMagnus Damm [1] = { 2455010f3dbSMagnus Damm .start = intcs_evt2irq(0x0e80), /* TMU0_TUNI00 */ 2465010f3dbSMagnus Damm .flags = IORESOURCE_IRQ, 2475010f3dbSMagnus Damm }, 2485010f3dbSMagnus Damm }; 2495010f3dbSMagnus Damm 2505010f3dbSMagnus Damm static struct platform_device tmu00_device = { 2515010f3dbSMagnus Damm .name = "sh_tmu", 2525010f3dbSMagnus Damm .id = 0, 2535010f3dbSMagnus Damm .dev = { 2545010f3dbSMagnus Damm .platform_data = &tmu00_platform_data, 2555010f3dbSMagnus Damm }, 2565010f3dbSMagnus Damm .resource = tmu00_resources, 2575010f3dbSMagnus Damm .num_resources = ARRAY_SIZE(tmu00_resources), 2585010f3dbSMagnus Damm }; 2595010f3dbSMagnus Damm 2605010f3dbSMagnus Damm static struct sh_timer_config tmu01_platform_data = { 2615010f3dbSMagnus Damm .name = "TMU01", 2625010f3dbSMagnus Damm .channel_offset = 0x10, 2635010f3dbSMagnus Damm .timer_bit = 1, 2645010f3dbSMagnus Damm .clocksource_rating = 200, 2655010f3dbSMagnus Damm }; 2665010f3dbSMagnus Damm 2675010f3dbSMagnus Damm static struct resource tmu01_resources[] = { 2685010f3dbSMagnus Damm [0] = { 2695010f3dbSMagnus Damm .name = "TMU01", 2705010f3dbSMagnus Damm .start = 0xfff60014, 2715010f3dbSMagnus Damm .end = 0xfff6001f, 2725010f3dbSMagnus Damm .flags = IORESOURCE_MEM, 2735010f3dbSMagnus Damm }, 2745010f3dbSMagnus Damm [1] = { 2755010f3dbSMagnus Damm .start = intcs_evt2irq(0x0ea0), /* TMU0_TUNI01 */ 2765010f3dbSMagnus Damm .flags = IORESOURCE_IRQ, 2775010f3dbSMagnus Damm }, 2785010f3dbSMagnus Damm }; 2795010f3dbSMagnus Damm 2805010f3dbSMagnus Damm static struct platform_device tmu01_device = { 2815010f3dbSMagnus Damm .name = "sh_tmu", 2825010f3dbSMagnus Damm .id = 1, 2835010f3dbSMagnus Damm .dev = { 2845010f3dbSMagnus Damm .platform_data = &tmu01_platform_data, 2855010f3dbSMagnus Damm }, 2865010f3dbSMagnus Damm .resource = tmu01_resources, 2875010f3dbSMagnus Damm .num_resources = ARRAY_SIZE(tmu01_resources), 2885010f3dbSMagnus Damm }; 2895010f3dbSMagnus Damm 290b028f94bSYoshii Takashi static struct resource i2c0_resources[] = { 291b028f94bSYoshii Takashi [0] = { 292b028f94bSYoshii Takashi .name = "IIC0", 293b028f94bSYoshii Takashi .start = 0xe6820000, 294b028f94bSYoshii Takashi .end = 0xe6820425 - 1, 295b028f94bSYoshii Takashi .flags = IORESOURCE_MEM, 296b028f94bSYoshii Takashi }, 297b028f94bSYoshii Takashi [1] = { 298b028f94bSYoshii Takashi .start = gic_spi(167), 299b028f94bSYoshii Takashi .end = gic_spi(170), 300b028f94bSYoshii Takashi .flags = IORESOURCE_IRQ, 301b028f94bSYoshii Takashi }, 302b028f94bSYoshii Takashi }; 303b028f94bSYoshii Takashi 304b028f94bSYoshii Takashi static struct resource i2c1_resources[] = { 305b028f94bSYoshii Takashi [0] = { 306b028f94bSYoshii Takashi .name = "IIC1", 307b028f94bSYoshii Takashi .start = 0xe6822000, 308b028f94bSYoshii Takashi .end = 0xe6822425 - 1, 309b028f94bSYoshii Takashi .flags = IORESOURCE_MEM, 310b028f94bSYoshii Takashi }, 311b028f94bSYoshii Takashi [1] = { 312b028f94bSYoshii Takashi .start = gic_spi(51), 313b028f94bSYoshii Takashi .end = gic_spi(54), 314b028f94bSYoshii Takashi .flags = IORESOURCE_IRQ, 315b028f94bSYoshii Takashi }, 316b028f94bSYoshii Takashi }; 317b028f94bSYoshii Takashi 318b028f94bSYoshii Takashi static struct resource i2c2_resources[] = { 319b028f94bSYoshii Takashi [0] = { 320b028f94bSYoshii Takashi .name = "IIC2", 321b028f94bSYoshii Takashi .start = 0xe6824000, 322b028f94bSYoshii Takashi .end = 0xe6824425 - 1, 323b028f94bSYoshii Takashi .flags = IORESOURCE_MEM, 324b028f94bSYoshii Takashi }, 325b028f94bSYoshii Takashi [1] = { 326b028f94bSYoshii Takashi .start = gic_spi(171), 327b028f94bSYoshii Takashi .end = gic_spi(174), 328b028f94bSYoshii Takashi .flags = IORESOURCE_IRQ, 329b028f94bSYoshii Takashi }, 330b028f94bSYoshii Takashi }; 331b028f94bSYoshii Takashi 332b028f94bSYoshii Takashi static struct resource i2c3_resources[] = { 333b028f94bSYoshii Takashi [0] = { 334b028f94bSYoshii Takashi .name = "IIC3", 335b028f94bSYoshii Takashi .start = 0xe6826000, 336b028f94bSYoshii Takashi .end = 0xe6826425 - 1, 337b028f94bSYoshii Takashi .flags = IORESOURCE_MEM, 338b028f94bSYoshii Takashi }, 339b028f94bSYoshii Takashi [1] = { 340b028f94bSYoshii Takashi .start = gic_spi(183), 341b028f94bSYoshii Takashi .end = gic_spi(186), 342b028f94bSYoshii Takashi .flags = IORESOURCE_IRQ, 343b028f94bSYoshii Takashi }, 344b028f94bSYoshii Takashi }; 345b028f94bSYoshii Takashi 346b028f94bSYoshii Takashi static struct resource i2c4_resources[] = { 347b028f94bSYoshii Takashi [0] = { 348b028f94bSYoshii Takashi .name = "IIC4", 349b028f94bSYoshii Takashi .start = 0xe6828000, 350b028f94bSYoshii Takashi .end = 0xe6828425 - 1, 351b028f94bSYoshii Takashi .flags = IORESOURCE_MEM, 352b028f94bSYoshii Takashi }, 353b028f94bSYoshii Takashi [1] = { 354b028f94bSYoshii Takashi .start = gic_spi(187), 355b028f94bSYoshii Takashi .end = gic_spi(190), 356b028f94bSYoshii Takashi .flags = IORESOURCE_IRQ, 357b028f94bSYoshii Takashi }, 358b028f94bSYoshii Takashi }; 359b028f94bSYoshii Takashi 360b028f94bSYoshii Takashi static struct platform_device i2c0_device = { 361b028f94bSYoshii Takashi .name = "i2c-sh_mobile", 362b028f94bSYoshii Takashi .id = 0, 363b028f94bSYoshii Takashi .resource = i2c0_resources, 364b028f94bSYoshii Takashi .num_resources = ARRAY_SIZE(i2c0_resources), 365b028f94bSYoshii Takashi }; 366b028f94bSYoshii Takashi 367b028f94bSYoshii Takashi static struct platform_device i2c1_device = { 368b028f94bSYoshii Takashi .name = "i2c-sh_mobile", 369b028f94bSYoshii Takashi .id = 1, 370b028f94bSYoshii Takashi .resource = i2c1_resources, 371b028f94bSYoshii Takashi .num_resources = ARRAY_SIZE(i2c1_resources), 372b028f94bSYoshii Takashi }; 373b028f94bSYoshii Takashi 374b028f94bSYoshii Takashi static struct platform_device i2c2_device = { 375b028f94bSYoshii Takashi .name = "i2c-sh_mobile", 376b028f94bSYoshii Takashi .id = 2, 377b028f94bSYoshii Takashi .resource = i2c2_resources, 378b028f94bSYoshii Takashi .num_resources = ARRAY_SIZE(i2c2_resources), 379b028f94bSYoshii Takashi }; 380b028f94bSYoshii Takashi 381b028f94bSYoshii Takashi static struct platform_device i2c3_device = { 382b028f94bSYoshii Takashi .name = "i2c-sh_mobile", 383b028f94bSYoshii Takashi .id = 3, 384b028f94bSYoshii Takashi .resource = i2c3_resources, 385b028f94bSYoshii Takashi .num_resources = ARRAY_SIZE(i2c3_resources), 386b028f94bSYoshii Takashi }; 387b028f94bSYoshii Takashi 388b028f94bSYoshii Takashi static struct platform_device i2c4_device = { 389b028f94bSYoshii Takashi .name = "i2c-sh_mobile", 390b028f94bSYoshii Takashi .id = 4, 391b028f94bSYoshii Takashi .resource = i2c4_resources, 392b028f94bSYoshii Takashi .num_resources = ARRAY_SIZE(i2c4_resources), 393b028f94bSYoshii Takashi }; 394b028f94bSYoshii Takashi 3956d9598e2SMagnus Damm static struct platform_device *sh73a0_early_devices[] __initdata = { 3966d9598e2SMagnus Damm &scif0_device, 3976d9598e2SMagnus Damm &scif1_device, 3986d9598e2SMagnus Damm &scif2_device, 3996d9598e2SMagnus Damm &scif3_device, 4006d9598e2SMagnus Damm &scif4_device, 4016d9598e2SMagnus Damm &scif5_device, 4026d9598e2SMagnus Damm &scif6_device, 4036d9598e2SMagnus Damm &scif7_device, 4046d9598e2SMagnus Damm &scif8_device, 4056d9598e2SMagnus Damm &cmt10_device, 4065010f3dbSMagnus Damm &tmu00_device, 4075010f3dbSMagnus Damm &tmu01_device, 4086d9598e2SMagnus Damm }; 4096d9598e2SMagnus Damm 410b028f94bSYoshii Takashi static struct platform_device *sh73a0_late_devices[] __initdata = { 411b028f94bSYoshii Takashi &i2c0_device, 412b028f94bSYoshii Takashi &i2c1_device, 413b028f94bSYoshii Takashi &i2c2_device, 414b028f94bSYoshii Takashi &i2c3_device, 415b028f94bSYoshii Takashi &i2c4_device, 416b028f94bSYoshii Takashi }; 417b028f94bSYoshii Takashi 4186d9598e2SMagnus Damm void __init sh73a0_add_standard_devices(void) 4196d9598e2SMagnus Damm { 4206d9598e2SMagnus Damm platform_add_devices(sh73a0_early_devices, 4216d9598e2SMagnus Damm ARRAY_SIZE(sh73a0_early_devices)); 422b028f94bSYoshii Takashi platform_add_devices(sh73a0_late_devices, 423b028f94bSYoshii Takashi ARRAY_SIZE(sh73a0_late_devices)); 4246d9598e2SMagnus Damm } 4256d9598e2SMagnus Damm 4266d9598e2SMagnus Damm void __init sh73a0_add_early_devices(void) 4276d9598e2SMagnus Damm { 4286d9598e2SMagnus Damm early_platform_add_devices(sh73a0_early_devices, 4296d9598e2SMagnus Damm ARRAY_SIZE(sh73a0_early_devices)); 4306d9598e2SMagnus Damm } 431