mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 22:14:04 +02:00
media: rockchip: vicap: support measuring luma in normal mode
Signed-off-by: Xu Hongfei <xuhf@rock-chips.com> Change-Id: I5e36c03f46bd3362e288e3a3332caf412afe4a7b
This commit is contained in:
parent
ce801a9bb6
commit
489cae173f
|
|
@ -1686,13 +1686,15 @@ static void rkcif_do_cru_reset(struct rkcif_device *dev)
|
|||
|
||||
unsigned int val, i;
|
||||
|
||||
if (dev->luma_vdev.enable)
|
||||
rkcif_stop_luma(&dev->luma_vdev);
|
||||
|
||||
if (dev->hdr.mode != NO_HDR) {
|
||||
if (dev->chip_id == CHIP_RK1808_CIF) {
|
||||
val = rkcif_read_register(dev, CIF_REG_MIPI_WATER_LINE);
|
||||
val |= CIF_MIPI_LVDS_SW_DMA_IDLE_RK1808;
|
||||
rkcif_write_register(dev, CIF_REG_MIPI_WATER_LINE, val);
|
||||
} else {
|
||||
rkcif_stop_luma(&dev->luma_vdev);
|
||||
val = rkcif_read_register(dev, CIF_REG_MIPI_LVDS_CTRL);
|
||||
val |= CIF_MIPI_LVDS_SW_DMA_IDLE;
|
||||
rkcif_write_register(dev, CIF_REG_MIPI_LVDS_CTRL, val);
|
||||
|
|
@ -2303,7 +2305,12 @@ static int rkcif_start_streaming(struct vb2_queue *queue, unsigned int count)
|
|||
goto stop_stream;
|
||||
}
|
||||
|
||||
if (dev->hdr.mode == HDR_X2) {
|
||||
if (dev->hdr.mode == NO_HDR) {
|
||||
if (dev->stream[RKCIF_STREAM_MIPI_ID0].state == RKCIF_STATE_STREAMING) {
|
||||
rkcif_start_luma(&dev->luma_vdev,
|
||||
dev->stream[RKCIF_STREAM_MIPI_ID0].cif_fmt_in);
|
||||
}
|
||||
} else if (dev->hdr.mode == HDR_X2) {
|
||||
if (dev->stream[RKCIF_STREAM_MIPI_ID0].state == RKCIF_STATE_STREAMING &&
|
||||
dev->stream[RKCIF_STREAM_MIPI_ID1].state == RKCIF_STATE_STREAMING) {
|
||||
rkcif_start_luma(&dev->luma_vdev,
|
||||
|
|
@ -3793,7 +3800,7 @@ static void rkcif_update_stream(struct rkcif_device *cif_dev,
|
|||
|
||||
if (cif_dev->chip_id == CHIP_RV1126_CIF ||
|
||||
cif_dev->chip_id == CHIP_RV1126_CIF_LITE)
|
||||
rkcif_luma_isr(&cif_dev->luma_vdev, mipi_id);
|
||||
rkcif_luma_isr(&cif_dev->luma_vdev, mipi_id, stream->frame_idx);
|
||||
|
||||
if (active_buf) {
|
||||
vb_done = &active_buf->vb;
|
||||
|
|
|
|||
|
|
@ -291,10 +291,9 @@ static void rkcif_luma_readout_task(unsigned long data)
|
|||
}
|
||||
}
|
||||
|
||||
void rkcif_luma_isr(struct rkcif_luma_vdev *luma_vdev, int mipi_id)
|
||||
void rkcif_luma_isr(struct rkcif_luma_vdev *luma_vdev, int mipi_id, u32 frame_id)
|
||||
{
|
||||
u8 hdr_mode = luma_vdev->cifdev->hdr.mode;
|
||||
unsigned int cur_frame_id = rkcif_get_sof(luma_vdev->cifdev);
|
||||
enum rkcif_luma_frm_mode frm_mode;
|
||||
bool send_task;
|
||||
u32 i, value;
|
||||
|
|
@ -304,6 +303,9 @@ void rkcif_luma_isr(struct rkcif_luma_vdev *luma_vdev, int mipi_id)
|
|||
goto unlock;
|
||||
|
||||
switch (hdr_mode) {
|
||||
case NO_HDR:
|
||||
frm_mode = RKCIF_LUMA_ONEFRM;
|
||||
break;
|
||||
case HDR_X2:
|
||||
frm_mode = RKCIF_LUMA_TWOFRM;
|
||||
break;
|
||||
|
|
@ -364,7 +366,7 @@ void rkcif_luma_isr(struct rkcif_luma_vdev *luma_vdev, int mipi_id)
|
|||
if (send_task) {
|
||||
luma_vdev->work.readout = RKCIF_READOUT_LUMA;
|
||||
luma_vdev->work.timestamp = ktime_get_ns();
|
||||
luma_vdev->work.frame_id = cur_frame_id;
|
||||
luma_vdev->work.frame_id = frame_id;
|
||||
|
||||
if (frm_mode == RKCIF_LUMA_THREEFRM)
|
||||
luma_vdev->work.meas_type = ISP2X_RAW0_Y_STATE | ISP2X_RAW1_Y_STATE |
|
||||
|
|
@ -425,11 +427,13 @@ void rkcif_start_luma(struct rkcif_luma_vdev *luma_vdev, const struct cif_input_
|
|||
|
||||
rkcif_write_register(luma_vdev->cifdev, CIF_REG_Y_STAT_CONTROL,
|
||||
SW_Y_STAT_BAYER_TYPE(bayer) | SW_Y_STAT_EN);
|
||||
luma_vdev->enable = true;
|
||||
}
|
||||
|
||||
void rkcif_stop_luma(struct rkcif_luma_vdev *luma_vdev)
|
||||
{
|
||||
rkcif_write_register(luma_vdev->cifdev, CIF_REG_Y_STAT_CONTROL, 0x0);
|
||||
luma_vdev->enable = false;
|
||||
}
|
||||
|
||||
static void rkcif_init_luma_vdev(struct rkcif_luma_vdev *luma_vdev)
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ struct rkcif_luma_node {
|
|||
struct rkcif_luma_vdev {
|
||||
struct rkcif_luma_node vnode;
|
||||
struct rkcif_device *cifdev;
|
||||
bool enable;
|
||||
|
||||
spinlock_t irq_lock; /* tasklet queue lock */
|
||||
struct list_head stat;
|
||||
|
|
@ -71,7 +72,7 @@ void rkcif_start_luma(struct rkcif_luma_vdev *luma_vdev, const struct cif_input_
|
|||
|
||||
void rkcif_stop_luma(struct rkcif_luma_vdev *luma_vdev);
|
||||
|
||||
void rkcif_luma_isr(struct rkcif_luma_vdev *luma_vdev, int isp_stat);
|
||||
void rkcif_luma_isr(struct rkcif_luma_vdev *luma_vdev, int isp_stat, u32 frame_id);
|
||||
|
||||
int rkcif_register_luma_vdev(struct rkcif_luma_vdev *luma_vdev,
|
||||
struct v4l2_device *v4l2_dev,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user