mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
media: i2c: jx_f37 support mirror/flip
Signed-off-by: Zefa Chen <zefa.chen@rock-chips.com> Change-Id: Ibc876b49b76055396d4ee64a583b13965d76f344
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
* jx_f37 driver
|
||||
*
|
||||
* Copyright (C) 2020 Rockchip Electronics Co., Ltd.
|
||||
* v0.0x01.0x04 support mirror/flip
|
||||
*/
|
||||
|
||||
#define DEBUG
|
||||
@@ -24,7 +25,7 @@
|
||||
#include <linux/version.h>
|
||||
#include <linux/rk-preisp.h>
|
||||
|
||||
#define DRIVER_VERSION KERNEL_VERSION(0, 0x01, 0x03)
|
||||
#define DRIVER_VERSION KERNEL_VERSION(0, 0x01, 0x04)
|
||||
|
||||
#ifndef V4L2_CID_DIGITAL_GAIN
|
||||
#define V4L2_CID_DIGITAL_GAIN V4L2_CID_GAIN
|
||||
@@ -69,6 +70,8 @@
|
||||
#define JX_F37_FETCH_HIGH_BYTE_VTS(VAL) (((VAL) >> 8) & 0xFF) /* 8-15 Bits */
|
||||
#define JX_F37_FETCH_LOW_BYTE_VTS(VAL) ((VAL) & 0xFF) /* 0-7 Bits */
|
||||
|
||||
#define JX_F37_FLIP_MIRROR_REG 0x12
|
||||
|
||||
#define REG_NULL 0xFF
|
||||
#define REG_DELAY 0xFE
|
||||
|
||||
@@ -1241,6 +1244,7 @@ static int jx_f37_set_ctrl(struct v4l2_ctrl *ctrl)
|
||||
struct jx_f37, ctrl_handler);
|
||||
struct i2c_client *client = jx_f37->client;
|
||||
s64 max;
|
||||
u8 val = 0;
|
||||
int ret = 0;
|
||||
|
||||
/* Propagate change of current control to all related controls */
|
||||
@@ -1276,6 +1280,26 @@ static int jx_f37_set_ctrl(struct v4l2_ctrl *ctrl)
|
||||
break;
|
||||
case V4L2_CID_DIGITAL_GAIN:
|
||||
break;
|
||||
case V4L2_CID_HFLIP:
|
||||
ret = jx_f37_read_reg(jx_f37->client, JX_F37_FLIP_MIRROR_REG,
|
||||
&val);
|
||||
if (ctrl->val)
|
||||
val |= BIT(5);
|
||||
else
|
||||
val &= ~BIT(5);
|
||||
ret |= jx_f37_write_reg(jx_f37->client, JX_F37_FLIP_MIRROR_REG,
|
||||
val);
|
||||
break;
|
||||
case V4L2_CID_VFLIP:
|
||||
ret = jx_f37_read_reg(jx_f37->client, JX_F37_FLIP_MIRROR_REG,
|
||||
&val);
|
||||
if (ctrl->val)
|
||||
val |= BIT(4);
|
||||
else
|
||||
val &= ~BIT(4);
|
||||
ret |= jx_f37_write_reg(jx_f37->client, JX_F37_FLIP_MIRROR_REG,
|
||||
val);
|
||||
break;
|
||||
case V4L2_CID_VBLANK:
|
||||
dev_dbg(&client->dev, "set vblank: val: %d\n", ctrl->val);
|
||||
ret |= jx_f37_write_reg(jx_f37->client, JX_F37_REG_HIGH_VTS,
|
||||
@@ -1345,6 +1369,12 @@ static int jx_f37_initialize_controls(struct jx_f37 *jx_f37)
|
||||
ANALOG_GAIN_MAX, ANALOG_GAIN_STEP,
|
||||
ANALOG_GAIN_DEFAULT);
|
||||
|
||||
v4l2_ctrl_new_std(handler, &jx_f37_ctrl_ops,
|
||||
V4L2_CID_HFLIP, 0, 1, 1, 0);
|
||||
|
||||
v4l2_ctrl_new_std(handler, &jx_f37_ctrl_ops,
|
||||
V4L2_CID_VFLIP, 0, 1, 1, 0);
|
||||
|
||||
if (handler->error) {
|
||||
ret = handler->error;
|
||||
dev_err(&jx_f37->client->dev,
|
||||
|
||||
Reference in New Issue
Block a user