Skip to content

Commit ae854e6

Browse files
Dingxian Wenrkhuangtao
authored andcommitted
media: rockchip: hdmirx: check timing before start streaming
Signed-off-by: Dingxian Wen <[email protected]> Change-Id: Id0b830b09db4f18eb3b96606e4e8d6fdd95b44c2
1 parent d54e56d commit ae854e6

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ struct rk_hdmirx_dev {
208208
bool initialized;
209209
bool freq_qos_add;
210210
bool hdcp1x_enable;
211+
bool get_timing;
211212
u32 num_clks;
212213
u32 edid_blocks_written;
213214
u32 hpd_trigger_level;
@@ -1174,6 +1175,7 @@ static void hdmirx_format_change(struct rk_hdmirx_dev *hdmirx_dev)
11741175
&timings, false);
11751176
}
11761177

1178+
hdmirx_dev->get_timing = true;
11771179
v4l2_dbg(1, debug, v4l2_dev, "%s: queue res_chg_event\n", __func__);
11781180
v4l2_event_queue(&stream->vdev, &ev_src_chg);
11791181
}
@@ -1693,6 +1695,11 @@ static int hdmirx_start_streaming(struct vb2_queue *queue, unsigned int count)
16931695
struct v4l2_bt_timings *bt = &timings.bt;
16941696
int line_flag;
16951697

1698+
if (!hdmirx_dev->get_timing) {
1699+
v4l2_err(v4l2_dev, "Err, timing is invalid\n");
1700+
return 0;
1701+
}
1702+
16961703
mutex_lock(&hdmirx_dev->stream_lock);
16971704
stream->frame_idx = 0;
16981705
stream->line_flag_int_cnt = 0;
@@ -1892,6 +1899,7 @@ static void process_signal_change(struct rk_hdmirx_dev *hdmirx_dev)
18921899
FIFO_UNDERFLOW_INT_EN |
18931900
HDMIRX_AXI_ERROR_INT_EN, 0);
18941901
hdmirx_reset_dma(hdmirx_dev);
1902+
hdmirx_dev->get_timing = false;
18951903
schedule_delayed_work_on(hdmirx_dev->bound_cpu,
18961904
&hdmirx_dev->delayed_work_res_change,
18971905
msecs_to_jiffies(50));
@@ -2115,6 +2123,8 @@ static void dma_idle_int_handler(struct rk_hdmirx_dev *hdmirx_dev, bool *handled
21152123
vb_done->sequence = stream->frame_idx;
21162124
hdmirx_vb_done(stream, vb_done);
21172125
stream->frame_idx++;
2126+
if (stream->frame_idx == 30)
2127+
v4l2_info(v4l2_dev, "rcv frames\n");
21182128
}
21192129

21202130
stream->curr_buf = NULL;
@@ -2221,7 +2231,7 @@ static irqreturn_t hdmirx_dma_irq_handler(int irq, void *dev_id)
22212231
line_flag_int_handler(hdmirx_dev, &handled);
22222232

22232233
if (!handled)
2224-
v4l2_dbg(2, debug, v4l2_dev,
2234+
v4l2_dbg(3, debug, v4l2_dev,
22252235
"%s: dma irq not handled, dma_stat1:%#x!\n",
22262236
__func__, dma_stat1);
22272237

@@ -2285,6 +2295,7 @@ static void hdmirx_delayed_work_hotplug(struct work_struct *work)
22852295
bool plugin;
22862296

22872297
mutex_lock(&hdmirx_dev->work_lock);
2298+
hdmirx_dev->get_timing = false;
22882299
plugin = tx_5v_power_present(hdmirx_dev);
22892300
v4l2_ctrl_s_ctrl(hdmirx_dev->detect_tx_5v_ctrl, plugin);
22902301
v4l2_dbg(1, debug, v4l2_dev, "%s: plugin:%d\n", __func__, plugin);

0 commit comments

Comments
 (0)