mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
media: rockchip: isp: more isp state for debug
Change-Id: I3b47effb53080bfb751fc293567abd666917934e Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -1533,8 +1533,9 @@ static int mi_frame_end(struct rkisp_stream *stream)
|
||||
stream->id == RKISP_STREAM_DMATX1 ||
|
||||
stream->id == RKISP_STREAM_DMATX2))
|
||||
v4l2_info(&isp_dev->v4l2_dev,
|
||||
"no available stream(%d) buffer, use dummy\n",
|
||||
stream->id);
|
||||
"tx stream:%d lose frame:%d, isp state:0x%x frame:%d\n",
|
||||
stream->id, atomic_read(&stream->sequence) - 1,
|
||||
isp_dev->isp_state, isp_dev->dmarx_dev.cur_frame.id);
|
||||
|
||||
if (stream->curr_buf &&
|
||||
(!interlaced ||
|
||||
@@ -1906,7 +1907,7 @@ static void rkisp_stream_stop(struct rkisp_stream *stream)
|
||||
|
||||
stream->stopping = true;
|
||||
stream->ops->stop_mi(stream);
|
||||
if (dev->isp_state == ISP_START &&
|
||||
if ((dev->isp_state & ISP_START) &&
|
||||
dev->isp_inp != INP_DMARX_ISP) {
|
||||
ret = wait_event_timeout(stream->done,
|
||||
!stream->streaming,
|
||||
|
||||
@@ -477,7 +477,7 @@ int rkisp_csi_trigger_event(struct rkisp_csi_device *csi, void *arg)
|
||||
csi->is_isp_end = true;
|
||||
|
||||
/* isp doesn't ready to read back */
|
||||
if (dev->isp_state != ISP_START) {
|
||||
if (!(dev->isp_state & ISP_START)) {
|
||||
if (trigger)
|
||||
kfifo_in(fifo, trigger, sizeof(*trigger));
|
||||
csi->is_isp_end = true;
|
||||
|
||||
@@ -87,9 +87,13 @@ enum rkisp_isp_ver {
|
||||
};
|
||||
|
||||
enum rkisp_isp_state {
|
||||
ISP_STOP = 0,
|
||||
ISP_START,
|
||||
ISP_ERROR
|
||||
ISP_FRAME_END = BIT(0),
|
||||
ISP_FRAME_IN = BIT(1),
|
||||
ISP_FRAME_VS = BIT(2),
|
||||
|
||||
ISP_STOP = BIT(8),
|
||||
ISP_START = BIT(9),
|
||||
ISP_ERROR = BIT(10),
|
||||
};
|
||||
|
||||
enum rkisp_isp_inp {
|
||||
|
||||
@@ -405,8 +405,7 @@ static void dmarx_stop(struct rkisp_stream *stream)
|
||||
int ret = 0;
|
||||
|
||||
stream->stopping = true;
|
||||
if (dev->isp_state == ISP_START &&
|
||||
!stream->frame_end) {
|
||||
if ((dev->isp_state & ISP_START) && !stream->frame_end) {
|
||||
ret = wait_event_timeout(stream->done,
|
||||
!stream->streaming,
|
||||
msecs_to_jiffies(100));
|
||||
|
||||
@@ -434,7 +434,15 @@ u32 rkisp_mbus_pixelcode_to_v4l2(u32 pixelcode)
|
||||
return pixelformat;
|
||||
}
|
||||
|
||||
/**************** register operations ****************/
|
||||
static void rkisp_set_state(struct rkisp_device *dev, u32 state)
|
||||
{
|
||||
u32 mask = 0xff;
|
||||
|
||||
if (state < ISP_STOP)
|
||||
mask = 0xff00;
|
||||
dev->isp_state &= mask;
|
||||
dev->isp_state |= state;
|
||||
}
|
||||
|
||||
static void rkisp_config_clk(struct rkisp_device *dev, int on)
|
||||
{
|
||||
@@ -965,7 +973,7 @@ static int rkisp_isp_stop(struct rkisp_device *dev)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
dev->isp_state = ISP_STOP;
|
||||
rkisp_set_state(dev, ISP_STOP);
|
||||
|
||||
if (dev->isp_ver == ISP_V20)
|
||||
kfifo_reset(&dev->csi_dev.rdbk_kfifo);
|
||||
@@ -2214,6 +2222,7 @@ void rkisp_isp_isr(unsigned int isp_mis,
|
||||
|
||||
/* start edge of v_sync */
|
||||
if (isp_mis & CIF_ISP_V_START) {
|
||||
rkisp_set_state(dev, ISP_FRAME_VS);
|
||||
dev->csi_dev.is_isp_end = false;
|
||||
/* filt v_sync when frame read back mode */
|
||||
if (dev->csi_dev.filt_state[CSI_F_VS]) {
|
||||
@@ -2270,7 +2279,7 @@ vs_skip:
|
||||
|
||||
if (dev->isp_err_cnt++ > RKISP_CONTI_ERR_MAX) {
|
||||
rkisp_isp_stop(dev);
|
||||
dev->isp_state = ISP_ERROR;
|
||||
rkisp_set_state(dev, ISP_ERROR);
|
||||
v4l2_err(&dev->v4l2_dev,
|
||||
"Too many isp error, stop isp!\n");
|
||||
}
|
||||
@@ -2287,6 +2296,7 @@ vs_skip:
|
||||
|
||||
/* sampled input frame is complete */
|
||||
if (isp_mis & CIF_ISP_FRAME_IN) {
|
||||
rkisp_set_state(dev, ISP_FRAME_IN);
|
||||
writel(CIF_ISP_FRAME_IN, base + CIF_ISP_ICR);
|
||||
isp_mis_tmp = readl(base + CIF_ISP_MIS);
|
||||
if (isp_mis_tmp & CIF_ISP_FRAME_IN)
|
||||
@@ -2299,6 +2309,7 @@ vs_skip:
|
||||
/* frame was completely put out */
|
||||
if (isp_mis & CIF_ISP_FRAME) {
|
||||
/* Clear Frame In (ISP) */
|
||||
rkisp_set_state(dev, ISP_FRAME_END);
|
||||
writel(CIF_ISP_FRAME, base + CIF_ISP_ICR);
|
||||
isp_mis_tmp = readl(base + CIF_ISP_MIS);
|
||||
if (isp_mis_tmp & CIF_ISP_FRAME)
|
||||
|
||||
Reference in New Issue
Block a user