void __init efika_board_common_init(void) { mxc_iomux_v3_setup_multiple_pads(mx51efika_pads, ARRAY_SIZE(mx51efika_pads)); imx51_add_imx_uart(0, &uart_pdata); mx51_efika_usb(); imx51_add_sdhci_esdhc_imx(0, NULL); /* FIXME: comes from original code. check this. */ if (mx51_revision() < IMX_CHIP_REVISION_2_0) sw2_init.constraints.state_mem.uV = 1100000; else if (mx51_revision() == IMX_CHIP_REVISION_2_0) { sw2_init.constraints.state_mem.uV = 1250000; sw1_init.constraints.state_mem.uV = 1000000; } if (machine_is_mx51_efikasb()) vgen1_init.constraints.max_uV = 1200000; gpio_request(EFIKAMX_PMIC, "pmic irq"); gpio_direction_input(EFIKAMX_PMIC); spi_register_board_info(mx51_efika_spi_board_info, ARRAY_SIZE(mx51_efika_spi_board_info)); imx51_add_ecspi(0, &mx51_efika_spi_pdata); #if defined(CONFIG_CPU_FREQ_IMX) get_cpu_op = mx51_get_cpu_op; #endif }
static int tsc2007_get_pendown_state(void) { if (mx51_revision() < IMX_CHIP_REVISION_3_0) return !gpio_get_value(TSC2007_IRQGPIO_REV2); else return !gpio_get_value(TSC2007_IRQGPIO_REV3); }
/* * All versions of the silicon before Rev. 3 have broken NEON implementations. * Dependent on link order - so the assumption is that vfp_init is called * before us. */ int __init mx51_neon_fixup(void) { if (mx51_revision() < IMX_CHIP_REVISION_3_0 && (elf_hwcap & HWCAP_NEON)) { elf_hwcap &= ~HWCAP_NEON; pr_info("Turning off NEON support, detected broken NEON implementation\n"); } return 0; }
static void __init mx51_3stack_timer_init(void) { struct clk *uart_clk; /* Change the CPU voltages for TO2*/ if (mx51_revision() == IMX_CHIP_REVISION_2_0) { cpu_wp_auto[0].cpu_voltage = 1175000; cpu_wp_auto[1].cpu_voltage = 1100000; cpu_wp_auto[2].cpu_voltage = 1000000; } mx51_clocks_init(32768, 24000000, 22579200, 24576000); uart_clk = clk_get(NULL, "uart_clk.0"); early_console_setup(UART1_BASE_ADDR, uart_clk); }
void __init mx51_init_irq(void) { unsigned long tzic_addr; void __iomem *tzic_virt; if (mx51_revision() < IMX_CHIP_REVISION_2_0) tzic_addr = MX51_TZIC_BASE_ADDR_TO1; else tzic_addr = MX51_TZIC_BASE_ADDR; tzic_virt = ioremap(tzic_addr, SZ_16K); if (!tzic_virt) panic("unable to map TZIC interrupt controller\n"); tzic_init_irq(tzic_virt); }
void mx51_display_revision(void) { int rev; char *srev; rev = mx51_revision(); switch (rev) { case IMX_CHIP_REVISION_2_0: srev = IMX_CHIP_REVISION_2_0_STRING; break; case IMX_CHIP_REVISION_3_0: srev = IMX_CHIP_REVISION_3_0_STRING; break; default: srev = IMX_CHIP_REVISION_UNKNOWN_STRING; } printk(KERN_INFO "CPU identified as i.MX51, silicon rev %s\n", srev); }
int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc, unsigned long rate_ckih1, unsigned long rate_ckih2) { int i; u32 val; struct device_node *np; clk[pll1_sw] = imx_clk_pllv2("pll1_sw", "osc", MX51_DPLL1_BASE); clk[pll2_sw] = imx_clk_pllv2("pll2_sw", "osc", MX51_DPLL2_BASE); clk[pll3_sw] = imx_clk_pllv2("pll3_sw", "osc", MX51_DPLL3_BASE); clk[ipu_di0_sel] = imx_clk_mux("ipu_di0_sel", MXC_CCM_CSCMR2, 26, 3, mx51_ipu_di0_sel, ARRAY_SIZE(mx51_ipu_di0_sel)); clk[ipu_di1_sel] = imx_clk_mux("ipu_di1_sel", MXC_CCM_CSCMR2, 29, 3, mx51_ipu_di1_sel, ARRAY_SIZE(mx51_ipu_di1_sel)); clk[tve_ext_sel] = imx_clk_mux_flags("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1, mx51_tve_ext_sel, ARRAY_SIZE(mx51_tve_ext_sel), CLK_SET_RATE_PARENT); clk[tve_s] = imx_clk_mux("tve_sel", MXC_CCM_CSCMR1, 7, 1, mx51_tve_sel, ARRAY_SIZE(mx51_tve_sel)); clk[tve_gate] = imx_clk_gate2("tve_gate", "tve_sel", MXC_CCM_CCGR2, 30); clk[tve_pred] = imx_clk_divider("tve_pred", "pll3_sw", MXC_CCM_CDCDR, 28, 3); clk[esdhc1_per_gate] = imx_clk_gate2("esdhc1_per_gate", "esdhc_a_podf", MXC_CCM_CCGR3, 2); clk[esdhc2_per_gate] = imx_clk_gate2("esdhc2_per_gate", "esdhc_b_podf", MXC_CCM_CCGR3, 6); clk[esdhc3_per_gate] = imx_clk_gate2("esdhc3_per_gate", "esdhc_c_sel", MXC_CCM_CCGR3, 10); clk[esdhc4_per_gate] = imx_clk_gate2("esdhc4_per_gate", "esdhc_d_sel", MXC_CCM_CCGR3, 14); clk[usb_phy_gate] = imx_clk_gate2("usb_phy_gate", "usb_phy_sel", MXC_CCM_CCGR2, 0); clk[hsi2c_gate] = imx_clk_gate2("hsi2c_gate", "ipg", MXC_CCM_CCGR1, 22); clk[mipi_hsc1_gate] = imx_clk_gate2("mipi_hsc1_gate", "ipg", MXC_CCM_CCGR4, 6); clk[mipi_hsc2_gate] = imx_clk_gate2("mipi_hsc2_gate", "ipg", MXC_CCM_CCGR4, 8); clk[mipi_esc_gate] = imx_clk_gate2("mipi_esc_gate", "ipg", MXC_CCM_CCGR4, 10); clk[mipi_hsp_gate] = imx_clk_gate2("mipi_hsp_gate", "ipg", MXC_CCM_CCGR4, 12); clk[spdif_xtal_sel] = imx_clk_mux("spdif_xtal_sel", MXC_CCM_CSCMR1, 2, 2, mx51_spdif_xtal_sel, ARRAY_SIZE(mx51_spdif_xtal_sel)); clk[spdif1_sel] = imx_clk_mux("spdif1_sel", MXC_CCM_CSCMR2, 2, 2, spdif_sel, ARRAY_SIZE(spdif_sel)); clk[spdif1_pred] = imx_clk_divider("spdif1_podf", "spdif1_sel", MXC_CCM_CDCDR, 16, 3); clk[spdif1_podf] = imx_clk_divider("spdif1_podf", "spdif1_pred", MXC_CCM_CDCDR, 9, 6); clk[spdif1_com_sel] = imx_clk_mux("spdif1_com_sel", MXC_CCM_CSCMR2, 5, 1, mx51_spdif1_com_sel, ARRAY_SIZE(mx51_spdif1_com_sel)); clk[spdif1_gate] = imx_clk_gate2("spdif1_gate", "spdif1_com_sel", MXC_CCM_CCGR5, 28); for (i = 0; i < ARRAY_SIZE(clk); i++) if (IS_ERR(clk[i])) pr_err("i.MX51 clk %d: register failed with %ld\n", i, PTR_ERR(clk[i])); np = of_find_compatible_node(NULL, NULL, "fsl,imx51-ccm"); clk_data.clks = clk; clk_data.clk_num = ARRAY_SIZE(clk); of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); mx5_clocks_common_init(rate_ckil, rate_osc, rate_ckih1, rate_ckih2); clk_register_clkdev(clk[hsi2c_gate], NULL, "imx21-i2c.2"); clk_register_clkdev(clk[mx51_mipi], "mipi_hsp", NULL); clk_register_clkdev(clk[vpu_gate], NULL, "imx51-vpu.0"); clk_register_clkdev(clk[fec_gate], NULL, "imx27-fec.0"); clk_register_clkdev(clk[usb_phy_gate], "phy", "mxc-ehci.0"); clk_register_clkdev(clk[esdhc1_ipg_gate], "ipg", "sdhci-esdhc-imx51.0"); clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx51.0"); clk_register_clkdev(clk[esdhc1_per_gate], "per", "sdhci-esdhc-imx51.0"); clk_register_clkdev(clk[esdhc2_ipg_gate], "ipg", "sdhci-esdhc-imx51.1"); clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx51.1"); clk_register_clkdev(clk[esdhc2_per_gate], "per", "sdhci-esdhc-imx51.1"); clk_register_clkdev(clk[esdhc3_ipg_gate], "ipg", "sdhci-esdhc-imx51.2"); clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx51.2"); clk_register_clkdev(clk[esdhc3_per_gate], "per", "sdhci-esdhc-imx51.2"); clk_register_clkdev(clk[esdhc4_ipg_gate], "ipg", "sdhci-esdhc-imx51.3"); clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx51.3"); clk_register_clkdev(clk[esdhc4_per_gate], "per", "sdhci-esdhc-imx51.3"); /* set the usboh3 parent to pll2_sw */ clk_set_parent(clk[usboh3_sel], clk[pll2_sw]); /* set SDHC root clock to 166.25MHZ*/ clk_set_rate(clk[esdhc_a_podf], 166250000); clk_set_rate(clk[esdhc_b_podf], 166250000); /* System timer */ mxc_timer_init(MX51_IO_ADDRESS(MX51_GPT1_BASE_ADDR), MX51_INT_GPT); clk_prepare_enable(clk[iim_gate]); imx_print_silicon_rev("i.MX51", mx51_revision()); clk_disable_unprepare(clk[iim_gate]); /* * Reference Manual says: Functionality of CCDR[18] and CLPCR[23] is no * longer supported. Set to one for better power saving. * * The effect of not setting these bits is that MIPI clocks can't be * enabled without the IPU clock being enabled aswell. */ val = readl(MXC_CCM_CCDR); val |= 1 << 18; writel(val, MXC_CCM_CCDR); val = readl(MXC_CCM_CLPCR); val |= 1 << 23; writel(val, MXC_CCM_CLPCR); return 0; }
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); } }
static void __init eukrea_cpuimx51sd_init(void) { imx51_soc_init(); mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx51sd_pads, ARRAY_SIZE(eukrea_cpuimx51sd_pads)); #if defined(CONFIG_CPU_FREQ_IMX) get_cpu_op = mx51_get_cpu_op; #endif imx51_add_imx_uart(0, &uart_pdata); imx51_add_mxc_nand(&eukrea_cpuimx51sd_nand_board_info); imx51_add_imx2_wdt(0, NULL); gpio_request(ETH_RST, "eth_rst"); gpio_set_value(ETH_RST, 1); imx51_add_fec(NULL); gpio_request(CAN_IRQGPIO, "can_irq"); gpio_direction_input(CAN_IRQGPIO); gpio_free(CAN_IRQGPIO); gpio_request(CAN_NCS, "can_ncs"); gpio_direction_output(CAN_NCS, 1); gpio_free(CAN_NCS); gpio_request(CAN_RST, "can_rst"); gpio_direction_output(CAN_RST, 0); msleep(20); gpio_set_value(CAN_RST, 1); imx51_add_ecspi(0, &cpuimx51sd_ecspi1_pdata); spi_register_board_info(cpuimx51sd_spi_device, ARRAY_SIZE(cpuimx51sd_spi_device)); if (mx51_revision() < IMX_CHIP_REVISION_3_0) { eukrea_cpuimx51sd_i2c_devices[1].irq = gpio_to_irq(TSC2007_IRQGPIO_REV2), platform_add_devices(rev2_platform_devices, ARRAY_SIZE(rev2_platform_devices)); gpio_request(TSC2007_IRQGPIO_REV2, "tsc2007_irq"); gpio_direction_input(TSC2007_IRQGPIO_REV2); gpio_free(TSC2007_IRQGPIO_REV2); } else { eukrea_cpuimx51sd_i2c_devices[1].irq = gpio_to_irq(TSC2007_IRQGPIO_REV3), imx51_add_imx_i2c(0, &cpuimx51sd_i2c_data); gpio_request(TSC2007_IRQGPIO_REV3, "tsc2007_irq"); gpio_direction_input(TSC2007_IRQGPIO_REV3); gpio_free(TSC2007_IRQGPIO_REV3); } i2c_register_board_info(0, eukrea_cpuimx51sd_i2c_devices, ARRAY_SIZE(eukrea_cpuimx51sd_i2c_devices)); if (otg_mode_host) imx51_add_mxc_ehci_otg(&dr_utmi_config); else { initialize_otg_port(NULL); imx51_add_fsl_usb2_udc(&usb_pdata); } gpio_request(USBH1_RST, "usb_rst"); gpio_direction_output(USBH1_RST, 0); msleep(20); gpio_set_value(USBH1_RST, 1); imx51_add_mxc_ehci_hs(1, &usbh1_config); #ifdef CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD eukrea_mbimxsd51_baseboard_init(); #endif }
static void __init mx51_clocks_init(struct device_node *np) { void __iomem *ccm_base; void __iomem *pll_base; u32 val; pll_base = ioremap(MX51_DPLL1_BASE, SZ_16K); WARN_ON(!pll_base); clk[IMX5_CLK_PLL1_SW] = imx_clk_pllv2("pll1_sw", "osc", pll_base); pll_base = ioremap(MX51_DPLL2_BASE, SZ_16K); WARN_ON(!pll_base); clk[IMX5_CLK_PLL2_SW] = imx_clk_pllv2("pll2_sw", "osc", pll_base); pll_base = ioremap(MX51_DPLL3_BASE, SZ_16K); WARN_ON(!pll_base); clk[IMX5_CLK_PLL3_SW] = imx_clk_pllv2("pll3_sw", "osc", pll_base); ccm_base = of_iomap(np, 0); WARN_ON(!ccm_base); mx5_clocks_common_init(ccm_base); clk[IMX5_CLK_LP_APM] = imx_clk_mux("lp_apm", MXC_CCM_CCSR, 9, 1, lp_apm_sel, ARRAY_SIZE(lp_apm_sel)); clk[IMX5_CLK_IPU_DI0_SEL] = imx_clk_mux("ipu_di0_sel", MXC_CCM_CSCMR2, 26, 3, mx51_ipu_di0_sel, ARRAY_SIZE(mx51_ipu_di0_sel)); clk[IMX5_CLK_IPU_DI1_SEL] = imx_clk_mux("ipu_di1_sel", MXC_CCM_CSCMR2, 29, 3, mx51_ipu_di1_sel, ARRAY_SIZE(mx51_ipu_di1_sel)); clk[IMX5_CLK_TVE_EXT_SEL] = imx_clk_mux_flags("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1, mx51_tve_ext_sel, ARRAY_SIZE(mx51_tve_ext_sel), CLK_SET_RATE_PARENT); clk[IMX5_CLK_TVE_SEL] = imx_clk_mux("tve_sel", MXC_CCM_CSCMR1, 7, 1, mx51_tve_sel, ARRAY_SIZE(mx51_tve_sel)); clk[IMX5_CLK_TVE_GATE] = imx_clk_gate2("tve_gate", "tve_sel", MXC_CCM_CCGR2, 30); clk[IMX5_CLK_TVE_PRED] = imx_clk_divider("tve_pred", "pll3_sw", MXC_CCM_CDCDR, 28, 3); clk[IMX5_CLK_ESDHC1_PER_GATE] = imx_clk_gate2("esdhc1_per_gate", "esdhc_a_podf", MXC_CCM_CCGR3, 2); clk[IMX5_CLK_ESDHC2_PER_GATE] = imx_clk_gate2("esdhc2_per_gate", "esdhc_b_podf", MXC_CCM_CCGR3, 6); clk[IMX5_CLK_ESDHC3_PER_GATE] = imx_clk_gate2("esdhc3_per_gate", "esdhc_c_sel", MXC_CCM_CCGR3, 10); clk[IMX5_CLK_ESDHC4_PER_GATE] = imx_clk_gate2("esdhc4_per_gate", "esdhc_d_sel", MXC_CCM_CCGR3, 14); clk[IMX5_CLK_USB_PHY_GATE] = imx_clk_gate2("usb_phy_gate", "usb_phy_sel", MXC_CCM_CCGR2, 0); clk[IMX5_CLK_HSI2C_GATE] = imx_clk_gate2("hsi2c_gate", "ipg", MXC_CCM_CCGR1, 22); clk[IMX5_CLK_MIPI_HSC1_GATE] = imx_clk_gate2("mipi_hsc1_gate", "ipg", MXC_CCM_CCGR4, 6); clk[IMX5_CLK_MIPI_HSC2_GATE] = imx_clk_gate2("mipi_hsc2_gate", "ipg", MXC_CCM_CCGR4, 8); clk[IMX5_CLK_MIPI_ESC_GATE] = imx_clk_gate2("mipi_esc_gate", "ipg", MXC_CCM_CCGR4, 10); clk[IMX5_CLK_MIPI_HSP_GATE] = imx_clk_gate2("mipi_hsp_gate", "ipg", MXC_CCM_CCGR4, 12); clk[IMX5_CLK_SPDIF_XTAL_SEL] = imx_clk_mux("spdif_xtal_sel", MXC_CCM_CSCMR1, 2, 2, mx51_spdif_xtal_sel, ARRAY_SIZE(mx51_spdif_xtal_sel)); clk[IMX5_CLK_SPDIF1_SEL] = imx_clk_mux("spdif1_sel", MXC_CCM_CSCMR2, 2, 2, spdif_sel, ARRAY_SIZE(spdif_sel)); clk[IMX5_CLK_SPDIF1_PRED] = imx_clk_divider("spdif1_pred", "spdif1_sel", MXC_CCM_CDCDR, 16, 3); clk[IMX5_CLK_SPDIF1_PODF] = imx_clk_divider("spdif1_podf", "spdif1_pred", MXC_CCM_CDCDR, 9, 6); clk[IMX5_CLK_SPDIF1_COM_SEL] = imx_clk_mux("spdif1_com_sel", MXC_CCM_CSCMR2, 5, 1, mx51_spdif1_com_sel, ARRAY_SIZE(mx51_spdif1_com_sel)); clk[IMX5_CLK_SPDIF1_GATE] = imx_clk_gate2("spdif1_gate", "spdif1_com_sel", MXC_CCM_CCGR5, 28); imx_check_clocks(clk, ARRAY_SIZE(clk)); clk_data.clks = clk; clk_data.clk_num = ARRAY_SIZE(clk); of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); /* set the usboh3 parent to pll2_sw */ clk_set_parent(clk[IMX5_CLK_USBOH3_SEL], clk[IMX5_CLK_PLL2_SW]); /* set SDHC root clock to 166.25MHZ*/ clk_set_rate(clk[IMX5_CLK_ESDHC_A_PODF], 166250000); clk_set_rate(clk[IMX5_CLK_ESDHC_B_PODF], 166250000); clk_prepare_enable(clk[IMX5_CLK_IIM_GATE]); imx_print_silicon_rev("i.MX51", mx51_revision()); clk_disable_unprepare(clk[IMX5_CLK_IIM_GATE]); /* * Reference Manual says: Functionality of CCDR[18] and CLPCR[23] is no * longer supported. Set to one for better power saving. * * The effect of not setting these bits is that MIPI clocks can't be * enabled without the IPU clock being enabled aswell. */ val = readl(MXC_CCM_CCDR); val |= 1 << 18; writel(val, MXC_CCM_CCDR); val = readl(MXC_CCM_CLPCR); val |= 1 << 23; writel(val, MXC_CCM_CLPCR); }