mirror of
https://github.com/hardkernel/linux.git
synced 2026-04-19 03:50:43 +09:00
camera: support query framerate and support detect framerate, version update to v0.1.5
This commit is contained in:
@@ -81,6 +81,13 @@
|
||||
#define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0 RK29_CAM_POWERDNACTIVE_H
|
||||
#define CONFIG_SENSOR_FLASHACTIVE_LEVEL_0 RK29_CAM_FLASHACTIVE_L
|
||||
|
||||
#define CONFIG_SENSOR_QCIF_FPS_FIXED_0 15
|
||||
#define CONFIG_SENSOR_QVGA_FPS_FIXED_0 15
|
||||
#define CONFIG_SENSOR_CIF_FPS_FIXED_0 15
|
||||
#define CONFIG_SENSOR_VGA_FPS_FIXED_0 15
|
||||
#define CONFIG_SENSOR_SVGA_FPS_FIXED_0 15
|
||||
#define CONFIG_SENSOR_720P_FPS_FIXED_0 30
|
||||
|
||||
#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
|
||||
@@ -93,6 +100,14 @@
|
||||
#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
|
||||
|
||||
#define CONFIG_SENSOR_QCIF_FPS_FIXED_1 15
|
||||
#define CONFIG_SENSOR_QVGA_FPS_FIXED_1 15
|
||||
#define CONFIG_SENSOR_CIF_FPS_FIXED_1 15
|
||||
#define CONFIG_SENSOR_VGA_FPS_FIXED_1 15
|
||||
#define CONFIG_SENSOR_SVGA_FPS_FIXED_1 15
|
||||
#define CONFIG_SENSOR_720P_FPS_FIXED_1 30
|
||||
|
||||
#endif //#ifdef CONFIG_VIDEO_RK29
|
||||
/*---------------- Camera Sensor Configuration Macro End------------------------*/
|
||||
#include "../../../drivers/media/video/rk29_camera.c"
|
||||
|
||||
@@ -97,6 +97,13 @@
|
||||
#define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0 RK29_CAM_POWERDNACTIVE_H
|
||||
#define CONFIG_SENSOR_FLASHACTIVE_LEVEL_0 RK29_CAM_FLASHACTIVE_L
|
||||
|
||||
#define CONFIG_SENSOR_QCIF_FPS_FIXED_0 15
|
||||
#define CONFIG_SENSOR_QVGA_FPS_FIXED_0 15
|
||||
#define CONFIG_SENSOR_CIF_FPS_FIXED_0 15
|
||||
#define CONFIG_SENSOR_VGA_FPS_FIXED_0 15
|
||||
#define CONFIG_SENSOR_SVGA_FPS_FIXED_0 15
|
||||
#define CONFIG_SENSOR_720P_FPS_FIXED_0 30
|
||||
|
||||
#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
|
||||
@@ -109,6 +116,14 @@
|
||||
#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
|
||||
|
||||
#define CONFIG_SENSOR_QCIF_FPS_FIXED_1 15
|
||||
#define CONFIG_SENSOR_QVGA_FPS_FIXED_1 15
|
||||
#define CONFIG_SENSOR_CIF_FPS_FIXED_1 15
|
||||
#define CONFIG_SENSOR_VGA_FPS_FIXED_1 15
|
||||
#define CONFIG_SENSOR_SVGA_FPS_FIXED_1 15
|
||||
#define CONFIG_SENSOR_720P_FPS_FIXED_1 30
|
||||
|
||||
#endif //#ifdef CONFIG_VIDEO_RK29
|
||||
/*---------------- Camera Sensor Configuration Macro End------------------------*/
|
||||
#include "../../../drivers/media/video/rk29_camera.c"
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#ifndef __ASM_ARCH_CAMERA_H_
|
||||
#define __ASM_ARCH_CAMERA_H_
|
||||
|
||||
#include <linux/videodev2.h>
|
||||
|
||||
#define RK29_CAM_DRV_NAME "rk29xx-camera"
|
||||
#define RK29_CAM_PLATFORM_DEV_ID 33
|
||||
|
||||
@@ -160,7 +162,7 @@ struct rk29camera_gpio_res {
|
||||
unsigned int gpio_flash;
|
||||
unsigned int gpio_flag;
|
||||
unsigned int gpio_init;
|
||||
unsigned int orientation;
|
||||
|
||||
const char *dev_name;
|
||||
};
|
||||
|
||||
@@ -169,12 +171,18 @@ struct rk29camera_mem_res {
|
||||
unsigned int start;
|
||||
unsigned int size;
|
||||
};
|
||||
struct rk29camera_info {
|
||||
const char *dev_name;
|
||||
unsigned int orientation;
|
||||
struct v4l2_frmivalenum fival[10];
|
||||
};
|
||||
struct rk29camera_platform_data {
|
||||
int (*io_init)(void);
|
||||
int (*io_deinit)(int sensor);
|
||||
int (*sensor_ioctrl)(struct device *dev,enum rk29camera_ioctrl_cmd cmd,int on);
|
||||
struct rk29camera_gpio_res gpio_res[2];
|
||||
struct rk29camera_mem_res meminfo;
|
||||
struct rk29camera_info info[2];
|
||||
};
|
||||
|
||||
struct rk29camera_platform_ioctl_cb {
|
||||
|
||||
@@ -96,8 +96,7 @@ static struct rk29camera_platform_data rk29_camera_platform_data = {
|
||||
.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,
|
||||
.orientation = CONFIG_SENSOR_ORIENTATION_0,
|
||||
.gpio_init = 0,
|
||||
.dev_name = SENSOR_DEVICE_NAME_0,
|
||||
}, {
|
||||
.gpio_reset = CONFIG_SENSOR_RESET_PIN_1,
|
||||
@@ -106,7 +105,6 @@ static struct rk29camera_platform_data rk29_camera_platform_data = {
|
||||
.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,
|
||||
.orientation = CONFIG_SENSOR_ORIENTATION_1,
|
||||
.dev_name = SENSOR_DEVICE_NAME_1,
|
||||
}
|
||||
},
|
||||
@@ -115,8 +113,17 @@ static struct rk29camera_platform_data rk29_camera_platform_data = {
|
||||
.name = "camera_ipp_mem",
|
||||
.start = MEM_CAMIPP_BASE,
|
||||
.size = MEM_CAMIPP_SIZE,
|
||||
}
|
||||
},
|
||||
#endif
|
||||
.info = {
|
||||
{
|
||||
.dev_name = SENSOR_DEVICE_NAME_0,
|
||||
.orientation = CONFIG_SENSOR_ORIENTATION_0,
|
||||
},{
|
||||
.dev_name = SENSOR_DEVICE_NAME_1,
|
||||
.orientation = CONFIG_SENSOR_ORIENTATION_1,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static int rk29_sensor_iomux(int pin)
|
||||
@@ -1216,7 +1223,7 @@ static int sensor_flash_default_cb (struct rk29camera_gpio_res *res, int on)
|
||||
|
||||
static int rk29_sensor_io_init(void)
|
||||
{
|
||||
int ret = 0, i;
|
||||
int ret = 0, i,j;
|
||||
unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
|
||||
unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;
|
||||
unsigned int camera_ioflag;
|
||||
@@ -1322,7 +1329,149 @@ static int rk29_sensor_io_init(void)
|
||||
|
||||
dprintk("%s....flash pin(%d) init success(0x%x) \n",__FUNCTION__,camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
|
||||
|
||||
}
|
||||
|
||||
|
||||
for (j=0; j<10; j++) {
|
||||
memset(&rk29_camera_platform_data.info[i].fival[j],0x00,sizeof(struct v4l2_frmivalenum));
|
||||
}
|
||||
j=0;
|
||||
if (strstr(rk29_camera_platform_data.info[i].dev_name,"_back")) {
|
||||
|
||||
#if CONFIG_SENSOR_QCIF_FPS_FIXED_0
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QCIF_FPS_FIXED_0;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 176;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 144;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_QVGA_FPS_FIXED_0
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QVGA_FPS_FIXED_0;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 320;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 240;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_CIF_FPS_FIXED_0
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_CIF_FPS_FIXED_0;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 352;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 288;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_VGA_FPS_FIXED_0
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_VGA_FPS_FIXED_0;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 640;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 480;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_SVGA_FPS_FIXED_0
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_SVGA_FPS_FIXED_0;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 800;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 600;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_720P_FPS_FIXED_0
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_720P_FPS_FIXED_0;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 1280;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 720;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
} else {
|
||||
#if CONFIG_SENSOR_QCIF_FPS_FIXED_1
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QCIF_FPS_FIXED_1;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 176;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 144;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_QVGA_FPS_FIXED_1
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_QVGA_FPS_FIXED_1;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 320;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 240;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_CIF_FPS_FIXED_1
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_CIF_FPS_FIXED_1;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 352;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 288;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_VGA_FPS_FIXED_1
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_VGA_FPS_FIXED_1;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 640;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 480;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_SVGA_FPS_FIXED_1
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_SVGA_FPS_FIXED_1;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 800;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 600;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_720P_FPS_FIXED_1
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.denominator = CONFIG_SENSOR_720P_FPS_FIXED_1;
|
||||
rk29_camera_platform_data.info[i].fival[j].discrete.numerator= 1;
|
||||
rk29_camera_platform_data.info[i].fival[j].index = 0;
|
||||
rk29_camera_platform_data.info[i].fival[j].pixel_format = V4L2_PIX_FMT_NV12;
|
||||
rk29_camera_platform_data.info[i].fival[j].width = 1280;
|
||||
rk29_camera_platform_data.info[i].fival[j].height = 720;
|
||||
rk29_camera_platform_data.info[i].fival[j].type = V4L2_FRMIVAL_TYPE_DISCRETE;
|
||||
j++;
|
||||
#endif
|
||||
}
|
||||
|
||||
continue;
|
||||
sensor_io_int_loop_end:
|
||||
rk29_sensor_io_deinit(i);
|
||||
|
||||
@@ -137,13 +137,18 @@ module_param(debug, int, S_IRUGO|S_IWUSR);
|
||||
//Configure Macro
|
||||
/*
|
||||
* Driver Version Note
|
||||
*v0.0.1 : this driver first support rk2918;
|
||||
*v0.0.2 : fix this driver support v4l2 format is V4L2_PIX_FMT_NV12 and V4L2_PIX_FMT_NV16,is not V4L2_PIX_FMT_YUV420
|
||||
*
|
||||
*v0.0.x : this driver is 2.6.32 kernel driver;
|
||||
*v0.1.x : this driver is 3.0.8 kernel driver;
|
||||
*
|
||||
*v0.x.1 : this driver first support rk2918;
|
||||
*v0.x.2 : fix this driver support v4l2 format is V4L2_PIX_FMT_NV12 and V4L2_PIX_FMT_NV16,is not V4L2_PIX_FMT_YUV420
|
||||
* and V4L2_PIX_FMT_YUV422P;
|
||||
*v0.0.3 : this driver support VIDIOC_ENUM_FRAMEINTERVALS;
|
||||
*v0.0.4 : this driver support digital zoom;
|
||||
*v0.x.3 : this driver support VIDIOC_ENUM_FRAMEINTERVALS;
|
||||
*v0.x.4 : this driver support digital zoom;
|
||||
*v0.x.5 : this driver support test framerate and query framerate from board file configuration;
|
||||
*/
|
||||
#define RK29_CAM_VERSION_CODE KERNEL_VERSION(0, 1, 3)
|
||||
#define RK29_CAM_VERSION_CODE KERNEL_VERSION(0, 1, 5)
|
||||
|
||||
/* limit to rk29 hardware capabilities */
|
||||
#define RK29_CAM_BUS_PARAM (SOCAM_MASTER |\
|
||||
@@ -1532,10 +1537,10 @@ static int rk29_camera_querycap(struct soc_camera_host *ici,
|
||||
char orientation[5];
|
||||
|
||||
strlcpy(cap->card, dev_name(pcdev->icd->pdev), sizeof(cap->card));
|
||||
if (strcmp(dev_name(pcdev->icd->pdev), pcdev->pdata->gpio_res[0].dev_name) == 0) {
|
||||
sprintf(orientation,"-%d",pcdev->pdata->gpio_res[0].orientation);
|
||||
if (strcmp(dev_name(pcdev->icd->pdev), pcdev->pdata->info[0].dev_name) == 0) {
|
||||
sprintf(orientation,"-%d",pcdev->pdata->info[0].orientation);
|
||||
} else {
|
||||
sprintf(orientation,"-%d",pcdev->pdata->gpio_res[1].orientation);
|
||||
sprintf(orientation,"-%d",pcdev->pdata->info[1].orientation);
|
||||
}
|
||||
strcat(cap->card,orientation);
|
||||
cap->version = RK29_CAM_VERSION_CODE;
|
||||
@@ -1749,35 +1754,80 @@ int rk29_camera_enum_frameintervals(struct soc_camera_device *icd, struct v4l2_f
|
||||
struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
|
||||
struct rk29_camera_dev *pcdev = ici->priv;
|
||||
struct rk29_camera_frmivalenum *fival_list = NULL;
|
||||
int i,ret = 0;
|
||||
struct v4l2_frmivalenum *fival_head;
|
||||
int i,ret = 0,index;
|
||||
|
||||
for (i=0; i<2; i++) {
|
||||
if (pcdev->icd_frmival[i].icd == icd) {
|
||||
fival_list = pcdev->icd_frmival[i].fival_list;
|
||||
}
|
||||
}
|
||||
|
||||
if (fival_list != NULL) {
|
||||
i = 0;
|
||||
while (fival_list != NULL) {
|
||||
if ((fival->pixel_format == fival_list->fival.pixel_format)
|
||||
&& (fival->height == fival_list->fival.height)
|
||||
&& (fival->width == fival_list->fival.width)) {
|
||||
if (i == fival->index)
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
fival_list = fival_list->nxt;
|
||||
index = fival->index & 0x00ffffff;
|
||||
if ((fival->index & 0xff000000) == 0xff000000) { /* ddl@rock-chips.com: detect framerate */
|
||||
for (i=0; i<2; i++) {
|
||||
if (pcdev->icd_frmival[i].icd == icd) {
|
||||
fival_list = pcdev->icd_frmival[i].fival_list;
|
||||
}
|
||||
}
|
||||
|
||||
if ((i==fival->index) && (fival_list != NULL)) {
|
||||
memcpy(fival, &fival_list->fival, sizeof(struct v4l2_frmivalenum));
|
||||
if (fival_list != NULL) {
|
||||
i = 0;
|
||||
while (fival_list != NULL) {
|
||||
if ((fival->pixel_format == fival_list->fival.pixel_format)
|
||||
&& (fival->height == fival_list->fival.height)
|
||||
&& (fival->width == fival_list->fival.width)) {
|
||||
if (i == index)
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
fival_list = fival_list->nxt;
|
||||
}
|
||||
|
||||
if ((i==index) && (fival_list != NULL)) {
|
||||
memcpy(fival, &fival_list->fival, sizeof(struct v4l2_frmivalenum));
|
||||
} else {
|
||||
ret = -EINVAL;
|
||||
}
|
||||
} else {
|
||||
RK29CAMERA_TR("%s: fival_list is NULL\n",__FUNCTION__);
|
||||
ret = -EINVAL;
|
||||
}
|
||||
} else {
|
||||
RK29CAMERA_TR("%s: fival_list is NULL\n",__FUNCTION__);
|
||||
ret = -EINVAL;
|
||||
if (strcmp(dev_name(pcdev->icd->pdev),pcdev->pdata->info[0].dev_name) == 0) {
|
||||
fival_head = pcdev->pdata->info[0].fival;
|
||||
} else {
|
||||
fival_head = pcdev->pdata->info[1].fival;
|
||||
}
|
||||
i = 0;
|
||||
while (fival_head->width && fival_head->height) {
|
||||
if ((fival->pixel_format == fival_head->pixel_format)
|
||||
&& (fival->height == fival_head->height)
|
||||
&& (fival->width == fival_head->width)) {
|
||||
if (i == index) {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
fival_head++;
|
||||
}
|
||||
|
||||
if ((i == index) && (fival->height == fival_head->height) && (fival->width == fival_head->width)) {
|
||||
memcpy(fival, fival_head, sizeof(struct v4l2_frmivalenum));
|
||||
RK29CAMERA_DG("%s %dx%d@%c%c%c%c framerate : %d/%d\n", dev_name(&rk29_camdev_info_ptr->icd->dev),
|
||||
fival->width, fival->height,
|
||||
fival->pixel_format & 0xFF, (fival->pixel_format >> 8) & 0xFF,
|
||||
(fival->pixel_format >> 16) & 0xFF, (fival->pixel_format >> 24),
|
||||
fival->discrete.denominator,fival->discrete.numerator);
|
||||
} else {
|
||||
if (index == 0)
|
||||
RK29CAMERA_TR("%s have not catch %d%d@%c%c%c%c index(%d) framerate\n",dev_name(&rk29_camdev_info_ptr->icd->dev),
|
||||
fival->width,fival->height,
|
||||
fival->pixel_format & 0xFF, (fival->pixel_format >> 8) & 0xFF,
|
||||
(fival->pixel_format >> 16) & 0xFF, (fival->pixel_format >> 24),
|
||||
index);
|
||||
else
|
||||
RK29CAMERA_DG("%s have not catch %d%d@%c%c%c%c index(%d) framerate\n",dev_name(&rk29_camdev_info_ptr->icd->dev),
|
||||
fival->width,fival->height,
|
||||
fival->pixel_format & 0xFF, (fival->pixel_format >> 8) & 0xFF,
|
||||
(fival->pixel_format >> 16) & 0xFF, (fival->pixel_format >> 24),
|
||||
index);
|
||||
ret = -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user