static inline void mx6q_seco_q7_init_uart(void) { imx6q_add_imx_uart(1, NULL); # ifndef CONFIG_Q7_CAN imx6q_add_imx_uart(3, NULL); # endif imx6q_add_imx_uart(4, &mx6_uart5_data); }
static inline void mx6q_seco_UDOO_init_uart(void) { imx6q_add_imx_uart(0, NULL); imx6q_add_imx_uart(1, NULL); imx6q_add_imx_uart(2, NULL); imx6q_add_imx_uart(3, NULL); imx6q_add_imx_uart(4, NULL); }
static __init void wand_init_uart(void) { wand_mux_pads_init_uart(); imx6q_add_imx_uart(0, NULL); imx6q_add_imx_uart(1, &wand_external_uart_data); }
static __init void edm_cf_imx6_init_uart(void) { edm_cf_imx6_mux_pads_init_uart(); imx6q_add_imx_uart(0, NULL); imx6q_add_imx_uart(1, &edm_cf_imx6_external_uart_data); }
static inline void mx6q_hdmidongle_init_uart(void) { if (board_is_mx6_reva()) imx6q_add_imx_uart(1, NULL); imx6q_add_imx_uart(0, NULL); imx6q_add_imx_uart(3, NULL); }
/*! * Board specific initialization. */ static void __init mx6_board_init(void) { int ret = gpio_request_array(mx6_init_gpios, ARRAY_SIZE(mx6_init_gpios)); if (ret) { printk(KERN_ERR "%s gpio_request_array failed(" "%d) for mx6_init_gpios\n", __func__, ret); } IOMUX_SETUP(common_pads); gp_reg_id = dvfscore_data.reg_id; soc_reg_id = dvfscore_data.soc_id; pu_reg_id = dvfscore_data.pu_id; imx6q_add_imx_uart(0, NULL); imx6q_add_imx_uart(1, NULL); imx6q_add_imx_uart(2, &uart2_data); imx6q_add_imx_uart(3, NULL); imx6q_add_imx_snvs_rtc(); /* SPI */ imx6q_add_ecspi(0, &mx6_spi_data); spi_device_init(); imx6q_add_anatop_thermal_imx(1, &mx6_anatop_thermal_data); imx6_init_fec(fec_data); imx6q_add_pm_imx(0, &mx6_pm_data); imx6q_add_sdhci_usdhc_imx(3, &mx6_sd4_data); imx6_init_usb(); platform_device_register(&mx6_vmmc_reg_devices); imx6q_add_otp(); imx6q_add_viim(); imx6q_add_imx2_wdt(0, NULL); imx6q_add_dma(); imx6q_add_dvfs_core(&dvfscore_data); add_device_buttons(); imx6q_add_busfreq(); imx6q_add_flexcan0(&flexcan0_tja1040_pdata); imx6q_add_pcie(&plat_pcie); imx6q_add_perfmon(0); imx6q_add_perfmon(1); imx6q_add_perfmon(2); // regulator_has_full_constraints(); }
static inline void mx6q_seco_a62_init_uart(void) { #ifdef CONFIG_A62_PORT_8_CONF_1 imx6q_add_imx_uart(0, NULL); // 2 Wire UART1 #endif imx6q_add_imx_uart(1, NULL); // Debug UART #ifdef CONFIG_A62_PORT_4_CONF_1 imx6q_add_imx_uart(3, &mx6_uart4_data); // 4 wire UART4 #endif #ifdef CONFIG_A62_PORT_9_CONF_1 imx6q_add_imx_uart(4, NULL); // 2 Wire UART5 #endif }
/* This assumes wifi is initialized (chip has power) */ static __init void edm_cf_imx6_init_bluetooth(void) { edm_cf_imx6_mux_pads_init_bluetooth(); imx6q_add_imx_uart(2, &edm_cf_imx6_bt_uart_data); mxc_register_device(&edm_cf_imx6_bt_rfkill, &edm_cf_imx6_bt_rfkill_data); gpio_request(EDM_CF_IMX6_BT_REGON, "bt_regon"); gpio_direction_output(EDM_CF_IMX6_BT_REGON, 0); gpio_export(EDM_CF_IMX6_BT_REGON,0); gpio_request(EDM_CF_IMX6_BT_RSTN, "bt_rstn"); gpio_direction_output(EDM_CF_IMX6_BT_RSTN, 0); gpio_export(EDM_CF_IMX6_BT_RSTN, 0); msleep(11); gpio_set_value(EDM_CF_IMX6_BT_RSTN, 1); gpio_set_value(EDM_CF_IMX6_BT_REGON, 1); gpio_request(EDM_CF_IMX6_BT_WAKE, "bt_wake"); gpio_direction_output(EDM_CF_IMX6_BT_WAKE, 1); gpio_request(EDM_CF_IMX6_BT_HOST_WAKE, "bt_host_wake"); gpio_direction_input(EDM_CF_IMX6_BT_WAKE); }
static __init void wand_init_bluetooth_bcm4330(void) { wand_mux_pads_init_bluetooth_bcm4330(); imx6q_add_imx_uart(2, &wand_bt_uart_data); mxc_register_device(&wandboard_bt_rfkill, &wandboard_bt_rfkill_data_bcm4330); gpio_request(WAND_BT_REGON, "bt_regon"); gpio_direction_output(WAND_BT_REGON, 0); gpio_export(WAND_BT_REGON,0); gpio_request(WAND_BT_RSTN, "bt_rstn"); gpio_direction_output(WAND_BT_RSTN, 0); gpio_export(WAND_BT_RSTN, 0); msleep(11); gpio_set_value(WAND_BT_RSTN, 1); gpio_set_value(WAND_BT_REGON, 1); gpio_request(WAND_BT_WAKE_C1, "bt_wake"); gpio_direction_output(WAND_BT_WAKE_C1, 1); gpio_request(WAND_BT_HOST_WAKE_C1, "bt_host_wake"); gpio_direction_input(WAND_BT_WAKE_C1); }
static __init void wand_init_uart(void) { IMX6_SETUP_PAD( CSI0_DAT10__UART1_TXD ); IMX6_SETUP_PAD( CSI0_DAT11__UART1_RXD ); IMX6_SETUP_PAD( EIM_D19__UART1_CTS ); IMX6_SETUP_PAD( EIM_D20__UART1_RTS ); imx6q_add_imx_uart(0, NULL); }
/* This assumes wifi is initialized (chip has power) */ static __init void wand_init_bluetooth(void) { if (wand_revision == WAND_REV_C1) { /* BT_ON, BT_WAKE and BT_HOST_WAKE */ IMX6_SETUP_PAD( CSI0_DATA_EN__GPIO_5_20 ); IMX6_SETUP_PAD( CSI0_DAT12__GPIO_5_30 ); IMX6_SETUP_PAD( CSI0_VSYNC__GPIO_5_21 ); gpio_request(WAND_BT_ON_C1, "bt_on"); gpio_direction_output(WAND_BT_ON_C1, 0); msleep(11); gpio_set_value(WAND_BT_ON_C1, 1); gpio_export(WAND_BT_ON_C1, 0); gpio_request(WAND_BT_WAKE_C1, "bt_wake"); gpio_direction_output(WAND_BT_WAKE_C1, 1); gpio_request(WAND_BT_HOST_WAKE_C1, "bt_host_wake"); gpio_direction_input(WAND_BT_HOST_WAKE_C1); } else { /* BT_ON, BT_WAKE and BT_HOST_WAKE */ IMX6_SETUP_PAD( EIM_DA13__GPIO_3_13 ); IMX6_SETUP_PAD( EIM_DA14__GPIO_3_14 ); IMX6_SETUP_PAD( EIM_DA15__GPIO_3_15 ); gpio_request(WAND_BT_ON_AB, "bt_on"); gpio_direction_output(WAND_BT_ON_AB, 0); msleep(11); gpio_set_value(WAND_BT_ON_AB, 1); gpio_export(WAND_BT_ON_AB, 0); gpio_request(WAND_BT_WAKE_AB, "bt_wake"); gpio_direction_output(WAND_BT_WAKE_AB, 1); gpio_request(WAND_BT_HOST_WAKE_AB, "bt_host_wake"); gpio_direction_input(WAND_BT_HOST_WAKE_AB); } /* AUD5 channel goes to BT */ IMX6_SETUP_PAD( KEY_COL0__AUDMUX_AUD5_TXC ); IMX6_SETUP_PAD( KEY_ROW0__AUDMUX_AUD5_TXD ); IMX6_SETUP_PAD( KEY_COL1__AUDMUX_AUD5_TXFS ); IMX6_SETUP_PAD( KEY_ROW1__AUDMUX_AUD5_RXD ); /* Bluetooth is on UART3*/ IMX6_SETUP_PAD( EIM_D23__UART3_CTS ); IMX6_SETUP_PAD( EIM_D24__UART3_TXD ); IMX6_SETUP_PAD( EIM_D25__UART3_RXD ); IMX6_SETUP_PAD( EIM_EB3__UART3_RTS ); imx6q_add_imx_uart(2, &wand_bt_uart_data); }
/*! * Board specific initialization. */ static void __init board_init(void) { int i, j; struct clk *clko2; struct clk *new_parent; int rate; int ret = gpio_request_array(board_gpios, ARRAY_SIZE(board_gpios)); IOMUX_SETUP(common_pads); if (ret) { printk(KERN_ERR "%s gpio_request_array failed(" "%d) for board_gpios\n", __func__, ret); } printk(KERN_ERR "------------ Board type H\n"); gp_reg_id = plat_dvfscore.reg_id; soc_reg_id = plat_dvfscore.soc_id; pu_reg_id = plat_dvfscore.pu_id; imx6q_add_imx_uart(0, NULL); imx6q_add_imx_uart(1, NULL); imx6q_add_imx_uart(2, &plat_uart2); imx6q_add_ipuv3(0, &plat_ipu[0]); if (cpu_is_mx6q()) { imx6q_add_ipuv3(1, &plat_ipu[1]); j = ARRAY_SIZE(plat_fb); } else { j = ARRAY_SIZE(plat_fb) / 2; plat_ldb.ipu_id = 0; plat_ldb.disp_id = 1; plat_ldb.sec_ipu_id = 0; plat_ldb.sec_disp_id = 0; } for (i = 0; i < j; i++) fb_dev[i] = imx6q_add_ipuv3fb(i, &plat_fb[i]); imx6q_add_vdoa(); imx6q_add_lcdif(&plat_lcdif); imx6q_add_ldb(&plat_ldb); imx6q_add_v4l2_output(0); imx6q_add_v4l2_capture(0, &plat_capture); imx6q_add_mipi_csi2(&plat_mipi_csi2); imx6q_add_imx_snvs_rtc(); if (1 == caam_enabled) imx6q_add_imx_caam(); imx6q_add_imx_i2c(0, &plat_i2c); imx6q_add_imx_i2c(2, &plat_i2c); i2c_register_board_info(0, mxc_i2c0_board_info, ARRAY_SIZE(mxc_i2c0_board_info)); mxc_register_device(&platdev_i2c0mux, &plat_i2c0mux); i2c_register_board_info(3, mxc_i2c3_board_info, ARRAY_SIZE(mxc_i2c3_board_info)); i2c_register_board_info(4, mxc_i2c4_board_info, ARRAY_SIZE(mxc_i2c4_board_info)); i2c_register_board_info(5, mxc_i2c5_board_info, ARRAY_SIZE(mxc_i2c5_board_info)); mxc_register_device(&platdev_i2c2mux, &plat_i2c2mux); i2c_register_board_info(6, mxc_i2c6_board_info, ARRAY_SIZE(mxc_i2c6_board_info)); i2c_register_board_info(7, mxc_i2c7_board_info, ARRAY_SIZE(mxc_i2c7_board_info)); /* SPI */ imx6q_add_ecspi(0, &plat_spi); spi_device_init(); imx6q_add_anatop_thermal_imx(1, &plat_anatop_thermal); imx6_init_fec(plat_fec); imx6q_add_pm_imx(0, &plat_pm); imx6q_add_sdhci_usdhc_imx(2, &plat_sd3); imx6q_add_sdhci_usdhc_imx(3, &plat_sd4); imx_add_viv_gpu(&imx6_gpu_data, &plat_gpu); init_usb(); if (cpu_is_mx6q()) imx6q_add_ahci(0, &plat_sata); imx6q_add_vpu(); init_audio(); platform_device_register(&platdev_vmmc_reg_devices); plat_asrc.asrc_core_clk = clk_get(NULL, "asrc_clk"); plat_asrc.asrc_audio_clk = clk_get(NULL, "asrc_serial_clk"); imx6q_add_asrc(&plat_asrc); /* release USB Hub reset */ gpio_set_value(GP_USB_HUB_RESET, 1); imx6q_add_mxc_pwm(0); /* RGB backlight */ imx6q_add_mxc_pwm(1); /* Buzzer */ imx6q_add_mxc_pwm(2); /* LVDS1 baclight */ imx6q_add_mxc_pwm(3); /* LVDS0 baclight */ imx6q_add_mxc_pwm_backlight(0, &plat_di0_backlight); imx6q_add_mxc_pwm_backlight(2, &plat_lvds1_backlight); imx6q_add_mxc_pwm_backlight(3, &plat_lvds0_backlight); imx6q_add_otp(); imx6q_add_viim(); imx6q_add_imx2_wdt(0, NULL); imx6q_add_dma(); imx6q_add_dvfs_core(&plat_dvfscore); add_device_buttons(); clko2 = clk_get(NULL, "clko2_clk"); if (IS_ERR(clko2)) pr_err("can't get CLKO2 clock.\n"); new_parent = clk_get(NULL, "osc_clk"); if (!IS_ERR(new_parent)) { clk_set_parent(clko2, new_parent); clk_put(new_parent); } rate = clk_round_rate(clko2, 24000000); clk_set_rate(clko2, rate); clk_enable(clko2); pm_power_off = poweroff; imx6q_add_busfreq(); gpio_set_value(GP_WL_EN, 1); /* momentarily enable */ gpio_set_value(GP_WL_BT_REG_EN, 1); mdelay(2); gpio_set_value(GP_WL_EN, 0); gpio_set_value(GP_WL_BT_REG_EN, 0); gpio_free(GP_WL_BT_RESET); gpio_free(GP_WL_EN); gpio_free(GP_WL_BT_REG_EN); mdelay(1); imx6q_add_sdhci_usdhc_imx(1, &plat_sd2); platform_device_register(&platdev_vwifi_reg_devices); platform_device_register(&platdev_leds_pwd); imx6q_add_pcie(&plat_pcie); imx6q_add_perfmon(0); imx6q_add_perfmon(1); imx6q_add_perfmon(2); }
static inline void mx6_evk_init_uart(void) { imx6q_add_imx_uart(0, NULL); /* DEBUG UART1 */ }
static inline void mx6q_seco_uSBC_init_uart(void) { imx6q_add_imx_uart(1, NULL); imx6q_add_imx_uart(4, NULL); // 4 wire UART }
/*! * Board specific initialization. */ static void __init board_init(void) { int i, j; int ret; struct clk *clko2; struct clk *new_parent; int rate; int isn6 ; IOMUX_SETUP(common_pads); isn6 = is_nitrogen6w(); if (isn6) { audio_data.ext_port = 3; sd3_data.wp_gpio = -1 ; IOMUX_SETUP(nitrogen6x_pads); } else { IOMUX_SETUP(sabrelite_pads); } printk(KERN_ERR "------------ Board type %s\n", isn6 ? "Nitrogen6X/W" : "Sabre Lite"); #ifdef CONFIG_FEC_1588 /* Set GPIO_16 input for IEEE-1588 ts_clk and RMII reference clock * For MX6 GPR1 bit21 meaning: * Bit21: 0 - GPIO_16 pad output * 1 - GPIO_16 pad input */ mxc_iomux_set_gpr_register(1, 21, 1, 1); #endif gp_reg_id = dvfscore_data.reg_id; soc_reg_id = dvfscore_data.soc_id; pu_reg_id = dvfscore_data.pu_id; imx6q_add_imx_uart(0, NULL); imx6q_add_imx_uart(1, NULL); if (isn6) imx6q_add_imx_uart(2, &mx6_arm2_uart2_data); #if !(defined(CONFIG_MXC_CAMERA_OV5642) || defined(CONFIG_MXC_CAMERA_OV5642_MODULE)) imx6q_add_imx_uart(3, &mx6_arm2_uart3_data); imx6q_add_imx_uart(4, &mx6_arm2_uart4_data); #endif if (!cpu_is_mx6q()) { ldb_data.ipu_id = 0; ldb_data.sec_ipu_id = 0; } imx6q_add_mxc_hdmi_core(&hdmi_core_data); imx6q_add_ipuv3(0, &ipu_data[0]); if (cpu_is_mx6q()) { imx6q_add_ipuv3(1, &ipu_data[1]); j = ARRAY_SIZE(fb_data); } else { j = (ARRAY_SIZE(fb_data) + 1) / 2; adv7180_data.ipu = 0; } for (i = 0; i < j; i++) imx6q_add_ipuv3fb(i, &fb_data[i]); imx6q_add_vdoa(); imx6q_add_lcdif(&lcdif_data); imx6q_add_ldb(&ldb_data); imx6q_add_v4l2_output(0); imx6q_add_bt656(&bt656_data); for (i = 0; i < ARRAY_SIZE(capture_data); i++) { if (!cpu_is_mx6q()) capture_data[i].ipu = 0; imx6q_add_v4l2_capture(i, &capture_data[i]); } imx6q_add_mipi_csi2(&mipi_csi2_pdata); imx6q_add_imx_snvs_rtc(); if (1 == caam_enabled) imx6q_add_imx_caam(); imx6q_add_imx_i2c(0, &i2c_data); imx6q_add_imx_i2c(1, &i2c_data); imx6q_add_imx_i2c(2, &i2c_data); /* * SABRE Lite does not have an ISL1208 RTC */ i2c_register_board_info(0, mxc_i2c0_board_info, isn6 ? ARRAY_SIZE(mxc_i2c0_board_info) : ARRAY_SIZE(mxc_i2c0_board_info)-1); 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)); /* SPI */ imx6q_add_ecspi(0, &spi_data); spi_device_init(); imx6q_add_mxc_hdmi(&hdmi_data); imx6q_add_anatop_thermal_imx(1, &anatop_thermal_data); imx6_init_fec(fec_data); imx6q_add_pm_imx(0, &pm_data); imx6q_add_sdhci_usdhc_imx(2, &sd3_data); imx6q_add_sdhci_usdhc_imx(3, &sd4_data); imx_add_viv_gpu(&imx6_gpu_data, &imx6_gpu_pdata); init_usb(); if (cpu_is_mx6q()) imx6q_add_ahci(0, &sata_data); imx6q_add_vpu(); imx6_init_audio(); platform_device_register(&vmmc_reg_devices); imx_asrc_data.asrc_core_clk = clk_get(NULL, "asrc_clk"); imx_asrc_data.asrc_audio_clk = clk_get(NULL, "asrc_serial_clk"); imx6q_add_asrc(&imx_asrc_data); /* release USB Hub reset */ gpio_set_value(GP_USB_HUB_RESET, 1); imx6q_add_mxc_pwm(0); imx6q_add_mxc_pwm(1); imx6q_add_mxc_pwm_pdata(2, &pwm3_data); imx6q_add_mxc_pwm(3); imx6q_add_mxc_pwm_backlight(0, &pwm1_backlight_data); imx6q_add_mxc_pwm_backlight(3, &pwm4_backlight_data); imx6q_add_otp(); imx6q_add_viim(); imx6q_add_imx2_wdt(0, NULL); imx6q_add_dma(); imx6q_add_dvfs_core(&dvfscore_data); add_device_buttons(); imx6q_add_hdmi_soc(); imx6q_add_hdmi_soc_dai(); ret = gpio_request_array(flexcan_gpios, ARRAY_SIZE(flexcan_gpios)); if (ret) { pr_err("failed to request flexcan1-gpios: %d\n", ret); } else { int ret = gpio_get_value(GP_CAN1_ERR); if (ret == 0) { imx6q_add_flexcan0(&flexcan0_tja1040_pdata); pr_info("Flexcan NXP tja1040\n"); } else if (ret == 1) { IOMUX_SETUP(mc33902_flexcan_pads); imx6q_add_flexcan0(&flexcan0_mc33902_pdata); pr_info("Flexcan Freescale mc33902\n"); } else { pr_info("Flexcan gpio_get_value CAN1_ERR failed\n"); } } clko2 = clk_get(NULL, "clko2_clk"); if (IS_ERR(clko2)) pr_err("can't get CLKO2 clock.\n"); new_parent = clk_get(NULL, "osc_clk"); if (!IS_ERR(new_parent)) { clk_set_parent(clko2, new_parent); clk_put(new_parent); } rate = clk_round_rate(clko2, 24000000); clk_set_rate(clko2, rate); clk_enable(clko2); imx6q_add_busfreq(); #ifdef CONFIG_WL12XX_PLATFORM_DATA if (isn6) { imx6q_add_sdhci_usdhc_imx(1, &sd2_data); /* WL12xx WLAN Init */ if (wl12xx_set_platform_data(&n6q_wlan_data)) pr_err("error setting wl12xx data\n"); platform_device_register(&n6q_vwl1271_reg_devices); gpio_set_value(N6_WL1271_WL_EN, 1); /* momentarily enable */ gpio_set_value(N6_WL1271_BT_EN, 1); mdelay(2); gpio_set_value(N6_WL1271_WL_EN, 0); gpio_set_value(N6_WL1271_BT_EN, 0); gpio_free(N6_WL1271_WL_EN); gpio_free(N6_WL1271_BT_EN); mdelay(1); } #endif imx6q_add_pcie(&pcie_data); imx6q_add_perfmon(0); imx6q_add_perfmon(1); imx6q_add_perfmon(2); }
static inline void mx6q_sabreauto_init_uart(void) { imx6q_add_imx_uart(1, NULL); imx6q_add_imx_uart(2, NULL); imx6q_add_imx_uart(3, NULL); }
static inline void mx6q_init_uart(void) { imx6q_add_imx_uart(0, NULL); imx6q_add_imx_uart(1, NULL); imx6q_add_imx_uart(3, NULL); }
static inline void mx6q_sabrelite_init_uart(void) { imx6q_add_imx_uart(0, NULL); imx6q_add_imx_uart(1, NULL); }