From b697fe9f974f0708369a178c160bc323153ed00d Mon Sep 17 00:00:00 2001 From: ddl Date: Thu, 3 Mar 2011 22:38:21 +0800 Subject: [PATCH] camera: FIH defconfig for camera, mt9p111 debug and board config --- arch/arm/configs/rk29_FIH_defconfig | 4 +- arch/arm/mach-rk29/board-rk29-fih.c | 21 ++++--- arch/arm/mach-rk29/board-rk29sdk.c | 2 +- drivers/media/video/mt9p111.c | 93 ++++++++++++++++++++++++++--- 4 files changed, 99 insertions(+), 21 deletions(-) diff --git a/arch/arm/configs/rk29_FIH_defconfig b/arch/arm/configs/rk29_FIH_defconfig index 8dd1c19c98d3..9a22716d4ea6 100644 --- a/arch/arm/configs/rk29_FIH_defconfig +++ b/arch/arm/configs/rk29_FIH_defconfig @@ -1087,7 +1087,7 @@ CONFIG_SOC_CAMERA=y # CONFIG_SOC_CAMERA_MT9M001 is not set # CONFIG_SOC_CAMERA_MT9M111 is not set # CONFIG_SOC_CAMERA_MT9T031 is not set -# CONFIG_SOC_CAMERA_MT9P111 is not set +CONFIG_SOC_CAMERA_MT9P111=y # CONFIG_SOC_CAMERA_MT9D112 is not set # CONFIG_SOC_CAMERA_MT9V022 is not set # CONFIG_SOC_CAMERA_TW9910 is not set @@ -1100,7 +1100,7 @@ CONFIG_SOC_CAMERA=y # CONFIG_SOC_CAMERA_OV3640 is not set # CONFIG_SOC_CAMERA_OV5642 is not set # CONFIG_SOC_CAMERA_OV5640 is not set -# CONFIG_SOC_CAMERA_S5K6AA is not set +CONFIG_SOC_CAMERA_S5K6AA=y # CONFIG_VIDEO_SH_MOBILE_CEU is not set CONFIG_VIDEO_RK29=y CONFIG_VIDEO_RK29_WORK_ONEFRAME=y diff --git a/arch/arm/mach-rk29/board-rk29-fih.c b/arch/arm/mach-rk29/board-rk29-fih.c index 72c365ccb762..4dfe822ab728 100755 --- a/arch/arm/mach-rk29/board-rk29-fih.c +++ b/arch/arm/mach-rk29/board-rk29-fih.c @@ -1003,28 +1003,28 @@ static struct i2c_board_info __initdata board_i2c3_devices[] = { * author: ddl@rock-chips.com *****************************************************************************************/ #ifdef CONFIG_VIDEO_RK29 -#define SENSOR_NAME_0 RK29_CAM_SENSOR_NAME_OV5642 /* back camera sensor */ +#define SENSOR_NAME_0 RK29_CAM_SENSOR_NAME_MT9P111 /* back camera sensor */ #define SENSOR_IIC_ADDR_0 0x78 #define SENSOR_IIC_ADAPTER_ID_0 1 -#define SENSOR_POWER_PIN_0 INVALID_GPIO +#define SENSOR_POWER_PIN_0 RK29_PIN5_PD7 #define SENSOR_RESET_PIN_0 INVALID_GPIO -#define SENSOR_POWERDN_PIN_0 RK29_PIN6_PB7 +#define SENSOR_POWERDN_PIN_0 RK29_PIN1_PB2 #define SENSOR_FALSH_PIN_0 INVALID_GPIO #define SENSOR_POWERACTIVE_LEVEL_0 RK29_CAM_POWERACTIVE_L #define SENSOR_RESETACTIVE_LEVEL_0 RK29_CAM_RESETACTIVE_L #define SENSOR_POWERDNACTIVE_LEVEL_0 RK29_CAM_POWERDNACTIVE_H #define SENSOR_FLASHACTIVE_LEVEL_0 RK29_CAM_FLASHACTIVE_L -#define SENSOR_NAME_1 RK29_CAM_SENSOR_NAME_OV2659 /* front camera sensor */ -#define SENSOR_IIC_ADDR_1 0x60 +#define SENSOR_NAME_1 RK29_CAM_SENSOR_NAME_S5K6AA /* front camera sensor */ +#define SENSOR_IIC_ADDR_1 0x00 #define SENSOR_IIC_ADAPTER_ID_1 1 #define SENSOR_POWER_PIN_1 INVALID_GPIO #define SENSOR_RESET_PIN_1 INVALID_GPIO -#define SENSOR_POWERDN_PIN_1 RK29_PIN5_PD7 +#define SENSOR_POWERDN_PIN_1 RK29_PIN6_PB7 #define SENSOR_FALSH_PIN_1 INVALID_GPIO #define SENSOR_POWERACTIVE_LEVEL_1 RK29_CAM_POWERACTIVE_L #define SENSOR_RESETACTIVE_LEVEL_1 RK29_CAM_RESETACTIVE_L -#define SENSOR_POWERDNACTIVE_LEVEL_1 RK29_CAM_POWERDNACTIVE_H +#define SENSOR_POWERDNACTIVE_LEVEL_1 RK29_CAM_POWERDNACTIVE_L #define SENSOR_FLASHACTIVE_LEVEL_1 RK29_CAM_FLASHACTIVE_L static int rk29_sensor_io_init(void); @@ -1213,7 +1213,7 @@ static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, } } else { ret = RK29_CAM_EIO_REQUESTFAIL; - printk("\n%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,dev_name(dev),camera_reset); + printk("\n%s..%s..PowerPin=%d request failed!\n",__FUNCTION__,dev_name(dev),camera_reset); } } else { ret = RK29_CAM_EIO_INVALID; @@ -1333,6 +1333,7 @@ static struct platform_device rk29_soc_camera_pdrv_0 = { }, }; #endif +#if (SENSOR_IIC_ADDR_1 != 0x00) static struct i2c_board_info rk29_i2c_cam_info_1[] = { { I2C_BOARD_INFO(SENSOR_NAME_1, SENSOR_IIC_ADDR_1>>1) @@ -1357,7 +1358,7 @@ static struct platform_device rk29_soc_camera_pdrv_1 = { .platform_data = &rk29_iclink_1, }, }; - +#endif static u64 rockchip_device_camera_dmamask = 0xffffffffUL; static struct resource rk29_camera_resource[] = { @@ -1948,7 +1949,9 @@ static struct platform_device *devices[] __initdata = { #if (SENSOR_IIC_ADDR_0 != 0x00) &rk29_soc_camera_pdrv_0, #endif + #if (SENSOR_IIC_ADDR_1 != 0x00) &rk29_soc_camera_pdrv_1, + #endif &android_pmem_cam_device, #endif &android_pmem_device, diff --git a/arch/arm/mach-rk29/board-rk29sdk.c b/arch/arm/mach-rk29/board-rk29sdk.c index 96f34bace4c7..c9c9a2dda5b6 100755 --- a/arch/arm/mach-rk29/board-rk29sdk.c +++ b/arch/arm/mach-rk29/board-rk29sdk.c @@ -828,7 +828,7 @@ static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, } } else { ret = RK29_CAM_EIO_REQUESTFAIL; - printk("\n%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,dev_name(dev),camera_reset); + printk("\n%s..%s..PowerPin=%d request failed!\n",__FUNCTION__,dev_name(dev),camera_reset); } } else { ret = RK29_CAM_EIO_INVALID; diff --git a/drivers/media/video/mt9p111.c b/drivers/media/video/mt9p111.c index 387ae5a57397..5713c92d356f 100755 --- a/drivers/media/video/mt9p111.c +++ b/drivers/media/video/mt9p111.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -47,8 +48,8 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define SENSOR_V4L2_IDENT V4L2_IDENT_MT9P111 #define SENSOR_ID SEQUENCE_END #define SENSOR_ID_REG SEQUENCE_END -#define SENSOR_RESET_REG SEQUENCE_END -#define SENSOR_RESET_VAL 0x00 +#define SENSOR_RESET_REG 0x0010 +#define SENSOR_RESET_VAL 0x0115 #define SENSOR_MIN_WIDTH 176 #define SENSOR_MIN_HEIGHT 144 #define SENSOR_MAX_WIDTH 2592 @@ -72,7 +73,7 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define CONFIG_SENSOR_Focus 1 -#define CONFIG_SENSOR_I2C_SPEED 250000 /* Hz */ +#define CONFIG_SENSOR_I2C_SPEED 100000 /* Hz */ /* Sensor write register continues by preempt_disable/preempt_enable for current process not be scheduled */ #define CONFIG_SENSOR_I2C_NOSCHED 0 #define CONFIG_SENSOR_I2C_RDWRCHK 0 @@ -1118,7 +1119,67 @@ static struct reginfo sensor_init_data[] = {0x098E, 0x5C02}, // MCU_ADDR}, {0xDC02, 0x003E}, // SYS_ALGO}, {0xDC36, 0x34}, // SYS_DARK_COLOR_KILL}, - +#if 0 + // Refresh Mode - skip + {0xBC18, 0x00}, // LL_GAMMA_CONTRAST_CURVE_0 + {0xBC19, 0x11}, // LL_GAMMA_CONTRAST_CURVE_1 + {0xBC1A, 0x23}, // LL_GAMMA_CONTRAST_CURVE_2 + {0xBC1B, 0x3F}, // LL_GAMMA_CONTRAST_CURVE_3 + {0xBC1C, 0x67}, // LL_GAMMA_CONTRAST_CURVE_4 + {0xBC1D, 0x85}, // LL_GAMMA_CONTRAST_CURVE_5 + {0xBC1E, 0x9B}, // LL_GAMMA_CONTRAST_CURVE_6 + {0xBC1F, 0xAD}, // LL_GAMMA_CONTRAST_CURVE_7 + {0xBC20, 0xBB}, // LL_GAMMA_CONTRAST_CURVE_8 + {0xBC21, 0xC7}, // LL_GAMMA_CONTRAST_CURVE_9 + {0xBC22, 0xD1}, // LL_GAMMA_CONTRAST_CURVE_10 + {0xBC23, 0xDA}, // LL_GAMMA_CONTRAST_CURVE_11 + {0xBC24, 0xE1}, // LL_GAMMA_CONTRAST_CURVE_12 + {0xBC25, 0xE8}, // LL_GAMMA_CONTRAST_CURVE_13 + {0xBC26, 0xEE}, // LL_GAMMA_CONTRAST_CURVE_14 + {0xBC27, 0xF3}, // LL_GAMMA_CONTRAST_CURVE_15 + {0xBC28, 0xF7}, // LL_GAMMA_CONTRAST_CURVE_16 + {0xBC29, 0xFB}, // LL_GAMMA_CONTRAST_CURVE_17 + {0xBC2A, 0xFF}, // LL_GAMMA_CONTRAST_CURVE_18 + {0xBC2B, 0x00}, // LL_GAMMA_NEUTRAL_CURVE_0 + {0xBC2C, 0x05}, // LL_GAMMA_NEUTRAL_CURVE_1 + {0xBC2D, 0x11}, // LL_GAMMA_NEUTRAL_CURVE_2 + {0xBC2E, 0x2E}, // LL_GAMMA_NEUTRAL_CURVE_3 + {0xBC2F, 0x52}, // LL_GAMMA_NEUTRAL_CURVE_4 + {0xBC30, 0x6C}, // LL_GAMMA_NEUTRAL_CURVE_5 + {0xBC31, 0x83}, // LL_GAMMA_NEUTRAL_CURVE_6 + {0xBC32, 0x97}, // LL_GAMMA_NEUTRAL_CURVE_7 + {0xBC33, 0xA7}, // LL_GAMMA_NEUTRAL_CURVE_8 + {0xBC34, 0xB4}, // LL_GAMMA_NEUTRAL_CURVE_9 + {0xBC35, 0xC0}, // LL_GAMMA_NEUTRAL_CURVE_10 + {0xBC36, 0xCB}, // LL_GAMMA_NEUTRAL_CURVE_11 + {0xBC37, 0xD4}, // LL_GAMMA_NEUTRAL_CURVE_12 + {0xBC38, 0xDD}, // LL_GAMMA_NEUTRAL_CURVE_13 + {0xBC39, 0xE5}, // LL_GAMMA_NEUTRAL_CURVE_14 + {0xBC3A, 0xEC}, // LL_GAMMA_NEUTRAL_CURVE_15 + {0xBC3B, 0xF3}, // LL_GAMMA_NEUTRAL_CURVE_16 + {0xBC3C, 0xF9}, // LL_GAMMA_NEUTRAL_CURVE_17 + {0xBC3D, 0xFF}, // LL_GAMMA_NEUTRAL_CURVE_18 + {0xBC3E, 0x00}, // LL_GAMMA_NR_CURVE_0 + {0xBC3F, 0x18}, // LL_GAMMA_NR_CURVE_1 + {0xBC40, 0x25}, // LL_GAMMA_NR_CURVE_2 + {0xBC41, 0x3A}, // LL_GAMMA_NR_CURVE_3 + {0xBC42, 0x59}, // LL_GAMMA_NR_CURVE_4 + {0xBC43, 0x70}, // LL_GAMMA_NR_CURVE_5 + {0xBC44, 0x81}, // LL_GAMMA_NR_CURVE_6 + {0xBC45, 0x90}, // LL_GAMMA_NR_CURVE_7 + {0xBC46, 0x9E}, // LL_GAMMA_NR_CURVE_8 + {0xBC47, 0xAB}, // LL_GAMMA_NR_CURVE_9 + {0xBC48, 0xB6}, // LL_GAMMA_NR_CURVE_10 + {0xBC49, 0xC1}, // LL_GAMMA_NR_CURVE_11 + {0xBC4A, 0xCB}, // LL_GAMMA_NR_CURVE_12 + {0xBC4B, 0xD5}, // LL_GAMMA_NR_CURVE_13 + {0xBC4C, 0xDE}, // LL_GAMMA_NR_CURVE_14 + {0xBC4D, 0xE7}, // LL_GAMMA_NR_CURVE_15 + {0xBC4E, 0xEF}, // LL_GAMMA_NR_CURVE_16 + {0xBC4F, 0xF7}, // LL_GAMMA_NR_CURVE_17 + {0xBC50, 0xFF}, // LL_GAMMA_NR_CURVE_18 + {0xBC51, 0x04}, // LL_GAMMA_CURVE_SELECTOR +#endif //BM_dampening}, {0xB801, 0xE0}, // STAT_MODE}, {0xB862, 0x04}, // STAT_BMTRACKING_SPEED}, @@ -2179,7 +2240,10 @@ static int sensor_write(struct i2c_client *client, u16 reg, u16 val) { case SEQUENCE_WAIT_MS: { - msleep(val); + if (in_atomic()) + mdelay(val); + else + msleep(val); break; } @@ -2387,7 +2451,9 @@ static int sensor_af_single(struct i2c_client *client) ret = sensor_write_array(client, sensor_af_trigger); if (ret<0) - SENSOR_TR("%s sensor auto focus trigger fail!!",SENSOR_NAME_STRING()); + SENSOR_TR("%s sensor auto focus trigger fail!!\n",SENSOR_NAME_STRING()); + else + SENSOR_DG("%s sensor auto focus trigger success!\n",SENSOR_NAME_STRING()); sensor_af_single_end: return ret; } @@ -2604,6 +2670,14 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val) if (qctrl) sensor->info_priv.focus = qctrl->default_value; + if (sensor_af_init(client) < 0) { + sensor->info_priv.funmodule_state &= ~SENSOR_AF_IS_OK; + SENSOR_TR("%s auto focus module init is fail!\n",SENSOR_NAME_STRING()); + } else { + sensor->info_priv.funmodule_state |= SENSOR_AF_IS_OK; + SENSOR_DG("%s auto focus module init is success!\n",SENSOR_NAME_STRING()); + } + #if CONFIG_SENSOR_Flash qctrl = soc_camera_find_qctrl(&sensor_ops, V4L2_CID_FLASH); if (qctrl) @@ -2624,8 +2698,9 @@ static int sensor_deactivate(struct i2c_client *client) SENSOR_DG("\n%s..%s.. Enter\n",SENSOR_NAME_STRING(),__FUNCTION__); /* ddl@rock-chips.com : all sensor output pin must change to input for other sensor */ - sensor_task_lock(client, 1); + + sensor_ioctrl(icd, Sensor_PowerDown, 1); /* ddl@rock-chips.com : sensor config init width , because next open sensor quickly(soc_camera_open -> Try to configure with default parameters) */ icd->user_width = SENSOR_INIT_WIDTH; icd->user_height = SENSOR_INIT_HEIGHT; @@ -3758,7 +3833,7 @@ static int sensor_video_probe(struct soc_camera_device *icd, if (ret != 0) { SENSOR_TR("%s soft reset sensor failed\n",SENSOR_NAME_STRING()); ret = -ENODEV; - goto sensor_INIT_ERR; + goto sensor_video_probe_err; } mdelay(5); //delay 5 microseconds @@ -3770,7 +3845,7 @@ static int sensor_video_probe(struct soc_camera_device *icd, if (ret != 0) { SENSOR_TR("read chip id failed\n"); ret = -ENODEV; - goto sensor_INIT_ERR; + goto sensor_video_probe_err; } SENSOR_DG("\n %s pid = 0x%x \n", SENSOR_NAME_STRING(), pid); -- 2.34.1