camera: rockchip: support set flip api

Change-Id: Ie1aea078e81a317bb938d2112902111ebbfe5fb8
Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
This commit is contained in:
Hu Kejun
2018-01-16 16:45:24 +08:00
committed by Tao Huang
parent 1b195eb6be
commit a07f02ef62
12 changed files with 182 additions and 18 deletions

View File

@@ -51,8 +51,6 @@ void aptina_camera_module_reset(
cam_mod->exp_config.auto_exp = false;
cam_mod->exp_config.auto_gain = false;
cam_mod->wb_config.auto_wb = false;
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->auto_adjust_fps = true;
cam_mod->rotation = 0;
cam_mod->ctrl_updt = 0;
@@ -1153,12 +1151,14 @@ int aptina_camera_module_s_ext_ctrls(
cam_mod->hflip = true;
else
cam_mod->hflip = false;
cam_mod->flip_flg = true;
break;
case V4L2_CID_VFLIP:
if (ctrl->value)
cam_mod->vflip = true;
else
cam_mod->vflip = false;
cam_mod->flip_flg = true;
break;
default:
pltfrm_camera_module_pr_warn(&cam_mod->sd,
@@ -1329,7 +1329,22 @@ long aptina_camera_module_ioctl(struct v4l2_subdev *sd,
int aptina_camera_module_get_flip_mirror(
struct aptina_camera_module *cam_mod)
{
return pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
int mode = 0;
if (!cam_mod->flip_flg)
return -1;
if (cam_mod->hflip)
mode |= APTINA_MIRROR_BIT_MASK;
else
mode &= ~APTINA_MIRROR_BIT_MASK;
if (cam_mod->vflip)
mode |= APTINA_FLIP_BIT_MASK;
else
mode &= ~APTINA_FLIP_BIT_MASK;
return mode;
}
int aptina_camera_module_enum_frameintervals(
@@ -1425,9 +1440,13 @@ int aptina_camera_module_init(struct aptina_camera_module *cam_mod,
struct aptina_camera_module_custom_config *custom)
{
int ret = 0;
int mode = 0;
pltfrm_camera_module_pr_debug(&cam_mod->sd, "\n");
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->flip_flg = false;
aptina_camera_module_reset(cam_mod);
if (IS_ERR_OR_NULL(custom->start_streaming) ||
@@ -1455,6 +1474,13 @@ int aptina_camera_module_init(struct aptina_camera_module *cam_mod,
goto err;
}
mode = pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
if (mode != -1) {
cam_mod->hflip = mode & APTINA_MIRROR_BIT_MASK ? true : false;
cam_mod->vflip = mode & APTINA_FLIP_BIT_MASK ? true : false;
cam_mod->flip_flg = true;
}
return 0;
err:
pltfrm_camera_module_pr_err(&cam_mod->sd,

View File

@@ -189,6 +189,7 @@ struct aptina_camera_module {
bool frm_intrvl_valid;
bool hflip;
bool vflip;
bool flip_flg;
u32 rotation;
void *pltfm_data;
bool inited;

View File

@@ -45,8 +45,6 @@ static void gc_camera_module_reset(
cam_mod->exp_config.auto_exp = false;
cam_mod->exp_config.auto_gain = false;
cam_mod->wb_config.auto_wb = false;
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->auto_adjust_fps = true;
cam_mod->rotation = 0;
cam_mod->ctrl_updt = 0;
@@ -931,12 +929,14 @@ int gc_camera_module_s_ext_ctrls(
cam_mod->hflip = true;
else
cam_mod->hflip = false;
cam_mod->flip_flg = true;
break;
case V4L2_CID_VFLIP:
if (ctrl->value)
cam_mod->vflip = true;
else
cam_mod->vflip = false;
cam_mod->flip_flg = true;
break;
default:
pltfrm_camera_module_pr_warn(&cam_mod->sd,
@@ -1107,7 +1107,22 @@ long gc_camera_module_ioctl(struct v4l2_subdev *sd,
int gc_camera_module_get_flip_mirror(
struct gc_camera_module *cam_mod)
{
return pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
int mode = 0;
if (!cam_mod->flip_flg)
return -1;
if (cam_mod->hflip)
mode |= GC_MIRROR_BIT_MASK;
else
mode &= ~GC_MIRROR_BIT_MASK;
if (cam_mod->vflip)
mode |= GC_FLIP_BIT_MASK;
else
mode &= ~GC_FLIP_BIT_MASK;
return mode;
}
/* ======================================================================== */
@@ -1224,9 +1239,13 @@ int gc_camera_module_init(struct gc_camera_module *cam_mod,
struct gc_camera_module_custom_config *custom)
{
int ret = 0;
int mode = 0;
pltfrm_camera_module_pr_debug(&cam_mod->sd, "\n");
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->flip_flg = false;
gc_camera_module_reset(cam_mod);
if (IS_ERR_OR_NULL(custom->start_streaming) ||
@@ -1254,6 +1273,13 @@ int gc_camera_module_init(struct gc_camera_module *cam_mod,
goto err;
}
mode = pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
if (mode != -1) {
cam_mod->hflip = mode & GC_MIRROR_BIT_MASK ? true : false;
cam_mod->vflip = mode & GC_FLIP_BIT_MASK ? true : false;
cam_mod->flip_flg = true;
}
/*
if (custom->check_camera_id) {
gc_camera_module_s_power(&cam_mod->sd, 1);

View File

@@ -202,6 +202,7 @@ struct gc_camera_module {
bool frm_intrvl_valid;
bool hflip;
bool vflip;
bool flip_flg;
u32 rotation;
void *pltfm_data;
bool inited;

View File

@@ -45,8 +45,6 @@ static void imx_camera_module_reset(
cam_mod->exp_config.auto_exp = false;
cam_mod->exp_config.auto_gain = false;
cam_mod->wb_config.auto_wb = false;
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->auto_adjust_fps = true;
cam_mod->rotation = 0;
cam_mod->ctrl_updt = 0;
@@ -910,12 +908,14 @@ int imx_camera_module_s_ext_ctrls(
cam_mod->hflip = true;
else
cam_mod->hflip = false;
cam_mod->flip_flg = true;
break;
case V4L2_CID_VFLIP:
if (ctrl->value)
cam_mod->vflip = true;
else
cam_mod->vflip = false;
cam_mod->flip_flg = true;
break;
default:
pltfrm_camera_module_pr_warn(&cam_mod->sd,
@@ -1103,7 +1103,22 @@ long imx_camera_module_ioctl(struct v4l2_subdev *sd,
int imx_camera_module_get_flip_mirror(
struct imx_camera_module *cam_mod)
{
return pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
int mode = 0;
if (!cam_mod->flip_flg)
return -1;
if (cam_mod->hflip)
mode |= IMX_MIRROR_BIT_MASK;
else
mode &= ~IMX_MIRROR_BIT_MASK;
if (cam_mod->vflip)
mode |= IMX_FLIP_BIT_MASK;
else
mode &= ~IMX_FLIP_BIT_MASK;
return mode;
}
/* ======================================================================== */
@@ -1200,9 +1215,13 @@ int imx_camera_module_init(struct imx_camera_module *cam_mod,
struct imx_camera_module_custom_config *custom)
{
int ret = 0;
int mode = 0;
pltfrm_camera_module_pr_debug(&cam_mod->sd, "\n");
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->flip_flg = false;
imx_camera_module_reset(cam_mod);
if (IS_ERR_OR_NULL(custom->start_streaming) ||
@@ -1229,6 +1248,13 @@ int imx_camera_module_init(struct imx_camera_module *cam_mod,
imx_camera_module_release(cam_mod);
goto err;
}
mode = pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
if (mode != -1) {
cam_mod->hflip = mode & IMX_MIRROR_BIT_MASK ? true : false;
cam_mod->vflip = mode & IMX_FLIP_BIT_MASK ? true : false;
cam_mod->flip_flg = true;
}
/*
if (custom->check_camera_id) {
imx_camera_module_s_power(&cam_mod->sd, 1);

View File

@@ -194,6 +194,7 @@ struct imx_camera_module {
bool frm_intrvl_valid;
bool hflip;
bool vflip;
bool flip_flg;
u32 rotation;
void *pltfm_data;
bool inited;

View File

@@ -45,8 +45,6 @@ static void ov_camera_module_reset(
cam_mod->exp_config.auto_exp = false;
cam_mod->exp_config.auto_gain = false;
cam_mod->wb_config.auto_wb = false;
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->auto_adjust_fps = true;
cam_mod->rotation = 0;
cam_mod->ctrl_updt = 0;
@@ -931,12 +929,14 @@ int ov_camera_module_s_ext_ctrls(
cam_mod->hflip = true;
else
cam_mod->hflip = false;
cam_mod->flip_flg = true;
break;
case V4L2_CID_VFLIP:
if (ctrl->value)
cam_mod->vflip = true;
else
cam_mod->vflip = false;
cam_mod->flip_flg = true;
break;
default:
pltfrm_camera_module_pr_warn(&cam_mod->sd,
@@ -1122,7 +1122,22 @@ long ov_camera_module_ioctl(struct v4l2_subdev *sd,
int ov_camera_module_get_flip_mirror(
struct ov_camera_module *cam_mod)
{
return pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
int mode = 0;
if (!cam_mod->flip_flg)
return -1;
if (cam_mod->hflip)
mode |= OV_MIRROR_BIT_MASK;
else
mode &= ~OV_MIRROR_BIT_MASK;
if (cam_mod->vflip)
mode |= OV_FLIP_BIT_MASK;
else
mode &= ~OV_FLIP_BIT_MASK;
return mode;
}
/* ======================================================================== */
@@ -1236,9 +1251,13 @@ int ov_camera_module_init(struct ov_camera_module *cam_mod,
struct ov_camera_module_custom_config *custom)
{
int ret = 0;
int mode = 0;
pltfrm_camera_module_pr_debug(&cam_mod->sd, "\n");
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->flip_flg = false;
ov_camera_module_reset(cam_mod);
if (IS_ERR_OR_NULL(custom->start_streaming) ||
@@ -1266,6 +1285,13 @@ int ov_camera_module_init(struct ov_camera_module *cam_mod,
goto err;
}
mode = pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
if (mode != -1) {
cam_mod->hflip = mode & OV_MIRROR_BIT_MASK ? true : false;
cam_mod->vflip = mode & OV_FLIP_BIT_MASK ? true : false;
cam_mod->flip_flg = true;
}
/*
if (custom->check_camera_id) {
ov_camera_module_s_power(&cam_mod->sd, 1);

View File

@@ -198,6 +198,7 @@ struct ov_camera_module {
bool frm_intrvl_valid;
bool hflip;
bool vflip;
bool flip_flg;
u32 rotation;
void *pltfm_data;
bool inited;

View File

@@ -51,8 +51,6 @@ void samsung_camera_module_reset(
cam_mod->exp_config.auto_exp = false;
cam_mod->exp_config.auto_gain = false;
cam_mod->wb_config.auto_wb = false;
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->auto_adjust_fps = true;
cam_mod->rotation = 0;
cam_mod->ctrl_updt = 0;
@@ -943,12 +941,14 @@ int samsung_camera_module_s_ext_ctrls(
cam_mod->hflip = true;
else
cam_mod->hflip = false;
cam_mod->flip_flg = true;
break;
case V4L2_CID_VFLIP:
if (ctrl->value)
cam_mod->vflip = true;
else
cam_mod->vflip = false;
cam_mod->flip_flg = true;
break;
default:
pltfrm_camera_module_pr_warn(&cam_mod->sd,
@@ -1134,7 +1134,22 @@ long samsung_camera_module_ioctl(struct v4l2_subdev *sd,
int samsung_camera_module_get_flip_mirror(
struct samsung_camera_module *cam_mod)
{
return pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
int mode = 0;
if (!cam_mod->flip_flg)
return -1;
if (cam_mod->hflip)
mode |= SAMSUNG_MIRROR_BIT_MASK;
else
mode &= ~SAMSUNG_MIRROR_BIT_MASK;
if (cam_mod->vflip)
mode |= SAMSUNG_FLIP_BIT_MASK;
else
mode &= ~SAMSUNG_FLIP_BIT_MASK;
return mode;
}
int samsung_camera_module_enum_frameintervals(
@@ -1232,9 +1247,13 @@ int samsung_camera_module_init(struct samsung_camera_module *cam_mod,
struct samsung_camera_module_custom_config *custom)
{
int ret = 0;
int mode = 0;
pltfrm_camera_module_pr_debug(&cam_mod->sd, "\n");
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->flip_flg = false;
samsung_camera_module_reset(cam_mod);
if (IS_ERR_OR_NULL(custom->start_streaming) ||
@@ -1262,6 +1281,13 @@ int samsung_camera_module_init(struct samsung_camera_module *cam_mod,
goto err;
}
mode = pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
if (mode != -1) {
cam_mod->hflip = mode & SAMSUNG_MIRROR_BIT_MASK ? true : false;
cam_mod->vflip = mode & SAMSUNG_FLIP_BIT_MASK ? true : false;
cam_mod->flip_flg = true;
}
return 0;
err:
pltfrm_camera_module_pr_err(&cam_mod->sd,

View File

@@ -194,6 +194,7 @@ struct samsung_camera_module {
bool frm_intrvl_valid;
bool hflip;
bool vflip;
bool flip_flg;
u32 rotation;
void *pltfm_data;
bool inited;

View File

@@ -49,8 +49,6 @@ static void xc9080_camera_module_reset(
cam_mod->exp_config.auto_exp = false;
cam_mod->exp_config.auto_gain = false;
cam_mod->wb_config.auto_wb = false;
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->auto_adjust_fps = true;
cam_mod->rotation = 0;
cam_mod->ctrl_updt = 0;
@@ -950,12 +948,14 @@ int xc9080_camera_module_s_ext_ctrls(
cam_mod->hflip = true;
else
cam_mod->hflip = false;
cam_mod->flip_flg = true;
break;
case V4L2_CID_VFLIP:
if (ctrl->value)
cam_mod->vflip = true;
else
cam_mod->vflip = false;
cam_mod->flip_flg = true;
break;
default:
pltfrm_camera_module_pr_warn(&cam_mod->sd,
@@ -1125,7 +1125,22 @@ long xc9080_camera_module_ioctl(struct v4l2_subdev *sd,
int xc9080_camera_module_get_flip_mirror(
struct xc9080_camera_module *cam_mod)
{
return pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
int mode = 0;
if (!cam_mod->flip_flg)
return -1;
if (cam_mod->hflip)
mode |= XC9080_MIRROR_BIT_MASK;
else
mode &= ~XC9080_MIRROR_BIT_MASK;
if (cam_mod->vflip)
mode |= XC9080_FLIP_BIT_MASK;
else
mode &= ~XC9080_FLIP_BIT_MASK;
return mode;
}
/* ======================================================================== */
@@ -1407,9 +1422,13 @@ int xc9080_camera_module_init(struct xc9080_camera_module *cam_mod,
struct xc9080_camera_module_custom_config *custom)
{
int ret = 0;
int mode = 0;
pltfrm_camera_module_pr_debug(&cam_mod->sd, "\n");
cam_mod->hflip = false;
cam_mod->vflip = false;
cam_mod->flip_flg = false;
xc9080_camera_module_reset(cam_mod);
if (IS_ERR_OR_NULL(custom->start_streaming) ||
@@ -1437,6 +1456,13 @@ int xc9080_camera_module_init(struct xc9080_camera_module *cam_mod,
goto err;
}
mode = pltfrm_camera_module_get_flip_mirror(&cam_mod->sd);
if (mode != -1) {
cam_mod->hflip = mode & XC9080_MIRROR_BIT_MASK ? true : false;
cam_mod->vflip = mode & XC9080_FLIP_BIT_MASK ? true : false;
cam_mod->flip_flg = true;
}
return 0;
err:
pltfrm_camera_module_pr_err(&cam_mod->sd,

View File

@@ -30,6 +30,8 @@
#define XC9080_CAMERA_MODULE_REG_TYPE_DATA_SINGLE \
PLTFRM_CAMERA_MODULE_REG_TYPE_DATA_SINGLE
#define xc9080_camera_module_reg pltfrm_camera_module_reg
#define XC9080_FLIP_BIT_MASK (1 << PLTFRM_CAMERA_MODULE_FLIP_BIT)
#define XC9080_MIRROR_BIT_MASK (1 << PLTFRM_CAMERA_MODULE_MIRROR_BIT)
#define XC9080_CAMERA_MODULE_CTRL_UPDT_GAIN 0x01
#define XC9080_CAMERA_MODULE_CTRL_UPDT_EXP_TIME 0x02
@@ -204,6 +206,7 @@ struct xc9080_camera_module {
bool frm_intrvl_valid;
bool hflip;
bool vflip;
bool flip_flg;
u32 rotation;
void *pltfm_data;
bool inited;