static void mxc_init_sgtl5000(void) { struct clk *cko1, *parent; unsigned long rate; /* for board v1.1 do nothing */ if (!board_is_rev(BOARD_REV_2)) return; cko1 = clk_get(NULL, "cko1_clk"); if (IS_ERR(cko1)) return; parent = clk_get(NULL, "ckih"); if (IS_ERR(parent)) return; clk_set_parent(cko1, parent); rate = clk_round_rate(cko1, 12000000); if (rate < 8000000 || rate > 27000000) { printk(KERN_ERR "Error: SGTL5000 mclk freq %d out of range!\n", (unsigned int)rate); clk_put(parent); clk_put(cko1); return; } clk_set_rate(cko1, rate); clk_enable(cko1); sgtl5000_data.sysclk = rate; platform_device_register(&mxc_sgtl5000_device); }
/*! * Board specific initialization. */ static void __init mxc_board_init(void) { mxc_cpu_common_init(); mxc_register_gpios(); mxc_init_devices(); if (!board_is_rev(BOARD_REV_2)) mx35_3stack_fixup_for_board_v1(); mx35_3stack_gpio_init(); mxc_init_enet(); mxc_init_nor_mtd(); mxc_init_nand_mtd(); mx35_3stack_init_mc13892(); mx35_3stack_init_mc9s08dz60(); mxc_init_lcd(); mxc_init_fb(); mxc_init_bl(); mxc_init_sgtl5000(); mxc_init_ak4647(); i2c_register_board_info(0, mxc_i2c_board_info, ARRAY_SIZE(mxc_i2c_board_info)); spi_register_board_info(mxc_spi_board_info, ARRAY_SIZE(mxc_spi_board_info)); mxc_init_mmc(); mxc_init_pata(); mxc_init_bluetooth(); mxc_init_gps(); mxc_init_mlb(); mxc_init_fec(); }
static void smd_suspend_enter(void) { if (board_is_rev(BOARD_REV_4)) { smd_da9053_irq_wakeup_only_fixup(); da9053_suspend_cmd_sw(); } else { if (da9053_get_chip_version() != DA9053_VERSION_BB) smd_da9053_irq_wakeup_only_fixup(); da9053_suspend_cmd_hw(); } }
static unsigned int sdhc_get_card_det_status(struct device *dev) { unsigned int ret; if (board_is_rev(BOARD_REV_2)) pmic_gpio_set_bit_val(MCU_GPIO_REG_GPIO_CONTROL_2, 7, 1); if (to_platform_device(dev)->id == 0) { if (0 != pmic_gpio_get_designation_bit_val(2, &ret)) printk(KERN_ERR "Get cd status error."); return ret; } return 0; }
/*! * Power Key initialization. */ static int __init mxc_init_power_key(void) { if (!board_is_rev(BOARD_REV_2)) { /*Set power key as wakeup resource */ int irq, ret; irq = MXC_PSEUDO_IRQ_POWER_KEY; set_irq_type(irq, IRQF_TRIGGER_RISING); ret = request_irq(irq, power_key_int, 0, "power_key", 0); if (ret) pr_info("register on-off key interrupt failed\n"); else enable_irq_wake(irq); return ret; } return 0; }
static unsigned int sdhc_get_card_det_status(struct device *dev) { int ret; if (to_platform_device(dev)->id == 0) { ret = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_0)); return ret; } else { /* config the det pin for SDHC2 */ if (board_is_rev(BOARD_REV_2)) /* BB2.5 */ ret = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_6)); else /* BB2.0 */ ret = gpio_get_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_4)); return ret; } }
static unsigned int sdhc_get_card_det_status(struct device *dev) { int ret; if (to_platform_device(dev)->id == 0) { ret = gpio_get_value(BABBAGE_SD1_CD); return ret; } else { /* config the det pin for SDHC2 */ if (board_is_rev(BOARD_REV_2)) /* BB2.5 */ ret = gpio_get_value(BABBAGE_SD2_CD_2_5); else /* BB2.0 */ ret = gpio_get_value(BABBAGE_SD2_CD_2_0); return ret; } }
/*! * Board specific initialization. */ static void __init mxc_board_init(void) { mxc_ipu_data.di_clk[0] = clk_get(NULL, "ipu_di0_clk"); mxc_ipu_data.di_clk[1] = clk_get(NULL, "ipu_di1_clk"); mxc_ipu_data.csi_clk[0] = clk_get(NULL, "csi_mclk1"); mxc_ipu_data.csi_clk[1] = clk_get(NULL, "csi_mclk2"); mxc_spdif_data.spdif_core_clk = clk_get(NULL, "spdif_xtal_clk"); clk_put(mxc_spdif_data.spdif_core_clk); /* SD card detect irqs */ mxcsdhc2_device.resource[2].start = IOMUX_TO_IRQ(MX51_PIN_GPIO1_6); mxcsdhc2_device.resource[2].end = IOMUX_TO_IRQ(MX51_PIN_GPIO1_6); mxcsdhc1_device.resource[2].start = IOMUX_TO_IRQ(MX51_PIN_GPIO1_0); mxcsdhc1_device.resource[2].end = IOMUX_TO_IRQ(MX51_PIN_GPIO1_0); mxc_cpu_common_init(); mxc_register_gpios(); mx51_babbage_io_init(); mxc_register_device(&mxc_dma_device, NULL); mxc_register_device(&mxc_wdt_device, NULL); mxc_register_device(&mxcspi1_device, &mxcspi1_data); mxc_register_device(&mxci2c_devices[0], &mxci2c_data); mxc_register_device(&mxci2c_devices[1], &mxci2c_data); mxc_register_device(&mxci2c_hs_device, &mxci2c_hs_data); mxc_register_device(&mxc_rtc_device, &srtc_data); mxc_register_device(&mxc_w1_master_device, &mxc_w1_data); mxc_register_device(&mxc_ipu_device, &mxc_ipu_data); mxc_register_device(&mxc_tve_device, &tve_data); mxc_register_device(&mxcvpu_device, &mxc_vpu_data); mxc_register_device(&gpu_device, NULL); mxc_register_device(&mxcscc_device, NULL); mxc_register_device(&mx51_lpmode_device, NULL); mxc_register_device(&busfreq_device, NULL); mxc_register_device(&sdram_autogating_device, NULL); mxc_register_device(&mxc_dvfs_core_device, &dvfs_core_data); mxc_register_device(&mxc_dvfs_per_device, &dvfs_per_data); mxc_register_device(&mxc_iim_device, NULL); mxc_register_device(&mxc_pwm1_device, NULL); mxc_register_device(&mxc_pwm_backlight_device, &mxc_pwm_backlight_data); mxc_register_device(&mxc_keypad_device, &keypad_plat_data); mxc_register_device(&mxcsdhc1_device, &mmc1_data); mxc_register_device(&mxcsdhc2_device, &mmc2_data); mxc_register_device(&mxc_ssi1_device, NULL); mxc_register_device(&mxc_ssi2_device, NULL); mxc_register_device(&mxc_alsa_spdif_device, &mxc_spdif_data); mxc_register_device(&mxc_fec_device, NULL); mxc_register_device(&mxc_v4l2_device, NULL); mxc_register_device(&mxc_v4l2out_device, NULL); mx51_babbage_init_mc13892(); if (board_is_rev(BOARD_REV_2)) /* BB2.5 */ spi_register_board_info(mxc_dataflash_device, ARRAY_SIZE(mxc_dataflash_device)); else /* BB2.0 */ spi_register_board_info(mxc_spi_nor_device, ARRAY_SIZE(mxc_spi_nor_device)); i2c_register_board_info(0, mxc_i2c0_board_info, ARRAY_SIZE(mxc_i2c0_board_info)); i2c_register_board_info(1, mxc_i2c1_board_info, ARRAY_SIZE(mxc_i2c1_board_info)); if (cpu_is_mx51_rev(CHIP_REV_2_0) >= 1) { vga_data.core_reg = NULL; vga_data.io_reg = NULL; vga_data.analog_reg = NULL; } i2c_register_board_info(3, mxc_i2c_hs_board_info, ARRAY_SIZE(mxc_i2c_hs_board_info)); pm_power_off = mxc_power_off; if (cpu_is_mx51_rev(CHIP_REV_1_1) == 2) { sgtl5000_data.sysclk = 26000000; } gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_A23), "eim_a23"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_A23), 0); mxc_register_device(&mxc_sgtl5000_device, &sgtl5000_data); mx5_usb_dr_init(); mx5_usbh1_init(); }
void __init mx51_babbage_io_init(void) { int i; /* Work-around For external USB HUB chip to use default configuration by reseting hub with i2c lines pulled low */ mxc_request_iomux(MX51_PIN_GPIO1_7, IOMUX_CONFIG_GPIO); mxc_iomux_set_pad(MX51_PIN_GPIO1_7, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_7), "gpio1_7"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_GPIO1_7), 0); if (cpu_is_mx51_rev(CHIP_REV_1_1) == 1) { /* Drive I2C1 SDA line low */ mxc_request_iomux(MX51_PIN_GPIO1_3, IOMUX_CONFIG_ALT0); mxc_iomux_set_pad(MX51_PIN_GPIO1_3, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_3), "gpio1_3"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_GPIO1_3), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_3), 0); /* Drive I2C1 SCL line low */ mxc_request_iomux(MX51_PIN_GPIO1_2, IOMUX_CONFIG_ALT0); mxc_iomux_set_pad(MX51_PIN_GPIO1_2, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_2), "gpio1_2"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_GPIO1_2), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_2), 0); msleep(5); mxc_free_iomux(MX51_PIN_GPIO1_2, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_GPIO1_3, IOMUX_CONFIG_ALT2); } /* USB HUB RESET - De-assert USB HUB RESET_N */ msleep(1); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_7), 0); msleep(1); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_GPIO1_7), 1); for (i = 0; i < ARRAY_SIZE(mxc_iomux_pins); i++) { mxc_request_iomux(mxc_iomux_pins[i].pin, mxc_iomux_pins[i].mux_mode); if (mxc_iomux_pins[i].pad_cfg) mxc_iomux_set_pad(mxc_iomux_pins[i].pin, mxc_iomux_pins[i].pad_cfg); if (mxc_iomux_pins[i].in_select) mxc_iomux_set_input(mxc_iomux_pins[i].in_select, mxc_iomux_pins[i].in_mode); } gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_8), "gpio1_8"); gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_0), "gpio1_0"); gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_1), "gpio1_1"); gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_8)); gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_0)); /* SD1 CD */ gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_1)); /* SD1 WP */ if (board_is_rev(BOARD_REV_2)) { /* SD2 CD for BB2.5 */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_6), "gpio1_6"); gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_6)); } else { /* SD2 CD for BB2.0 */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_4), "gpio1_4"); gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_4)); } gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_5), "gpio1_5"); gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_5)); /* SD2 WP */ /* reset FEC PHY */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_A20), "eim_a20"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_A20), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_A20), 0); msleep(10); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_A20), 1); /* reset FM */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_A21), "eim_a21"); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_A21), 0); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_A21), 0); msleep(10); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_A21), 1); if (cpu_is_mx51_rev(CHIP_REV_1_1) == 1) { /* MX51_PIN_EIM_CRE - De-assert USB PHY RESETB */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_CRE), "eim_cre"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_CRE), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_CRE), 1); /* hphone_det_b */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_NANDF_CS0), "nandf_cs0"); gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_NANDF_CS0)); } else { mxc_free_iomux(MX51_PIN_EIM_D21, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_EIM_A24, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_EIM_A25, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_EIM_D18, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_EIM_D20, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_EIM_D21, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_EIM_D16, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_EIM_D17, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_EIM_D19, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_GPIO1_2, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_GPIO1_3, IOMUX_CONFIG_ALT2); mxc_free_iomux(MX51_PIN_EIM_LBA, IOMUX_CONFIG_GPIO); mxc_free_iomux(MX51_PIN_NANDF_CS0, IOMUX_CONFIG_GPIO); /* i2c1 SDA */ mxc_request_iomux(MX51_PIN_EIM_D16, IOMUX_CONFIG_ALT4 | IOMUX_CONFIG_SION); mxc_iomux_set_input(MUX_IN_I2C1_IPP_SDA_IN_SELECT_INPUT, INPUT_CTL_PATH0); mxc_iomux_set_pad(MX51_PIN_EIM_D16, PAD_CTL_SRE_FAST | PAD_CTL_ODE_OPENDRAIN_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_100K_PU | PAD_CTL_HYS_ENABLE); /* i2c1 SCL */ mxc_request_iomux(MX51_PIN_EIM_D19, IOMUX_CONFIG_ALT4 | IOMUX_CONFIG_SION); mxc_iomux_set_input(MUX_IN_I2C1_IPP_SCL_IN_SELECT_INPUT, INPUT_CTL_PATH0); mxc_iomux_set_pad(MX51_PIN_EIM_D19, PAD_CTL_SRE_FAST | PAD_CTL_ODE_OPENDRAIN_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_100K_PU | PAD_CTL_HYS_ENABLE); /* i2c2 SDA */ mxc_request_iomux(MX51_PIN_KEY_COL5, IOMUX_CONFIG_ALT3 | IOMUX_CONFIG_SION); mxc_iomux_set_input(MUX_IN_I2C2_IPP_SDA_IN_SELECT_INPUT, INPUT_CTL_PATH1); mxc_iomux_set_pad(MX51_PIN_KEY_COL5, PAD_CTL_SRE_FAST | PAD_CTL_ODE_OPENDRAIN_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_100K_PU | PAD_CTL_HYS_ENABLE); /* i2c2 SCL */ mxc_request_iomux(MX51_PIN_KEY_COL4, IOMUX_CONFIG_ALT3 | IOMUX_CONFIG_SION); mxc_iomux_set_input(MUX_IN_I2C2_IPP_SCL_IN_SELECT_INPUT, INPUT_CTL_PATH1); mxc_iomux_set_pad(MX51_PIN_KEY_COL4, PAD_CTL_SRE_FAST | PAD_CTL_ODE_OPENDRAIN_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_100K_PU | PAD_CTL_HYS_ENABLE); /* Drive 26M_OSC_EN line high */ mxc_request_iomux(MX51_PIN_DI1_PIN12, IOMUX_CONFIG_ALT4); mxc_iomux_set_pad(MX51_PIN_DI1_PIN12, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX51_PIN_DI1_PIN12), "di1_pin12"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_DI1_PIN12), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_DI1_PIN12), 1); /* Drive USB_CLK_EN_B line low */ mxc_request_iomux(MX51_PIN_EIM_D17, IOMUX_CONFIG_ALT1); mxc_iomux_set_pad(MX51_PIN_EIM_D17, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_D17), "eim_d17"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_D17), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_D17), 0); /* MX51_PIN_EIM_D21 - De-assert USB PHY RESETB */ mxc_request_iomux(MX51_PIN_EIM_D21, IOMUX_CONFIG_ALT1); mxc_iomux_set_pad(MX51_PIN_EIM_D21, PAD_CTL_DRV_HIGH | PAD_CTL_HYS_NONE | PAD_CTL_PUE_KEEPER | PAD_CTL_100K_PU | PAD_CTL_ODE_OPENDRAIN_NONE | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_D21), "eim_d21"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_D21), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_D21), 1); /* hphone_det_b */ mxc_request_iomux(MX51_PIN_NANDF_D14, IOMUX_CONFIG_ALT3); mxc_iomux_set_pad(MX51_PIN_NANDF_D14, PAD_CTL_100K_PU); gpio_request(IOMUX_TO_GPIO(MX51_PIN_NANDF_D14), "nandf_d14"); gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_NANDF_D14)); /* audio_clk_en_b */ mxc_request_iomux(MX51_PIN_CSPI1_RDY, IOMUX_CONFIG_ALT3); mxc_iomux_set_pad(MX51_PIN_CSPI1_RDY, PAD_CTL_DRV_HIGH | PAD_CTL_HYS_NONE | PAD_CTL_PUE_KEEPER | PAD_CTL_100K_PU | PAD_CTL_ODE_OPENDRAIN_NONE | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX51_PIN_CSPI1_RDY), "cspi1_rdy"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_CSPI1_RDY), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_CSPI1_RDY), 0); /* power key */ mxc_request_iomux(MX51_PIN_EIM_A27, IOMUX_CONFIG_ALT1); mxc_iomux_set_pad(MX51_PIN_EIM_A27, PAD_CTL_SRE_FAST | PAD_CTL_ODE_OPENDRAIN_NONE | PAD_CTL_DRV_HIGH | PAD_CTL_100K_PU | PAD_CTL_HYS_NONE); gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_A27), "eim_a27"); gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_EIM_A27)); } if (cpu_is_mx51_rev(CHIP_REV_3_0) > 0) { /* DVI_I2C_ENB = 0 tristates the DVI I2C level shifter */ mxc_request_iomux(MX51_PIN_CSI2_HSYNC, IOMUX_CONFIG_ALT3); mxc_iomux_set_pad(MX51_PIN_CSI2_HSYNC, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX51_PIN_CSI2_HSYNC), "csi2_hsync"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_CSI2_HSYNC), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_CSI2_HSYNC), 0); /* TO3 doesn't need pad to drive CSI_DATA_EN[0] high */ mxc_request_iomux(MX51_PIN_DI_GP3, IOMUX_CONFIG_ALT0); } /* Deassert VGA reset to free i2c bus */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_A19), "eim_a19"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_A19), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_A19), 1); /* LCD related gpio */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_DI1_D1_CS), "di1_d1_cs"); gpio_request(IOMUX_TO_GPIO(MX51_PIN_DI1_D0_CS), "di1_d0_cs"); gpio_request(IOMUX_TO_GPIO(MX51_PIN_CSI2_D12), "csi2_d12"); gpio_request(IOMUX_TO_GPIO(MX51_PIN_CSI2_D13), "csi2_d13"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_DI1_D1_CS), 0); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_DI1_D0_CS), 0); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_CSI2_D12), 0); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_CSI2_D13), 0); /* Camera reset */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_D23), "eim_d23"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_D23), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_D23), 1); /* Camera low power */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_CSI2_D19), "csi2_d19"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_CSI2_D19), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_CSI2_D19), 0); /* OSC_EN */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_D18), "eim_d18"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_D18), 0); gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_D18), 1); if (enable_w1) { /* OneWire */ mxc_request_iomux(MX51_PIN_OWIRE_LINE, IOMUX_CONFIG_ALT0); mxc_iomux_set_pad(MX51_PIN_OWIRE_LINE, PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE | PAD_CTL_ODE_OPENDRAIN_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_SRE_FAST | PAD_CTL_100K_PU | PAD_CTL_PUE_PULL); } else { /* SPDIF Out */ mxc_request_iomux(MX51_PIN_OWIRE_LINE, IOMUX_CONFIG_ALT6); mxc_iomux_set_pad(MX51_PIN_OWIRE_LINE, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_PULL | PAD_CTL_100K_PU | PAD_CTL_SRE_FAST); } }
/*! * Board specific initialization. */ static void __init mxc_board_init(void) { iomux_v3_cfg_t mc34708_int = MX53_PAD_CSI0_DAT12__GPIO5_30; iomux_v3_cfg_t da9052_csi0_d12; mxc_ipu_data.di_clk[0] = clk_get(NULL, "ipu_di0_clk"); mxc_ipu_data.di_clk[1] = clk_get(NULL, "ipu_di1_clk"); mxc_ipu_data.csi_clk[0] = clk_get(NULL, "ssi_ext1_clk"); mxc_spdif_data.spdif_core_clk = clk_get(NULL, "spdif_xtal_clk"); clk_put(mxc_spdif_data.spdif_core_clk); mxcsdhc3_device.resource[2].start = gpio_to_irq(SD3_CD); mxcsdhc3_device.resource[2].end = gpio_to_irq(SD3_CD); mxc_cpu_common_init(); mx53_loco_io_init(); mxc_register_device(&mxc_dma_device, NULL); mxc_register_device(&mxc_wdt_device, NULL); mxc_register_device(&mxci2c_devices[0], &mxci2c_data); mxc_register_device(&mxci2c_devices[1], &mxci2c_data); mxc_register_device(&mxci2c_devices[2], &mxci2c_data); mxc_register_device(&mx5_pmu_device, NULL); if (board_is_mx53_loco_mc34708()) { /* set pmic INT gpio pin */ if (board_is_rev(BOARD_REV_2)) {/*Board rev A*/ mc34708_int = MX53_PAD_CSI0_DAT12__GPIO5_30; mx53_loco_mc34708_irq = MX53_LOCO_MC34708_IRQ_REVA; } else if (board_is_rev(BOARD_REV_4)) {/*Board rev B*/ mc34708_int = MX53_PAD_CSI0_DAT5__GPIO5_23; mx53_loco_mc34708_irq = MX53_LOCO_MC34708_IRQ_REVB; } mxc_iomux_v3_setup_pad(mc34708_int); gpio_request(mx53_loco_mc34708_irq, "pmic-int"); gpio_direction_input(mx53_loco_mc34708_irq); mx53_loco_init_mc34708(mx53_loco_mc34708_irq); dvfs_core_data.reg_id = "SW1A"; tve_data.dac_reg = "VDAC"; bus_freq_data.gp_reg_id = "SW1A"; bus_freq_data.lp_reg_id = "SW2"; mxc_register_device(&mxc_powerkey_device, &pwrkey_data); } else { da9052_csi0_d12 = MX53_PAD_CSI0_DAT12__IPU_CSI0_D_12; mxc_iomux_v3_setup_pad(da9052_csi0_d12); mx53_loco_init_da9052(); dvfs_core_data.reg_id = "DA9052_BUCK_CORE"; tve_data.dac_reg = "DA9052_LDO7"; bus_freq_data.gp_reg_id = "DA9052_BUCK_CORE"; bus_freq_data.lp_reg_id = "DA9052_BUCK_PRO"; } mxc_register_device(&mxc_rtc_device, NULL); mxc_register_device(&mxc_ipu_device, &mxc_ipu_data); mxc_register_device(&mxc_ldb_device, &ldb_data); mxc_register_device(&mxc_tve_device, &tve_data); if (!mxc_fuse_get_vpu_status()) mxc_register_device(&mxcvpu_device, &mxc_vpu_data); if (!mxc_fuse_get_gpu_status()) mxc_register_device(&gpu_device, &gpu_data); mxc_register_device(&mxcscc_device, NULL); mxc_register_device(&pm_device, &loco_pm_data); mxc_register_device(&mxc_dvfs_core_device, &dvfs_core_data); mxc_register_device(&busfreq_device, &bus_freq_data); mxc_register_device(&mxc_iim_device, &iim_data); mxc_register_device(&mxc_pwm2_device, NULL); mxc_register_device(&mxc_pwm1_backlight_device, &mxc_pwm_backlight_data); mxc_register_device(&mxcsdhc1_device, &mmc1_data); mxc_register_device(&mxcsdhc3_device, &mmc3_data); mxc_register_device(&mxc_ssi1_device, NULL); mxc_register_device(&mxc_ssi2_device, NULL); mxc_register_device(&mxc_alsa_spdif_device, &mxc_spdif_data); mxc_register_device(&ahci_fsl_device, &sata_data); mxc_register_device(&imx_ahci_device_hwmon, NULL); mxc_register_device(&mxc_fec_device, &fec_data); mxc_register_device(&mxc_ptp_device, NULL); /* ASRC is only available for MX53 TO2.0 */ if (mx53_revision() >= IMX_CHIP_REVISION_2_0) { mxc_asrc_data.asrc_core_clk = clk_get(NULL, "asrc_clk"); clk_put(mxc_asrc_data.asrc_core_clk); mxc_asrc_data.asrc_audio_clk = clk_get(NULL, "asrc_serial_clk"); clk_put(mxc_asrc_data.asrc_audio_clk); mxc_register_device(&mxc_asrc_device, &mxc_asrc_data); } i2c_register_board_info(0, mxc_i2c0_board_info, ARRAY_SIZE(mxc_i2c0_board_info)); i2c_register_board_info(1, mxc_i2c1_board_info, ARRAY_SIZE(mxc_i2c1_board_info)); i2c_register_board_info(2, mxc_i2c2_board_info, ARRAY_SIZE(mxc_i2c2_board_info)); sgtl5000_data.ext_ram_clk = clk_get(NULL, "emi_fast_clk"); clk_put(sgtl5000_data.ext_ram_clk); mxc_register_device(&mxc_sgtl5000_device, &sgtl5000_data); spdif_audio_data.ext_ram_clk = clk_get(NULL, "emi_fast_clk"); clk_put(spdif_audio_data.ext_ram_clk); mxc_register_device(&mxc_spdif_audio_device, &spdif_audio_data); mx5_usb_dr_init(); mx5_set_host1_vbus_func(mx53_loco_usbh1_vbus); mx5_usbh1_init(); mxc_register_device(&mxc_v4l2_device, NULL); mxc_register_device(&mxc_v4l2out_device, NULL); loco_add_device_buttons(); pm_power_off = da9053_power_off; pm_i2c_init(I2C1_BASE_ADDR - MX53_OFFSET); platform_device_register(&leds_gpio); }
/*! * Board specific initialization. */ static void __init mxc_board_init(void) { mxc_ipu_data.di_clk[0] = clk_get(NULL, "ipu_di0_clk"); mxc_ipu_data.di_clk[1] = clk_get(NULL, "ipu_di1_clk"); mxc_ipu_data.csi_clk[0] = clk_get(NULL, "csi_mclk1"); mxc_ipu_data.csi_clk[1] = clk_get(NULL, "csi_mclk2"); mxc_spdif_data.spdif_core_clk = clk_get(NULL, "spdif_xtal_clk"); clk_put(mxc_spdif_data.spdif_core_clk); /* SD card detect irqs */ mxcsdhc2_device.resource[2].start = gpio_to_irq(BABBAGE_SD2_CD_2_5); mxcsdhc2_device.resource[2].end = gpio_to_irq(BABBAGE_SD2_CD_2_5); mxcsdhc1_device.resource[2].start = gpio_to_irq(BABBAGE_SD1_CD); mxcsdhc1_device.resource[2].end = gpio_to_irq(BABBAGE_SD1_CD); mxc_cpu_common_init(); mx51_babbage_io_init(); mxc_register_device(&mxc_dma_device, NULL); mxc_register_device(&mxc_wdt_device, NULL); mxc_register_device(&mxcspi1_device, &mxcspi1_data); mxc_register_device(&mxci2c_devices[0], &mxci2c_data); mxc_register_device(&mxci2c_devices[1], &mxci2c_data); mxc_register_device(&mxci2c_hs_device, &mxci2c_hs_data); mxc_register_device(&mxc_rtc_device, NULL); mxc_register_device(&mxc_w1_master_device, &mxc_w1_data); mxc_register_device(&mxc_ipu_device, &mxc_ipu_data); mxc_register_device(&mxc_tve_device, &tve_data); mxc_register_device(&mxcvpu_device, &mxc_vpu_data); mxc_register_device(&gpu_device, NULL); mxc_register_device(&mxcscc_device, NULL); mxc_register_device(&mx51_lpmode_device, NULL); mxc_register_device(&busfreq_device, &bus_freq_data); mxc_register_device(&sdram_autogating_device, NULL); mxc_register_device(&mxc_dvfs_core_device, &dvfs_core_data); mxc_register_device(&mxc_dvfs_per_device, &dvfs_per_data); mxc_register_device(&mxc_iim_device, &iim_data); mxc_register_device(&mxc_pwm1_device, NULL); mxc_register_device(&mxc_pwm1_backlight_device, &mxc_pwm_backlight_data); mxc_register_device(&mxc_keypad_device, &keypad_plat_data); mxc_register_device(&mxcsdhc1_device, &mmc1_data); mxc_register_device(&mxcsdhc2_device, &mmc2_data); mxc_register_device(&mxc_ssi1_device, NULL); mxc_register_device(&mxc_ssi2_device, NULL); mxc_register_device(&mxc_ssi3_device, NULL); mxc_register_device(&mxc_alsa_spdif_device, &mxc_spdif_data); mxc_register_device(&mxc_fec_device, NULL); mxc_register_device(&mxc_v4l2_device, NULL); mxc_register_device(&mxc_v4l2out_device, NULL); mxc_register_device(&mxc_powerkey_device, &pwrkey_data); mx51_babbage_init_mc13892(); if (board_is_rev(BOARD_REV_2)) /* BB2.5 */ spi_register_board_info(mxc_dataflash_device, ARRAY_SIZE(mxc_dataflash_device)); else /* BB2.0 */ spi_register_board_info(mxc_spi_nor_device, ARRAY_SIZE(mxc_spi_nor_device)); i2c_register_board_info(0, mxc_i2c0_board_info, ARRAY_SIZE(mxc_i2c0_board_info)); i2c_register_board_info(1, mxc_i2c1_board_info, ARRAY_SIZE(mxc_i2c1_board_info)); vga_data.core_reg = NULL; vga_data.io_reg = NULL; vga_data.analog_reg = NULL; i2c_register_board_info(3, mxc_i2c_hs_board_info, ARRAY_SIZE(mxc_i2c_hs_board_info)); pm_power_off = mxc_power_off; sgtl5000_data.sysclk = 26000000; gpio_request(BABBAGE_AUDAMP_STBY, "audioamp-stdby"); gpio_direction_output(BABBAGE_AUDAMP_STBY, 0); mxc_register_device(&mxc_sgtl5000_device, &sgtl5000_data); mx5_usb_dr_init(); mx5_usbh1_init(); }
static void __init mx51_babbage_io_init(void) { mxc_iomux_v3_setup_multiple_pads(mx51babbage_pads, ARRAY_SIZE(mx51babbage_pads)); gpio_request(BABBAGE_PMIC_INT, "pmic-int"); gpio_request(BABBAGE_SD1_CD, "sdhc1-detect"); gpio_request(BABBAGE_SD1_WP, "sdhc1-wp"); gpio_direction_input(BABBAGE_PMIC_INT); gpio_direction_input(BABBAGE_SD1_CD); gpio_direction_input(BABBAGE_SD1_WP); if (board_is_rev(BOARD_REV_2)) { /* SD2 CD for BB2.5 */ gpio_request(BABBAGE_SD2_CD_2_5, "sdhc2-detect"); gpio_direction_input(BABBAGE_SD2_CD_2_5); } else { /* SD2 CD for BB2.0 */ gpio_request(BABBAGE_SD2_CD_2_0, "sdhc2-detect"); gpio_direction_input(BABBAGE_SD2_CD_2_0); } gpio_request(BABBAGE_SD2_WP, "sdhc2-wp"); gpio_direction_input(BABBAGE_SD2_WP); /* reset usbh1 hub */ gpio_request(BABBAGE_USBH1_HUB_RST, "hub-rst"); gpio_direction_output(BABBAGE_USBH1_HUB_RST, 0); gpio_set_value(BABBAGE_USBH1_HUB_RST, 0); msleep(1); gpio_set_value(BABBAGE_USBH1_HUB_RST, 1); /* reset FEC PHY */ gpio_request(BABBAGE_FEC_PHY_RESET, "fec-phy-reset"); gpio_direction_output(BABBAGE_FEC_PHY_RESET, 0); msleep(10); gpio_set_value(BABBAGE_FEC_PHY_RESET, 1); /* reset FM */ gpio_request(BABBAGE_FM_RESET, "fm-reset"); gpio_direction_output(BABBAGE_FM_RESET, 0); msleep(10); gpio_set_value(BABBAGE_FM_RESET, 1); /* Drive 26M_OSC_EN line high */ gpio_request(BABBAGE_26M_OSC_EN, "26m-osc-en"); gpio_direction_output(BABBAGE_26M_OSC_EN, 1); /* Drive USB_CLK_EN_B line low */ gpio_request(BABBAGE_USB_CLK_EN_B, "usb-clk_en_b"); gpio_direction_output(BABBAGE_USB_CLK_EN_B, 0); /* De-assert USB PHY RESETB */ gpio_request(BABBAGE_PHY_RESET, "usb-phy-reset"); gpio_direction_output(BABBAGE_PHY_RESET, 1); /* hphone_det_b */ gpio_request(BABBAGE_HEADPHONE_DET, "hphone-det"); gpio_direction_input(BABBAGE_HEADPHONE_DET); /* audio_clk_en_b */ gpio_request(BABBAGE_AUDIO_CLK_EN, "audio-clk-en"); gpio_direction_output(BABBAGE_AUDIO_CLK_EN, 0); /* power key */ gpio_request(BABBAGE_POWER_KEY, "power-key"); gpio_direction_input(BABBAGE_POWER_KEY); if (mx51_revision() >= IMX_CHIP_REVISION_3_0) { /* DVI_I2C_ENB = 0 tristates the DVI I2C level shifter */ gpio_request(BABBAGE_DVI_I2C_EN, "dvi-i2c-en"); gpio_direction_output(BABBAGE_DVI_I2C_EN, 0); } /* Deassert VGA reset to free i2c bus */ gpio_request(BABBAGE_VGA_RESET, "vga-reset"); gpio_direction_output(BABBAGE_VGA_RESET, 1); /* LCD related gpio */ gpio_request(BABBAGE_DISP_BRIGHTNESS_CTL, "disp-brightness-ctl"); gpio_request(BABBAGE_LVDS_POWER_DOWN, "lvds-power-down"); gpio_request(BABBAGE_LCD_3V3_ON, "lcd-3v3-on"); gpio_request(BABBAGE_LCD_5V_ON, "lcd-5v-on"); gpio_direction_output(BABBAGE_DISP_BRIGHTNESS_CTL, 0); gpio_direction_output(BABBAGE_LVDS_POWER_DOWN, 0); gpio_direction_output(BABBAGE_LCD_3V3_ON, 0); gpio_direction_output(BABBAGE_LCD_5V_ON, 0); /* Camera reset */ gpio_request(BABBAGE_CAM_RESET, "cam-reset"); gpio_direction_output(BABBAGE_CAM_RESET, 1); /* Camera low power */ gpio_request(BABBAGE_CAM_LOW_POWER, "cam-low-power"); gpio_direction_output(BABBAGE_CAM_LOW_POWER, 0); /* OSC_EN */ gpio_request(BABBAGE_OSC_EN_B, "osc-en"); gpio_direction_output(BABBAGE_OSC_EN_B, 1); if (enable_w1) { /* OneWire */ iomux_v3_cfg_t onewire = MX51_PAD_OWIRE_LINE__OWIRE_LINE; mxc_iomux_v3_setup_pad(onewire); } }