|
@@ -1403,3 +1403,196 @@ static void __init mackerel_init(void)
|
|
gpio_request(GPIO_FN_LCDD4, NULL);
|
|
gpio_request(GPIO_FN_LCDD4, NULL);
|
|
gpio_request(GPIO_FN_LCDD3, NULL);
|
|
gpio_request(GPIO_FN_LCDD3, NULL);
|
|
gpio_request(GPIO_FN_LCDD2, NULL);
|
|
gpio_request(GPIO_FN_LCDD2, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_LCDD1, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_LCDD0, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_LCDDISP, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_LCDDCK, NULL);
|
|
|
|
+
|
|
|
|
+ gpio_request(GPIO_PORT31, NULL); /* backlight */
|
|
|
|
+ gpio_direction_output(GPIO_PORT31, 0); /* off by default */
|
|
|
|
+
|
|
|
|
+ gpio_request(GPIO_PORT151, NULL); /* LCDDON */
|
|
|
|
+ gpio_direction_output(GPIO_PORT151, 1);
|
|
|
|
+
|
|
|
|
+ /* USBHS0 */
|
|
|
|
+ gpio_request(GPIO_FN_VBUS0_0, NULL);
|
|
|
|
+ gpio_request_pulldown(GPIO_PORT168CR); /* VBUS0_0 pull down */
|
|
|
|
+
|
|
|
|
+ /* USBHS1 */
|
|
|
|
+ gpio_request(GPIO_FN_VBUS0_1, NULL);
|
|
|
|
+ gpio_request_pulldown(GPIO_PORT167CR); /* VBUS0_1 pull down */
|
|
|
|
+ gpio_request(GPIO_FN_IDIN_1_113, NULL);
|
|
|
|
+
|
|
|
|
+ /* enable FSI2 port A (ak4643) */
|
|
|
|
+ gpio_request(GPIO_FN_FSIAIBT, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_FSIAILR, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_FSIAISLD, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_FSIAOSLD, NULL);
|
|
|
|
+ gpio_request(GPIO_PORT161, NULL);
|
|
|
|
+ gpio_direction_output(GPIO_PORT161, 0); /* slave */
|
|
|
|
+
|
|
|
|
+ gpio_request(GPIO_PORT9, NULL);
|
|
|
|
+ gpio_request(GPIO_PORT10, NULL);
|
|
|
|
+ gpio_direction_none(GPIO_PORT9CR); /* FSIAOBT needs no direction */
|
|
|
|
+ gpio_direction_none(GPIO_PORT10CR); /* FSIAOLR needs no direction */
|
|
|
|
+
|
|
|
|
+ intc_set_priority(IRQ_FSI, 3); /* irq priority FSI(3) > SMSC911X(2) */
|
|
|
|
+
|
|
|
|
+ /* setup FSI2 port B (HDMI) */
|
|
|
|
+ gpio_request(GPIO_FN_FSIBCK, NULL);
|
|
|
|
+ __raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */
|
|
|
|
+
|
|
|
|
+ /* set SPU2 clock to 119.6 MHz */
|
|
|
|
+ clk = clk_get(NULL, "spu_clk");
|
|
|
|
+ if (!IS_ERR(clk)) {
|
|
|
|
+ clk_set_rate(clk, clk_round_rate(clk, 119600000));
|
|
|
|
+ clk_put(clk);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* enable Keypad */
|
|
|
|
+ gpio_request(GPIO_FN_IRQ9_42, NULL);
|
|
|
|
+ irq_set_irq_type(IRQ9, IRQ_TYPE_LEVEL_HIGH);
|
|
|
|
+
|
|
|
|
+ /* enable Touchscreen */
|
|
|
|
+ gpio_request(GPIO_FN_IRQ7_40, NULL);
|
|
|
|
+ irq_set_irq_type(IRQ7, IRQ_TYPE_LEVEL_LOW);
|
|
|
|
+
|
|
|
|
+ /* enable Accelerometer */
|
|
|
|
+ gpio_request(GPIO_FN_IRQ21, NULL);
|
|
|
|
+ irq_set_irq_type(IRQ21, IRQ_TYPE_LEVEL_HIGH);
|
|
|
|
+
|
|
|
|
+ /* enable SDHI0 */
|
|
|
|
+ gpio_request(GPIO_FN_SDHIWP0, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHICMD0, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHICLK0, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID0_3, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID0_2, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID0_1, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID0_0, NULL);
|
|
|
|
+
|
|
|
|
+ /* SDHI0 PORT172 card-detect IRQ26 */
|
|
|
|
+ gpio_request(GPIO_FN_IRQ26_172, NULL);
|
|
|
|
+
|
|
|
|
+#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
|
|
|
|
+ /* enable SDHI1 */
|
|
|
|
+ gpio_request(GPIO_FN_SDHICMD1, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHICLK1, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID1_3, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID1_2, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID1_1, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID1_0, NULL);
|
|
|
|
+#endif
|
|
|
|
+ /* card detect pin for MMC slot (CN7) */
|
|
|
|
+ gpio_request(GPIO_PORT41, NULL);
|
|
|
|
+ gpio_direction_input(GPIO_PORT41);
|
|
|
|
+
|
|
|
|
+ /* enable SDHI2 */
|
|
|
|
+ gpio_request(GPIO_FN_SDHICMD2, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHICLK2, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID2_3, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID2_2, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID2_1, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SDHID2_0, NULL);
|
|
|
|
+
|
|
|
|
+ /* card detect pin for microSD slot (CN23) */
|
|
|
|
+ gpio_request(GPIO_PORT162, NULL);
|
|
|
|
+ gpio_direction_input(GPIO_PORT162);
|
|
|
|
+
|
|
|
|
+ /* MMCIF */
|
|
|
|
+ gpio_request(GPIO_FN_MMCD0_0, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_MMCD0_1, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_MMCD0_2, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_MMCD0_3, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_MMCD0_4, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_MMCD0_5, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_MMCD0_6, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_MMCD0_7, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_MMCCMD0, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_MMCCLK0, NULL);
|
|
|
|
+
|
|
|
|
+ /* FLCTL */
|
|
|
|
+ gpio_request(GPIO_FN_D0_NAF0, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D1_NAF1, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D2_NAF2, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D3_NAF3, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D4_NAF4, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D5_NAF5, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D6_NAF6, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D7_NAF7, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D8_NAF8, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D9_NAF9, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D10_NAF10, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D11_NAF11, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D12_NAF12, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D13_NAF13, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D14_NAF14, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_D15_NAF15, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_FCE0, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_WE0_FWE, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_FRB, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_A4_FOE, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_A5_FCDE, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_RD_FSC, NULL);
|
|
|
|
+
|
|
|
|
+ /* enable GPS module (GT-720F) */
|
|
|
|
+ gpio_request(GPIO_FN_SCIFA2_TXD1, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_SCIFA2_RXD1, NULL);
|
|
|
|
+
|
|
|
|
+ /* CEU */
|
|
|
|
+ gpio_request(GPIO_FN_VIO_CLK, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_VD, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_HD, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_FIELD, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_CKO, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_D7, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_D6, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_D5, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_D4, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_D3, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_D2, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_D1, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_VIO_D0, NULL);
|
|
|
|
+
|
|
|
|
+ /* HDMI */
|
|
|
|
+ gpio_request(GPIO_FN_HDMI_HPD, NULL);
|
|
|
|
+ gpio_request(GPIO_FN_HDMI_CEC, NULL);
|
|
|
|
+
|
|
|
|
+ /* Reset HDMI, must be held at least one EXTALR (32768Hz) period */
|
|
|
|
+ srcr4 = __raw_readl(SRCR4);
|
|
|
|
+ __raw_writel(srcr4 | (1 << 13), SRCR4);
|
|
|
|
+ udelay(50);
|
|
|
|
+ __raw_writel(srcr4 & ~(1 << 13), SRCR4);
|
|
|
|
+
|
|
|
|
+ i2c_register_board_info(0, i2c0_devices,
|
|
|
|
+ ARRAY_SIZE(i2c0_devices));
|
|
|
|
+ i2c_register_board_info(1, i2c1_devices,
|
|
|
|
+ ARRAY_SIZE(i2c1_devices));
|
|
|
|
+
|
|
|
|
+ sh7372_add_standard_devices();
|
|
|
|
+
|
|
|
|
+ platform_add_devices(mackerel_devices, ARRAY_SIZE(mackerel_devices));
|
|
|
|
+
|
|
|
|
+ rmobile_add_devices_to_domains(domain_devices,
|
|
|
|
+ ARRAY_SIZE(domain_devices));
|
|
|
|
+
|
|
|
|
+ hdmi_init_pm_clock();
|
|
|
|
+ sh7372_pm_init();
|
|
|
|
+ pm_clk_add(&fsi_device.dev, "spu2");
|
|
|
|
+ pm_clk_add(&hdmi_lcdc_device.dev, "hdmi");
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static const char *mackerel_boards_compat_dt[] __initdata = {
|
|
|
|
+ "renesas,mackerel",
|
|
|
|
+ NULL,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DT_MACHINE_START(MACKEREL_DT, "mackerel")
|
|
|
|
+ .map_io = sh7372_map_io,
|
|
|
|
+ .init_early = sh7372_add_early_devices,
|
|
|
|
+ .init_irq = sh7372_init_irq,
|
|
|
|
+ .handle_irq = shmobile_handle_irq_intc,
|
|
|
|
+ .init_machine = mackerel_init,
|
|
|
|
+ .init_late = sh7372_pm_init_late,
|
|
|
|
+ .timer = &shmobile_timer,
|
|
|
|
+ .dt_compat = mackerel_boards_compat_dt,
|
|
|
|
+MACHINE_END
|