/************************************************************************ * I.MX6 ov5640 camera * 说明: * 记录ov5640摄像头的设备注册方式。 * * 2016-6-8 深圳 南山平山村 曾剑锋 ***********************************************************************/ 一、设备注册: cat arch/arm/mach-mx6/board-mx6q_sabresd.c ...... static void mx6q_csi0_io_init(void) { if (cpu_is_mx6q()) mxc_iomux_v3_setup_multiple_pads(mx6q_sabresd_csi0_sensor_pads, ARRAY_SIZE(mx6q_sabresd_csi0_sensor_pads)); else if (cpu_is_mx6dl()) mxc_iomux_v3_setup_multiple_pads(mx6dl_sabresd_csi0_sensor_pads, ARRAY_SIZE(mx6dl_sabresd_csi0_sensor_pads)); /* Camera reset */ gpio_request(SABRESD_CSI0_RST, "cam-reset"); gpio_direction_output(SABRESD_CSI0_RST, 1); /* Camera power down */ gpio_request(SABRESD_CSI0_PWN, "cam-pwdn"); gpio_direction_output(SABRESD_CSI0_PWN, 1); msleep(5); gpio_set_value(SABRESD_CSI0_PWN, 0); msleep(5); gpio_set_value(SABRESD_CSI0_RST, 0); msleep(1); gpio_set_value(SABRESD_CSI0_RST, 1); msleep(5); gpio_set_value(SABRESD_CSI0_PWN, 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 * * For MX6DL: * GPR13 bit 0-2 IPU_CSI0_MUX * 000 MIPI_CSI0 * 100 IPU CSI0 */ 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 mx6q_mipi_sensor_io_init(void) { if (cpu_is_mx6q()) mxc_iomux_v3_setup_multiple_pads(mx6q_sabresd_mipi_sensor_pads, ARRAY_SIZE(mx6q_sabresd_mipi_sensor_pads)); else if (cpu_is_mx6dl()) mxc_iomux_v3_setup_multiple_pads(mx6dl_sabresd_mipi_sensor_pads, ARRAY_SIZE(mx6dl_sabresd_mipi_sensor_pads)); /* Camera reset */ gpio_request(SABRESD_MIPICSI_RST, "cam-reset"); gpio_direction_output(SABRESD_MIPICSI_RST, 1); /* Camera power down */ gpio_request(SABRESD_MIPICSI_PWN, "cam-pwdn"); gpio_direction_output(SABRESD_MIPICSI_PWN, 1); msleep(5); gpio_set_value(SABRESD_MIPICSI_PWN, 0); msleep(5); gpio_set_value(SABRESD_MIPICSI_RST, 0); msleep(1); gpio_set_value(SABRESD_MIPICSI_RST, 1); msleep(5); gpio_set_value(SABRESD_MIPICSI_PWN, 1); /*for mx6dl, mipi virtual channel 1 connect to csi 1*/ if (cpu_is_mx6dl()) mxc_iomux_set_gpr_register(13, 3, 3, 1); } ...... static struct fsl_mxc_camera_platform_data mipi_csi2_data = { .mclk = 24000000, .mclk_source = 0, .csi = 1, .io_init = mx6q_mipi_sensor_io_init, .pwdn = mx6q_mipi_powerdown, }; ...... static struct fsl_mxc_camera_platform_data camera_data = { .mclk = 24000000, .mclk_source = 0, .csi = 0, .io_init = mx6q_csi0_io_init, .pwdn = mx6q_csi0_cam_powerdown, }; ...... static struct i2c_board_info mxc_i2c0_board_info[] __initdata = { ...... { I2C_BOARD_INFO("ov564x", 0x3c), .platform_data = (void *)&camera_data, }, ...... } ...... static struct i2c_board_info mxc_i2c2_board_info[] __initdata = { ...... { I2C_BOARD_INFO("ov5640_mipi", 0x3c), .platform_data = (void *)&mipi_csi2_data, }, ...... } ...... 二、dmesg信息查看: root@android:/ # dmesg | grep 5640 <6>camera ov5640 is found <6>camera ov5640_mipi is found root@android:/ #