mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 11:50:43 +09:00
media: rockchip: ispp: add trigger mode ioctl
sync trigger on/off status with user Change-Id: Ifc567cc760f5fc106644ce80a6a96c7c5fc1afd2 Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -405,6 +405,9 @@ static long rkispp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
case RKISPP_CMD_GET_TNRBUF_FD:
|
||||
ret = rkispp_get_tnrbuf_fd(ispp_dev, (struct rkispp_buf_idxfd *)arg);
|
||||
break;
|
||||
case RKISPP_CMD_TRIGGER_MODE:
|
||||
rkispp_set_trigger_mode(ispp_dev, (struct rkispp_trigger_mode *)arg);
|
||||
break;
|
||||
default:
|
||||
ret = -ENOIOCTLCMD;
|
||||
}
|
||||
@@ -421,6 +424,7 @@ static long rkispp_compat_ioctl32(struct v4l2_subdev *sd,
|
||||
struct rkispp_fecbuf_size fecsize;
|
||||
struct rkispp_tnr_inf tnr_inf;
|
||||
struct rkispp_buf_idxfd idxfd;
|
||||
struct rkispp_trigger_mode t_mode;
|
||||
long ret = 0;
|
||||
|
||||
if (!up)
|
||||
@@ -447,6 +451,11 @@ static long rkispp_compat_ioctl32(struct v4l2_subdev *sd,
|
||||
if (!ret)
|
||||
ret = copy_to_user(up, &idxfd, sizeof(idxfd));
|
||||
break;
|
||||
case RKISPP_CMD_TRIGGER_MODE:
|
||||
ret = copy_from_user(&t_mode, up, sizeof(t_mode));
|
||||
if (!ret)
|
||||
ret = rkispp_ioctl(sd, cmd, &t_mode);
|
||||
break;
|
||||
default:
|
||||
ret = -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
@@ -588,6 +588,7 @@ static void tnr_free_buf(struct rkispp_device *dev)
|
||||
rkispp_free_buffer(dev, &vdev->tnr.buf.iir + i);
|
||||
|
||||
vdev->tnr.is_but_init = false;
|
||||
vdev->tnr.is_trigger = false;
|
||||
}
|
||||
|
||||
static int tnr_init_buf(struct rkispp_device *dev,
|
||||
@@ -2699,7 +2700,7 @@ static void tnr_work_event(struct rkispp_device *dev,
|
||||
if (vdev->tnr.cur_wr) {
|
||||
struct rkispp_tnr_inf tnr_inf;
|
||||
|
||||
if (!vdev->tnr.cur_wr->is_move_judge) {
|
||||
if (!vdev->tnr.cur_wr->is_move_judge || !vdev->tnr.is_trigger) {
|
||||
/* tnr write buf to nr */
|
||||
rkispp_module_work_event(dev, vdev->tnr.cur_wr, NULL,
|
||||
ISPP_MODULE_NR, is_isr);
|
||||
@@ -3027,6 +3028,15 @@ void rkispp_sendbuf_to_nr(struct rkispp_device *dev,
|
||||
spin_unlock_irqrestore(&vdev->tnr.buf_lock, lock_flags);
|
||||
}
|
||||
|
||||
void rkispp_set_trigger_mode(struct rkispp_device *dev,
|
||||
struct rkispp_trigger_mode *mode)
|
||||
{
|
||||
struct rkispp_stream_vdev *vdev = &dev->stream_vdev;
|
||||
|
||||
if (mode->module & ISPP_MODULE_TNR)
|
||||
vdev->tnr.is_trigger = mode->on;
|
||||
}
|
||||
|
||||
void rkispp_module_work_event(struct rkispp_device *dev,
|
||||
void *buf_rd, void *buf_wr,
|
||||
u32 module, bool is_isr)
|
||||
|
||||
@@ -103,6 +103,7 @@ struct tnr_module {
|
||||
bool is_end;
|
||||
bool is_3to1;
|
||||
bool is_but_init;
|
||||
bool is_trigger;
|
||||
};
|
||||
|
||||
struct nr_module {
|
||||
@@ -231,6 +232,8 @@ struct rkispp_stream_vdev {
|
||||
int rkispp_get_tnrbuf_fd(struct rkispp_device *dev, struct rkispp_buf_idxfd *idxfd);
|
||||
void rkispp_sendbuf_to_nr(struct rkispp_device *dev,
|
||||
struct rkispp_tnr_inf *tnr_inf);
|
||||
void rkispp_set_trigger_mode(struct rkispp_device *dev,
|
||||
struct rkispp_trigger_mode *mode);
|
||||
void rkispp_module_work_event(struct rkispp_device *dev,
|
||||
void *buf_rd, void *buf_wr,
|
||||
u32 module, bool is_isr);
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
|
||||
#define TNR_BUF_IDXFD_NUM 64
|
||||
|
||||
/************VIDIOC_PRIVATE*************/
|
||||
#define RKISPP_CMD_GET_FECBUF_INFO \
|
||||
_IOR('V', BASE_VIDIOC_PRIVATE + 0, struct rkispp_fecbuf_info)
|
||||
|
||||
@@ -98,6 +99,10 @@
|
||||
#define RKISPP_CMD_GET_TNRBUF_FD \
|
||||
_IOR('V', BASE_VIDIOC_PRIVATE + 12, struct rkispp_buf_idxfd)
|
||||
|
||||
#define RKISPP_CMD_TRIGGER_MODE \
|
||||
_IOW('V', BASE_VIDIOC_PRIVATE + 13, struct rkispp_trigger_mode)
|
||||
|
||||
/************EVENT_PRIVATE**************/
|
||||
#define RKISPP_V4L2_EVENT_TNR_COMPLETE \
|
||||
(V4L2_EVENT_PRIVATE_START + 3)
|
||||
|
||||
@@ -129,6 +134,11 @@ struct rkispp_buf_idxfd {
|
||||
s32 dmafd[TNR_BUF_IDXFD_NUM];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct rkispp_trigger_mode {
|
||||
u32 module;
|
||||
u32 on;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct rkispp_tnr_config {
|
||||
u8 opty_en;
|
||||
u8 optc_en;
|
||||
|
||||
Reference in New Issue
Block a user