From 733dfc98d208da17a3bec98c8bd0b9ddba0bb195 Mon Sep 17 00:00:00 2001 From: ddl Date: Tue, 26 Apr 2011 16:56:03 +0800 Subject: [PATCH] camera: fix camera driver cann't support dual same sensor --- arch/arm/mach-rk29/board-rk29sdk.c | 104 ++++++++++-------- arch/arm/mach-rk29/include/mach/rk29_camera.h | 10 ++ drivers/media/video/mt9d112.c | 2 +- drivers/media/video/mt9p111.c | 2 +- drivers/media/video/ov2655.c | 2 +- drivers/media/video/ov2659.c | 2 +- drivers/media/video/ov5640.c | 2 +- drivers/media/video/ov5642.c | 2 +- drivers/media/video/s5k6aa.c | 2 +- 9 files changed, 76 insertions(+), 52 deletions(-) diff --git a/arch/arm/mach-rk29/board-rk29sdk.c b/arch/arm/mach-rk29/board-rk29sdk.c index 74f7b2e562df..baa99f77cb82 100755 --- a/arch/arm/mach-rk29/board-rk29sdk.c +++ b/arch/arm/mach-rk29/board-rk29sdk.c @@ -686,29 +686,43 @@ 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_IIC_ADDR_0 0x78 -#define SENSOR_IIC_ADAPTER_ID_0 1 -#define SENSOR_POWER_PIN_0 INVALID_GPIO -#define SENSOR_RESET_PIN_0 INVALID_GPIO -#define SENSOR_POWERDN_PIN_0 RK29_PIN6_PB7 -#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_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_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_FLASHACTIVE_LEVEL_1 RK29_CAM_FLASHACTIVE_L +/*---------------- Camera Sensor Configuration Begin ------------------------*/ +#define CONFIG_SENSOR_0 RK29_CAM_SENSOR_OV5642 /* back camera sensor */ +#define CONFIG_SENSOR_IIC_ADDR_0 0x78 +#define CONFIG_SENSOR_IIC_ADAPTER_ID_0 1 +#define CONFIG_SENSOR_POWER_PIN_0 INVALID_GPIO +#define CONFIG_SENSOR_RESET_PIN_0 INVALID_GPIO +#define CONFIG_SENSOR_POWERDN_PIN_0 RK29_PIN6_PB7 +#define CONFIG_SENSOR_FALSH_PIN_0 INVALID_GPIO +#define CONFIG_SENSOR_POWERACTIVE_LEVEL_0 RK29_CAM_POWERACTIVE_L +#define CONFIG_SENSOR_RESETACTIVE_LEVEL_0 RK29_CAM_RESETACTIVE_L +#define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0 RK29_CAM_POWERDNACTIVE_H +#define CONFIG_SENSOR_FLASHACTIVE_LEVEL_0 RK29_CAM_FLASHACTIVE_L + +#define CONFIG_SENSOR_1 RK29_CAM_SENSOR_OV2659 /* front camera sensor */ +#define CONFIG_SENSOR_IIC_ADDR_1 0x60 +#define CONFIG_SENSOR_IIC_ADAPTER_ID_1 1 +#define CONFIG_SENSOR_POWER_PIN_1 INVALID_GPIO +#define CONFIG_SENSOR_RESET_PIN_1 INVALID_GPIO +#define CONFIG_SENSOR_POWERDN_PIN_1 RK29_PIN5_PD7 +#define CONFIG_SENSOR_FALSH_PIN_1 INVALID_GPIO +#define CONFIG_SENSOR_POWERACTIVE_LEVEL_1 RK29_CAM_POWERACTIVE_L +#define CONFIG_SENSOR_RESETACTIVE_LEVEL_1 RK29_CAM_RESETACTIVE_L +#define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1 RK29_CAM_POWERDNACTIVE_H +#define CONFIG_SENSOR_FLASHACTIVE_LEVEL_1 RK29_CAM_FLASHACTIVE_L +/*---------------- Camera Sensor Configuration End------------------------*/ + +#define _CONS(a,b) a##b +#define CONS(a,b) _CONS(a,b) + +#define __STR(x) #x +#define _STR(x) __STR(x) +#define STR(x) _STR(x) + +#define SENSOR_NAME_0 STR(CONFIG_SENSOR_0) /* back camera sensor */ +#define SENSOR_NAME_1 STR(CONFIG_SENSOR_1) /* front camera sensor */ +#define SENSOR_DEVICE_NAME_0 STR(CONS(CONFIG_SENSOR_0, _back)) +#define SENSOR_DEVICE_NAME_1 STR(CONS(CONFIG_SENSOR_1, _front)) static int rk29_sensor_io_init(void); static int rk29_sensor_io_deinit(int sensor); @@ -720,21 +734,21 @@ static struct rk29camera_platform_data rk29_camera_platform_data = { .sensor_ioctrl = rk29_sensor_ioctrl, .gpio_res = { { - .gpio_reset = SENSOR_RESET_PIN_0, - .gpio_power = SENSOR_POWER_PIN_0, - .gpio_powerdown = SENSOR_POWERDN_PIN_0, - .gpio_flash = SENSOR_FALSH_PIN_0, - .gpio_flag = (SENSOR_POWERACTIVE_LEVEL_0|SENSOR_RESETACTIVE_LEVEL_0|SENSOR_POWERDNACTIVE_LEVEL_0|SENSOR_FLASHACTIVE_LEVEL_0), + .gpio_reset = CONFIG_SENSOR_RESET_PIN_0, + .gpio_power = CONFIG_SENSOR_POWER_PIN_0, + .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_0, + .gpio_flash = CONFIG_SENSOR_FALSH_PIN_0, + .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_0|CONFIG_SENSOR_RESETACTIVE_LEVEL_0|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0|CONFIG_SENSOR_FLASHACTIVE_LEVEL_0), .gpio_init = 0, - .dev_name = SENSOR_NAME_0, + .dev_name = SENSOR_DEVICE_NAME_0, }, { - .gpio_reset = SENSOR_RESET_PIN_1, - .gpio_power = SENSOR_POWER_PIN_1, - .gpio_powerdown = SENSOR_POWERDN_PIN_1, - .gpio_flash = SENSOR_FALSH_PIN_1, - .gpio_flag = (SENSOR_POWERACTIVE_LEVEL_1|SENSOR_RESETACTIVE_LEVEL_1|SENSOR_POWERDNACTIVE_LEVEL_1|SENSOR_FLASHACTIVE_LEVEL_1), + .gpio_reset = CONFIG_SENSOR_RESET_PIN_1, + .gpio_power = CONFIG_SENSOR_POWER_PIN_1, + .gpio_powerdown = CONFIG_SENSOR_POWERDN_PIN_1, + .gpio_flash = CONFIG_SENSOR_FALSH_PIN_1, + .gpio_flag = (CONFIG_SENSOR_POWERACTIVE_LEVEL_1|CONFIG_SENSOR_RESETACTIVE_LEVEL_1|CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1|CONFIG_SENSOR_FLASHACTIVE_LEVEL_1), .gpio_init = 0, - .dev_name = SENSOR_NAME_1, + .dev_name = SENSOR_DEVICE_NAME_1, } }, #ifdef CONFIG_VIDEO_RK29_WORK_IPP @@ -930,10 +944,10 @@ static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) { if (on) { gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS)); - //printk("\n%s..%s..PowerDownPin=%d ..PinLevel = %x \n",__FUNCTION__,dev_name(dev),camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS)); + printk("\n%s..%s..PowerDownPin=%d ..PinLevel = %x \n",__FUNCTION__,dev_name(dev),camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS)); } else { gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS)); - //printk("\n%s..%s..PowerDownPin= %d..PinLevel = %x \n",__FUNCTION__,dev_name(dev), camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS)); + printk("\n%s..%s..PowerDownPin= %d..PinLevel = %x \n",__FUNCTION__,dev_name(dev), camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS)); } } else { ret = RK29_CAM_EIO_REQUESTFAIL; @@ -1012,10 +1026,10 @@ static int rk29_sensor_powerdown(struct device *dev, int on) { return rk29_sensor_ioctrl(dev,Cam_PowerDown,on); } -#if (SENSOR_IIC_ADDR_0 != 0x00) +#if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00) static struct i2c_board_info rk29_i2c_cam_info_0[] = { { - I2C_BOARD_INFO(SENSOR_NAME_0, SENSOR_IIC_ADDR_0>>1) + I2C_BOARD_INFO(SENSOR_NAME_0, CONFIG_SENSOR_IIC_ADDR_0>>1) }, }; @@ -1024,7 +1038,7 @@ static struct soc_camera_link rk29_iclink_0 = { .power = rk29_sensor_power, .powerdown = rk29_sensor_powerdown, .board_info = &rk29_i2c_cam_info_0[0], - .i2c_adapter_id = SENSOR_IIC_ADAPTER_ID_0, + .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_0, .module_name = SENSOR_NAME_0, }; @@ -1033,14 +1047,14 @@ static struct platform_device rk29_soc_camera_pdrv_0 = { .name = "soc-camera-pdrv", .id = 0, .dev = { - .init_name = SENSOR_NAME_0, + .init_name = SENSOR_DEVICE_NAME_0, .platform_data = &rk29_iclink_0, }, }; #endif static struct i2c_board_info rk29_i2c_cam_info_1[] = { { - I2C_BOARD_INFO(SENSOR_NAME_1, SENSOR_IIC_ADDR_1>>1) + I2C_BOARD_INFO(SENSOR_NAME_1, CONFIG_SENSOR_IIC_ADDR_1>>1) }, }; @@ -1049,7 +1063,7 @@ static struct soc_camera_link rk29_iclink_1 = { .power = rk29_sensor_power, .powerdown = rk29_sensor_powerdown, .board_info = &rk29_i2c_cam_info_1[0], - .i2c_adapter_id = SENSOR_IIC_ADAPTER_ID_1, + .i2c_adapter_id = CONFIG_SENSOR_IIC_ADAPTER_ID_1, .module_name = SENSOR_NAME_1, }; @@ -1058,7 +1072,7 @@ static struct platform_device rk29_soc_camera_pdrv_1 = { .name = "soc-camera-pdrv", .id = 1, .dev = { - .init_name = SENSOR_NAME_1, + .init_name = SENSOR_DEVICE_NAME_1, .platform_data = &rk29_iclink_1, }, }; @@ -1627,7 +1641,7 @@ static struct platform_device *devices[] __initdata = { #endif #ifdef CONFIG_VIDEO_RK29 &rk29_device_camera, /* ddl@rock-chips.com : camera support */ - #if (SENSOR_IIC_ADDR_0 != 0x00) + #if (CONFIG_SENSOR_IIC_ADDR_0 != 0x00) &rk29_soc_camera_pdrv_0, #endif &rk29_soc_camera_pdrv_1, diff --git a/arch/arm/mach-rk29/include/mach/rk29_camera.h b/arch/arm/mach-rk29/include/mach/rk29_camera.h index a8351f5fbe1f..f5265421d859 100644 --- a/arch/arm/mach-rk29/include/mach/rk29_camera.h +++ b/arch/arm/mach-rk29/include/mach/rk29_camera.h @@ -32,6 +32,16 @@ #define RK29_CAM_EIO_INVALID -1 #define RK29_CAM_EIO_REQUESTFAIL -2 +#define RK29_CAM_SENSOR_OV9650 ov9650 +#define RK29_CAM_SENSOR_OV2655 ov2655 +#define RK29_CAM_SENSOR_OV2659 ov2659 +#define RK29_CAM_SENSOR_OV3640 ov3640 +#define RK29_CAM_SENSOR_OV5640 ov5640 +#define RK29_CAM_SENSOR_OV5642 ov5642 +#define RK29_CAM_SENSOR_S5K6AA s5k6aa +#define RK29_CAM_SENSOR_MT9D112 mt9d112 +#define RK29_CAM_SENSOR_MT9P111 mt9p111 + #define RK29_CAM_SENSOR_NAME_OV9650 "ov9650" #define RK29_CAM_SENSOR_NAME_OV2655 "ov2655" #define RK29_CAM_SENSOR_NAME_OV2659 "ov2659" diff --git a/drivers/media/video/mt9d112.c b/drivers/media/video/mt9d112.c index 8bfb7630936a..9ebdb4ba0da8 100755 --- a/drivers/media/video/mt9d112.c +++ b/drivers/media/video/mt9d112.c @@ -43,7 +43,7 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define MAX(x,y) ((x>y) ? x: y) /* Sensor Driver Configuration */ -#define SENSOR_NAME mt9d112 +#define SENSOR_NAME RK29_CAM_SENSOR_MT9D112 #define SENSOR_V4L2_IDENT V4L2_IDENT_MT9D112 #define SENSOR_ID 0x1580 #define SENSOR_ID_REG 0x3000 diff --git a/drivers/media/video/mt9p111.c b/drivers/media/video/mt9p111.c index f55c2d1beb47..9beb04630f81 100755 --- a/drivers/media/video/mt9p111.c +++ b/drivers/media/video/mt9p111.c @@ -44,7 +44,7 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define MAX(x,y) ((x>y) ? x: y) /* Sensor Driver Configuration */ -#define SENSOR_NAME mt9p111 +#define SENSOR_NAME RK29_CAM_SENSOR_MT9P111 #define SENSOR_V4L2_IDENT V4L2_IDENT_MT9P111 #define SENSOR_ID SEQUENCE_END #define SENSOR_ID_REG SEQUENCE_END diff --git a/drivers/media/video/ov2655.c b/drivers/media/video/ov2655.c index 80b1c5360916..27cba5dd00f1 100755 --- a/drivers/media/video/ov2655.c +++ b/drivers/media/video/ov2655.c @@ -43,7 +43,7 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define MAX(x,y) ((x>y) ? x: y) /* Sensor Driver Configuration */ -#define SENSOR_NAME ov2655 +#define SENSOR_NAME RK29_CAM_SENSOR_OV2655 #define SENSOR_V4L2_IDENT V4L2_IDENT_OV2655 #define SENSOR_ID 0x2656 #define SENSOR_MIN_WIDTH 176 diff --git a/drivers/media/video/ov2659.c b/drivers/media/video/ov2659.c index e4d3421dced6..8a17e2395dc4 100755 --- a/drivers/media/video/ov2659.c +++ b/drivers/media/video/ov2659.c @@ -43,7 +43,7 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define MAX(x,y) ((x>y) ? x: y) /* Sensor Driver Configuration */ -#define SENSOR_NAME ov2659 +#define SENSOR_NAME RK29_CAM_SENSOR_OV2659 #define SENSOR_V4L2_IDENT V4L2_IDENT_OV2659 #define SENSOR_ID 0x2656 #define SENSOR_MIN_WIDTH 800 diff --git a/drivers/media/video/ov5640.c b/drivers/media/video/ov5640.c index 4ac1fdfad417..e35300284e51 100755 --- a/drivers/media/video/ov5640.c +++ b/drivers/media/video/ov5640.c @@ -43,7 +43,7 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define MAX(x,y) ((x>y) ? x: y) /* Sensor Driver Configuration */ -#define SENSOR_NAME ov5640 +#define SENSOR_NAME RK29_CAM_SENSOR_OV5640 #define SENSOR_V4L2_IDENT V4L2_IDENT_OV5640 #define SENSOR_ID 0x5640 #define SENSOR_MIN_WIDTH 176 diff --git a/drivers/media/video/ov5642.c b/drivers/media/video/ov5642.c index 3ee18d16d9f2..f0c78e9b195d 100755 --- a/drivers/media/video/ov5642.c +++ b/drivers/media/video/ov5642.c @@ -43,7 +43,7 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define MAX(x,y) ((x>y) ? x: y) /* Sensor Driver Configuration */ -#define SENSOR_NAME ov5642 +#define SENSOR_NAME RK29_CAM_SENSOR_OV5642 #define SENSOR_V4L2_IDENT V4L2_IDENT_OV5642 #define SENSOR_ID 0x5642 #define SENSOR_MIN_WIDTH 176 diff --git a/drivers/media/video/s5k6aa.c b/drivers/media/video/s5k6aa.c index d719e03a8c1a..8aa7aff1710a 100755 --- a/drivers/media/video/s5k6aa.c +++ b/drivers/media/video/s5k6aa.c @@ -44,7 +44,7 @@ module_param(debug, int, S_IRUGO|S_IWUSR); #define MAX(x,y) ((x>y) ? x: y) /* Sensor Driver Configuration */ -#define SENSOR_NAME s5k6aa +#define SENSOR_NAME RK29_CAM_SENSOR_S5K6AA #define SENSOR_V4L2_IDENT V4L2_IDENT_S5K66A #define SENSOR_ID 0x06aa #define SENSOR_ID_REG SEQUENCE_END//0x015a -- 2.34.1