static void hdmi_init(int ipu_id, int disp_id) { int hdmi_mux_setting; if ((ipu_id > 1) || (ipu_id < 0)) { printk(KERN_ERR"Invalid IPU select for HDMI: %d. Set to 0\n", ipu_id); ipu_id = 0; } if ((disp_id > 1) || (disp_id < 0)) { printk(KERN_ERR"Invalid DI select for HDMI: %d. Set to 0\n", disp_id); disp_id = 0; } /* Configure the connection between IPU1/2 and HDMI */ hdmi_mux_setting = 2*ipu_id + disp_id; /* GPR3, bits 2-3 = HDMI_MUX_CTL */ mxc_iomux_set_gpr_register(3, 2, 2, hdmi_mux_setting); /* Set HDMI event as SDMA event2 while Chip version later than TO1.2 */ if (hdmi_SDMA_check()) mxc_iomux_set_gpr_register(0, 0, 1, 1); }
static void mx6q_csi0_io_init(void) { if (cpu_is_mx6q()) mxc_iomux_set_gpr_register(1, 19, 1, 1); else if (cpu_is_mx6dl()) mxc_iomux_set_gpr_register(13, 0, 3, 4); }
static void adv7180_io_init(void) { camera_reset(IMX_GPIO_NR(3, 13), 0, IMX_GPIO_NR(3, 14), -1); if (cpu_is_mx6q()) mxc_iomux_set_gpr_register(1, 20, 1, 1); else mxc_iomux_set_gpr_register(13, 3, 3, 4); }
static void __init imx6q_sabreauto_init_usb(void) { int ret = 0; imx_otg_base = MX6_IO_ADDRESS(MX6Q_USB_OTG_BASE_ADDR); ret = gpio_request(SABREAUTO_USB_OTG_OC, "otg-oc"); if (ret) { printk(KERN_ERR"failed to get GPIO SABREAUTO_USB_OTG_OC:" " %d\n", ret); return; } gpio_direction_input(SABREAUTO_USB_OTG_OC); ret = gpio_request(SABREAUTO_USB_HOST1_OC, "usbh1-oc"); if (ret) { printk(KERN_ERR"failed to get SABREAUTO_USB_HOST1_OC:" " %d\n", ret); return; } gpio_direction_input(SABREAUTO_USB_HOST1_OC); mxc_iomux_set_gpr_register(1, 13, 1, 0); mx6_set_otghost_vbus_func(imx6q_sabreauto_usbotg_vbus); mx6_usb_dr_init(); mx6_set_host1_vbus_func(imx6q_sabreauto_usbhost1_vbus); #ifdef CONFIG_USB_EHCI_ARC_HSIC mx6_usb_h2_init(); mx6_usb_h3_init(); #endif }
static void mx6q_csi0_io_init(void) { mxc_iomux_v3_setup_multiple_pads(mx6q_sabrelite_csi0_sensor_pads, ARRAY_SIZE(mx6q_sabrelite_csi0_sensor_pads)); /* Camera power down */ gpio_request(MX6Q_SABRELITE_CSI0_PWN, "cam-pwdn"); gpio_direction_output(MX6Q_SABRELITE_CSI0_PWN, 1); msleep(1); gpio_set_value(MX6Q_SABRELITE_CSI0_PWN, 0); /* Camera reset */ gpio_request(MX6Q_SABRELITE_CSI0_RST, "cam-reset"); gpio_direction_output(MX6Q_SABRELITE_CSI0_RST, 1); gpio_set_value(MX6Q_SABRELITE_CSI0_RST, 0); msleep(1); gpio_set_value(MX6Q_SABRELITE_CSI0_RST, 1); /* For MX6Q GPR1 bit19 and bit20 meaning: * Bit19: 0 - Enable mipi to IPU1 CSI0 * virtual channel is fixed to 0 * 1 - Enable parallel interface to IPU1 CSI0 * Bit20: 0 - Enable mipi to IPU2 CSI1 * virtual channel is fixed to 3 * 1 - Enable parallel interface to IPU2 CSI1 * IPU1 CSI1 directly connect to mipi csi2, * virtual channel is fixed to 1 * IPU2 CSI0 directly connect to mipi csi2, * virtual channel is fixed to 2 */ mxc_iomux_set_gpr_register(1, 19, 1, 1); }
static void __init imx6q_seco_q7_init_usb(void) { int ret = 0; imx_otg_base = MX6_IO_ADDRESS(MX6Q_USB_OTG_BASE_ADDR); /* disable external charger detect, * or it will affect signal quality at dp . */ ret = gpio_request(MX6_SECO_A62_USB_OTG_PWR, "usb-pwr"); if (ret) { pr_err("failed to get GPIO MX6_SECO_A62_USB_OTG_PWR: %d\n", ret); return; } gpio_direction_output(MX6_SECO_A62_USB_OTG_PWR, 0); mxc_iomux_set_gpr_register(1, 13, 1, 0); /* * Setting pad control for OTG ID pin UP because the OTG port * is used only as client */ if (cpu_is_mx6q()) mxc_iomux_v3_setup_pad(mx6qd_seco_a62_otg_id_up_pads); else if (cpu_is_mx6dl()) mxc_iomux_v3_setup_pad(mx6sdl_seco_a62_otg_id_up_pads); mx6_set_otghost_vbus_func(imx6q_seco_q7_usbotg_vbus); // mx6_usb_dr_init(); // mx6_usb_h1_init(); }
static __init void wand_init_ethernet(void) { IMX6_SETUP_PAD( ENET_MDIO__ENET_MDIO ); IMX6_SETUP_PAD( ENET_MDC__ENET_MDC ); IMX6_SETUP_PAD( ENET_REF_CLK__ENET_TX_CLK ); IMX6_SETUP_PAD( RGMII_TXC__ENET_RGMII_TXC ); IMX6_SETUP_PAD( RGMII_TD0__ENET_RGMII_TD0 ); IMX6_SETUP_PAD( RGMII_TD1__ENET_RGMII_TD1 ); IMX6_SETUP_PAD( RGMII_TD2__ENET_RGMII_TD2 ); IMX6_SETUP_PAD( RGMII_TD3__ENET_RGMII_TD3 ); IMX6_SETUP_PAD( RGMII_TX_CTL__ENET_RGMII_TX_CTL ); IMX6_SETUP_PAD( RGMII_RXC__ENET_RGMII_RXC ); IMX6_SETUP_PAD( RGMII_RD0__ENET_RGMII_RD0 ); IMX6_SETUP_PAD( RGMII_RD1__ENET_RGMII_RD1 ); IMX6_SETUP_PAD( RGMII_RD2__ENET_RGMII_RD2 ); IMX6_SETUP_PAD( RGMII_RD3__ENET_RGMII_RD3 ); IMX6_SETUP_PAD( RGMII_RX_CTL__ENET_RGMII_RX_CTL ); IMX6_SETUP_PAD( ENET_TX_EN__GPIO_1_28 ); IMX6_SETUP_PAD( EIM_D29__GPIO_3_29 ); gpio_request(WAND_RGMII_RST, "rgmii reset"); gpio_direction_output(WAND_RGMII_RST, 0); #ifdef CONFIG_FEC_1588 mxc_iomux_set_gpr_register(1, 21, 1, 1); #endif msleep(10); gpio_set_value(WAND_RGMII_RST, 1); imx6_init_fec(wand_fec_data); }
static void ov5640_mipi_camera_io_init(void) { struct clk *clko1; if (cpu_is_mx6q()) { mxc_iomux_v3_setup_pad(MX6Q_PAD_CSI0_MCLK__CCM_CLKO); mxc_iomux_v3_setup_pad(MX6Q_PAD_CSI0_DAT18__GPIO_6_4); } else { mxc_iomux_v3_setup_pad(MX6DL_PAD_CSI0_MCLK__CCM_CLKO); mxc_iomux_v3_setup_pad(MX6DL_PAD_CSI0_DAT18__GPIO_6_4); } clko1 = clk_get(NULL, "clko_clk"); if (IS_ERR(clko1)) { pr_err("can't get CLKO1 clock.\n"); } else { long round = clk_round_rate(clko1, 27000000); clk_set_rate(clko1, round); clk_enable(clko1); } /* Camera reset */ gpio_request(MX6_CAMERA_RST, "cam-reset"); gpio_direction_output(MX6_CAMERA_RST, 0); msleep(1); gpio_set_value(MX6_CAMERA_RST, 1); msleep(100); /* for mx6dl, mipi virtual channel 1 connect to csi 0*/ if (cpu_is_mx6dl()) mxc_iomux_set_gpr_register(13, 0, 3, 0); }
static void __init imx6q_hdmidongle_init_usb(void) { int ret = 0; imx_otg_base = MX6_IO_ADDRESS(MX6Q_USB_OTG_BASE_ADDR); /* disable external charger detect, * or it will affect signal quality at dp . */ ret = gpio_request(HDMIDONGLE_USB_OTG_PWR, "usb-pwr"); if (ret) { pr_err("failed to get GPIO HDMIDONGLE_USB_OTG_PWR: %d\n", ret); return; } gpio_direction_output(HDMIDONGLE_USB_OTG_PWR, 0); /* keep USB host1 VBUS always on */ if (board_is_mx6_reva()) { ret = gpio_request(HDMIDONGLE_USB_H1_PWR, "usb-h1-pwr"); if (ret) { pr_err("failed to get GPIO HDMIDONGLE_USB_H1_PWR: %d\n", ret); return; } gpio_direction_output(HDMIDONGLE_USB_H1_PWR, 1); } mxc_iomux_set_gpr_register(1, 13, 1, 1); mx6_set_otghost_vbus_func(imx6q_hdmidongle_usbotg_vbus); }
void udc_pins_setting(void) { imx_iomux_v3_setup_multiple_pads(otg_udc_pads, ARRAY_SIZE(otg_udc_pads)); /*set daisy chain for otg_pin_id on 6q. for 6dl, this bit is reserved*/ mxc_iomux_set_gpr_register(1, 13, 1, 0); }
static inline void __init mx6q_csi0_io_init(void) { /* Camera reset */ gpio_request(SABREAUTO_CSI0_RST, "cam-reset"); gpio_direction_output(SABREAUTO_CSI0_RST, 1); /* Camera power down */ gpio_request(SABREAUTO_CSI0_PWN, "cam-pwdn"); gpio_direction_output(SABREAUTO_CSI0_PWN, 1); msleep(1); gpio_set_value(SABREAUTO_CSI0_PWN, 0); if (cpu_is_mx6q()) mxc_iomux_set_gpr_register(1, 19, 1, 1); else if (cpu_is_mx6dl()) mxc_iomux_set_gpr_register(13, 0, 3, 4); }
static void mipi_camera_io_init(void) { pr_info("%s\n", __func__); camera_reset(GP_CAMERA_RESET); /* for mx6dl, mipi virtual channel 1 connect to csi 1*/ if (cpu_is_mx6dl()) mxc_iomux_set_gpr_register(13, 3, 3, 1); }
static void wand_init_hdmi(void) { i2c_register_board_info(edm_ddc, &wand_hdmi_i2c_info, 1); imx6q_add_mxc_hdmi_core(&wand_hdmi_core_data); imx6q_add_mxc_hdmi(&wand_hdmi_data); imx6q_add_ipuv3fb(0, wand_hdmi_fb); /* Enable HDMI audio */ imx6q_add_hdmi_soc(); imx6q_add_hdmi_soc_dai(); mxc_iomux_set_gpr_register(0, 0, 1, 1); }
static void hdmi_init(int ipu_id, int disp_id) { int hdmi_mux_setting; if ((ipu_id > 1) || (ipu_id < 0)) { pr_err("Invalid IPU select for HDMI: %d. Set to 0\n", ipu_id); ipu_id = 0; } if ((disp_id > 1) || (disp_id < 0)) { pr_err("Invalid DI select for HDMI: %d. Set to 0\n", disp_id); disp_id = 0; } /* Configure the connection between IPU1/2 and HDMI */ hdmi_mux_setting = 2*ipu_id + disp_id; /* GPR3, bits 2-3 = HDMI_MUX_CTL */ mxc_iomux_set_gpr_register(3, 2, 2, hdmi_mux_setting); mxc_iomux_set_gpr_register(0, 0, 1, 1); }
static void __init imx6q_seco_UDOO_init_usb(void) { imx_otg_base = MX6_IO_ADDRESS(MX6Q_USB_OTG_BASE_ADDR); /* disable external charger detect, * or it will affect signal quality at dp . */ mxc_iomux_set_gpr_register(1, 13, 1, 1); mx6_set_otghost_vbus_func(imx6q_seco_UDOO_usbotg_vbus); // mx6_usb_dr_init(); // mx6_usb_h1_init(); }
static __init void wand_init_ethernet(void) { wand_mux_pads_init_ethernet(); gpio_request(WAND_RGMII_RST, "rgmii reset"); gpio_direction_output(WAND_RGMII_RST, 0); #ifdef CONFIG_FEC_1588 mxc_iomux_set_gpr_register(1, 21, 1, 1); #endif msleep(10); gpio_set_value(WAND_RGMII_RST, 1); imx6_init_fec(wand_fec_data); }
static __init void edm_cf_imx6_init_ethernet(void) { edm_cf_imx6_mux_pads_init_ethernet(); gpio_request(EDM_CF_IMX6_RGMII_RST, "rgmii reset"); gpio_direction_output(EDM_CF_IMX6_RGMII_RST, 0); #ifdef CONFIG_FEC_1588 mxc_iomux_set_gpr_register(1, 21, 1, 1); #endif msleep(10); gpio_set_value(EDM_CF_IMX6_RGMII_RST, 1); imx6_init_fec(edm_cf_imx6_fec_data); }
/* * GPIO_6 GPIO[1]:6 (ov5642) - J5 - CSI0 power down * GPIO_8 GPIO[1]:8 (ov5642) - J5 - CSI0 reset * NANDF_CS0 GPIO[6]:11 (ov5642) - J5 - reset * SD1_DAT0 GPIO[1]:16 (ov5642) - J5 - GP */ static void ov5642_io_init(void) { IOMUX_SETUP(csi0_sensor_pads); camera_reset(GP_CSI0_PWN, 1, GP_CSI0_RST, IMX_GPIO_NR(6, 11)); /* For MX6Q GPR1 bit19 and bit20 meaning: * Bit19: 0 - Enable mipi to IPU1 CSI0 * virtual channel is fixed to 0 * 1 - Enable parallel interface to IPU1 CSI0 * Bit20: 0 - Enable mipi to IPU2 CSI1 * virtual channel is fixed to 3 * 1 - Enable parallel interface to IPU2 CSI1 * IPU1 CSI1 directly connect to mipi csi2, * virtual channel is fixed to 1 * IPU2 CSI0 directly connect to mipi csi2, * virtual channel is fixed to 2 */ if (cpu_is_mx6q()) mxc_iomux_set_gpr_register(1, 19, 1, 1); else mxc_iomux_set_gpr_register(13, 0, 3, 4); }
static void hdmi_init(int ipu_id, int disp_id) { int hdmi_mux_setting; char ipu_di_clk[] = "ipu1_di0_clk"; struct clk *di_clk, *pll5_clk; if ((ipu_id > 1) || (ipu_id < 0)) { printk(KERN_ERR"Invalid IPU select for HDMI: %d. Set to 0\n", ipu_id); ipu_id = 0; } if ((disp_id > 1) || (disp_id < 0)) { printk(KERN_ERR"Invalid DI select for HDMI: %d. Set to 0\n", disp_id); disp_id = 0; } /* Configure the connection between IPU1/2 and HDMI */ hdmi_mux_setting = 2*ipu_id + disp_id; /* GPR3, bits 2-3 = HDMI_MUX_CTL */ mxc_iomux_set_gpr_register(3, 2, 2, hdmi_mux_setting); /* Set HDMI event as SDMA event2 while Chip version later than TO1.2 */ if (hdmi_SDMA_check()) mxc_iomux_set_gpr_register(0, 0, 1, 1); ipu_di_clk[3] += ipu_id; ipu_di_clk[7] += disp_id; di_clk = clk_get(NULL, ipu_di_clk); if (IS_ERR(di_clk)) printk(KERN_ERR "Cannot get %s clock\n", ipu_di_clk); pll5_clk = clk_get(NULL, "pll5"); if (IS_ERR(pll5_clk)) printk(KERN_ERR "Cannot get pll5 clock\n"); clk_set_parent(di_clk, pll5_clk); }
static void __init imx6_init_usb(void) { imx_otg_base = MX6_IO_ADDRESS(MX6Q_USB_OTG_BASE_ADDR); /* disable external charger detect, * or it will affect signal quality at dp . */ mxc_iomux_set_gpr_register(1, 13, 1, 1); INIT_DELAYED_WORK(&usb_modem_power_work, usb_modem_power_handler); mx6_set_otghost_vbus_func(imx6_usbotg_vbus); gpio_direction_output(GP_MODEM_RESET, 0); /* modem reset low */ mdelay(50); gpio_direction_input(GP_MODEM_RESET); /* modem reset high */ }
int board_ehci_hcd_init(int port) { switch (port) { case 0: imx_iomux_v3_setup_multiple_pads(usb_otg_pads, ARRAY_SIZE(usb_otg_pads)); /*set daisy chain for otg_pin_id on 6q. for 6dl, this bit is reserved*/ mxc_iomux_set_gpr_register(1, 13, 1, 1); break; default: printf("MXC USB port %d not yet supported\n", port); return 1; } return 0; }
static __init void wand_init_usb(void) { wand_mux_pads_init_usb(); gpio_request(WAND_USB_OTG_OC, "otg oc"); gpio_direction_input(WAND_USB_OTG_OC); gpio_request(WAND_USB_OTG_PWR, "otg pwr"); gpio_direction_output(WAND_USB_OTG_PWR, 0); imx_otg_base = MX6_IO_ADDRESS(MX6Q_USB_OTG_BASE_ADDR); mxc_iomux_set_gpr_register(1, 13, 1, 1); mx6_set_otghost_vbus_func(wand_usbotg_vbus); gpio_request(WAND_USB_H1_OC, "usbh1 oc"); gpio_direction_input(WAND_USB_H1_OC); }
static void __init init_usb(void) { int ret = 0; imx_otg_base = MX6_IO_ADDRESS(MX6Q_USB_OTG_BASE_ADDR); /* disable external charger detect, * or it will affect signal quality at dp . */ ret = gpio_request(GP_USB_OTG_PWR, "usb-pwr"); if (ret) { pr_err("failed to get GPIO GP_USB_OTG_PWR: %d\n", ret); return; } gpio_direction_output(GP_USB_OTG_PWR, 0); mxc_iomux_set_gpr_register(1, 13, 1, 1); mx6_set_otghost_vbus_func(usbotg_vbus); }
static void ov5640_mipi_camera_io_init(void) { IOMUX_SETUP(mipi_pads); pr_info("%s\n", __func__); mipi_pwm = pwm_request(2, "mipi_clock"); if (IS_ERR(mipi_pwm)) { pr_err("unable to request PWM for mipi_clock\n"); } else { unsigned period = 1000/22; pr_info("got pwm for mipi_clock\n"); pwm_config(mipi_pwm, period >> 1, period); pwm_enable(mipi_pwm); } camera_reset(IMX_GPIO_NR(6, 9), 1, IMX_GPIO_NR(2, 5), IMX_GPIO_NR(6, 11)); /* for mx6dl, mipi virtual channel 1 connect to csi 1*/ if (cpu_is_mx6dl()) mxc_iomux_set_gpr_register(13, 3, 3, 1); }
static __init void wand_init_usb(void) { IMX6_SETUP_PAD( GPIO_9__GPIO_1_9 ); IMX6_SETUP_PAD( GPIO_1__USBOTG_ID ); IMX6_SETUP_PAD( EIM_D22__GPIO_3_22 ); IMX6_SETUP_PAD( EIM_D30__GPIO_3_30 ); gpio_request(WAND_USB_OTG_OC, "otg oc"); gpio_direction_input(WAND_USB_OTG_OC); gpio_request(WAND_USB_HOST_PWR_EN, "host pwr"); gpio_direction_output(WAND_USB_HOST_PWR_EN, 0); imx_otg_base = MX6_IO_ADDRESS(MX6Q_USB_OTG_BASE_ADDR); /* GPR1: bit 13 == 1 means GPIO1 is OTG_ID pin */ mxc_iomux_set_gpr_register(1, 13, 1, 1); mx6_set_otghost_vbus_func(wand_usbotg_vbus); gpio_request(WAND_USB_HOST_OC, "usbh1 oc"); gpio_direction_input(WAND_USB_HOST_OC); }
/*! * Board specific initialization. */ static void __init mx6_sabrelite_board_init(void) { int i; int ret; struct clk *clko2; struct clk *new_parent; int rate; mxc_iomux_v3_setup_multiple_pads(mx6q_sabrelite_pads, ARRAY_SIZE(mx6q_sabrelite_pads)); #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 = sabrelite_dvfscore_data.reg_id; soc_reg_id = sabrelite_dvfscore_data.soc_id; pu_reg_id = sabrelite_dvfscore_data.pu_id; mx6q_sabrelite_init_uart(); imx6q_add_mxc_hdmi_core(&hdmi_core_data); imx6q_add_ipuv3(0, &ipu_data[0]); imx6q_add_ipuv3(1, &ipu_data[1]); for (i = 0; i < ARRAY_SIZE(sabrelite_fb_data); i++) imx6q_add_ipuv3fb(i, &sabrelite_fb_data[i]); imx6q_add_vdoa(); imx6q_add_lcdif(&lcdif_data); imx6q_add_ldb(&ldb_data); imx6q_add_v4l2_output(0); imx6q_add_v4l2_capture(0, &capture_data[0]); imx6q_add_v4l2_capture(1, &capture_data[1]); 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, &mx6q_sabrelite_i2c_data); imx6q_add_imx_i2c(1, &mx6q_sabrelite_i2c_data); imx6q_add_imx_i2c(2, &mx6q_sabrelite_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)); i2c_register_board_info(2, mxc_i2c2_board_info, ARRAY_SIZE(mxc_i2c2_board_info)); /* SPI */ imx6q_add_ecspi(0, &mx6q_sabrelite_spi_data); spi_device_init(); imx6q_add_mxc_hdmi(&hdmi_data); imx6q_add_anatop_thermal_imx(1, &mx6q_sabrelite_anatop_thermal_data); imx6_init_fec(fec_data); imx6q_add_pm_imx(0, &mx6q_sabrelite_pm_data); imx6q_add_sdhci_usdhc_imx(3, &mx6q_sabrelite_sd4_data); imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabrelite_sd3_data); imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata); imx6q_sabrelite_init_usb(); if (cpu_is_mx6q()) { #ifdef CONFIG_SATA_AHCI_PLATFORM imx6q_add_ahci(0, &mx6q_sabrelite_sata_data); #else mx6q_sabrelite_sata_init(NULL, (void __iomem *)ioremap(MX6Q_SATA_BASE_ADDR, SZ_4K)); #endif } imx6q_add_vpu(); imx6q_init_audio(); platform_device_register(&sabrelite_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(MX6Q_SABRELITE_USB_HUB_RESET, 1); imx6q_add_mxc_pwm(0); imx6q_add_mxc_pwm(1); imx6q_add_mxc_pwm(2); imx6q_add_mxc_pwm(3); imx6q_add_mxc_pwm_backlight(3, &mx6_sabrelite_pwm_backlight_data); imx6q_add_otp(); imx6q_add_viim(); imx6q_add_imx2_wdt(0, NULL); imx6q_add_dma(); imx6q_add_dvfs_core(&sabrelite_dvfscore_data); sabrelite_add_device_buttons(); imx6q_add_hdmi_soc(); imx6q_add_hdmi_soc_dai(); ret = gpio_request_array(mx6q_sabrelite_flexcan_gpios, ARRAY_SIZE(mx6q_sabrelite_flexcan_gpios)); if (ret) pr_err("failed to request flexcan1-gpios: %d\n", ret); else imx6q_add_flexcan0(&mx6q_sabrelite_flexcan0_pdata); 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(); imx6q_add_perfmon(0); imx6q_add_perfmon(1); imx6q_add_perfmon(2); }
/*! * Board specific initialization. */ static void __init mx6_evk_init(void) { u32 i; mxc_iomux_v3_setup_multiple_pads(mx6sl_brd_pads, ARRAY_SIZE(mx6sl_brd_pads)); #ifdef CONFIG_MX6_INTER_LDO_BYPASS gp_reg_id = mx6sl_evk_dvfscore_data.reg_id; soc_reg_id = mx6sl_evk_dvfscore_data.soc_id; #else gp_reg_id = mx6sl_evk_dvfscore_data.reg_id; soc_reg_id = mx6sl_evk_dvfscore_data.soc_id; pu_reg_id = mx6sl_evk_dvfscore_data.pu_id; mx6_cpu_regulator_init(); #endif imx6q_add_imx_snvs_rtc(); imx6q_add_imx_i2c(0, &mx6_evk_i2c0_data); imx6q_add_imx_i2c(1, &mx6_evk_i2c1_data); /* setting sii902x address when hdmi enabled */ switch (display_panel_mode) { case PANEL_MODE_EINK: for (i = 0; i < ARRAY_SIZE(mxc_i2c0_board_info); i++) if (!strcmp(mxc_i2c0_board_info[i].type, "max17135")) mxc_i2c0_board_info[i].addr = 0x48; for (i = 0; i < ARRAY_SIZE(mxc_i2c0_board_info); i++) if (!strcmp(mxc_i2c0_board_info[i].type, "elan-touch")) mxc_i2c0_board_info[i].addr = 0x10; elan_ts_init(); mxc_register_device(&max17135_sensor_device, NULL); setup_spdc(); if (!spdc_sel) imx6dl_add_imx_epdc(&epdc_data); else imx6sl_add_imx_spdc(&spdc_data); break; case PANEL_MODE_HDMI: for (i = 0; i < ARRAY_SIZE(mxc_i2c1_board_info); i++) if (!strcmp(mxc_i2c1_board_info[i].type, "sii902x")) mxc_i2c1_board_info[i].addr = 0x39; #ifdef CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF//[ imx6dl_add_imx_elcdif(&hdmi_fb_data[0]); #endif //]CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF mxc_spdif_data.spdif_core_clk = clk_get_sys("mxc_spdif.0", NULL); clk_put(mxc_spdif_data.spdif_core_clk); imx6q_add_spdif(&mxc_spdif_data); imx6q_add_spdif_dai(); imx6q_add_spdif_audio_device(); break; case PANEL_MODE_LCD: #ifdef CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF//[ imx6dl_add_imx_elcdif(&wvga_fb_data[0]); #endif //]CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF gpio_request(MX6_BRD_LCD_PWR_EN, "elcdif-power-on"); gpio_direction_output(MX6_BRD_LCD_PWR_EN, 1); mxc_register_device(&lcd_wvga_device, NULL); break; default: pr_err("Error display_panel_mode\n"); } 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)); /* only camera on I2C2, that's why we can do so */ if (csi_enabled == 1) { mxc_register_device(&csi_v4l2_devices, NULL); imx6q_add_imx_i2c(2, &mx6_evk_i2c2_data); i2c_register_board_info(2, mxc_i2c2_board_info, ARRAY_SIZE(mxc_i2c2_board_info)); } /* SPI */ imx6q_add_ecspi(0, &mx6_evk_spi_data); spi_device_init(); mx6sl_evk_init_pfuze100(0); imx6q_add_anatop_thermal_imx(1, &mx6sl_anatop_thermal_data); mx6_evk_init_uart(); /* get enet tx reference clk from FEC_REF_CLK pad. * GPR1[14] = 0, GPR1[18:17] = 00 */ mxc_iomux_set_gpr_register(1, 14, 1, 0); mxc_iomux_set_gpr_register(1, 17, 2, 0); imx6_init_fec(fec_data); platform_device_register(&evk_vmmc_reg_devices); imx6q_add_sdhci_usdhc_imx(1, &mx6_evk_sd2_data); imx6q_add_sdhci_usdhc_imx(0, &mx6_evk_sd1_data); imx6q_add_sdhci_usdhc_imx(2, &mx6_evk_sd3_data); mx6_evk_init_usb(); imx6q_add_otp(); imx6q_add_mxc_pwm(0); imx6q_add_mxc_pwm_backlight(0, &mx6_evk_pwm_backlight_data); #ifdef CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF//[ imx6dl_add_imx_elcdif(&wvga_fb_data[0]); #endif //] CONFIG_IMX_HAVE_PLATFORM_IMX_ELCDIF gpio_request(MX6_BRD_LCD_PWR_EN, "elcdif-power-on"); gpio_direction_output(MX6_BRD_LCD_PWR_EN, 1); mxc_register_device(&lcd_wvga_device, NULL); imx6dl_add_imx_pxp(); imx6dl_add_imx_pxp_client(); if (csi_enabled) { imx6sl_add_fsl_csi(); } imx6q_add_dvfs_core(&mx6sl_evk_dvfscore_data); imx6q_init_audio(); /* uart2 for bluetooth */ if (uart2_enabled) uart2_init(); //mxc_register_device(&mxc_bt_rfkill, &mxc_bt_rfkill_data); imx6q_add_viim(); imx6q_add_imx2_wdt(0, NULL); imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata); imx6sl_add_device_buttons(); imx6sl_add_imx_keypad(&mx6sl_evk_map_data); imx6q_add_busfreq(); imx6sl_add_dcp(); imx6sl_add_rngb(); imx6sl_add_imx_pxp_v4l2(); imx6q_add_perfmon(0); imx6q_add_perfmon(1); imx6q_add_perfmon(2); /* Register charger chips */ platform_device_register(&evk_max8903_charger_1); pm_power_off = mx6_snvs_poweroff; }
/*! * Board specific initialization. */ static void __init mx6_evk_init(void) { mxc_iomux_v3_setup_multiple_pads(mx6sl_brd_pads, ARRAY_SIZE(mx6sl_brd_pads)); elan_ts_init(); #ifdef CONFIG_MX6_INTER_LDO_BYPASS gp_reg_id = mx6sl_evk_dvfscore_data.reg_id; soc_reg_id = mx6sl_evk_dvfscore_data.soc_id; #else gp_reg_id = mx6sl_evk_dvfscore_data.reg_id; soc_reg_id = mx6sl_evk_dvfscore_data.soc_id; pu_reg_id = mx6sl_evk_dvfscore_data.pu_id; mx6_cpu_regulator_init(); #endif imx6q_add_imx_snvs_rtc(); imx6q_add_imx_i2c(0, &mx6_evk_i2c0_data); imx6q_add_imx_i2c(1, &mx6_evk_i2c1_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)); imx6q_add_imx_i2c(2, &mx6_evk_i2c2_data); i2c_register_board_info(2, mxc_i2c2_board_info, ARRAY_SIZE(mxc_i2c2_board_info)); /* SPI */ imx6q_add_ecspi(0, &mx6_evk_spi_data); spi_device_init(); mx6sl_evk_init_pfuze100(0); imx6q_add_anatop_thermal_imx(1, &mx6sl_anatop_thermal_data); mx6_evk_init_uart(); /* get enet tx reference clk from FEC_REF_CLK pad. * GPR1[14] = 0, GPR1[18:17] = 00 */ mxc_iomux_set_gpr_register(1, 14, 1, 0); mxc_iomux_set_gpr_register(1, 17, 2, 0); imx6_init_fec(fec_data); platform_device_register(&evk_vmmc_reg_devices); imx6q_add_sdhci_usdhc_imx(0, &mx6_evk_sd1_data); imx6q_add_sdhci_usdhc_imx(1, &mx6_evk_sd2_data); imx6q_add_sdhci_usdhc_imx(2, &mx6_evk_sd3_data); mx6_evk_init_usb(); imx6q_add_otp(); imx6q_add_mxc_pwm(0); imx6q_add_mxc_pwm_backlight(0, &mx6_evk_pwm_backlight_data); imx6dl_add_imx_elcdif(&fb_data[0]); gpio_request(MX6_BRD_LCD_PWR_EN, "elcdif-power-on"); gpio_direction_output(MX6_BRD_LCD_PWR_EN, 1); mxc_register_device(&lcd_wvga_device, NULL); imx6dl_add_imx_pxp(); imx6dl_add_imx_pxp_client(); mxc_register_device(&max17135_sensor_device, NULL); setup_spdc(); if (!spdc_sel) imx6dl_add_imx_epdc(&epdc_data); else imx6sl_add_imx_spdc(&spdc_data); imx6q_add_dvfs_core(&mx6sl_evk_dvfscore_data); imx6q_init_audio(); imx6q_add_viim(); imx6q_add_imx2_wdt(0, NULL); imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata); imx6sl_add_imx_keypad(&mx6sl_evk_map_data); imx6q_add_busfreq(); imx6sl_add_dcp(); imx6sl_add_rngb(); imx6sl_add_imx_pxp_v4l2(); imx6q_add_perfmon(0); imx6q_add_perfmon(1); imx6q_add_perfmon(2); /* Register charger chips */ platform_device_register(&evk_max8903_charger_1); pm_power_off = mx6_snvs_poweroff; }
static void setup_spdc(void) { /* GPR0[8]: 0:EPDC, 1:SPDC */ if (spdc_sel) mxc_iomux_set_gpr_register(0, 8, 1, 1); }
/*! * Board specific initialization. */ static void __init mx6_evk_init(void) { u32 i; mxc_iomux_v3_setup_multiple_pads(mx6sl_brd_pads, ARRAY_SIZE(mx6sl_brd_pads)); elan_ts_init(); gp_reg_id = mx6sl_evk_dvfscore_data.reg_id; soc_reg_id = mx6sl_evk_dvfscore_data.soc_id; imx6q_add_imx_snvs_rtc(); imx6q_add_imx_i2c(0, &mx6_evk_i2c0_data); imx6q_add_imx_i2c(1, &mx6_evk_i2c1_data); i2c_register_board_info(0, mxc_i2c0_board_info, ARRAY_SIZE(mxc_i2c0_board_info)); /* setting sii902x address when hdmi enabled */ if (hdmi_enabled) { for (i = 0; i < ARRAY_SIZE(mxc_i2c1_board_info); i++) { if (!strcmp(mxc_i2c1_board_info[i].type, "sii902x")) { mxc_i2c1_board_info[i].addr = 0x39; break; } } } i2c_register_board_info(1, mxc_i2c1_board_info, ARRAY_SIZE(mxc_i2c1_board_info)); /* only camera on I2C3, that's why we can do so */ if (csi_enabled == 1) { mxc_register_device(&csi_v4l2_devices, NULL); imx6q_add_imx_i2c(2, &mx6_evk_i2c2_data); i2c_register_board_info(2, mxc_i2c2_board_info, ARRAY_SIZE(mxc_i2c2_board_info)); } /* SPI */ imx6q_add_ecspi(0, &mx6_evk_spi_data); spi_device_init(); mx6sl_evk_init_pfuze100(0); imx6q_add_anatop_thermal_imx(1, &mx6sl_anatop_thermal_data); mx6_evk_init_uart(); /* get enet tx reference clk from FEC_REF_CLK pad. * GPR1[14] = 0, GPR1[18:17] = 00 */ mxc_iomux_set_gpr_register(1, 14, 1, 0); mxc_iomux_set_gpr_register(1, 17, 2, 0); imx6_init_fec(fec_data); platform_device_register(&evk_vmmc_reg_devices); imx6q_add_sdhci_usdhc_imx(1, &mx6_evk_sd2_data); imx6q_add_sdhci_usdhc_imx(0, &mx6_evk_sd1_data); imx6q_add_sdhci_usdhc_imx(2, &mx6_evk_sd3_data); mx6_evk_init_usb(); imx6q_add_otp(); imx6q_add_mxc_pwm(0); imx6q_add_mxc_pwm_backlight(0, &mx6_evk_pwm_backlight_data); if (hdmi_enabled) { imx6dl_add_imx_elcdif(&hdmi_fb_data[0]); } else { imx6dl_add_imx_elcdif(&wvga_fb_data[0]); gpio_request(MX6_BRD_LCD_PWR_EN, "elcdif-power-on"); gpio_direction_output(MX6_BRD_LCD_PWR_EN, 1); mxc_register_device(&lcd_wvga_device, NULL); } imx6dl_add_imx_pxp(); imx6dl_add_imx_pxp_client(); mxc_register_device(&max17135_sensor_device, NULL); setup_spdc(); if (csi_enabled) { imx6sl_add_fsl_csi(); } else { if (!spdc_sel) imx6dl_add_imx_epdc(&epdc_data); else imx6sl_add_imx_spdc(&spdc_data); } imx6q_add_dvfs_core(&mx6sl_evk_dvfscore_data); imx6q_init_audio(); /* uart2 for bluetooth */ #ifdef SXSDMAN_BLUETOOTH_ENABLE if (uart4_enabled) uart4_init(); #else if (uart2_enabled) uart2_init(); #endif mxc_register_device(&mxc_bt_rfkill, &mxc_bt_rfkill_data); imx6q_add_viim(); imx6q_add_imx2_wdt(0, NULL); imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata); imx6sl_add_imx_keypad(&mx6sl_evk_map_data); imx6q_add_busfreq(); imx6sl_add_dcp(); imx6sl_add_rngb(); imx6sl_add_imx_pxp_v4l2(); mxc_spdif_data.spdif_core_clk = clk_get_sys("mxc_spdif.0", NULL); clk_put(mxc_spdif_data.spdif_core_clk); imx6q_add_spdif(&mxc_spdif_data); imx6q_add_spdif_dai(); imx6q_add_spdif_audio_device(); imx6q_add_perfmon(0); imx6q_add_perfmon(1); imx6q_add_perfmon(2); /* Register charger chips */ platform_device_register(&evk_max8903_charger_1); pm_power_off = mx6_snvs_poweroff; imx6q_add_pm_imx(0, &mx6sl_evk_pm_data); if (imx_ion_data.heaps[0].size) platform_device_register_resndata(NULL, "ion-mxc", 0, NULL, 0, \ &imx_ion_data, sizeof(imx_ion_data) + sizeof(struct ion_platform_heap)); }