diff options
Diffstat (limited to 'recipes-kernel/linux/linux-omap-2.6.39/camera/0003-Add-support-for-mt9p031-LI-5M03-module-in-Beagleboar.patch')
-rw-r--r-- | recipes-kernel/linux/linux-omap-2.6.39/camera/0003-Add-support-for-mt9p031-LI-5M03-module-in-Beagleboar.patch | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/camera/0003-Add-support-for-mt9p031-LI-5M03-module-in-Beagleboar.patch b/recipes-kernel/linux/linux-omap-2.6.39/camera/0003-Add-support-for-mt9p031-LI-5M03-module-in-Beagleboar.patch new file mode 100644 index 0000000000..31c525e223 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/camera/0003-Add-support-for-mt9p031-LI-5M03-module-in-Beagleboar.patch @@ -0,0 +1,162 @@ +From c53e55e3d361eb79bc8fc27971428fc37d804ea9 Mon Sep 17 00:00:00 2001 +From: Javier Martin <javier.martin@vista-silicon.com> +Date: Mon, 30 May 2011 10:37:17 +0200 +Subject: [PATCH 3/3] Add support for mt9p031 (LI-5M03 module) in Beagleboard xM. + +Since isp clocks have not been exposed yet, this patch +includes a temporal solution for testing mt9p031 driver +in Beagleboard xM. + +Signed-off-by: Javier Martin <javier.martin@vista-silicon.com> +--- + arch/arm/mach-omap2/Makefile | 1 + + arch/arm/mach-omap2/board-omap3beagle-camera.c | 95 ++++++++++++++++++++++++ + arch/arm/mach-omap2/board-omap3beagle.c | 5 + + 3 files changed, 101 insertions(+), 0 deletions(-) + create mode 100644 arch/arm/mach-omap2/board-omap3beagle-camera.c + +diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile +index 512b152..05cd983 100644 +--- a/arch/arm/mach-omap2/Makefile ++++ b/arch/arm/mach-omap2/Makefile +@@ -179,6 +179,7 @@ obj-$(CONFIG_MACH_OMAP_2430SDP) += board-2430sdp.o \ + hsmmc.o + obj-$(CONFIG_MACH_OMAP_APOLLON) += board-apollon.o + obj-$(CONFIG_MACH_OMAP3_BEAGLE) += board-omap3beagle.o \ ++ board-omap3beagle-camera.o \ + hsmmc.o + obj-$(CONFIG_MACH_DEVKIT8000) += board-devkit8000.o \ + hsmmc.o +diff --git a/arch/arm/mach-omap2/board-omap3beagle-camera.c b/arch/arm/mach-omap2/board-omap3beagle-camera.c +new file mode 100644 +index 0000000..2632557 +--- /dev/null ++++ b/arch/arm/mach-omap2/board-omap3beagle-camera.c +@@ -0,0 +1,95 @@ ++#include <linux/gpio.h> ++#include <linux/regulator/machine.h> ++ ++#include <plat/i2c.h> ++ ++#include <media/mt9p031.h> ++#include <asm/mach-types.h> ++#include "devices.h" ++#include "../../../drivers/media/video/omap3isp/isp.h" ++ ++#define MT9P031_RESET_GPIO 98 ++#define MT9P031_XCLK ISP_XCLK_A ++ ++static struct regulator *reg_1v8, *reg_2v8; ++ ++static int beagle_cam_set_xclk(struct v4l2_subdev *subdev, int hz) ++{ ++ struct isp_device *isp = v4l2_dev_to_isp_device(subdev->v4l2_dev); ++ int ret; ++ ++ ret = isp->platform_cb.set_xclk(isp, hz, MT9P031_XCLK); ++ return 0; ++} ++ ++static int beagle_cam_reset(struct v4l2_subdev *subdev, int active) ++{ ++ /* Set RESET_BAR to !active */ ++ gpio_set_value(MT9P031_RESET_GPIO, !active); ++ ++ return 0; ++} ++ ++static struct mt9p031_platform_data beagle_mt9p031_platform_data = { ++ .set_xclk = beagle_cam_set_xclk, ++ .reset = beagle_cam_reset, ++ .vdd_io = MT9P031_VDD_IO_1V8, ++ .version = MT9P031_COLOR_VERSION, ++}; ++ ++static struct i2c_board_info mt9p031_camera_i2c_device = { ++ I2C_BOARD_INFO("mt9p031", 0x48), ++ .platform_data = &beagle_mt9p031_platform_data, ++}; ++ ++static struct isp_subdev_i2c_board_info mt9p031_camera_subdevs[] = { ++ { ++ .board_info = &mt9p031_camera_i2c_device, ++ .i2c_adapter_id = 2, ++ }, ++ { NULL, 0, }, ++}; ++ ++static struct isp_v4l2_subdevs_group beagle_camera_subdevs[] = { ++ { ++ .subdevs = mt9p031_camera_subdevs, ++ .interface = ISP_INTERFACE_PARALLEL, ++ .bus = { ++ .parallel = { ++ .data_lane_shift = 0, ++ .clk_pol = 1, ++ .bridge = ISPCTRL_PAR_BRIDGE_DISABLE, ++ } ++ }, ++ }, ++ { }, ++}; ++ ++static struct isp_platform_data beagle_isp_platform_data = { ++ .subdevs = beagle_camera_subdevs, ++}; ++ ++static int __init beagle_camera_init(void) ++{ ++ if (!machine_is_omap3_beagle() || !cpu_is_omap3630()) ++ return 0; ++ ++ reg_1v8 = regulator_get(NULL, "cam_1v8"); ++ if (IS_ERR(reg_1v8)) ++ pr_err("%s: cannot get cam_1v8 regulator\n", __func__); ++ else ++ regulator_enable(reg_1v8); ++ ++ reg_2v8 = regulator_get(NULL, "cam_2v8"); ++ if (IS_ERR(reg_2v8)) ++ pr_err("%s: cannot get cam_2v8 regulator\n", __func__); ++ else ++ regulator_enable(reg_2v8); ++ ++ omap_register_i2c_bus(2, 100, NULL, 0); ++ gpio_request(MT9P031_RESET_GPIO, "cam_rst"); ++ gpio_direction_output(MT9P031_RESET_GPIO, 0); ++ omap3_init_camera(&beagle_isp_platform_data); ++ return 0; ++} ++late_initcall(beagle_camera_init); +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 221bfda..dd6e31f 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -25,12 +25,16 @@ + #include <linux/input.h> + #include <linux/gpio_keys.h> + #include <linux/opp.h> ++#include <linux/i2c.h> ++#include <linux/mm.h> ++#include <linux/videodev2.h> + + #include <linux/mtd/mtd.h> + #include <linux/mtd/partitions.h> + #include <linux/mtd/nand.h> + #include <linux/mmc/host.h> + ++#include <linux/gpio.h> + #include <linux/regulator/machine.h> + #include <linux/i2c/twl.h> + +@@ -48,6 +52,7 @@ + #include <plat/nand.h> + #include <plat/usb.h> + #include <plat/omap_device.h> ++#include <plat/i2c.h> + + #include "mux.h" + #include "hsmmc.h" +-- +1.6.6.1 + |