camera: FIH defconfig for camera, mt9p111 debug and board config
authorddl <ddl@rockchip.com>
Thu, 3 Mar 2011 14:38:21 +0000 (22:38 +0800)
committerddl <ddl@rockchip.com>
Thu, 3 Mar 2011 14:39:28 +0000 (22:39 +0800)
arch/arm/configs/rk29_FIH_defconfig
arch/arm/mach-rk29/board-rk29-fih.c
arch/arm/mach-rk29/board-rk29sdk.c
drivers/media/video/mt9p111.c

index 8dd1c19c98d335da36cc8492922aba1f818dc1b7..9a22716d4ea6842a250159a7d2249a4aaeb6be79 100644 (file)
@@ -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
index 72c365ccb76297e6199a76fb48d74654a9dd10ee..4dfe822ab7287533b28c150f6552fea2521b072c 100755 (executable)
@@ -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,
index 96f34bace4c75be5889c153c0d3d7463d63f8c05..c9c9a2dda5b615933a31290b046792f452b56218 100755 (executable)
@@ -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;
index 387ae5a57397dfc1103f743e530ab3d9687866a2..5713c92d356fcdd446f261a5714a47999c65b014 100755 (executable)
@@ -15,6 +15,7 @@
 #include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/circ_buf.h>
+#include <linux/hardirq.h>
 #include <linux/miscdevice.h>
 #include <media/v4l2-common.h>
 #include <media/v4l2-chip-ident.h>
@@ -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);