/*****************************************************************************************
* camera devices
*author: ddl@rock-chips.com
- *****************************************************************************************/
-#if 1
-
+ *****************************************************************************************/
#define RK2818_CAM_POWER_PIN FPGA_PIO1_05//SPI_GPIO_P1_05
#define RK2818_CAM_RESET_PIN FPGA_PIO1_14//SPI_GPIO_P1_14
}
return 0;
}
-#else
-
- /*****************************************************************************************
- * camera devices
- *author: ddl@rock-chips.com
- *****************************************************************************************/
-#define RK2818_CAM_POWER_PIN SPI_GPIO_P1_05
-#define RK2818_CAM_RESET_PIN SPI_GPIO_P1_14
-static int rk28_sensor_init(void);
-static int rk28_sensor_deinit(void);
-
-struct rk28camera_platform_data rk28_camera_platform_data = {
- .init = rk28_sensor_init,
- .deinit = rk28_sensor_deinit,
- .gpio_res = {
- {
- .gpio_reset = RK2818_CAM_RESET_PIN,
- .gpio_power = RK2818_CAM_POWER_PIN,
- .gpio_flag = 0x03,
- .dev_name = "ov2655"
- }, {
- .gpio_reset = 0xFFFFFFFF,
- .gpio_power = 0xFFFFFFFF,
- .gpio_flag = 0x00,
- .dev_name = NULL
- }
- }
-};
-
-static int rk28_sensor_init(void)
-{
- int ret = 0, i;
- unsigned int camera_reset=0xffffffff,camera_power=0xffffffff, camera_ioflag;
-
- printk("\n%s....%d ******** ddl *********\n",__FUNCTION__,__LINE__);
-
- for (i=0; i<2; i++) {
- camera_reset = rk28_camera_platform_data.gpio_res[i].gpio_reset;
- camera_power = rk28_camera_platform_data.gpio_res[i].gpio_power;
- camera_ioflag = rk28_camera_platform_data.gpio_res[i].gpio_flag;
-
- if (camera_power != 0xffffffff) {
- if (camera_ioflag & 0x02) { /* ddl@rock-chips.com : fpga io extern */
- spi_gpio_set_pinlevel(camera_power, SPI_GPIO_LOW);
- spi_gpio_set_pindirection(camera_power, SPI_GPIO_OUT);
- } else {
- ret = gpio_request(camera_power, "camera power");
- if (ret)
- continue;
-
- gpio_set_value(camera_reset, 1);
- gpio_direction_output(camera_power, 0);
- }
- }
-
- if (camera_reset != 0xffffffff) {
- if (camera_ioflag & 0x01) {
- spi_gpio_set_pinlevel(camera_reset, SPI_GPIO_HIGH);
- spi_gpio_set_pindirection(camera_reset, SPI_GPIO_OUT);
- } else {
- ret = gpio_request(camera_reset, "camera reset");
- if (ret) {
- if (camera_power != 0xffffffff)
- gpio_free(camera_power);
-
- continue;
- }
- gpio_direction_output(camera_reset, 0);
- gpio_set_value(camera_reset, 1);
- }
- }
- }
-
- return 0;
-}
-
-static int rk28_sensor_deinit(void)
-{
- unsigned int i;
- unsigned int camera_reset=0xffffffff,camera_power=0xffffffff,camera_ioflag;
-
- printk("\n%s....%d ******** ddl *********\n",__FUNCTION__,__LINE__);
-
- for (i=0; i<2; i++) {
- camera_reset = rk28_camera_platform_data.gpio_res[i].gpio_reset;
- camera_power = rk28_camera_platform_data.gpio_res[i].gpio_power;
- camera_ioflag = rk28_camera_platform_data.gpio_res[i].gpio_flag;
-
- if (camera_power != 0xffffffff){
- if ((camera_ioflag & 0x02) == 0) {
- gpio_direction_input(camera_power);
- gpio_free(camera_power);
- } else {
- spi_gpio_set_pinlevel(camera_power, SPI_GPIO_HIGH);
- spi_gpio_set_pindirection(camera_power, SPI_GPIO_IN);
- }
- }
-
- if (camera_reset != 0xffffffff) {
- if ((camera_ioflag & 0x01) == 0) {
- gpio_direction_input(camera_reset);
- gpio_free(camera_reset);
- } else {
- spi_gpio_set_pinlevel(camera_reset, SPI_GPIO_HIGH);
- spi_gpio_set_pindirection(camera_reset, SPI_GPIO_IN);
- }
- }
- }
-
- return 0;
-}
-
-
-static int rk28_sensor_power(struct device *dev, int on)
-{
- unsigned int camera_reset=0xffffffff,camera_power=0xffffffff,camera_ioflag;
-
- if(rk28_camera_platform_data.gpio_res[0].dev_name && (strcmp(rk28_camera_platform_data.gpio_res[0].dev_name, dev_name(dev)) == 0)) {
- camera_reset = rk28_camera_platform_data.gpio_res[0].gpio_reset;
- camera_power = rk28_camera_platform_data.gpio_res[0].gpio_power;
- camera_ioflag = rk28_camera_platform_data.gpio_res[0].gpio_flag;
- } else if (rk28_camera_platform_data.gpio_res[1].dev_name && (strcmp(rk28_camera_platform_data.gpio_res[1].dev_name, dev_name(dev)) == 0)) {
- camera_reset = rk28_camera_platform_data.gpio_res[1].gpio_reset;
- camera_power = rk28_camera_platform_data.gpio_res[1].gpio_power;
- camera_ioflag = rk28_camera_platform_data.gpio_res[1].gpio_flag;
- }
-
- if (camera_reset != 0xffffffff) {
- if (camera_ioflag & 0x01) {
- spi_gpio_set_pinlevel(camera_reset, on);
- } else {
- gpio_set_value(camera_reset, on);
- }
- printk("\n%s..%s..ResetPin=%d ..PinLevel = %x ******** ddl *********\n",__FUNCTION__,dev_name(dev),camera_reset, on);
- }
- if (camera_power != 0xffffffff) {
- if (camera_ioflag & 0x02) {
- spi_gpio_set_pinlevel(camera_power, !on);
- } else {
- gpio_set_value(camera_power, !on);
- }
- printk("\n%s..%s..PowerPin=%d ..PinLevel = %x ******** ddl *********\n",__FUNCTION__,dev_name(dev), camera_power, !on);
- }
- if (camera_reset != 0xffffffff) {
- mdelay(3);
- if (camera_ioflag & 0x01) {
- spi_gpio_set_pinlevel(camera_reset,on);
- } else {
- gpio_set_value(camera_reset,on);
- }
- printk("\n%s..%s..ResetPin= %d..PinLevel = %x ******** ddl *********\n",__FUNCTION__,dev_name(dev), camera_reset, on);
- }
-
- mdelay(3000);
-
- return 0;
-}
-
-
-#endif
#define OV2655_IIC_ADDR 0x60
static struct i2c_board_info rk2818_i2c_cam_info[] = {
dev_dbg(&icd->dev, "S_FMT(%c%c%c%c, %ux%u)\n",
pixfmtstr(pix->pixelformat), pix->width, pix->height);
-
+
+ printk("%s..%d.. ********ddl*******\n",__FUNCTION__, __LINE__);
/* We always call try_fmt() before set_fmt() or set_crop() */
ret = ici->ops->try_fmt(icd, f);
if (ret < 0)
module_put(ici->ops->owner);
+ printk("icf->vb_vidq.bufs[0] = 0x%x\n",(int)(icf->vb_vidq.bufs[0]));
+
vfree(icf);
dev_dbg(&icd->dev, "camera device close\n");
{
struct soc_camera_file *icf = file->private_data;
struct soc_camera_device *icd = icf->icd;
- int ret;
+ int ret,i;
WARN_ON(priv != file->private_data);
mutex_lock(&icf->vb_vidq.vb_lock);
+ #if 0
if (icf->vb_vidq.bufs[0]) {
dev_err(&icd->dev, "S_FMT denied: queue initialised\n");
ret = -EBUSY;
goto unlock;
}
+ #else
+
+ /* ddl@rock-chips.com :
+ Judge queue initialised by Judge icf->vb_vidq.bufs[0] whether is NULL , it is error. */
+
+ i = 0;
+ while (icf->vb_vidq.bufs[i]) {
+ if (icf->vb_vidq.bufs[i]->state != VIDEOBUF_NEEDS_INIT) {
+ dev_err(&icd->dev, "S_FMT denied: queue initialised\n");
+ ret = -EBUSY;
+ goto unlock;
+ }
+ i++;
+ }
+
+ #endif
ret = soc_camera_set_fmt(icf, f);