/* * This function initializes the AVIC hardware and disables all the * interrupts. It registers the interrupt enable and disable functions * to the kernel for each interrupt source. */ void __init mxc_init_irq(void) { int i; u32 reg; /* put the AVIC into the reset value with * all interrupts disabled */ __raw_writel(0, AVIC_INTCNTL); __raw_writel(0x1f, AVIC_NIMASK); /* disable all interrupts */ __raw_writel(0, AVIC_INTENABLEH); __raw_writel(0, AVIC_INTENABLEL); /* all IRQ no FIQ */ __raw_writel(0, AVIC_INTTYPEH); __raw_writel(0, AVIC_INTTYPEL); for (i = 0; i < MXC_MAX_INT_LINES; i++) { set_irq_chip(i, &mxc_avic_chip); set_irq_handler(i, handle_level_irq); set_irq_flags(i, IRQF_VALID); } /* Set WDOG2's interrupt the highest priority level (bit 28-31) */ reg = __raw_readl(AVIC_NIPRIORITY6); reg |= (0xF << 28); __raw_writel(reg, AVIC_NIPRIORITY6); /* init architectures chained interrupt handler */ mxc_register_gpios(); printk(KERN_INFO "MXC IRQ initialized\n"); }
/*! * 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 __init mx51_efikamx_board_init(void) { mxc_cpu_common_init(); mxc_register_gpios(); CONFIG_IOMUX(mx51_efikamx_general_iomux_pins); /* do ID pins first! */ if (machine_is_mx51_efikamx()) { CONFIG_IOMUX(mx51_efikamx_id_iomux_pins); } else if (machine_is_mx51_efikasb()) { CONFIG_IOMUX(mx51_efikasb_id_iomux_pins); CONFIG_IOMUX(mx51_efikasb_general_iomux_pins); } /* common platform configuration for all boards */ mx51_efikamx_init_uart(); mx51_efikamx_init_soc(); mx51_efikamx_init_nor(); mx51_efikamx_init_spi(); mx51_efikamx_init_i2c(); mx51_efikamx_init_pata(); /* we do board id late because it takes time to settle */ mx51_efikamx_board_id(); /* these all depend on board id */ mx51_efikamx_init_display(); mx51_efikamx_init_audio(); mx51_efikamx_init_pmic(); mx51_efikamx_init_mmc(); mx51_efikamx_init_leds(); mx51_efikamx_init_periph(); mx51_efikamx_init_usb(); pm_power_off = mx51_efikamx_power_off; if (machine_is_mx51_efikamx()) { 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); DBG(("Smarttop Revision 1.%u", mx51_efikamx_revision() )); } else if (machine_is_mx51_efikasb()) { mx51_efikamx_init_battery(); /* dastardly code to give us 1.3 or 2.0 out of "1" or "2" */ DBG(("Smartbook Revision %u.%u\n", mx51_efikamx_revision(), ((mx51_efikamx_revision() == 1) ? 3 : 0) )); DBG(("Memory type %s\n", mx51_efikamx_memory() )); } }
/*! * Board specific initialization. */ static void __init mxc_board_init(void) { /* config CS5 for debug board */ mxc_request_iomux(MX31_PIN_CS5, OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC); mxc_cpu_common_init(); mxc_register_gpios(); mxc_init_devices(); /*Pull down MX31_PIN_USB_BYP to reset USB3317 */ mxc_request_iomux(MX31_PIN_USB_BYP, OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE); gpio_request(IOMUX_TO_GPIO(MX31_PIN_USB_BYP), "usb_byp"); gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_USB_BYP), 0); gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_USB_BYP), 0); mxc_free_iomux(MX31_PIN_USB_BYP, OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE); /* Reset BT/WiFi chip */ mxc_request_iomux(MX31_PIN_DCD_DCE1, OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE); gpio_request(IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1), "dcd_dce1"); gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1), 0); gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1), 0); mxc_init_pmic_audio(); mxc_expio_init(); mxc_init_keypad(); mxc_init_enet(); mxc_init_nand_mtd(); mxc_init_ch7024(); mx3_3stack_init_mc13783(); 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_fb(); mxc_init_bl(); mxc_init_mmc(); mxc_init_ide(); mxc_init_pata(); mxc_init_bluetooth(); mxc_init_gps(); }
/* * This function initializes the AVIC hardware and disables all the * interrupts. It registers the interrupt enable and disable functions * to the kernel for each interrupt source. */ void __init mxc_init_irq(void __iomem *irqbase) { int i; avic_base = irqbase; /* put the AVIC into the reset value with * all interrupts disabled */ __raw_writel(0, avic_base + AVIC_INTCNTL); __raw_writel(0x1f, avic_base + AVIC_NIMASK); /* disable all interrupts */ __raw_writel(0, avic_base + AVIC_INTENABLEH); __raw_writel(0, avic_base + AVIC_INTENABLEL); /* all IRQ no FIQ */ __raw_writel(0, avic_base + AVIC_INTTYPEH); __raw_writel(0, avic_base + AVIC_INTTYPEL); for (i = 0; i < MXC_INTERNAL_IRQS; i++) { set_irq_chip(i, &mxc_avic_chip); set_irq_handler(i, handle_level_irq); set_irq_flags(i, IRQF_VALID); } /* Set default priority value (0) for all IRQ's */ for (i = 0; i < 8; i++) __raw_writel(0, avic_base + AVIC_NIPRIORITY(i)); /* init architectures chained interrupt handler */ mxc_register_gpios(); #ifdef CONFIG_FIQ /* Initialize FIQ */ init_FIQ(); #endif printk(KERN_INFO "MXC IRQ initialized\n"); }
/*! * This function initializes the TZIC hardware and disables all the * interrupts. It registers the interrupt enable and disable functions * to the kernel for each interrupt source. */ void __init mxc_tzic_init_irq(unsigned long base) { int i; tzic_base = ioremap(base, SZ_4K); /* put the TZIC into the reset value with * all interrupts disabled */ i = __raw_readl(TZIC_INTCNTL); __raw_writel(0x80010001, TZIC_INTCNTL); i = __raw_readl(TZIC_INTCNTL); __raw_writel(0x1f, TZIC_PRIOMASK); i = __raw_readl(TZIC_PRIOMASK); __raw_writel(0x02, TZIC_SYNCCTRL); i = __raw_readl(TZIC_SYNCCTRL); for (i = 0; i < 4; i++) { __raw_writel(0xFFFFFFFF, TZIC_INTSEC0 + i * 4); } /* disable all interrupts */ for (i = 0; i < 4; i++) { __raw_writel(0xFFFFFFFF, TZIC_ENCLEAR0 + i * 4); } /* all IRQ no FIQ Warning :: No selection */ for (i = 0; i < TZIC_NUM_IRQS; i++) { set_irq_chip(i, &mxc_tzic_chip); set_irq_handler(i, handle_level_irq); set_irq_flags(i, IRQF_VALID); } mxc_register_gpios(); printk(KERN_INFO "MXC IRQ initialized\n"); }
/*! * Board specific initialization. */ static void __init mxc_board_init(void) { pr_info("AIPS1 VA base: 0x%p\n", IO_ADDRESS(AIPS1_BASE_ADDR)); mxc_cpu_common_init(); mxc_register_gpios(); mx25_3stack_gpio_init(); early_console_setup(saved_command_line); mxc_init_keypad(); #ifdef CONFIG_I2C i2c_register_board_info(0, mxc_i2c_board_info, ARRAY_SIZE(mxc_i2c_board_info)); #endif spi_register_board_info(mxc_spi_board_info, ARRAY_SIZE(mxc_spi_board_info)); mx25_3stack_init_mc34704(); mxc_init_fb(); mxc_init_bl(); mxc_init_nand_mtd(); mxc_init_sgtl5000(); mxc_init_ak5702(); mxc_init_mmc(); mxc_init_sim(); mxc_init_fec(); }
/*! * 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(); }
/*! * Board specific initialization. */ static void __init mxc_board_init(void) { int err; 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); mxc_cpu_common_init(); mxc_register_gpios(); mx51_3stack_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); 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_register_device(&mxcsdhc1_device, &mmc1_data); mxc_register_device(&mxcsdhc2_device, &mmc2_data); mxc_register_device(&mxc_sim_device, &sim_data); mxc_register_device(&pata_fsl_device, &ata_data); mxc_register_device(&mxc_alsa_spdif_device, &mxc_spdif_data); mxc_expio_init(); if (debug_board_present) mxc_register_device(&smsc_lan9217_device, &smsc911x_config); if (cpu_is_mx51_rev(CHIP_REV_2_0) > 0) lcd_data.reset = lcd_reset_to2; mxc_register_device(&mxc_lcd_device, &lcd_data); mxc_register_device(&lcd_wvga_device, &lcd_wvga_data); mxc_register_device(&mxc_fb_devices[0], &fb_data[0]); mxc_register_device(&mxc_fb_devices[1], &fb_data[1]); mxc_register_device(&mxc_fb_devices[2], NULL); mxc_register_device(&mxcbl_device, NULL); #if defined(CONFIG_MTD_NAND_IMX_NFC) || defined(CONFIG_MTD_NAND_IMX_NFC_MODULE) mxc_register_device(&imx_nfc_device, &imx_nfc_platform_data); #else mxc_register_device(&mxc_nandv2_mtd_device, &mxc_nand_data); #endif mx51_3stack_init_mc13892(); i2c_register_board_info(1, mxc_i2c1_board_info, ARRAY_SIZE(mxc_i2c1_board_info)); i2c_register_board_info(3, mxc_i2c_hs_board_info, ARRAY_SIZE(mxc_i2c_hs_board_info)); mxc_init_wm8903(); mxc_register_device(&mxc_sgtl5000_device, &sgtl5000_data); mxc_register_device(&mxc_bt_device, &mxc_bt_data); mxc_register_device(&mxc_gps_device, &gps_data); mx5_usb_dr_init(); mx5_usbh1_init(); /* Setup Touchscreen interrupt */ gpio_request(IOMUX_TO_GPIO(MX51_PIN_GPIO1_5), "gpio1_5"); gpio_direction_input(IOMUX_TO_GPIO(MX51_PIN_GPIO1_5)); err = mxc_request_iomux(MX51_PIN_EIM_D19, IOMUX_CONFIG_GPIO); if (err) printk(KERN_ERR "Error: bt reset request gpio failed!\n"); else { gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_D19), "eim_d19"); gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_D19), 0); } }