static void mv_otg_phy_bind_device(struct mv_otg *mvotg) { const char *device_name; struct device_node *np = (mvotg->phy.dev)->of_node; if (!of_property_read_string(np, "marvell,udc-name", &device_name)) usb_bind_phy(device_name, MV_USB2_OTG_PHY_INDEX, dev_name(mvotg->phy.dev)); if (!of_property_read_string(np, "marvell,ehci-name", &device_name)) usb_bind_phy(device_name, MV_USB2_OTG_PHY_INDEX, dev_name(mvotg->phy.dev)); }
static void __init omap3_stalker_init(void) { regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); omap_mux_init_gpio(23, OMAP_PIN_INPUT); omap_hsmmc_init(mmc); omap3_stalker_i2c_init(); platform_add_devices(omap3_stalker_devices, ARRAY_SIZE(omap3_stalker_devices)); omap_display_init(&omap3_stalker_dss_data); omap_serial_init(); omap_sdrc_init(mt46h32m32lf6_sdrc_params, NULL); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); usbhs_init(&usbhs_bdata); omap_ads7846_init(1, OMAP3_STALKER_TS_GPIO, 310, NULL); omap_mux_init_gpio(21, OMAP_PIN_OUTPUT); omap_mux_init_gpio(18, OMAP_PIN_INPUT_PULLUP); omap3stalker_init_eth(); omap3_stalker_display_init(); /* Ensure SDRC pins are mux'd for self-refresh */ omap_mux_init_signal("sdr_cke0", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdr_cke1", OMAP_PIN_OUTPUT); }
static void __init omap_3430sdp_init(void) { int gpio_pendown; omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap_hsmmc_init(mmc); omap3430_i2c_init(); omap_display_init(&sdp3430_dss_data); platform_device_register(&sdp3430_lcd_device); platform_device_register(&sdp3430_tfp410_device); platform_device_register(&sdp3430_dvi_connector_device); platform_device_register(&sdp3430_tv_connector_device); if (omap_rev() > OMAP3430_REV_ES1_0) gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV2; else gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV1; omap_ads7846_init(1, gpio_pendown, 310, NULL); omap_serial_init(); omap_sdrc_init(hyb18m512160af6_sdrc_params, NULL); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); board_smc91x_init(); board_flash_init(sdp_flash_partitions, chip_sel_3430, 0); sdp3430_display_init(); enable_board_wakeup_source(); usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); usbhs_init(&usbhs_bdata); }
static void __init omap4_panda_init(void) { int package = OMAP_PACKAGE_CBS; int ret; if (omap_rev() == OMAP4430_REV_ES1_0) package = OMAP_PACKAGE_CBL; omap4_mux_init(board_mux, NULL, package); omap_panda_wlan_data.irq = gpio_to_irq(GPIO_WIFI_IRQ); ret = wl12xx_set_platform_data(&omap_panda_wlan_data); if (ret) pr_err("error setting wl12xx data: %d\n", ret); omap4_panda_init_rev(); omap4_panda_i2c_init(); platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices)); platform_device_register(&omap_vwlan_device); omap_serial_init(); omap_sdrc_init(NULL, NULL); omap4_twl6030_hsmmc_init(mmc); omap4_ehci_init(); usb_bind_phy("musb-hdrc.2.auto", 0, "omap-usb2.3.auto"); usb_musb_init(&musb_board_data); omap4_panda_display_init(); }
static void __init devkit8000_init(void) { omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); omap_serial_init(); omap_sdrc_init(mt46h32m32lf6_sdrc_params, mt46h32m32lf6_sdrc_params); omap_dm9000_init(); omap_hsmmc_init(mmc); devkit8000_i2c_init(); omap_dm9000_resources[2].start = gpio_to_irq(OMAP_DM9000_GPIO_IRQ); platform_add_devices(devkit8000_devices, ARRAY_SIZE(devkit8000_devices)); omap_display_init(&devkit8000_dss_data); omap_ads7846_init(2, OMAP3_DEVKIT_TS_GPIO, 0, NULL); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); usbhs_init(&usbhs_bdata); board_nand_init(devkit8000_nand_partitions, ARRAY_SIZE(devkit8000_nand_partitions), NAND_CS, NAND_BUSWIDTH_16, NULL); omap_twl4030_audio_init("omap3beagle", NULL); /* Ensure SDRC pins are mux'd for self-refresh */ omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); }
static void __init omap3pandora_init(void) { omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap_hsmmc_init(omap3pandora_mmc); omap3pandora_i2c_init(); pandora_wl1251_init(); platform_add_devices(omap3pandora_devices, ARRAY_SIZE(omap3pandora_devices)); omap_display_init(&pandora_dss_data); omap_serial_init(); omap_sdrc_init(mt46h32m32lf6_sdrc_params, mt46h32m32lf6_sdrc_params); spi_register_board_info(omap3pandora_spi_board_info, ARRAY_SIZE(omap3pandora_spi_board_info)); omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL); usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); usbhs_init(&usbhs_bdata); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); gpmc_nand_init(&pandora_nand_data, NULL); /* Ensure SDRC pins are mux'd for self-refresh */ omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); }
static void __init overo_init(void) { int ret; regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); overo_i2c_init(); omap_hsmmc_init(mmc); omap_display_init(&overo_dss_data); omap_serial_init(); omap_sdrc_init(mt46h32m32lf6_sdrc_params, mt46h32m32lf6_sdrc_params); board_nand_init(overo_nand_partitions, ARRAY_SIZE(overo_nand_partitions), NAND_CS, 0, NULL); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); usbhs_init(&usbhs_bdata); overo_spi_init(); overo_init_smsc911x(); overo_init_led(); overo_init_keys(); omap_twl4030_audio_init("overo", NULL); /* Ensure SDRC pins are mux'd for self-refresh */ omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); ret = gpio_request_one(OVERO_GPIO_W2W_NRESET, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_W2W_NRESET"); if (ret == 0) { gpio_export(OVERO_GPIO_W2W_NRESET, 0); gpio_set_value(OVERO_GPIO_W2W_NRESET, 0); udelay(10); gpio_set_value(OVERO_GPIO_W2W_NRESET, 1); } else { pr_err("could not obtain gpio for OVERO_GPIO_W2W_NRESET\n"); } ret = gpio_request_array(overo_bt_gpios, ARRAY_SIZE(overo_bt_gpios)); if (ret) { pr_err("%s: could not obtain BT gpios\n", __func__); } else { gpio_export(OVERO_GPIO_BT_XGATE, 0); gpio_export(OVERO_GPIO_BT_NRESET, 0); gpio_set_value(OVERO_GPIO_BT_NRESET, 0); mdelay(6); gpio_set_value(OVERO_GPIO_BT_NRESET, 1); } ret = gpio_request_one(OVERO_GPIO_USBH_CPEN, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_USBH_CPEN"); if (ret == 0) gpio_export(OVERO_GPIO_USBH_CPEN, 0); else pr_err("could not obtain gpio for OVERO_GPIO_USBH_CPEN\n"); }
static void __init lager_register_usbhs(void) { usb_bind_phy("renesas_usbhs", 0, "usb_phy_rcar_gen2"); platform_device_register_resndata(NULL, "renesas_usbhs", -1, usbhs_resources, ARRAY_SIZE(usbhs_resources), &usbhs_priv.info, sizeof(usbhs_priv.info)); }
static void __init omap3_devkit8500_init(void) { omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap_hsmmc_init(mmc); //HS MMC omap3_devkit8500_i2c_init(); //require recheck for omap3_devkit8500_i2c_init() /*[OMAP_DISPLAY DISABLED]*/ omap_display_init(&devkit8500_dss_data); /* * Platform Devices Registeration * Leds, Keys, .... */ platform_add_devices(omap3_devkit8500_devices, ARRAY_SIZE(omap3_devkit8500_devices)); /* [TOUCH SCREEN CONTROLLER] */ //omap_ads7846_init(2, OMAP3_DEVKIT8500_TS_GPIO, 0xA, NULL); /* in datasheet SPI2_CS0 */ /* [SERIAL PORTS] */ omap_serial_init(); /* [RAM Initialization] */ omap_sdrc_init(mt46h32m32lf6_sdrc_params,mt46h32m32lf6_sdrc_params); /* [NAND Init] */ board_nand_init(devkit8500_nand_partitions, ARRAY_SIZE(devkit8500_nand_partitions), NAND_CS, NAND_BUSWIDTH_16, NULL); omap_twl4030_audio_init("omap3devkit8500", NULL); /* [USB HOST] */ usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); usbhs_init(&usbhs_bdata); /* [USB OTG] */ usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); /* Ensure SDRC pins are mux'd for self-refresh */ omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); /* [ETHERNET] */ omap_dm9000_init(); }
void __init zoom_peripherals_init(void) { int ret; omap_zoom_wlan_data.irq = gpio_to_irq(OMAP_ZOOM_WLAN_IRQ_GPIO); ret = wl12xx_set_platform_data(&omap_zoom_wlan_data); if (ret) pr_err("error setting wl12xx data: %d\n", ret); omap_hsmmc_init(mmc); omap_i2c_init(); platform_device_register(&omap_vwlan_device); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); enable_board_wakeup_source(); omap_serial_init(); }
static void __init omap_ldp_init(void) { regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); ldp_init_smsc911x(); omap_i2c_init(); platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices)); omap_ads7846_init(1, 54, 310, NULL); omap_serial_init(); omap_sdrc_init(NULL, NULL); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); board_nand_init(ldp_nand_partitions, ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0, nand_default_timings); omap_hsmmc_init(mmc); ldp_display_init(); }
static void __init omap3_beagle_init(void) { omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_beagle_init_rev(); if (gpio_is_valid(beagle_config.mmc1_gpio_wp)) omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT); mmc[0].caps = beagle_config.mmc_caps; omap_hsmmc_init(mmc); omap3_beagle_i2c_init(); gpio_buttons[0].gpio = beagle_config.usr_button_gpio; platform_add_devices(omap3_beagle_devices, ARRAY_SIZE(omap3_beagle_devices)); if (gpio_is_valid(beagle_config.dvi_pd_gpio)) omap_mux_init_gpio(beagle_config.dvi_pd_gpio, OMAP_PIN_OUTPUT); omap_display_init(&beagle_dss_data); omap_serial_init(); omap_sdrc_init(mt46h32m32lf6_sdrc_params, mt46h32m32lf6_sdrc_params); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); usbhs_init(&usbhs_bdata); board_nand_init(omap3beagle_nand_partitions, ARRAY_SIZE(omap3beagle_nand_partitions), NAND_CS, NAND_BUSWIDTH_16, NULL); omap_twl4030_audio_init("omap3beagle", NULL); /* Ensure msecure is mux'd to be able to set the RTC. */ omap_mux_init_signal("sys_drm_msecure", OMAP_PIN_OFF_OUTPUT_HIGH); /* Ensure SDRC pins are mux'd for self-refresh */ omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup)); }
void __init zoom_peripherals_init(void) { int ret; omap_zoom_wlan_data.irq = gpio_to_irq(OMAP_ZOOM_WLAN_IRQ_GPIO); ret = wl12xx_set_platform_data(&omap_zoom_wlan_data); if (ret) pr_err("error setting wl12xx data: %d\n", ret); omap_hsmmc_init(mmc); omap_i2c_init(); pwm_add_table(zoom_pwm_lookup, ARRAY_SIZE(zoom_pwm_lookup)); platform_add_devices(zoom_devices, ARRAY_SIZE(zoom_devices)); usb_bind_phy("musb-hdrc.0", 0, "twl4030_usb"); usb_musb_init(NULL); enable_board_wakeup_source(); omap_serial_init(); }
static void __init cm_t3x_common_init(void) { omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); omap_serial_init(); omap_sdrc_init(mt46h32m32lf6_sdrc_params, mt46h32m32lf6_sdrc_params); omap_hsmmc_init(mmc); cm_t35_init_i2c(); omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL); cm_t35_init_ethernet(); cm_t35_init_led(); cm_t35_init_display(); omap_twl4030_audio_init("cm-t3x", NULL); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); cm_t35_init_usbh(); cm_t35_init_camera(); }
static void __init omap3_touchbook_init(void) { omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); pm_power_off = omap3_touchbook_poweroff; if (system_rev >= 0x20 && system_rev <= 0x34301000) { omap_mux_init_gpio(23, OMAP_PIN_INPUT); mmc[0].gpio_wp = 23; } else { omap_mux_init_gpio(29, OMAP_PIN_INPUT); } omap_hsmmc_init(mmc); omap3_touchbook_i2c_init(); platform_add_devices(omap3_touchbook_devices, ARRAY_SIZE(omap3_touchbook_devices)); omap_serial_init(); omap_sdrc_init(mt46h32m32lf6_sdrc_params, mt46h32m32lf6_sdrc_params); omap_mux_init_gpio(170, OMAP_PIN_INPUT); /* REVISIT leave DVI powered down until it's needed ... */ gpio_request_one(176, GPIOF_OUT_INIT_HIGH, "DVI_nPD"); /* Touchscreen and accelerometer */ omap_ads7846_init(4, OMAP3_TS_GPIO, 310, &ads7846_pdata); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); usbhs_init(&usbhs_bdata); board_nand_init(omap3touchbook_nand_partitions, ARRAY_SIZE(omap3touchbook_nand_partitions), NAND_CS, NAND_BUSWIDTH_16, NULL); /* Ensure SDRC pins are mux'd for self-refresh */ omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); }
static void __init igep_init(void) { regulator_register_fixed(1, dummy_supplies, ARRAY_SIZE(dummy_supplies)); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); /* Get IGEP2 hardware revision */ igep2_get_revision(); omap_hsmmc_init(mmc); /* Register I2C busses and drivers */ igep_i2c_init(); platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices)); omap_serial_init(); omap_sdrc_init(m65kxxxxam_sdrc_params, m65kxxxxam_sdrc_params); usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); usb_musb_init(NULL); igep_flash_init(); igep_leds_init(); omap_twl4030_audio_init("igep2", NULL); /* * WLAN-BT combo module from MuRata which has a Marvell WLAN * (88W8686) + CSR Bluetooth chipset. Uses SDIO interface. */ igep_wlan_bt_init(); if (machine_is_igep0020()) { omap_display_init(&igep2_dss_data); igep2_init_smsc911x(); usbhs_init_phys(igep2_phy_data, ARRAY_SIZE(igep2_phy_data)); usbhs_init(&igep2_usbhs_bdata); } else { usbhs_init_phys(igep3_phy_data, ARRAY_SIZE(igep3_phy_data)); usbhs_init(&igep3_usbhs_bdata); } }
static void __init koelsch_add_rsnd_device(void) { struct resource rsnd_resources[] = { [RSND_GEN2_SCU] = DEFINE_RES_MEM(0xec500000, 0x1000), [RSND_GEN2_ADG] = DEFINE_RES_MEM(0xec5a0000, 0x100), [RSND_GEN2_SSIU] = DEFINE_RES_MEM(0xec540000, 0x1000), [RSND_GEN2_SSI] = DEFINE_RES_MEM(0xec541000, 0x1280), }; struct platform_device_info cardinfo = { .parent = &platform_bus, .name = "asoc-simple-card", .id = -1, .data = &rsnd_card_info, .size_data = sizeof(struct asoc_simple_card_info), .dma_mask = DMA_BIT_MASK(32), }; platform_device_register_resndata( &platform_bus, "rcar_sound", -1, rsnd_resources, ARRAY_SIZE(rsnd_resources), &rsnd_info, sizeof(rsnd_info)); platform_device_register_full(&cardinfo); } /* * This is a really crude hack to provide clkdev support to platform * devices until they get moved to DT. */ static const struct clk_name clk_names[] __initconst = { { "cmt0", NULL, "sh_cmt.0" }, { "cmt0", "fck", "sh-cmt-48-gen2.0" }, { "du0", "du.0", "rcar-du-r8a7791" }, { "du1", "du.1", "rcar-du-r8a7791" }, { "lvds0", "lvds.0", "rcar-du-r8a7791" }, { "hsusb", NULL, "usb_phy_rcar_gen2" }, { "ssi0", "ssi.0", "rcar_sound" }, { "ssi1", "ssi.1", "rcar_sound" }, { "src0", "src.0", "rcar_sound" }, { "src1", "src.1", "rcar_sound" }, { "dvc0", "dvc.0", "rcar_sound" }, { "vin0", NULL, "r8a7791-vin.0" }, { "vin1", NULL, "r8a7791-vin.1" }, { "vsps", NULL, NULL }, #if defined(CONFIG_VIDEO_RENESAS_VSP1) { "vsp1-du0", NULL, "vsp1.2" }, { "vsp1-du1", NULL, "vsp1.3" }, #else { "vsp1-du0", NULL, NULL }, { "vsp1-du1", NULL, NULL }, #endif { "vcp0", NULL, NULL }, { "vpc0", NULL, NULL }, { "tddmac", NULL, NULL }, { "fdp1", NULL, NULL }, { "fdp0", NULL, NULL }, }; /* * This is a really crude hack to work around core platform clock issues */ static const struct clk_name clk_enables[] __initconst = { { "hsusb", NULL, "renesas_usbhs" }, { "ehci", NULL, "pci-rcar-gen2.1" }, { "ssi", NULL, "rcar_sound" }, { "scu", NULL, "rcar_sound" }, { "dmal", NULL, "sh-dma-engine.0" }, { "dmah", NULL, "sh-dma-engine.1" }, { "pvrsrvkm", NULL, "pvrsrvkm" }, { "ssp_dev", NULL, "ssp_dev" }, }; #define DMAE_CHANNEL(a, b) \ { \ .offset = (a) - 0x20, \ .dmars = (a) - 0x20 + 0x40, \ .chclr_bit = (b), \ .chclr_offset = 0x80 - 0x20, \ } /* Sys-DMAC */ #define SYS_DMAC_SLAVE(_id, _bit, _addr, toffset, roffset, t, r) \ { \ .slave_id = SYS_DMAC_SLAVE_## _id ##_TX, \ .addr = _addr + toffset, \ .chcr = CHCR_TX(XMIT_SZ_## _bit ##BIT), \ .mid_rid = t, \ }, { \ .slave_id = SYS_DMAC_SLAVE_## _id ##_RX, \ .addr = _addr + roffset, \ .chcr = CHCR_RX(XMIT_SZ_## _bit ##BIT), \ .mid_rid = r, \ } static const struct sh_dmae_slave_config r8a7791_sys_dmac_slaves[] = { SYS_DMAC_SLAVE(SDHI0, 256, 0xee100000, 0x60, 0x2060, 0xcd, 0xce), SYS_DMAC_SLAVE(SDHI1, 256, 0xee140000, 0x30, 0x2030, 0xc1, 0xc2), SYS_DMAC_SLAVE(SDHI2, 256, 0xee160000, 0x30, 0x2030, 0xd3, 0xd4), }; static const struct sh_dmae_channel r8a7791_sys_dmac_channels[] = { DMAE_CHANNEL(0x8000, 0), DMAE_CHANNEL(0x8080, 1), DMAE_CHANNEL(0x8100, 2), DMAE_CHANNEL(0x8180, 3), DMAE_CHANNEL(0x8200, 4), DMAE_CHANNEL(0x8280, 5), DMAE_CHANNEL(0x8300, 6), DMAE_CHANNEL(0x8380, 7), DMAE_CHANNEL(0x8400, 8), DMAE_CHANNEL(0x8480, 9), DMAE_CHANNEL(0x8500, 10), DMAE_CHANNEL(0x8580, 11), DMAE_CHANNEL(0x8600, 12), DMAE_CHANNEL(0x8680, 13), DMAE_CHANNEL(0x8700, 14), }; static struct sh_dmae_pdata r8a7791_sys_dmac_platform_data = { .slave = r8a7791_sys_dmac_slaves, .slave_num = ARRAY_SIZE(r8a7791_sys_dmac_slaves), .channel = r8a7791_sys_dmac_channels, .channel_num = ARRAY_SIZE(r8a7791_sys_dmac_channels), .ts_low_shift = TS_LOW_SHIFT, .ts_low_mask = TS_LOW_BIT << TS_LOW_SHIFT, .ts_high_shift = TS_HI_SHIFT, .ts_high_mask = TS_HI_BIT << TS_HI_SHIFT, .ts_shift = dma_ts_shift, .ts_shift_num = ARRAY_SIZE(dma_ts_shift), .dmaor_init = DMAOR_DME, .chclr_present = 1, .chclr_bitwise = 1, .fourty_bits_addr = 1, }; static struct resource r8a7791_sys_dmac_resources[] = { /* Channel registers and DMAOR for low */ DEFINE_RES_MEM(0xe6700020, 0x8763 - 0x20), DEFINE_RES_IRQ(gic_spi(197)), DEFINE_RES_NAMED(gic_spi(200), 15, NULL, IORESOURCE_IRQ), /* Channel registers and DMAOR for high */ DEFINE_RES_MEM(0xe6720020, 0x8763 - 0x20), DEFINE_RES_IRQ(gic_spi(220)), DEFINE_RES_NAMED(gic_spi(216), 4, NULL, IORESOURCE_IRQ), DEFINE_RES_NAMED(gic_spi(308), 11, NULL, IORESOURCE_IRQ), }; #define r8a7791_register_sys_dmac(id) \ platform_device_register_resndata( \ &platform_bus, "sh-dma-engine", 2 + id, \ &r8a7791_sys_dmac_resources[id * 3], id * 1 + 3, \ &r8a7791_sys_dmac_platform_data, \ sizeof(r8a7791_sys_dmac_platform_data)) static void __init koelsch_add_dmac_prototype(void) { r8a7791_register_sys_dmac(0); r8a7791_register_sys_dmac(1); } static struct sh_mobile_sdhi_info sdhi0_info __initdata = { .dma_slave_tx = SYS_DMAC_SLAVE_SDHI0_TX, .dma_slave_rx = SYS_DMAC_SLAVE_SDHI0_RX, .dma_rx_offset = 0x2000, .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD, .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT, }; static struct sh_mobile_sdhi_info sdhi1_info __initdata = { .dma_slave_tx = SYS_DMAC_SLAVE_SDHI1_TX, .dma_slave_rx = SYS_DMAC_SLAVE_SDHI1_RX, .tmio_caps = MMC_CAP_POWER_OFF_CARD, .dma_rx_offset = 0x2000, .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD, .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT, }; static struct sh_mobile_sdhi_info sdhi2_info __initdata = { .dma_slave_tx = SYS_DMAC_SLAVE_SDHI2_TX, .dma_slave_rx = SYS_DMAC_SLAVE_SDHI2_RX, .dma_rx_offset = 0x2000, .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ | MMC_CAP_POWER_OFF_CARD, .tmio_caps = MMC_CAP_POWER_OFF_CARD, .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_WRPROTECT_DISABLE, }; /* USBHS */ static const struct resource usbhs_resources[] __initconst = { DEFINE_RES_MEM(0xe6590000, 0x100), DEFINE_RES_IRQ(gic_spi(107)), }; struct usbhs_private { struct renesas_usbhs_platform_info info; struct usb_phy *phy; int id_gpio; }; #define usbhs_get_priv(pdev) \ container_of(renesas_usbhs_get_info(pdev), struct usbhs_private, info) static int usbhs_power_ctrl(struct platform_device *pdev, void __iomem *base, int enable) { struct usbhs_private *priv = usbhs_get_priv(pdev); if (!priv->phy) return -ENODEV; if (enable) { int retval = usb_phy_init(priv->phy); if (!retval) retval = usb_phy_set_suspend(priv->phy, 0); return retval; } usb_phy_set_suspend(priv->phy, 1); usb_phy_shutdown(priv->phy); return 0; } static int usbhs_hardware_init(struct platform_device *pdev) { struct usbhs_private *priv = usbhs_get_priv(pdev); struct usb_phy *phy; int ret; struct device_node *np; np = of_find_node_by_path("/gpio@e6055000"); if (np) { priv->id_gpio = of_get_gpio(np, 31); of_node_put(np); } else { pr_warn("Error: Unable to get MAX3355 ID input\n"); ret = -ENOTSUPP; goto error2; } /* Check MAX3355E ID pin */ gpio_request_one(priv->id_gpio, GPIOF_IN, NULL); if (!gpio_get_value(priv->id_gpio)) { pr_warn("Error: USB0 cable selects host mode\n"); ret = -ENOTSUPP; goto error; } phy = usb_get_phy_dev(&pdev->dev, 0); if (IS_ERR(phy)) return PTR_ERR(phy); priv->phy = phy; return 0; error: gpio_free(priv->id_gpio); error2: return ret; } static int usbhs_hardware_exit(struct platform_device *pdev) { struct usbhs_private *priv = usbhs_get_priv(pdev); if (!priv->phy) return 0; usb_put_phy(priv->phy); priv->phy = NULL; gpio_free(priv->id_gpio); return 0; } static int usbhs_get_id(struct platform_device *pdev) { return USBHS_GADGET; } static u32 koelsch_usbhs_pipe_type[] = { USB_ENDPOINT_XFER_CONTROL, USB_ENDPOINT_XFER_ISOC, USB_ENDPOINT_XFER_ISOC, USB_ENDPOINT_XFER_BULK, USB_ENDPOINT_XFER_BULK, USB_ENDPOINT_XFER_BULK, USB_ENDPOINT_XFER_INT, USB_ENDPOINT_XFER_INT, USB_ENDPOINT_XFER_INT, USB_ENDPOINT_XFER_BULK, USB_ENDPOINT_XFER_BULK, USB_ENDPOINT_XFER_BULK, USB_ENDPOINT_XFER_BULK, USB_ENDPOINT_XFER_BULK, USB_ENDPOINT_XFER_BULK, USB_ENDPOINT_XFER_BULK, }; static struct usbhs_private usbhs_priv __initdata = { .info = { .platform_callback = { .power_ctrl = usbhs_power_ctrl, .hardware_init = usbhs_hardware_init, .hardware_exit = usbhs_hardware_exit, .get_id = usbhs_get_id, }, .driver_param = { .buswait_bwait = 4, .pipe_type = koelsch_usbhs_pipe_type, .pipe_size = ARRAY_SIZE(koelsch_usbhs_pipe_type), }, } }; static void __init koelsch_add_usb0_gadget(void) { usb_bind_phy("renesas_usbhs", 0, "usb_phy_rcar_gen2"); platform_device_register_resndata(&platform_bus, "renesas_usbhs", -1, usbhs_resources, ARRAY_SIZE(usbhs_resources), &usbhs_priv.info, sizeof(usbhs_priv.info)); } /* Internal PCI1 */ static const struct resource pci1_resources[] __initconst = { DEFINE_RES_MEM(0xee0d0000, 0x10000), /* CFG */ DEFINE_RES_MEM(0xee0c0000, 0x10000), /* MEM */ DEFINE_RES_IRQ(gic_spi(113)), }; static void __init koelsch_add_usb1_host(void) { platform_device_register_simple("pci-rcar-gen2", 1, pci1_resources, ARRAY_SIZE(pci1_resources)); } /* USBHS PHY */ static const struct rcar_gen2_phy_platform_data usbhs_phy_pdata __initconst = { .chan0_pci = 0, /* Channel 0 is USBHS */ .chan2_pci = 1, /* Channel 2 is PCI USB host */ }; /* VIN */ static const struct resource vin_resources[] __initconst = { /* VIN0 */ DEFINE_RES_MEM(0xe6ef0000, 0x1000), DEFINE_RES_IRQ(gic_spi(188)), /* VIN1 */ DEFINE_RES_MEM(0xe6ef1000, 0x1000), DEFINE_RES_IRQ(gic_spi(189)), }; static void __init koelsch_add_vin_device(unsigned idx, struct rcar_vin_platform_data *pdata) { struct platform_device_info vin_info = { .parent = &platform_bus, .name = "r8a7791-vin", .id = idx, .res = &vin_resources[idx * 2], .num_res = 2, .dma_mask = DMA_BIT_MASK(32), .data = pdata, .size_data = sizeof(*pdata), }; BUG_ON(idx > 1); platform_device_register_full(&vin_info); } #define KOELSCH_CAMERA(idx, name, addr, pdata, flag) \ static struct i2c_board_info i2c_cam##idx##_device = { \ I2C_BOARD_INFO(name, addr), \ }; \ \ static struct rcar_vin_platform_data vin##idx##_pdata = { \ .flags = flag, \ }; \ \ static struct soc_camera_link cam##idx##_link = { \ .bus_id = idx, \ .board_info = &i2c_cam##idx##_device, \ .i2c_adapter_id = 2, \ .module_name = name, \ .priv = pdata, \ } KOELSCH_CAMERA(0, "adv7612", 0x4c, NULL, RCAR_VIN_BT709); KOELSCH_CAMERA(1, "adv7180", 0x20, NULL, RCAR_VIN_BT656); static void __init koelsch_add_camera0_device(void) { platform_device_register_data(&platform_bus, "soc-camera-pdrv", 0, &cam0_link, sizeof(cam0_link)); koelsch_add_vin_device(0, &vin0_pdata); } static void __init koelsch_add_camera1_device(void) { platform_device_register_data(&platform_bus, "soc-camera-pdrv", 1, &cam1_link, sizeof(cam1_link)); koelsch_add_vin_device(1, &vin1_pdata); } /* VSP1 */ #if defined(CONFIG_VIDEO_RENESAS_VSP1) static const struct vsp1_platform_data koelsch_vsps_pdata __initconst = { .features = 0, .rpf_count = 5, .uds_count = 3, .wpf_count = 4, }; static const struct vsp1_platform_data koelsch_vspd0_pdata __initconst = { .features = VSP1_HAS_LIF, .rpf_count = 4, .uds_count = 1, .wpf_count = 4, }; static const struct vsp1_platform_data koelsch_vspd1_pdata __initconst = { .features = VSP1_HAS_LIF, .rpf_count = 4, .uds_count = 1, .wpf_count = 4, }; static const struct vsp1_platform_data * const koelsch_vsp1_pdata[] __initconst = { &koelsch_vsps_pdata, &koelsch_vspd0_pdata, &koelsch_vspd1_pdata, }; static const struct resource vsp1_1_resources[] __initconst = { DEFINE_RES_MEM(0xfe928000, 0x8000), DEFINE_RES_IRQ(gic_spi(267)), }; static const struct resource vsp1_2_resources[] __initconst = { DEFINE_RES_MEM(0xfe930000, 0x8000), DEFINE_RES_IRQ(gic_spi(246)), }; static const struct resource vsp1_3_resources[] __initconst = { DEFINE_RES_MEM(0xfe938000, 0x8000), DEFINE_RES_IRQ(gic_spi(247)), }; static const struct resource * const vsp1_resources[] __initconst = { vsp1_1_resources, vsp1_2_resources, vsp1_3_resources, }; static void __init koelsch_add_vsp1_devices(void) { struct platform_device_info info = { .name = "vsp1", .size_data = sizeof(*koelsch_vsp1_pdata[0]), .num_res = 2, .dma_mask = DMA_BIT_MASK(32), }; unsigned int i; for (i = 1; i < ARRAY_SIZE(vsp1_resources); ++i) { info.id = i + 1; info.data = koelsch_vsp1_pdata[i]; info.res = vsp1_resources[i]; platform_device_register_full(&info); } } #endif static const struct resource usbhs_phy_resources[] __initconst = { DEFINE_RES_MEM(0xe6590100, 0x100), }; /* Add all available USB devices */ static void __init koelsch_add_usb_devices(void) { platform_device_register_resndata(&platform_bus, "usb_phy_rcar_gen2", -1, usbhs_phy_resources, ARRAY_SIZE(usbhs_phy_resources), &usbhs_phy_pdata, sizeof(usbhs_phy_pdata)); koelsch_add_usb0_gadget(); koelsch_add_usb1_host(); } /* MSIOF spidev */ static const struct spi_board_info spi_bus[] __initconst = { { .modalias = "spidev", .max_speed_hz = 6000000, .mode = SPI_MODE_3, .bus_num = 1, .chip_select = 0, }, { .modalias = "spidev", .max_speed_hz = 6000000, .mode = SPI_MODE_3, .bus_num = 2, .chip_select = 0, }, }; /* POWER IC */ static struct i2c_board_info poweric_i2c[] = { { I2C_BOARD_INFO("da9063", 0x58), }, }; static void koelsch_restart(char mode, const char *cmd) { struct i2c_adapter *adap; struct i2c_client *client; u8 val; int busnum = 6; adap = i2c_get_adapter(busnum); if (!adap) { pr_err("failed to get adapter i2c%d\n", busnum); return; } client = i2c_new_device(adap, &poweric_i2c[0]); if (!client) pr_err("failed to register %s to i2c%d\n", poweric_i2c[0].type, busnum); i2c_put_adapter(adap); val = i2c_smbus_read_byte_data(client, 0x13); if (val < 0) pr_err("couldn't access da9063\n"); val |= 0x02; i2c_smbus_write_byte_data(client, 0x13, val); } #define koelsch_add_msiof_device spi_register_board_info static struct of_dev_auxdata koelsch_auxdata_lookup[] __initdata = { OF_DEV_AUXDATA("renesas,sdhi-r8a7791", 0xee100000, "sdhi0", &sdhi0_info), OF_DEV_AUXDATA("renesas,sdhi-r8a7791", 0xee140000, "sdhi1", &sdhi1_info), OF_DEV_AUXDATA("renesas,sdhi-r8a7791", 0xee160000, "sdhi2", &sdhi2_info), {}, }; static void __init koelsch_add_standard_devices(void) { shmobile_clk_workaround(clk_names, ARRAY_SIZE(clk_names), false); shmobile_clk_workaround(clk_enables, ARRAY_SIZE(clk_enables), true); r8a7791_add_dt_devices(); koelsch_add_dmac_prototype(); of_platform_populate(NULL, of_default_bus_match_table, koelsch_auxdata_lookup, NULL); koelsch_add_du_device(); koelsch_add_usb_devices(); koelsch_add_rsnd_device(); koelsch_add_camera0_device(); koelsch_add_camera1_device(); #if defined(CONFIG_VIDEO_RENESAS_VSP1) koelsch_add_vsp1_devices(); #endif koelsch_add_msiof_device(spi_bus, ARRAY_SIZE(spi_bus)); } static const char * const koelsch_boards_compat_dt[] __initconst = { "renesas,koelsch", "renesas,koelsch-reference", NULL, }; DT_MACHINE_START(KOELSCH_DT, "koelsch") .smp = smp_ops(r8a7791_smp_ops), .init_early = shmobile_init_delay, .init_time = rcar_gen2_timer_init, .init_machine = koelsch_add_standard_devices, .init_late = shmobile_init_late, .reserve = rcar_gen2_reserve, .restart = koelsch_restart, .dt_compat = koelsch_boards_compat_dt, MACHINE_END
static void __init omap3_evm_init(void) { struct omap_board_mux *obm; omap3_evm_get_revision(); regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies)); obm = (cpu_is_omap3630()) ? omap36x_board_mux : omap35x_board_mux; omap3_mux_init(obm, OMAP_PACKAGE_CBB); omap_mux_init_gpio(63, OMAP_PIN_INPUT); omap_hsmmc_init(mmc); if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) omap3evm_twldata.vaux2 = &omap3evm_vaux2; omap3_evm_i2c_init(); omap_display_init(&omap3_evm_dss_data); platform_device_register(&omap3_evm_lcd_device); platform_device_register(&omap3_evm_tfp410_device); platform_device_register(&omap3_evm_dvi_connector_device); platform_device_register(&omap3_evm_tv_connector_device); omap_serial_init(); omap_sdrc_init(mt46h32m32lf6_sdrc_params, NULL); /* OMAP3EVM uses ISP1504 phy and so register nop transceiver */ usb_nop_xceiv_register(); if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) { /* enable EHCI VBUS using GPIO22 */ omap_mux_init_gpio(OMAP3_EVM_EHCI_VBUS, OMAP_PIN_INPUT_PULLUP); /* Select EHCI port on main board */ omap_mux_init_gpio(OMAP3_EVM_EHCI_SELECT, OMAP_PIN_INPUT_PULLUP); gpio_request_array(omap3_evm_ehci_gpios, ARRAY_SIZE(omap3_evm_ehci_gpios)); /* setup EHCI phy reset config */ omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP); phy_data[0].reset_gpio = 21; /* EVM REV >= E can supply 500mA with EXTVBUS programming */ musb_board_data.power = 500; musb_board_data.extvbus = 1; } else { /* setup EHCI phy reset on MDC */ omap_mux_init_gpio(135, OMAP_PIN_OUTPUT); phy_data[0].reset_gpio = 135; } usb_bind_phy("musb-hdrc.0", 0, "twl4030_usb"); usb_musb_init(&musb_board_data); usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); usbhs_init(&usbhs_bdata); board_nand_init(omap3evm_nand_partitions, ARRAY_SIZE(omap3evm_nand_partitions), NAND_CS, NAND_BUSWIDTH_16, NULL); omap_ads7846_init(1, OMAP3_EVM_TS_GPIO, 310, NULL); omap3evm_init_smsc911x(); #ifdef CONFIG_BROKEN omap3_evm_display_init(); #endif omap3_evm_wl12xx_init(); omap_twl4030_audio_init("omap3evm", NULL); }