ov5647 mess changes

Change-Id: I407b319e6cd2943bef2437398f9d4b69c2b292b4
Signed-off-by: Jacob Chen <jacob-chen@iotwrt.com>
This commit is contained in:
Jacob Chen
2017-07-24 19:06:12 +08:00
parent b743775076
commit c277ad70c7
4 changed files with 139 additions and 398 deletions

View File

@@ -171,6 +171,28 @@
startup-delay-us = <100000>;
vin-supply = <&vcc_io>;
};
vcc_cam: vcc-cam {
compatible = "regulator-fixed";
regulator-name = "vcc_cam";
pinctrl-names = "default";
pinctrl-0 = <&cam_pwr>;
enable-active-high;
gpio = <&gpio2 0 GPIO_ACTIVE_HIGH>;
regulator-always-on;
regulator-boot-on;
};
vcc_led: vcc-led {
compatible = "regulator-fixed";
regulator-name = "vcc_cam";
pinctrl-names = "default";
pinctrl-0 = <&cam_mclk>;
enable-active-high;
gpio = <&gpio2 11 GPIO_ACTIVE_HIGH>;
regulator-always-on;
regulator-boot-on;
};
};
&cif_isp0 {
@@ -427,22 +449,15 @@
&i2c2 {
status = "okay";
camera0: camera-module@10 {
camera0: camera-module@36 {
status = "okay";
compatible = "sony,imx219-v4l2-i2c-subdev";
reg = <0x10>;
compatible = "ovti,ov7750-v4l2-i2c-subdev";
reg = <0x36>;
device_type = "v4l2-i2c-subdev";
clocks = <&cru SCLK_VIP_OUT>;
clock-names = "clk_cif_out";
pinctrl-names = "rockchip,camera_default",
"rockchip,camera_sleep";
pinctrl-0 = <&cam0_default_pins>;
pinctrl-1 = <&cam0_sleep_pins>;
rockchip,pd-gpio = <&gpio2 0 GPIO_ACTIVE_LOW>;
rockchip,camera-module-mclk-name = "clk_cif_out";
rockchip,camera-module-regulator-names = "vcc33_mipi";
rockchip,camera-module-regulator-voltages = <3300000>;
@@ -739,17 +754,14 @@
};
};
cam_pins {
cam0_default_pins: cam0-default-pins {
rockchip,pins = <0 17 RK_FUNC_GPIO &pcfg_pull_none>,
<2 0 RK_FUNC_GPIO &pcfg_pull_none>,
<2 11 RK_FUNC_1 &pcfg_pull_none>;
cam_mclk: cam-mclk {
rockchip,pins = <2 11 RK_FUNC_GPIO &pcfg_pull_none>;
};
cam0_sleep_pins: cam0-sleep-pins {
rockchip,pins = <0 17 RK_FUNC_GPIO &pcfg_pull_none>,
<2 0 RK_FUNC_GPIO &pcfg_pull_none>,
<2 11 RK_FUNC_GPIO &pcfg_pull_none>;
cam_pwr: cam-pwr {
rockchip,pins = <2 0 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};

View File

@@ -502,6 +502,8 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_VIDEO_ROCKCHIP_VPU=y
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VIDEO_IMX219=y
CONFIG_VIDEO_OV7750=y
# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
CONFIG_DRM=y
CONFIG_DRM_ROCKCHIP=y
CONFIG_ROCKCHIP_DW_HDMI=y

View File

@@ -83,9 +83,9 @@
#define ov7750_EXP_VALID_FRAMES 4
/* High byte of product ID */
#define ov7750_PIDH_MAGIC 0x77
#define ov7750_PIDH_MAGIC 0x56
/* Low byte of product ID */
#define ov7750_PIDL_MAGIC 0x50
#define ov7750_PIDL_MAGIC 0x47
#define BG_RATIO_TYPICAL 0x129
#define RG_RATIO_TYPICAL 0x11f
@@ -102,221 +102,108 @@ static struct ov_camera_module_custom_config ov7750_custom_config;
// The settings may be altered by the code in IsiSetupSensor.
static struct ov_camera_module_reg ov7750_init_tab_640_480_60fps[] = {
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0103, 0x01},// enable soft reset
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0100, 0x00},// stream off
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3005, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3012, 0xc0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3013, 0xd2},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3014, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3016, 0x10},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3017, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3018, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x301a, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x301b, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x301c, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3023, 0x05},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3037, 0xf0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3098, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3099, 0x14},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x309a, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x309b, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x30b0, 0x0a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x30b1, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x30b3, 0x32},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x30b4, 0x03},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x30b5, 0x05},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3106, 0xda},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3500, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3501, 0x1f},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3502, 0x80},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3503, 0x07},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3509, 0x10},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x350b, 0x10},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3600, 0x1c},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3602, 0x62},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3620, 0xb7},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3622, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3626, 0x21},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3627, 0x30},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3630, 0x44},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3631, 0x35},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3634, 0x60},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3636, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3662, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3663, 0x70},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3664, 0xf0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3666, 0x0a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3669, 0x1a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x366a, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x366b, 0x50},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3673, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3674, 0xff},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3675, 0x03},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3705, 0xc1},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3709, 0x40},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x373c, 0x08},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3742, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3757, 0xb3},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3788, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37a8, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37a9, 0xc0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3800, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3801, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3802, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3803, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3804, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3805, 0x8b},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3806, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3807, 0xeb},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3000, 0x0f},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3001, 0xff},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3002, 0xe4},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0100, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x0103, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3034, 0x08},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3035, 0x21},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3036, 0x46},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x303c, 0x11},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3106, 0xf5},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3821, 0x07},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3820, 0x41},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3827, 0xec},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x370c, 0x0f},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3612, 0x59},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3618, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5000, 0x06},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5001, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5002, 0x41},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5003, 0x08},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5a00, 0x08},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3000, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3001, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3002, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3016, 0x08},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3017, 0xe0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3018, 0x44},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x301c, 0xf8},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x301d, 0xf0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a18, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a19, 0xf8},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c01, 0x80},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b07, 0x0c},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380c, 0x07},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380d, 0x68},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380e, 0x03},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380f, 0xd8},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3814, 0x31},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3815, 0x31},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3708, 0x64},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3709, 0x52},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3808, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3809, 0x80},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380a, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380b, 0xe0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380c, 0x03},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380d, 0xa0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380e, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380f, 0x1a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3810, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3811, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3812, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3813, 0x05},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3814, 0x11},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3815, 0x11},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3820, 0x40},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3821, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x382f, 0x0e},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3832, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3833, 0x05},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3834, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3835, 0x0c},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3837, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x38b1, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b80, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b81, 0xa5},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b82, 0x10},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b83, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b84, 0x08},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b85, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b86, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b87, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b88, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b89, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b8a, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b8b, 0x05},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b8c, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b8d, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b8e, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b8f, 0x1a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b94, 0x05},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b95, 0xf2},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3b96, 0x40},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c00, 0x89},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c01, 0x63},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c02, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c03, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c04, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c05, 0x03},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c06, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c07, 0x06},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c0c, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c0d, 0xd0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c0e, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3c0f, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4001, 0x42},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4004, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4005, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x404e, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4241, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4242, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4300, 0xff},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4301, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4501, 0x48},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4600, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4601, 0x4e},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4801, 0x0f},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4806, 0x0f},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4819, 0xaa},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4823, 0x3e},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4837, 0x19},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4a0d, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4a47, 0x7f},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4a49, 0xf0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4a4b, 0x30},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5000, 0x85},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x5001, 0x80},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3500, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3501, 0x1f},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3502, 0x80},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3503, 0x07},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3509, 0x10},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x350b, 0x10},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3600, 0x1c},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3602, 0x62},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3620, 0xb7},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3622, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3626, 0x21},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3627, 0x30},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3630, 0x44},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3631, 0x35},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3634, 0x60},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3636, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3662, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3663, 0x70},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3664, 0xf0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3666, 0x0a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3669, 0x1a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x366a, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x366b, 0x50},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3673, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3674, 0xff},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3675, 0x03},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3705, 0xc1},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3709, 0x40},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x373c, 0x08},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3742, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3757, 0xb3},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3788, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37a8, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x37a9, 0xc0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3800, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3801, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380b, 0xE0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3801, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3802, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3803, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3804, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3805, 0x8b},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3806, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3807, 0xeb},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3808, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3809, 0x80},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380a, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380b, 0xe0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380c, 0x03},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380d, 0xa0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380e, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x380f, 0x1a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3810, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3811, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3812, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3813, 0x05},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3814, 0x11},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3815, 0x11},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3820, 0x40},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3821, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x382f, 0x0e},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3832, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3833, 0x05},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3834, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3835, 0x0c},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3837, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3803, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3804, 0x0a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3805, 0x3f},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3806, 0x07},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3807, 0xa1},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3811, 0x08},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3813, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3630, 0x2e},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3632, 0xe2},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3633, 0x23},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3634, 0x44},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3636, 0x06},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3620, 0x64},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3621, 0xe0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3600, 0x37},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3704, 0xa0},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3703, 0x5a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3715, 0x78},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3717, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3731, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x370b, 0x60},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3705, 0x1a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3f05, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3f06, 0x10},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3f01, 0x0a},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a08, 0x01},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a09, 0x27},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a0a, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a0b, 0xf6},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a0d, 0x04},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a0e, 0x03},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a0f, 0x58},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a10, 0x50},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a1b, 0x58},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a1e, 0x50},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a11, 0x60},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x3a1f, 0x28},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4001, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4004, 0x02},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4000, 0x09},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4837, 0x24},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4050, 0x6e},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4051, 0x8f},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4202, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x300D, 0x00},
{OV_CAMERA_MODULE_REG_TYPE_DATA, 0x4800, 0x25},
};
static struct ov_camera_module_config ov7750_configs[] = {
{
{OV_CAMERA_MODULE_REG_TYPE_DATA,
.name = "640x480_60fps",
.frm_fmt = {
.width = 640,
.height = 480,
.code = MEDIA_BUS_FMT_SBGGR10_1X10
.code = MEDIA_BUS_FMT_SBGGR8_1X8
},
.frm_intrvl = {
.interval = {
@@ -334,7 +221,7 @@ static struct ov_camera_module_config ov7750_configs[] = {
.reg_diff_table = NULL,
.reg_diff_table_num_entries = 0,
.v_blanking_time_us = 7251,
PLTFRM_CAM_ITF_MIPI_CFG(0, 1, 800, 24000000)
PLTFRM_CAM_ITF_MIPI_CFG(0, 2, 800, 24000000)
}
};
@@ -367,98 +254,6 @@ err:
return ret;
}
static int ov7750_auto_adjust_fps(struct ov_camera_module *cam_mod,
u32 exp_time)
{
int ret;
u32 vts;
if ((cam_mod->exp_config.exp_time + ov7750_COARSE_INTG_TIME_MAX_MARGIN)
> cam_mod->vts_min)
vts = cam_mod->exp_config.exp_time +
ov7750_COARSE_INTG_TIME_MAX_MARGIN;
else
vts = cam_mod->vts_min;
ret = ov_camera_module_write_reg(cam_mod,
ov7750_TIMING_VTS_LOW_REG,
vts & 0xFF);
ret |= ov_camera_module_write_reg(cam_mod,
ov7750_TIMING_VTS_HIGH_REG,
(vts >> 8) & 0xFF);
if (IS_ERR_VALUE(ret)) {
ov_camera_module_pr_err(cam_mod,
"failed with error (%d)\n", ret);
} else {
ov_camera_module_pr_debug(cam_mod,
"updated vts = %d,vts_min=%d\n", vts, cam_mod->vts_min);
cam_mod->vts_cur = vts;
}
return ret;
}
static int ov7750_write_aec(struct ov_camera_module *cam_mod)
{
int ret = 0;
ov_camera_module_pr_debug(cam_mod,
"exp_time = %d, gain = %d, flash_mode = %d\n",
cam_mod->exp_config.exp_time,
cam_mod->exp_config.gain,
cam_mod->exp_config.flash_mode);
/*
* if the sensor is already streaming, write to shadow registers,
* if the sensor is in SW standby, write to active registers,
* if the sensor is off/registers are not writeable, do nothing
*/
if ((cam_mod->state == OV_CAMERA_MODULE_SW_STANDBY) ||
(cam_mod->state == OV_CAMERA_MODULE_STREAMING)) {
u32 a_gain = cam_mod->exp_config.gain;
u32 exp_time;
a_gain = a_gain > 0x7ff ? 0x7ff : a_gain;
a_gain = a_gain * cam_mod->exp_config.gain_percent / 100;
exp_time = cam_mod->exp_config.exp_time << 4;
if (cam_mod->state == OV_CAMERA_MODULE_STREAMING)
ret = ov_camera_module_write_reg(cam_mod,
ov7750_AEC_GROUP_UPDATE_ADDRESS,
ov7750_AEC_GROUP_UPDATE_START_DATA);
if (!IS_ERR_VALUE(ret) && cam_mod->auto_adjust_fps)
ret = ov7750_auto_adjust_fps(cam_mod,
cam_mod->exp_config.exp_time);
ret |= ov_camera_module_write_reg(cam_mod,
ov7750_AEC_PK_LONG_GAIN_HIGH_REG,
ov7750_FETCH_MSB_GAIN(a_gain));
ret |= ov_camera_module_write_reg(cam_mod,
ov7750_AEC_PK_LONG_GAIN_LOW_REG,
ov7750_FETCH_LSB_GAIN(a_gain));
ret = ov_camera_module_write_reg(cam_mod,
ov7750_AEC_PK_LONG_EXPO_3RD_REG,
ov7750_FETCH_3RD_BYTE_EXP(exp_time));
ret |= ov_camera_module_write_reg(cam_mod,
ov7750_AEC_PK_LONG_EXPO_2ND_REG,
ov7750_FETCH_2ND_BYTE_EXP(exp_time));
ret |= ov_camera_module_write_reg(cam_mod,
ov7750_AEC_PK_LONG_EXPO_1ST_REG,
ov7750_FETCH_1ST_BYTE_EXP(exp_time));
if (cam_mod->state == OV_CAMERA_MODULE_STREAMING) {
ret = ov_camera_module_write_reg(cam_mod,
ov7750_AEC_GROUP_UPDATE_ADDRESS,
ov7750_AEC_GROUP_UPDATE_END_DATA);
ret = ov_camera_module_write_reg(cam_mod,
ov7750_AEC_GROUP_UPDATE_ADDRESS,
ov7750_AEC_GROUP_UPDATE_END_LAUNCH);
}
}
if (IS_ERR_VALUE(ret))
ov_camera_module_pr_err(cam_mod,
"failed with error (%d)\n", ret);
return ret;
}
static int ov7750_g_ctrl(struct ov_camera_module *cam_mod, u32 ctrl_id)
{
int ret = 0;
@@ -685,7 +480,6 @@ static int ov7750_s_ctrl(struct ov_camera_module *cam_mod, u32 ctrl_id)
switch (ctrl_id) {
case V4L2_CID_GAIN:
case V4L2_CID_EXPOSURE:
ret = ov7750_write_aec(cam_mod);
break;
case V4L2_CID_FLASH_LED_MODE:
/* nothing to be done here */
@@ -706,88 +500,12 @@ static int ov7750_s_ext_ctrls(struct ov_camera_module *cam_mod,
{
int ret = 0;
/* Handles only exposure and gain together special case. */
if (ctrls->count == 1)
ret = ov7750_s_ctrl(cam_mod, ctrls->ctrls[0].id);
else if ((ctrls->count == 3) &&
((ctrls->ctrls[0].id == V4L2_CID_GAIN &&
ctrls->ctrls[1].id == V4L2_CID_EXPOSURE) ||
(ctrls->ctrls[1].id == V4L2_CID_GAIN &&
ctrls->ctrls[0].id == V4L2_CID_EXPOSURE)))
ret = ov7750_write_aec(cam_mod);
else
ret = -EINVAL;
if (IS_ERR_VALUE(ret))
ov_camera_module_pr_debug(cam_mod,
"failed with error (%d)\n", ret);
return ret;
}
static int ov7750_set_flip(
struct ov_camera_module *cam_mod,
struct pltfrm_camera_module_reg reglist[],
int len)
{
int i, mode = 0;
u16 match_reg[2];
mode = ov_camera_module_get_flip_mirror(cam_mod);
if (mode == -1) {
ov_camera_module_pr_info(cam_mod,
"dts don't set flip, return!\n");
return 0;
}
if (!IS_ERR_OR_NULL(cam_mod->active_config)) {
switch (cam_mod->active_config->frm_fmt.width) {
case ov7750_FULL_SIZE_RESOLUTION_WIDTH:
if (mode == OV_FLIP_BIT_MASK) {
match_reg[0] = 0x06;
match_reg[1] = 0x00;
} else if (mode == OV_MIRROR_BIT_MASK) {
match_reg[0] = 0x00;
match_reg[1] = 0x06;
} else if (mode == (OV_MIRROR_BIT_MASK |
OV_FLIP_BIT_MASK)) {
match_reg[0] = 0x06;
match_reg[1] = 0x06;
} else {
match_reg[0] = 0x00;
match_reg[1] = 0x00;
}
break;
case ov7750_BINING_SIZE_RESOLUTION_WIDTH:
if (mode == OV_FLIP_BIT_MASK) {
match_reg[0] = 0x16;
match_reg[1] = 0x01;
} else if (mode == OV_MIRROR_BIT_MASK) {
match_reg[0] = 0x16;
match_reg[1] = 0x07;
} else if (mode == (OV_MIRROR_BIT_MASK |
OV_FLIP_BIT_MASK)) {
match_reg[0] = 0x16;
match_reg[1] = 0x07;
} else {
match_reg[0] = 0x10;
match_reg[1] = 0x01;
}
break;
default:
return 0;
}
for (i = len; i > 0; i--) {
if (reglist[i].reg == ov7750_FLIP_REG)
reglist[i].val = match_reg[0];
else if (reglist[i].reg == ov7750_MIRROR_REG)
reglist[i].val = match_reg[1];
}
}
return 0;
}
static int ov7750_start_streaming(struct ov_camera_module *cam_mod)
{
int ret = 0;
@@ -799,6 +517,11 @@ static int ov7750_start_streaming(struct ov_camera_module *cam_mod)
if (IS_ERR_VALUE(ret))
goto err;
ret = ov_camera_module_write_reg(cam_mod, 0x4800, 0x04);
if (IS_ERR_VALUE(ret))
goto err;
if (IS_ERR_VALUE(ov_camera_module_write_reg(cam_mod, 0x0100, 1)))
goto err;
@@ -817,6 +540,11 @@ static int ov7750_stop_streaming(struct ov_camera_module *cam_mod)
ov_camera_module_pr_debug(cam_mod, "\n");
ret = ov_camera_module_write_reg(cam_mod, 0x4800, 0x25);
if (IS_ERR_VALUE(ret))
goto err;
ret = ov_camera_module_write_reg(cam_mod, 0x0100, 0);
if (IS_ERR_VALUE(ret))
goto err;
@@ -899,7 +627,6 @@ static struct ov_camera_module_custom_config ov7750_custom_config = {
.g_ctrl = ov7750_g_ctrl,
.g_timings = ov7750_g_timings,
.check_camera_id = ov7750_check_camera_id,
.set_flip = ov7750_set_flip,
.configs = ov7750_configs,
.num_configs = ARRAY_SIZE(ov7750_configs),
.power_up_delays_ms = {5, 20, 0}
@@ -936,8 +663,8 @@ static int ov7750_remove(struct i2c_client *client)
}
static const struct i2c_device_id ov7750_id[] = {
{ ov7750_DRIVER_NAME, 0 },
{ }
{ov7750_DRIVER_NAME, 0 },
{}
};
static const struct of_device_id ov7750_of_match[] = {

View File

@@ -1241,7 +1241,7 @@ int cif_isp10_pltfrm_dev_init(
pdata->irq_handlers[i].mis = -EINVAL;
#ifdef CIF_ISP10_MODE_DMA_SG
np = of_find_node_by_name(NULL, "isp0_mmu");
np = of_find_node_by_name(NULL, "isp_mmu");
if (!np) {
int index = 0;
/* iommu domain */