static int mxc_sgtl5000_init(void) { struct clk *ssi_ext1; int rate; if (board_is_mx53_arm2()) { sgtl5000_data.sysclk = 12000000; } else { ssi_ext1 = clk_get(NULL, "ssi_ext1_clk"); if (IS_ERR(ssi_ext1)) return -1; rate = clk_round_rate(ssi_ext1, 24000000); if (rate < 8000000 || rate > 27000000) { printk(KERN_ERR "Error: SGTL5000 mclk freq %d out of range!\n", rate); clk_put(ssi_ext1); return -1; } clk_set_rate(ssi_ext1, rate); clk_enable(ssi_ext1); sgtl5000_data.sysclk = rate; } return 0; }
static void __init mx53_evk_board_init(void) { int i; mx53_evk_io_init(); gp_reg_id = evk_regulator_data.cpu_reg_id; lp_reg_id = evk_regulator_data.vcc_reg_id; mxc_spdif_data.spdif_core_clk = clk_get(NULL, "spdif_xtal_clk"); clk_put(mxc_spdif_data.spdif_core_clk); mx53_evk_init_uart(); imx53_add_srtc(); mx53_evk_fec_reset(); imx53_add_fec(&mx53_evk_fec_pdata); imx53_add_ipuv3(0, &ipu_data); for (i = 0; i < ARRAY_SIZE(evk_fb_data); i++) imx53_add_ipuv3fb(i, &evk_fb_data[i]); imx53_add_vpu(); imx53_add_tve(&tve_data); imx53_add_v4l2_output(0); if (!board_is_mx53_arm2()) { imx53_add_mxc_pwm(1); imx53_add_mxc_pwm_backlight(0, &evk_pwm_backlight_data); } imx53_add_dvfs_core(&evk_dvfs_core_data); imx53_add_busfreq(); imx53_add_imx_i2c(0, &mx53_evk_i2c_data); imx53_add_imx_i2c(1, &mx53_evk_i2c_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)); imx53_add_sdhci_esdhc_imx(0, &mx53_evk_sd1_data); imx53_add_sdhci_esdhc_imx(2, &mx53_evk_sd3_data); mxc_register_device(&imx_ahci_device_hwmon, NULL); spi_register_board_info(mx53_evk_spi_board_info, ARRAY_SIZE(mx53_evk_spi_board_info)); imx53_add_ecspi(0, &mx53_evk_spi_data); imx53_add_imx2_wdt(0, NULL); imx53_add_spdif(&mxc_spdif_data); imx53_add_spdif_dai(); imx53_add_spdif_audio_device(); /* this call required to release SCC RAM partition held by ROM * during boot, even if SCC2 driver is not part of the image */ imx53_add_mxc_scc2(); }
static int sdhc_write_protect(struct device *dev) { unsigned short rc = 0; if (!board_is_mx53_arm2()) { if (to_platform_device(dev)->id == 0) rc = gpio_get_value(EVK_SD1_WP); else rc = gpio_get_value(EVK_SD3_WP); } return rc; }
static void gpio_usbotg_vbus_inactive(void) { if (board_is_mx53_arm2()) { /* MX53 ARM2 CPU board */ /* Disable OTG VBus with GPIO high */ gpio_set_value(ARM2_OTG_VBUS, 1); } else if (board_is_mx53_evk_a()) { /* MX53 EVK board ver A*/ /* Disable OTG VBus with GPIO high */ gpio_set_value(EVK_OTG_VBUS, 1); } else if (board_is_mx53_evk_b()) { /* MX53 EVK board ver B*/ /* Disable OTG VBus with GPIO low */ gpio_set_value(EVK_OTG_VBUS, 0); } }
static void gpio_usbotg_vbus_inactive(void) { if (board_is_mx53_arm2()) { /* MX53 ARM2 CPU board */ /* Disable OTG VBus with GPIO high */ gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_D22), 1); } else if (board_is_mx53_evk_a()) { /* MX53 EVK board ver A*/ /* Disable OTG VBus with GPIO high */ gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_A23), 1); } else if (board_is_mx53_evk_b()) { /* MX53 EVK board ver B*/ /* Disable OTG VBus with GPIO low */ gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_A23), 0); } }
static unsigned int sdhc_get_card_det_status(struct device *dev) { int ret; if (board_is_mx53_arm2()) { if (to_platform_device(dev)->id == 0) ret = gpio_get_value(ARM2_SD1_CD); else ret = 1; } else { if (to_platform_device(dev)->id == 0) { ret = gpio_get_value(EVK_SD1_CD); } else{ /* config the det pin for SDHC3 */ ret = gpio_get_value(EVK_SD3_CD); } } return ret; }
static void __init mx53_evk_board_init(void) { mx53_evk_io_init(); mx53_evk_init_uart(); imx53_add_srtc(); mx53_evk_fec_reset(); imx53_add_fec(&mx53_evk_fec_pdata); imx53_add_ipuv3(&ipu_data); imx53_add_vpu(); imx53_add_tve(&tve_data); imx53_add_v4l2_output(0); if (!board_is_mx53_arm2()) { imx53_add_mxc_pwm(1); imx53_add_mxc_pwm_backlight(0, &evk_pwm_backlight_data); } imx53_add_dvfs_core(&evk_dvfs_core_data); imx53_add_busfreq(&evk_bus_freq_data); imx53_add_imx_i2c(0, &mx53_evk_i2c_data); imx53_add_imx_i2c(1, &mx53_evk_i2c_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)); imx53_add_sdhci_esdhc_imx(0, &mx53_evk_sd1_data); imx53_add_sdhci_esdhc_imx(2, &mx53_evk_sd3_data); spi_register_board_info(mx53_evk_spi_board_info, ARRAY_SIZE(mx53_evk_spi_board_info)); imx53_add_ecspi(0, &mx53_evk_spi_data); imx53_add_imx2_wdt(0, NULL); /* this call required to release SCC RAM partition held by ROM * during boot, even if SCC2 driver is not part of the image */ imx53_add_mxc_scc2(); }
/*! * 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, "ssi_ext1_clk"); mxc_spdif_data.spdif_core_clk = clk_get(NULL, "spdif_xtal_clk"); clk_put(mxc_spdif_data.spdif_core_clk); spdif_audio_data.ext_ram_clk = clk_get(NULL, "emi_fast_clk"); clk_put(spdif_audio_data.ext_ram_clk); /* SD card detect irqs */ if (board_is_mx53_arm2()) { mxcsdhc1_device.resource[2].start = gpio_to_irq(ARM2_SD1_CD); mxcsdhc1_device.resource[2].end = gpio_to_irq(ARM2_SD1_CD); mmc3_data.card_inserted_state = 1; mmc3_data.status = NULL; mmc3_data.wp_status = NULL; mmc1_data.wp_status = NULL; } else { mxcsdhc3_device.resource[2].start = gpio_to_irq(EVK_SD3_CD); mxcsdhc3_device.resource[2].end = gpio_to_irq(EVK_SD3_CD); mxcsdhc1_device.resource[2].start = gpio_to_irq(EVK_SD1_CD); mxcsdhc1_device.resource[2].end = gpio_to_irq(EVK_SD1_CD); } mxc_cpu_common_init(); mx53_evk_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_devices[2], &mxci2c_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_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(&mx53_lpmode_device, NULL); mxc_register_device(&sdram_autogating_device, NULL); */ mxc_register_device(&mxc_dvfs_core_device, &dvfs_core_data); mxc_register_device(&busfreq_device, &bus_freq_data); /* mxc_register_device(&mxc_dvfs_per_device, &dvfs_per_data); */ mxc_register_device(&mxc_iim_device, &iim_data); if (!board_is_mx53_arm2()) { mxc_register_device(&mxc_pwm2_device, NULL); mxc_register_device(&mxc_pwm1_backlight_device, &mxc_pwm_backlight_data); } mxc_register_device(&mxc_flexcan0_device, &flexcan0_data); mxc_register_device(&mxc_flexcan1_device, &flexcan1_data); /* mxc_register_device(&mxc_keypad_device, &keypad_plat_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(&ahci_fsl_device, &sata_data); /* 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); } mxc_register_device(&mxc_alsa_spdif_device, &mxc_spdif_data); if (!mxc_apc_on) { mxc_register_device(&mxc_fec_device, &fec_data); mxc_register_device(&mxc_ptp_device, NULL); } spi_register_board_info(mxc_dataflash_device, ARRAY_SIZE(mxc_dataflash_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)); mx53_evk_init_mc13892(); /* pm_power_off = mxc_power_off; */ sgtl5000_data.ext_ram_clk = clk_get(NULL, "emi_fast_clk"); clk_put(sgtl5000_data.ext_ram_clk); mxc_surround_audio_data.ext_ram_clk = clk_get(NULL, "emi_fast_clk"); clk_put(mxc_surround_audio_data.ext_ram_clk); mxc_register_device(&mxc_sgtl5000_device, &sgtl5000_data); mxc_register_device(&mxc_spdif_audio_device, &spdif_audio_data); mxc_register_device(&mxc_mlb_device, &mlb_data); mxc_register_device(&mxc_powerkey_device, &pwrkey_data); mx5_set_otghost_vbus_func(mx53_gpio_usbotg_driver_vbus); mx5_usb_dr_init(); mx5_set_host1_vbus_func(mx53_gpio_host1_driver_vbus); mx5_usbh1_init(); mxc_register_device(&mxc_nandv2_mtd_device, &mxc_nand_data); if (mxc_apc_on) { mxc_register_device(&mxc_esai_device, &esai_data); mxc_register_device(&mxc_alsa_surround_device, &mxc_surround_audio_data); } mxc_register_device(&mxc_v4l2_device, NULL); mxc_register_device(&mxc_v4l2out_device, NULL); }
static void __init mx53_evk_io_init(void) { mxc_iomux_v3_setup_multiple_pads(mx53common_pads, ARRAY_SIZE(mx53common_pads)); if (board_is_mx53_arm2()) { /* MX53 ARM2 CPU board */ pr_info("MX53 ARM2 board \n"); mxc_iomux_v3_setup_multiple_pads(mx53arm2_pads, ARRAY_SIZE(mx53arm2_pads)); /* Config GPIO for OTG VBus */ gpio_request(ARM2_OTG_VBUS, "otg-vbus"); gpio_direction_output(ARM2_OTG_VBUS, 1); gpio_request(ARM2_SD1_CD, "sdhc1-cd"); gpio_direction_input(ARM2_SD1_CD); /* SD1 CD */ gpio_request(ARM2_LCD_CONTRAST, "lcd-contrast"); gpio_direction_output(ARM2_LCD_CONTRAST, 1); } else { /* MX53 EVK board */ pr_info("MX53 EVK board \n"); mxc_iomux_v3_setup_multiple_pads(mx53evk_pads, ARRAY_SIZE(mx53evk_pads)); /* Host1 Vbus with GPIO high */ gpio_request(EVK_USBH1_VBUS, "usbh1-vbus"); gpio_direction_output(EVK_USBH1_VBUS, 1); /* shutdown the Host1 Vbus when system bring up, * Vbus will be opened in Host1 driver's probe function */ gpio_set_value(EVK_USBH1_VBUS, 0); /* USB HUB RESET - De-assert USB HUB RESET_N */ gpio_request(EVK_USB_HUB_RESET, "usb-hub-reset"); gpio_direction_output(EVK_USB_HUB_RESET, 0); msleep(1); gpio_set_value(EVK_USB_HUB_RESET, 1); /* Config GPIO for OTG VBus */ gpio_request(EVK_OTG_VBUS, "otg-vbus"); gpio_direction_output(EVK_OTG_VBUS, 0); if (board_is_mx53_evk_a()) /*rev A,"1" disable, "0" enable vbus*/ gpio_set_value(EVK_OTG_VBUS, 1); else if (board_is_mx53_evk_b()) /* rev B,"0" disable,"1" enable Vbus*/ gpio_set_value(EVK_OTG_VBUS, 0); gpio_request(EVK_SD1_CD, "sdhc1-cd"); gpio_direction_input(EVK_SD1_CD); /* SD1 CD */ gpio_request(EVK_SD1_WP, "sdhc1-wp"); gpio_direction_input(EVK_SD1_WP); /* SD1 WP */ /* SD3 CD */ gpio_request(EVK_SD3_CD, "sdhc3-cd"); gpio_direction_input(EVK_SD3_CD); /* SD3 WP */ gpio_request(EVK_SD3_WP, "sdhc3-wp"); gpio_direction_input(EVK_SD3_WP); /* reset FEC PHY */ gpio_request(EVK_FEC_PHY_RESET, "fec-phy-reset"); gpio_direction_output(EVK_FEC_PHY_RESET, 0); msleep(1); gpio_set_value(EVK_FEC_PHY_RESET, 1); gpio_request(MX53_ESAI_RESET, "fesai-reset"); gpio_direction_output(MX53_ESAI_RESET, 0); } /* DVI Detect */ gpio_request(MX53_DVI_DETECT, "dvi-detect"); gpio_direction_input(MX53_DVI_DETECT); /* DVI Reset - Assert for i2c disabled mode */ gpio_request(MX53_DVI_RESET, "dvi-reset"); gpio_direction_output(MX53_DVI_RESET, 0); /* DVI Power-down */ gpio_request(MX53_DVI_PD, "dvi-pd"); gpio_direction_output(MX53_DVI_PD, 1); /* DVI I2C enable */ gpio_request(MX53_DVI_I2C, "dvi-i2c"); gpio_direction_output(MX53_DVI_I2C, 0); mxc_iomux_v3_setup_multiple_pads(mx53_nand_pads, ARRAY_SIZE(mx53_nand_pads)); gpio_request(MX53_PMIC_INT, "pmic-int"); gpio_direction_input(MX53_PMIC_INT); /*PMIC_INT*/ /* headphone_det_b */ gpio_request(MX53_HP_DETECT, "hp-detect"); gpio_direction_input(MX53_HP_DETECT); /* power key */ /* LCD related gpio */ /* Camera reset */ gpio_request(MX53_CAM_RESET, "cam-reset"); gpio_direction_output(MX53_CAM_RESET, 1); /* TVIN reset */ gpio_request(MX53_TVIN_RESET, "tvin-reset"); gpio_direction_output(MX53_TVIN_RESET, 0); msleep(5); gpio_set_value(MX53_TVIN_RESET, 1); /* TVin power down */ gpio_request(MX53_TVIN_PWR, "tvin-pwr"); gpio_direction_output(MX53_TVIN_PWR, 0); /* CAN1 enable GPIO*/ gpio_request(MX53_CAN1_EN1, "can1-en1"); gpio_direction_output(MX53_CAN1_EN1, 0); gpio_request(MX53_CAN1_EN2, "can1-en2"); gpio_direction_output(MX53_CAN1_EN2, 0); /* CAN2 enable GPIO*/ gpio_request(MX53_CAN2_EN1, "can2-en1"); gpio_direction_output(MX53_CAN2_EN1, 0); gpio_request(MX53_CAN2_EN2, "can2-en2"); gpio_direction_output(MX53_CAN2_EN2, 0); if (enable_spdif) { iomux_v3_cfg_t spdif_pin = MX53_PAD_GPIO_19__SPDIF_OUT1; mxc_iomux_v3_setup_pad(spdif_pin); } else { /* GPIO for 12V */ gpio_request(MX53_12V_EN, "12v-en"); gpio_direction_output(MX53_12V_EN, 0); } }
void __init mx53_evk_io_init(void) { int i; 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); } if (board_is_mx53_arm2()) { /* MX53 ARM2 CPU board */ pr_info("MX53 ARM2 board \n"); for (i = 0; i < ARRAY_SIZE(mx53_arm2_iomux_pins); i++) { mxc_request_iomux(mx53_arm2_iomux_pins[i].pin, mx53_arm2_iomux_pins[i].mux_mode); if (mx53_arm2_iomux_pins[i].pad_cfg) mxc_iomux_set_pad(mx53_arm2_iomux_pins[i].pin, mx53_arm2_iomux_pins[i].pad_cfg); if (mx53_arm2_iomux_pins[i].in_select) mxc_iomux_set_input(mx53_arm2_iomux_pins[i].in_select, mx53_arm2_iomux_pins[i].in_mode); } /* Config GPIO for OTG VBus */ mxc_iomux_set_pad(MX53_PIN_EIM_D22, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_D22), "gpio3_22"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_EIM_D22), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_D22), 1); gpio_request(IOMUX_TO_GPIO(MX53_PIN_GPIO_1), "gpio1_1"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_GPIO_1)); /* SD1 CD */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_DI0_PIN4), "gpio4_20"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_DI0_PIN4), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_DI0_PIN4), 1); } else { /* MX53 EVK board */ pr_info("MX53 EVK board \n"); for (i = 0; i < ARRAY_SIZE(mx53_evk_iomux_pins); i++) { mxc_request_iomux(mx53_evk_iomux_pins[i].pin, mx53_evk_iomux_pins[i].mux_mode); if (mx53_evk_iomux_pins[i].pad_cfg) mxc_iomux_set_pad(mx53_evk_iomux_pins[i].pin, mx53_evk_iomux_pins[i].pad_cfg); if (mx53_evk_iomux_pins[i].in_select) mxc_iomux_set_input(mx53_evk_iomux_pins[i].in_select, mx53_evk_iomux_pins[i].in_mode); } /* Host1 Vbus with GPIO high */ mxc_iomux_set_pad(MX53_PIN_ATA_DA_2, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_2), "gpio7_8"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_2), 1); /* shutdown the Host1 Vbus when system bring up, * Vbus will be opened in Host1 driver's probe function */ gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_2), 0); /* USB HUB RESET - De-assert USB HUB RESET_N */ mxc_iomux_set_pad(MX53_PIN_CSI0_DATA_EN, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX53_PIN_CSI0_DATA_EN), "gpio5_20"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_CSI0_DATA_EN), 0); msleep(1); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_CSI0_DATA_EN), 0); msleep(1); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_CSI0_DATA_EN), 1); /* Config GPIO for OTG VBus */ mxc_iomux_set_pad(MX53_PIN_EIM_A23, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_A23), "gpio6_6"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_EIM_A23), 0); if (board_is_mx53_evk_a()) /*rev A,"1" disable, "0" enable vbus*/ gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_A23), 1); else if (board_is_mx53_evk_b()) /* rev B,"0" disable,"1" enable Vbus*/ gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_A23), 0); gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_DA13), "gpio3_13"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_EIM_DA13)); /* SD1 CD */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_DA14), "gpio3_14"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_EIM_DA14)); /* SD1 WP */ /* SD3 CD */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_DA11), "gpio3_11"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_EIM_DA11)); /* SD3 WP */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_DA12), "gpio3_12"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_EIM_DA11)); /* reset FEC PHY */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_0), "gpio7_6"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_0), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_0), 0); msleep(1); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_0), 1); /* CS42888 reset GPIO */ gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_12), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_12), 0); } /* DVI Detect */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_D31), "gpio3_31"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_EIM_D31)); /* DVI Reset - Assert for i2c disabled mode */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_WAIT), "gpio5_0"); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_WAIT), 0); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_EIM_WAIT), 0); /* DVI Power-down */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_D24), "gpio3_24"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_EIM_D24), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_D24), 1); /* DVI I2C enable */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_D28), "gpio3_28"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_EIM_D28), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_D28), 0); for (i = 0; i < ARRAY_SIZE(nand_iomux_pins); i++) { mxc_request_iomux(nand_iomux_pins[i].pin, nand_iomux_pins[i].mux_mode); if (nand_iomux_pins[i].pad_cfg) mxc_iomux_set_pad(nand_iomux_pins[i].pin, nand_iomux_pins[i].pad_cfg); if (nand_iomux_pins[i].in_select) mxc_iomux_set_input(nand_iomux_pins[i].in_select, nand_iomux_pins[i].in_mode); } gpio_request(IOMUX_TO_GPIO(MX53_PIN_GPIO_16), "gpio7_11"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_GPIO_16)); /*PMIC_INT*/ /* headphone_det_b */ mxc_request_iomux(MX53_PIN_ATA_DATA5, IOMUX_CONFIG_GPIO); mxc_iomux_set_pad(MX53_PIN_ATA_DATA5, PAD_CTL_100K_PU); gpio_request(IOMUX_TO_GPIO(MX53_PIN_ATA_DATA5), "gpio2_5"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_ATA_DATA5)); /* power key */ /* LCD related gpio */ /* Camera reset */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_GPIO_10), "gpio4_0"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_10), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_10), 1); /* TVIN reset */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_CSI0_D7), "gpio5_25"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_CSI0_D7), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_CSI0_D7), 0); msleep(5); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_CSI0_D7), 1); /* CAN1 enable GPIO*/ gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_18), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_18), 0); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_17), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_17), 0); /* CAN2 enable GPIO*/ gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_CSI0_D6), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_CSI0_D6), 0); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_14), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_14), 0); if (enable_spdif) { mxc_free_iomux(MX53_PIN_GPIO_19, IOMUX_CONFIG_ALT1); mxc_request_iomux(MX53_PIN_GPIO_19, IOMUX_CONFIG_ALT3); mxc_iomux_set_pad(MX53_PIN_GPIO_19, PAD_CTL_DRV_HIGH | PAD_CTL_HYS_ENABLE | PAD_CTL_PUE_PULL | PAD_CTL_100K_PU | PAD_CTL_PKE_ENABLE); } else { /* GPIO for CAN 12V */ gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_19), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_19), 0); } }
void __init mx53_evk_io_init(void) { int i; 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); } if (board_is_mx53_arm2()) { /* MX53 ARM2 CPU board */ pr_info("MX53 ARM2 board \n"); for (i = 0; i < ARRAY_SIZE(mx53_arm2_iomux_pins); i++) { mxc_request_iomux(mx53_arm2_iomux_pins[i].pin, mx53_arm2_iomux_pins[i].mux_mode); if (mx53_arm2_iomux_pins[i].pad_cfg) mxc_iomux_set_pad(mx53_arm2_iomux_pins[i].pin, mx53_arm2_iomux_pins[i].pad_cfg); if (mx53_arm2_iomux_pins[i].in_select) mxc_iomux_set_input(mx53_arm2_iomux_pins[i].in_select, mx53_arm2_iomux_pins[i].in_mode); } /* Enable OTG VBus with GPIO low */ mxc_iomux_set_pad(MX53_PIN_EIM_D22, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_D22), "gpio3_22"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_EIM_D22), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_D22), 0); gpio_request(IOMUX_TO_GPIO(MX53_PIN_GPIO_1), "gpio1_1"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_GPIO_1)); /* SD1 CD */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_DI0_PIN4), "gpio4_20"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_DI0_PIN4), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_DI0_PIN4), 1); } else { /* MX53 EVK board */ pr_info("MX53 EVK board \n"); for (i = 0; i < ARRAY_SIZE(mx53_evk_iomux_pins); i++) { mxc_request_iomux(mx53_evk_iomux_pins[i].pin, mx53_evk_iomux_pins[i].mux_mode); if (mx53_evk_iomux_pins[i].pad_cfg) mxc_iomux_set_pad(mx53_evk_iomux_pins[i].pin, mx53_evk_iomux_pins[i].pad_cfg); if (mx53_evk_iomux_pins[i].in_select) mxc_iomux_set_input(mx53_evk_iomux_pins[i].in_select, mx53_evk_iomux_pins[i].in_mode); } /* Host1 Vbus with GPIO high */ mxc_iomux_set_pad(MX53_PIN_ATA_DA_2, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_2), "gpio7_8"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_2), 1); /* USB HUB RESET - De-assert USB HUB RESET_N */ mxc_iomux_set_pad(MX53_PIN_CSI0_DATA_EN, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX53_PIN_CSI0_DATA_EN), "gpio5_20"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_CSI0_DATA_EN), 0); msleep(1); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_CSI0_DATA_EN), 0); msleep(1); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_CSI0_DATA_EN), 1); /* Enable OTG VBus with GPIO low */ mxc_iomux_set_pad(MX53_PIN_EIM_A23, PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_A23), "gpio6_6"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_EIM_A23), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_A23), 0); gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_DA13), "gpio3_13"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_EIM_DA13)); /* SD1 CD */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_DA14), "gpio3_14"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_EIM_DA14)); /* SD1 WP */ /* SD3 CD */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_DA11), "gpio3_11"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_EIM_DA11)); /* SD3 WP */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_DA12), "gpio3_12"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_EIM_DA11)); /* reset FEC PHY */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_0), "gpio7_6"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_0), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_0), 0); msleep(1); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_0), 1); } /* DVI Detect */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_D31), "gpio3_31"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_EIM_D31)); /* DVI Reset - Assert for i2c disabled mode */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_WAIT), "gpio5_0"); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_WAIT), 0); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_EIM_WAIT), 0); /* DVI Power-down */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_D24), "gpio3_24"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_EIM_D24), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_D24), 1); /* DVI I2C enable */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_EIM_D28), "gpio3_28"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_EIM_D28), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_EIM_D28), 0); for (i = 0; i < ARRAY_SIZE(nand_iomux_pins); i++) { mxc_request_iomux(nand_iomux_pins[i].pin, nand_iomux_pins[i].mux_mode); if (nand_iomux_pins[i].pad_cfg) mxc_iomux_set_pad(nand_iomux_pins[i].pin, nand_iomux_pins[i].pad_cfg); if (nand_iomux_pins[i].in_select) mxc_iomux_set_input(nand_iomux_pins[i].in_select, nand_iomux_pins[i].in_mode); } gpio_request(IOMUX_TO_GPIO(MX53_PIN_GPIO_16), "gpio7_11"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_GPIO_16)); /*PMIC_INT*/ /* headphone_det_b */ mxc_request_iomux(MX53_PIN_ATA_DATA5, IOMUX_CONFIG_GPIO); mxc_iomux_set_pad(MX53_PIN_ATA_DATA5, PAD_CTL_100K_PU); gpio_request(IOMUX_TO_GPIO(MX53_PIN_ATA_DATA5), "gpio2_5"); gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_ATA_DATA5)); /* power key */ /* LCD related gpio */ /* Camera reset */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_GPIO_10), "gpio4_0"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_10), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_10), 1); /* Camera low power */ gpio_request(IOMUX_TO_GPIO(MX53_PIN_CSI0_D5), "gpio5_23"); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_CSI0_D5), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_CSI0_D5), 0); /* CAN1 enable GPIO*/ gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_18), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_18), 0); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_17), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_17), 0); /* CAN2 enable GPIO*/ gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_CSI0_D6), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_CSI0_D6), 0); gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_14), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_14), 0); /* GPIO for 12V */ gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_GPIO_19), 0); gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_19), 0); }