162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Renesas R0P7757LC0012RL Support. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2009 - 2010 Renesas Solutions Corp. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/init.h> 962306a36Sopenharmony_ci#include <linux/platform_device.h> 1062306a36Sopenharmony_ci#include <linux/gpio.h> 1162306a36Sopenharmony_ci#include <linux/irq.h> 1262306a36Sopenharmony_ci#include <linux/regulator/fixed.h> 1362306a36Sopenharmony_ci#include <linux/regulator/machine.h> 1462306a36Sopenharmony_ci#include <linux/spi/spi.h> 1562306a36Sopenharmony_ci#include <linux/spi/flash.h> 1662306a36Sopenharmony_ci#include <linux/io.h> 1762306a36Sopenharmony_ci#include <linux/mfd/tmio.h> 1862306a36Sopenharmony_ci#include <linux/mmc/host.h> 1962306a36Sopenharmony_ci#include <linux/platform_data/sh_mmcif.h> 2062306a36Sopenharmony_ci#include <linux/sh_eth.h> 2162306a36Sopenharmony_ci#include <linux/sh_intc.h> 2262306a36Sopenharmony_ci#include <linux/usb/renesas_usbhs.h> 2362306a36Sopenharmony_ci#include <cpu/sh7757.h> 2462306a36Sopenharmony_ci#include <asm/heartbeat.h> 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistatic struct resource heartbeat_resource = { 2762306a36Sopenharmony_ci .start = 0xffec005c, /* PUDR */ 2862306a36Sopenharmony_ci .end = 0xffec005c, 2962306a36Sopenharmony_ci .flags = IORESOURCE_MEM | IORESOURCE_MEM_8BIT, 3062306a36Sopenharmony_ci}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cistatic unsigned char heartbeat_bit_pos[] = { 0, 1, 2, 3 }; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistatic struct heartbeat_data heartbeat_data = { 3562306a36Sopenharmony_ci .bit_pos = heartbeat_bit_pos, 3662306a36Sopenharmony_ci .nr_bits = ARRAY_SIZE(heartbeat_bit_pos), 3762306a36Sopenharmony_ci .flags = HEARTBEAT_INVERTED, 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistatic struct platform_device heartbeat_device = { 4162306a36Sopenharmony_ci .name = "heartbeat", 4262306a36Sopenharmony_ci .id = -1, 4362306a36Sopenharmony_ci .dev = { 4462306a36Sopenharmony_ci .platform_data = &heartbeat_data, 4562306a36Sopenharmony_ci }, 4662306a36Sopenharmony_ci .num_resources = 1, 4762306a36Sopenharmony_ci .resource = &heartbeat_resource, 4862306a36Sopenharmony_ci}; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci/* Fast Ethernet */ 5162306a36Sopenharmony_ci#define GBECONT 0xffc10100 5262306a36Sopenharmony_ci#define GBECONT_RMII1 BIT(17) 5362306a36Sopenharmony_ci#define GBECONT_RMII0 BIT(16) 5462306a36Sopenharmony_cistatic void sh7757_eth_set_mdio_gate(void *addr) 5562306a36Sopenharmony_ci{ 5662306a36Sopenharmony_ci if (((unsigned long)addr & 0x00000fff) < 0x0800) 5762306a36Sopenharmony_ci writel(readl(GBECONT) | GBECONT_RMII0, GBECONT); 5862306a36Sopenharmony_ci else 5962306a36Sopenharmony_ci writel(readl(GBECONT) | GBECONT_RMII1, GBECONT); 6062306a36Sopenharmony_ci} 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cistatic struct resource sh_eth0_resources[] = { 6362306a36Sopenharmony_ci { 6462306a36Sopenharmony_ci .start = 0xfef00000, 6562306a36Sopenharmony_ci .end = 0xfef001ff, 6662306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 6762306a36Sopenharmony_ci }, { 6862306a36Sopenharmony_ci .start = evt2irq(0xc80), 6962306a36Sopenharmony_ci .end = evt2irq(0xc80), 7062306a36Sopenharmony_ci .flags = IORESOURCE_IRQ, 7162306a36Sopenharmony_ci }, 7262306a36Sopenharmony_ci}; 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_cistatic struct sh_eth_plat_data sh7757_eth0_pdata = { 7562306a36Sopenharmony_ci .phy = 1, 7662306a36Sopenharmony_ci .set_mdio_gate = sh7757_eth_set_mdio_gate, 7762306a36Sopenharmony_ci}; 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_cistatic struct platform_device sh7757_eth0_device = { 8062306a36Sopenharmony_ci .name = "sh7757-ether", 8162306a36Sopenharmony_ci .resource = sh_eth0_resources, 8262306a36Sopenharmony_ci .id = 0, 8362306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(sh_eth0_resources), 8462306a36Sopenharmony_ci .dev = { 8562306a36Sopenharmony_ci .platform_data = &sh7757_eth0_pdata, 8662306a36Sopenharmony_ci }, 8762306a36Sopenharmony_ci}; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_cistatic struct resource sh_eth1_resources[] = { 9062306a36Sopenharmony_ci { 9162306a36Sopenharmony_ci .start = 0xfef00800, 9262306a36Sopenharmony_ci .end = 0xfef009ff, 9362306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 9462306a36Sopenharmony_ci }, { 9562306a36Sopenharmony_ci .start = evt2irq(0xc80), 9662306a36Sopenharmony_ci .end = evt2irq(0xc80), 9762306a36Sopenharmony_ci .flags = IORESOURCE_IRQ, 9862306a36Sopenharmony_ci }, 9962306a36Sopenharmony_ci}; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_cistatic struct sh_eth_plat_data sh7757_eth1_pdata = { 10262306a36Sopenharmony_ci .phy = 1, 10362306a36Sopenharmony_ci .set_mdio_gate = sh7757_eth_set_mdio_gate, 10462306a36Sopenharmony_ci}; 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_cistatic struct platform_device sh7757_eth1_device = { 10762306a36Sopenharmony_ci .name = "sh7757-ether", 10862306a36Sopenharmony_ci .resource = sh_eth1_resources, 10962306a36Sopenharmony_ci .id = 1, 11062306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(sh_eth1_resources), 11162306a36Sopenharmony_ci .dev = { 11262306a36Sopenharmony_ci .platform_data = &sh7757_eth1_pdata, 11362306a36Sopenharmony_ci }, 11462306a36Sopenharmony_ci}; 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_cistatic void sh7757_eth_giga_set_mdio_gate(void *addr) 11762306a36Sopenharmony_ci{ 11862306a36Sopenharmony_ci if (((unsigned long)addr & 0x00000fff) < 0x0800) { 11962306a36Sopenharmony_ci gpio_set_value(GPIO_PTT4, 1); 12062306a36Sopenharmony_ci writel(readl(GBECONT) & ~GBECONT_RMII0, GBECONT); 12162306a36Sopenharmony_ci } else { 12262306a36Sopenharmony_ci gpio_set_value(GPIO_PTT4, 0); 12362306a36Sopenharmony_ci writel(readl(GBECONT) & ~GBECONT_RMII1, GBECONT); 12462306a36Sopenharmony_ci } 12562306a36Sopenharmony_ci} 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_cistatic struct resource sh_eth_giga0_resources[] = { 12862306a36Sopenharmony_ci { 12962306a36Sopenharmony_ci .start = 0xfee00000, 13062306a36Sopenharmony_ci .end = 0xfee007ff, 13162306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 13262306a36Sopenharmony_ci }, { 13362306a36Sopenharmony_ci /* TSU */ 13462306a36Sopenharmony_ci .start = 0xfee01800, 13562306a36Sopenharmony_ci .end = 0xfee01fff, 13662306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 13762306a36Sopenharmony_ci }, { 13862306a36Sopenharmony_ci .start = evt2irq(0x2960), 13962306a36Sopenharmony_ci .end = evt2irq(0x2960), 14062306a36Sopenharmony_ci .flags = IORESOURCE_IRQ, 14162306a36Sopenharmony_ci }, 14262306a36Sopenharmony_ci}; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_cistatic struct sh_eth_plat_data sh7757_eth_giga0_pdata = { 14562306a36Sopenharmony_ci .phy = 18, 14662306a36Sopenharmony_ci .set_mdio_gate = sh7757_eth_giga_set_mdio_gate, 14762306a36Sopenharmony_ci .phy_interface = PHY_INTERFACE_MODE_RGMII_ID, 14862306a36Sopenharmony_ci}; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_cistatic struct platform_device sh7757_eth_giga0_device = { 15162306a36Sopenharmony_ci .name = "sh7757-gether", 15262306a36Sopenharmony_ci .resource = sh_eth_giga0_resources, 15362306a36Sopenharmony_ci .id = 2, 15462306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(sh_eth_giga0_resources), 15562306a36Sopenharmony_ci .dev = { 15662306a36Sopenharmony_ci .platform_data = &sh7757_eth_giga0_pdata, 15762306a36Sopenharmony_ci }, 15862306a36Sopenharmony_ci}; 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_cistatic struct resource sh_eth_giga1_resources[] = { 16162306a36Sopenharmony_ci { 16262306a36Sopenharmony_ci .start = 0xfee00800, 16362306a36Sopenharmony_ci .end = 0xfee00fff, 16462306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 16562306a36Sopenharmony_ci }, { 16662306a36Sopenharmony_ci /* TSU */ 16762306a36Sopenharmony_ci .start = 0xfee01800, 16862306a36Sopenharmony_ci .end = 0xfee01fff, 16962306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 17062306a36Sopenharmony_ci }, { 17162306a36Sopenharmony_ci .start = evt2irq(0x2980), 17262306a36Sopenharmony_ci .end = evt2irq(0x2980), 17362306a36Sopenharmony_ci .flags = IORESOURCE_IRQ, 17462306a36Sopenharmony_ci }, 17562306a36Sopenharmony_ci}; 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_cistatic struct sh_eth_plat_data sh7757_eth_giga1_pdata = { 17862306a36Sopenharmony_ci .phy = 19, 17962306a36Sopenharmony_ci .set_mdio_gate = sh7757_eth_giga_set_mdio_gate, 18062306a36Sopenharmony_ci .phy_interface = PHY_INTERFACE_MODE_RGMII_ID, 18162306a36Sopenharmony_ci}; 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_cistatic struct platform_device sh7757_eth_giga1_device = { 18462306a36Sopenharmony_ci .name = "sh7757-gether", 18562306a36Sopenharmony_ci .resource = sh_eth_giga1_resources, 18662306a36Sopenharmony_ci .id = 3, 18762306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(sh_eth_giga1_resources), 18862306a36Sopenharmony_ci .dev = { 18962306a36Sopenharmony_ci .platform_data = &sh7757_eth_giga1_pdata, 19062306a36Sopenharmony_ci }, 19162306a36Sopenharmony_ci}; 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci/* Fixed 3.3V regulator to be used by SDHI0, MMCIF */ 19462306a36Sopenharmony_cistatic struct regulator_consumer_supply fixed3v3_power_consumers[] = 19562306a36Sopenharmony_ci{ 19662306a36Sopenharmony_ci REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), 19762306a36Sopenharmony_ci REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"), 19862306a36Sopenharmony_ci REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"), 19962306a36Sopenharmony_ci REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"), 20062306a36Sopenharmony_ci}; 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci/* SH_MMCIF */ 20362306a36Sopenharmony_cistatic struct resource sh_mmcif_resources[] = { 20462306a36Sopenharmony_ci [0] = { 20562306a36Sopenharmony_ci .start = 0xffcb0000, 20662306a36Sopenharmony_ci .end = 0xffcb00ff, 20762306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 20862306a36Sopenharmony_ci }, 20962306a36Sopenharmony_ci [1] = { 21062306a36Sopenharmony_ci .start = evt2irq(0x1c60), 21162306a36Sopenharmony_ci .flags = IORESOURCE_IRQ, 21262306a36Sopenharmony_ci }, 21362306a36Sopenharmony_ci [2] = { 21462306a36Sopenharmony_ci .start = evt2irq(0x1c80), 21562306a36Sopenharmony_ci .flags = IORESOURCE_IRQ, 21662306a36Sopenharmony_ci }, 21762306a36Sopenharmony_ci}; 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_cistatic struct sh_mmcif_plat_data sh_mmcif_plat = { 22062306a36Sopenharmony_ci .sup_pclk = 0x0f, 22162306a36Sopenharmony_ci .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA | 22262306a36Sopenharmony_ci MMC_CAP_NONREMOVABLE, 22362306a36Sopenharmony_ci .ocr = MMC_VDD_32_33 | MMC_VDD_33_34, 22462306a36Sopenharmony_ci .slave_id_tx = SHDMA_SLAVE_MMCIF_TX, 22562306a36Sopenharmony_ci .slave_id_rx = SHDMA_SLAVE_MMCIF_RX, 22662306a36Sopenharmony_ci}; 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_cistatic struct platform_device sh_mmcif_device = { 22962306a36Sopenharmony_ci .name = "sh_mmcif", 23062306a36Sopenharmony_ci .id = 0, 23162306a36Sopenharmony_ci .dev = { 23262306a36Sopenharmony_ci .platform_data = &sh_mmcif_plat, 23362306a36Sopenharmony_ci }, 23462306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(sh_mmcif_resources), 23562306a36Sopenharmony_ci .resource = sh_mmcif_resources, 23662306a36Sopenharmony_ci}; 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci/* SDHI0 */ 23962306a36Sopenharmony_cistatic struct tmio_mmc_data sdhi_info = { 24062306a36Sopenharmony_ci .chan_priv_tx = (void *)SHDMA_SLAVE_SDHI_TX, 24162306a36Sopenharmony_ci .chan_priv_rx = (void *)SHDMA_SLAVE_SDHI_RX, 24262306a36Sopenharmony_ci .capabilities = MMC_CAP_SD_HIGHSPEED, 24362306a36Sopenharmony_ci}; 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_cistatic struct resource sdhi_resources[] = { 24662306a36Sopenharmony_ci [0] = { 24762306a36Sopenharmony_ci .start = 0xffe50000, 24862306a36Sopenharmony_ci .end = 0xffe500ff, 24962306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 25062306a36Sopenharmony_ci }, 25162306a36Sopenharmony_ci [1] = { 25262306a36Sopenharmony_ci .start = evt2irq(0x480), 25362306a36Sopenharmony_ci .flags = IORESOURCE_IRQ, 25462306a36Sopenharmony_ci }, 25562306a36Sopenharmony_ci}; 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_cistatic struct platform_device sdhi_device = { 25862306a36Sopenharmony_ci .name = "sh_mobile_sdhi", 25962306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(sdhi_resources), 26062306a36Sopenharmony_ci .resource = sdhi_resources, 26162306a36Sopenharmony_ci .id = 0, 26262306a36Sopenharmony_ci .dev = { 26362306a36Sopenharmony_ci .platform_data = &sdhi_info, 26462306a36Sopenharmony_ci }, 26562306a36Sopenharmony_ci}; 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_cistatic int usbhs0_get_id(struct platform_device *pdev) 26862306a36Sopenharmony_ci{ 26962306a36Sopenharmony_ci return USBHS_GADGET; 27062306a36Sopenharmony_ci} 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_cistatic struct renesas_usbhs_platform_info usb0_data = { 27362306a36Sopenharmony_ci .platform_callback = { 27462306a36Sopenharmony_ci .get_id = usbhs0_get_id, 27562306a36Sopenharmony_ci }, 27662306a36Sopenharmony_ci .driver_param = { 27762306a36Sopenharmony_ci .buswait_bwait = 5, 27862306a36Sopenharmony_ci } 27962306a36Sopenharmony_ci}; 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_cistatic struct resource usb0_resources[] = { 28262306a36Sopenharmony_ci [0] = { 28362306a36Sopenharmony_ci .start = 0xfe450000, 28462306a36Sopenharmony_ci .end = 0xfe4501ff, 28562306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 28662306a36Sopenharmony_ci }, 28762306a36Sopenharmony_ci [1] = { 28862306a36Sopenharmony_ci .start = evt2irq(0x840), 28962306a36Sopenharmony_ci .end = evt2irq(0x840), 29062306a36Sopenharmony_ci .flags = IORESOURCE_IRQ, 29162306a36Sopenharmony_ci }, 29262306a36Sopenharmony_ci}; 29362306a36Sopenharmony_ci 29462306a36Sopenharmony_cistatic struct platform_device usb0_device = { 29562306a36Sopenharmony_ci .name = "renesas_usbhs", 29662306a36Sopenharmony_ci .id = 0, 29762306a36Sopenharmony_ci .dev = { 29862306a36Sopenharmony_ci .platform_data = &usb0_data, 29962306a36Sopenharmony_ci }, 30062306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(usb0_resources), 30162306a36Sopenharmony_ci .resource = usb0_resources, 30262306a36Sopenharmony_ci}; 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_cistatic struct platform_device *sh7757lcr_devices[] __initdata = { 30562306a36Sopenharmony_ci &heartbeat_device, 30662306a36Sopenharmony_ci &sh7757_eth0_device, 30762306a36Sopenharmony_ci &sh7757_eth1_device, 30862306a36Sopenharmony_ci &sh7757_eth_giga0_device, 30962306a36Sopenharmony_ci &sh7757_eth_giga1_device, 31062306a36Sopenharmony_ci &sh_mmcif_device, 31162306a36Sopenharmony_ci &sdhi_device, 31262306a36Sopenharmony_ci &usb0_device, 31362306a36Sopenharmony_ci}; 31462306a36Sopenharmony_ci 31562306a36Sopenharmony_cistatic struct flash_platform_data spi_flash_data = { 31662306a36Sopenharmony_ci .name = "m25p80", 31762306a36Sopenharmony_ci .type = "m25px64", 31862306a36Sopenharmony_ci}; 31962306a36Sopenharmony_ci 32062306a36Sopenharmony_cistatic struct spi_board_info spi_board_info[] = { 32162306a36Sopenharmony_ci { 32262306a36Sopenharmony_ci .modalias = "m25p80", 32362306a36Sopenharmony_ci .max_speed_hz = 25000000, 32462306a36Sopenharmony_ci .bus_num = 0, 32562306a36Sopenharmony_ci .chip_select = 1, 32662306a36Sopenharmony_ci .platform_data = &spi_flash_data, 32762306a36Sopenharmony_ci }, 32862306a36Sopenharmony_ci}; 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_cistatic int __init sh7757lcr_devices_setup(void) 33162306a36Sopenharmony_ci{ 33262306a36Sopenharmony_ci regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers, 33362306a36Sopenharmony_ci ARRAY_SIZE(fixed3v3_power_consumers), 3300000); 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_ci /* RGMII (PTA) */ 33662306a36Sopenharmony_ci gpio_request(GPIO_FN_ET0_MDC, NULL); 33762306a36Sopenharmony_ci gpio_request(GPIO_FN_ET0_MDIO, NULL); 33862306a36Sopenharmony_ci gpio_request(GPIO_FN_ET1_MDC, NULL); 33962306a36Sopenharmony_ci gpio_request(GPIO_FN_ET1_MDIO, NULL); 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_ci /* ONFI (PTB, PTZ) */ 34262306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_NRE, NULL); 34362306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_NWE, NULL); 34462306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_NWP, NULL); 34562306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_NCE0, NULL); 34662306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_R_B0, NULL); 34762306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_ALE, NULL); 34862306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_CLE, NULL); 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_DQ7, NULL); 35162306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_DQ6, NULL); 35262306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_DQ5, NULL); 35362306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_DQ4, NULL); 35462306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_DQ3, NULL); 35562306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_DQ2, NULL); 35662306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_DQ1, NULL); 35762306a36Sopenharmony_ci gpio_request(GPIO_FN_ON_DQ0, NULL); 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ci /* IRQ8 to 0 (PTB, PTC) */ 36062306a36Sopenharmony_ci gpio_request(GPIO_FN_IRQ8, NULL); 36162306a36Sopenharmony_ci gpio_request(GPIO_FN_IRQ7, NULL); 36262306a36Sopenharmony_ci gpio_request(GPIO_FN_IRQ6, NULL); 36362306a36Sopenharmony_ci gpio_request(GPIO_FN_IRQ5, NULL); 36462306a36Sopenharmony_ci gpio_request(GPIO_FN_IRQ4, NULL); 36562306a36Sopenharmony_ci gpio_request(GPIO_FN_IRQ3, NULL); 36662306a36Sopenharmony_ci gpio_request(GPIO_FN_IRQ2, NULL); 36762306a36Sopenharmony_ci gpio_request(GPIO_FN_IRQ1, NULL); 36862306a36Sopenharmony_ci gpio_request(GPIO_FN_IRQ0, NULL); 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_ci /* SPI0 (PTD) */ 37162306a36Sopenharmony_ci gpio_request(GPIO_FN_SP0_MOSI, NULL); 37262306a36Sopenharmony_ci gpio_request(GPIO_FN_SP0_MISO, NULL); 37362306a36Sopenharmony_ci gpio_request(GPIO_FN_SP0_SCK, NULL); 37462306a36Sopenharmony_ci gpio_request(GPIO_FN_SP0_SCK_FB, NULL); 37562306a36Sopenharmony_ci gpio_request(GPIO_FN_SP0_SS0, NULL); 37662306a36Sopenharmony_ci gpio_request(GPIO_FN_SP0_SS1, NULL); 37762306a36Sopenharmony_ci gpio_request(GPIO_FN_SP0_SS2, NULL); 37862306a36Sopenharmony_ci gpio_request(GPIO_FN_SP0_SS3, NULL); 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_ci /* RMII 0/1 (PTE, PTF) */ 38162306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII0_CRS_DV, NULL); 38262306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII0_TXD1, NULL); 38362306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII0_TXD0, NULL); 38462306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII0_TXEN, NULL); 38562306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII0_REFCLK, NULL); 38662306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII0_RXD1, NULL); 38762306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII0_RXD0, NULL); 38862306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII0_RX_ER, NULL); 38962306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII1_CRS_DV, NULL); 39062306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII1_TXD1, NULL); 39162306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII1_TXD0, NULL); 39262306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII1_TXEN, NULL); 39362306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII1_REFCLK, NULL); 39462306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII1_RXD1, NULL); 39562306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII1_RXD0, NULL); 39662306a36Sopenharmony_ci gpio_request(GPIO_FN_RMII1_RX_ER, NULL); 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci /* eMMC (PTG) */ 39962306a36Sopenharmony_ci gpio_request(GPIO_FN_MMCCLK, NULL); 40062306a36Sopenharmony_ci gpio_request(GPIO_FN_MMCCMD, NULL); 40162306a36Sopenharmony_ci gpio_request(GPIO_FN_MMCDAT7, NULL); 40262306a36Sopenharmony_ci gpio_request(GPIO_FN_MMCDAT6, NULL); 40362306a36Sopenharmony_ci gpio_request(GPIO_FN_MMCDAT5, NULL); 40462306a36Sopenharmony_ci gpio_request(GPIO_FN_MMCDAT4, NULL); 40562306a36Sopenharmony_ci gpio_request(GPIO_FN_MMCDAT3, NULL); 40662306a36Sopenharmony_ci gpio_request(GPIO_FN_MMCDAT2, NULL); 40762306a36Sopenharmony_ci gpio_request(GPIO_FN_MMCDAT1, NULL); 40862306a36Sopenharmony_ci gpio_request(GPIO_FN_MMCDAT0, NULL); 40962306a36Sopenharmony_ci 41062306a36Sopenharmony_ci /* LPC (PTG, PTH, PTQ, PTU) */ 41162306a36Sopenharmony_ci gpio_request(GPIO_FN_SERIRQ, NULL); 41262306a36Sopenharmony_ci gpio_request(GPIO_FN_LPCPD, NULL); 41362306a36Sopenharmony_ci gpio_request(GPIO_FN_LDRQ, NULL); 41462306a36Sopenharmony_ci gpio_request(GPIO_FN_WP, NULL); 41562306a36Sopenharmony_ci gpio_request(GPIO_FN_FMS0, NULL); 41662306a36Sopenharmony_ci gpio_request(GPIO_FN_LAD3, NULL); 41762306a36Sopenharmony_ci gpio_request(GPIO_FN_LAD2, NULL); 41862306a36Sopenharmony_ci gpio_request(GPIO_FN_LAD1, NULL); 41962306a36Sopenharmony_ci gpio_request(GPIO_FN_LAD0, NULL); 42062306a36Sopenharmony_ci gpio_request(GPIO_FN_LFRAME, NULL); 42162306a36Sopenharmony_ci gpio_request(GPIO_FN_LRESET, NULL); 42262306a36Sopenharmony_ci gpio_request(GPIO_FN_LCLK, NULL); 42362306a36Sopenharmony_ci gpio_request(GPIO_FN_LGPIO7, NULL); 42462306a36Sopenharmony_ci gpio_request(GPIO_FN_LGPIO6, NULL); 42562306a36Sopenharmony_ci gpio_request(GPIO_FN_LGPIO5, NULL); 42662306a36Sopenharmony_ci gpio_request(GPIO_FN_LGPIO4, NULL); 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_ci /* SPI1 (PTH) */ 42962306a36Sopenharmony_ci gpio_request(GPIO_FN_SP1_MOSI, NULL); 43062306a36Sopenharmony_ci gpio_request(GPIO_FN_SP1_MISO, NULL); 43162306a36Sopenharmony_ci gpio_request(GPIO_FN_SP1_SCK, NULL); 43262306a36Sopenharmony_ci gpio_request(GPIO_FN_SP1_SCK_FB, NULL); 43362306a36Sopenharmony_ci gpio_request(GPIO_FN_SP1_SS0, NULL); 43462306a36Sopenharmony_ci gpio_request(GPIO_FN_SP1_SS1, NULL); 43562306a36Sopenharmony_ci 43662306a36Sopenharmony_ci /* SDHI (PTI) */ 43762306a36Sopenharmony_ci gpio_request(GPIO_FN_SD_WP, NULL); 43862306a36Sopenharmony_ci gpio_request(GPIO_FN_SD_CD, NULL); 43962306a36Sopenharmony_ci gpio_request(GPIO_FN_SD_CLK, NULL); 44062306a36Sopenharmony_ci gpio_request(GPIO_FN_SD_CMD, NULL); 44162306a36Sopenharmony_ci gpio_request(GPIO_FN_SD_D3, NULL); 44262306a36Sopenharmony_ci gpio_request(GPIO_FN_SD_D2, NULL); 44362306a36Sopenharmony_ci gpio_request(GPIO_FN_SD_D1, NULL); 44462306a36Sopenharmony_ci gpio_request(GPIO_FN_SD_D0, NULL); 44562306a36Sopenharmony_ci 44662306a36Sopenharmony_ci /* SCIF3/4 (PTJ, PTW) */ 44762306a36Sopenharmony_ci gpio_request(GPIO_FN_RTS3, NULL); 44862306a36Sopenharmony_ci gpio_request(GPIO_FN_CTS3, NULL); 44962306a36Sopenharmony_ci gpio_request(GPIO_FN_TXD3, NULL); 45062306a36Sopenharmony_ci gpio_request(GPIO_FN_RXD3, NULL); 45162306a36Sopenharmony_ci gpio_request(GPIO_FN_RTS4, NULL); 45262306a36Sopenharmony_ci gpio_request(GPIO_FN_RXD4, NULL); 45362306a36Sopenharmony_ci gpio_request(GPIO_FN_TXD4, NULL); 45462306a36Sopenharmony_ci gpio_request(GPIO_FN_CTS4, NULL); 45562306a36Sopenharmony_ci 45662306a36Sopenharmony_ci /* SERMUX (PTK, PTL, PTO, PTV) */ 45762306a36Sopenharmony_ci gpio_request(GPIO_FN_COM2_TXD, NULL); 45862306a36Sopenharmony_ci gpio_request(GPIO_FN_COM2_RXD, NULL); 45962306a36Sopenharmony_ci gpio_request(GPIO_FN_COM2_RTS, NULL); 46062306a36Sopenharmony_ci gpio_request(GPIO_FN_COM2_CTS, NULL); 46162306a36Sopenharmony_ci gpio_request(GPIO_FN_COM2_DTR, NULL); 46262306a36Sopenharmony_ci gpio_request(GPIO_FN_COM2_DSR, NULL); 46362306a36Sopenharmony_ci gpio_request(GPIO_FN_COM2_DCD, NULL); 46462306a36Sopenharmony_ci gpio_request(GPIO_FN_COM2_RI, NULL); 46562306a36Sopenharmony_ci gpio_request(GPIO_FN_RAC_RXD, NULL); 46662306a36Sopenharmony_ci gpio_request(GPIO_FN_RAC_RTS, NULL); 46762306a36Sopenharmony_ci gpio_request(GPIO_FN_RAC_CTS, NULL); 46862306a36Sopenharmony_ci gpio_request(GPIO_FN_RAC_DTR, NULL); 46962306a36Sopenharmony_ci gpio_request(GPIO_FN_RAC_DSR, NULL); 47062306a36Sopenharmony_ci gpio_request(GPIO_FN_RAC_DCD, NULL); 47162306a36Sopenharmony_ci gpio_request(GPIO_FN_RAC_TXD, NULL); 47262306a36Sopenharmony_ci gpio_request(GPIO_FN_COM1_TXD, NULL); 47362306a36Sopenharmony_ci gpio_request(GPIO_FN_COM1_RXD, NULL); 47462306a36Sopenharmony_ci gpio_request(GPIO_FN_COM1_RTS, NULL); 47562306a36Sopenharmony_ci gpio_request(GPIO_FN_COM1_CTS, NULL); 47662306a36Sopenharmony_ci 47762306a36Sopenharmony_ci writeb(0x10, 0xfe470000); /* SMR0: SerMux mode 0 */ 47862306a36Sopenharmony_ci 47962306a36Sopenharmony_ci /* IIC (PTM, PTR, PTS) */ 48062306a36Sopenharmony_ci gpio_request(GPIO_FN_SDA7, NULL); 48162306a36Sopenharmony_ci gpio_request(GPIO_FN_SCL7, NULL); 48262306a36Sopenharmony_ci gpio_request(GPIO_FN_SDA6, NULL); 48362306a36Sopenharmony_ci gpio_request(GPIO_FN_SCL6, NULL); 48462306a36Sopenharmony_ci gpio_request(GPIO_FN_SDA5, NULL); 48562306a36Sopenharmony_ci gpio_request(GPIO_FN_SCL5, NULL); 48662306a36Sopenharmony_ci gpio_request(GPIO_FN_SDA4, NULL); 48762306a36Sopenharmony_ci gpio_request(GPIO_FN_SCL4, NULL); 48862306a36Sopenharmony_ci gpio_request(GPIO_FN_SDA3, NULL); 48962306a36Sopenharmony_ci gpio_request(GPIO_FN_SCL3, NULL); 49062306a36Sopenharmony_ci gpio_request(GPIO_FN_SDA2, NULL); 49162306a36Sopenharmony_ci gpio_request(GPIO_FN_SCL2, NULL); 49262306a36Sopenharmony_ci gpio_request(GPIO_FN_SDA1, NULL); 49362306a36Sopenharmony_ci gpio_request(GPIO_FN_SCL1, NULL); 49462306a36Sopenharmony_ci gpio_request(GPIO_FN_SDA0, NULL); 49562306a36Sopenharmony_ci gpio_request(GPIO_FN_SCL0, NULL); 49662306a36Sopenharmony_ci 49762306a36Sopenharmony_ci /* USB (PTN) */ 49862306a36Sopenharmony_ci gpio_request(GPIO_FN_VBUS_EN, NULL); 49962306a36Sopenharmony_ci gpio_request(GPIO_FN_VBUS_OC, NULL); 50062306a36Sopenharmony_ci 50162306a36Sopenharmony_ci /* SGPIO1/0 (PTN, PTO) */ 50262306a36Sopenharmony_ci gpio_request(GPIO_FN_SGPIO1_CLK, NULL); 50362306a36Sopenharmony_ci gpio_request(GPIO_FN_SGPIO1_LOAD, NULL); 50462306a36Sopenharmony_ci gpio_request(GPIO_FN_SGPIO1_DI, NULL); 50562306a36Sopenharmony_ci gpio_request(GPIO_FN_SGPIO1_DO, NULL); 50662306a36Sopenharmony_ci gpio_request(GPIO_FN_SGPIO0_CLK, NULL); 50762306a36Sopenharmony_ci gpio_request(GPIO_FN_SGPIO0_LOAD, NULL); 50862306a36Sopenharmony_ci gpio_request(GPIO_FN_SGPIO0_DI, NULL); 50962306a36Sopenharmony_ci gpio_request(GPIO_FN_SGPIO0_DO, NULL); 51062306a36Sopenharmony_ci 51162306a36Sopenharmony_ci /* WDT (PTN) */ 51262306a36Sopenharmony_ci gpio_request(GPIO_FN_SUB_CLKIN, NULL); 51362306a36Sopenharmony_ci 51462306a36Sopenharmony_ci /* System (PTT) */ 51562306a36Sopenharmony_ci gpio_request(GPIO_FN_STATUS1, NULL); 51662306a36Sopenharmony_ci gpio_request(GPIO_FN_STATUS0, NULL); 51762306a36Sopenharmony_ci 51862306a36Sopenharmony_ci /* PWMX (PTT) */ 51962306a36Sopenharmony_ci gpio_request(GPIO_FN_PWMX1, NULL); 52062306a36Sopenharmony_ci gpio_request(GPIO_FN_PWMX0, NULL); 52162306a36Sopenharmony_ci 52262306a36Sopenharmony_ci /* R-SPI (PTV) */ 52362306a36Sopenharmony_ci gpio_request(GPIO_FN_R_SPI_MOSI, NULL); 52462306a36Sopenharmony_ci gpio_request(GPIO_FN_R_SPI_MISO, NULL); 52562306a36Sopenharmony_ci gpio_request(GPIO_FN_R_SPI_RSPCK, NULL); 52662306a36Sopenharmony_ci gpio_request(GPIO_FN_R_SPI_SSL0, NULL); 52762306a36Sopenharmony_ci gpio_request(GPIO_FN_R_SPI_SSL1, NULL); 52862306a36Sopenharmony_ci 52962306a36Sopenharmony_ci /* EVC (PTV, PTW) */ 53062306a36Sopenharmony_ci gpio_request(GPIO_FN_EVENT7, NULL); 53162306a36Sopenharmony_ci gpio_request(GPIO_FN_EVENT6, NULL); 53262306a36Sopenharmony_ci gpio_request(GPIO_FN_EVENT5, NULL); 53362306a36Sopenharmony_ci gpio_request(GPIO_FN_EVENT4, NULL); 53462306a36Sopenharmony_ci gpio_request(GPIO_FN_EVENT3, NULL); 53562306a36Sopenharmony_ci gpio_request(GPIO_FN_EVENT2, NULL); 53662306a36Sopenharmony_ci gpio_request(GPIO_FN_EVENT1, NULL); 53762306a36Sopenharmony_ci gpio_request(GPIO_FN_EVENT0, NULL); 53862306a36Sopenharmony_ci 53962306a36Sopenharmony_ci /* LED for heartbeat */ 54062306a36Sopenharmony_ci gpio_request(GPIO_PTU3, NULL); 54162306a36Sopenharmony_ci gpio_direction_output(GPIO_PTU3, 1); 54262306a36Sopenharmony_ci gpio_request(GPIO_PTU2, NULL); 54362306a36Sopenharmony_ci gpio_direction_output(GPIO_PTU2, 1); 54462306a36Sopenharmony_ci gpio_request(GPIO_PTU1, NULL); 54562306a36Sopenharmony_ci gpio_direction_output(GPIO_PTU1, 1); 54662306a36Sopenharmony_ci gpio_request(GPIO_PTU0, NULL); 54762306a36Sopenharmony_ci gpio_direction_output(GPIO_PTU0, 1); 54862306a36Sopenharmony_ci 54962306a36Sopenharmony_ci /* control for MDIO of Gigabit Ethernet */ 55062306a36Sopenharmony_ci gpio_request(GPIO_PTT4, NULL); 55162306a36Sopenharmony_ci gpio_direction_output(GPIO_PTT4, 1); 55262306a36Sopenharmony_ci 55362306a36Sopenharmony_ci /* control for eMMC */ 55462306a36Sopenharmony_ci gpio_request(GPIO_PTT7, NULL); /* eMMC_RST# */ 55562306a36Sopenharmony_ci gpio_direction_output(GPIO_PTT7, 0); 55662306a36Sopenharmony_ci gpio_request(GPIO_PTT6, NULL); /* eMMC_INDEX# */ 55762306a36Sopenharmony_ci gpio_direction_output(GPIO_PTT6, 0); 55862306a36Sopenharmony_ci gpio_request(GPIO_PTT5, NULL); /* eMMC_PRST# */ 55962306a36Sopenharmony_ci gpio_direction_output(GPIO_PTT5, 1); 56062306a36Sopenharmony_ci 56162306a36Sopenharmony_ci /* register SPI device information */ 56262306a36Sopenharmony_ci spi_register_board_info(spi_board_info, 56362306a36Sopenharmony_ci ARRAY_SIZE(spi_board_info)); 56462306a36Sopenharmony_ci 56562306a36Sopenharmony_ci /* General platform */ 56662306a36Sopenharmony_ci return platform_add_devices(sh7757lcr_devices, 56762306a36Sopenharmony_ci ARRAY_SIZE(sh7757lcr_devices)); 56862306a36Sopenharmony_ci} 56962306a36Sopenharmony_ciarch_initcall(sh7757lcr_devices_setup); 57062306a36Sopenharmony_ci 57162306a36Sopenharmony_ci/* Initialize IRQ setting */ 57262306a36Sopenharmony_civoid __init init_sh7757lcr_IRQ(void) 57362306a36Sopenharmony_ci{ 57462306a36Sopenharmony_ci plat_irq_setup_pins(IRQ_MODE_IRQ7654); 57562306a36Sopenharmony_ci plat_irq_setup_pins(IRQ_MODE_IRQ3210); 57662306a36Sopenharmony_ci} 57762306a36Sopenharmony_ci 57862306a36Sopenharmony_ci/* Initialize the board */ 57962306a36Sopenharmony_cistatic void __init sh7757lcr_setup(char **cmdline_p) 58062306a36Sopenharmony_ci{ 58162306a36Sopenharmony_ci printk(KERN_INFO "Renesas R0P7757LC0012RL support.\n"); 58262306a36Sopenharmony_ci} 58362306a36Sopenharmony_ci 58462306a36Sopenharmony_cistatic int sh7757lcr_mode_pins(void) 58562306a36Sopenharmony_ci{ 58662306a36Sopenharmony_ci int value = 0; 58762306a36Sopenharmony_ci 58862306a36Sopenharmony_ci /* These are the factory default settings of S3 (Low active). 58962306a36Sopenharmony_ci * If you change these dip switches then you will need to 59062306a36Sopenharmony_ci * adjust the values below as well. 59162306a36Sopenharmony_ci */ 59262306a36Sopenharmony_ci value |= MODE_PIN0; /* Clock Mode: 1 */ 59362306a36Sopenharmony_ci 59462306a36Sopenharmony_ci return value; 59562306a36Sopenharmony_ci} 59662306a36Sopenharmony_ci 59762306a36Sopenharmony_ci/* The Machine Vector */ 59862306a36Sopenharmony_cistatic struct sh_machine_vector mv_sh7757lcr __initmv = { 59962306a36Sopenharmony_ci .mv_name = "SH7757LCR", 60062306a36Sopenharmony_ci .mv_setup = sh7757lcr_setup, 60162306a36Sopenharmony_ci .mv_init_irq = init_sh7757lcr_IRQ, 60262306a36Sopenharmony_ci .mv_mode_pins = sh7757lcr_mode_pins, 60362306a36Sopenharmony_ci}; 60462306a36Sopenharmony_ci 605