media: rockchip: isp/ispp: fix error detected by depmod

DEPMOD  4.19.111
depmod: ERROR: Cycle detected: video_rkisp -> video_rkispp -> video_rkisp
depmod: ERROR: Found 2 modules in dependency cycles!

Signed-off-by: Xu Hongfei <xuhf@rock-chips.com>
Change-Id: I4136dcb32e6438865b2d1d1f8df811748db1f549
This commit is contained in:
Xu Hongfei
2020-12-16 11:35:30 +08:00
committed by Tao Huang
parent c9faa14df7
commit a864508368
6 changed files with 30 additions and 26 deletions

View File

@@ -433,7 +433,6 @@ static int frame_end(struct rkisp_bridge_device *dev, bool en)
{
struct rkisp_hw_dev *hw = dev->ispdev->hw_dev;
struct v4l2_subdev *sd = v4l2_get_subdev_hostdata(&dev->sd);
struct rkisp_ispp_reg *reg_buf;
unsigned long lock_flags = 0;
u64 ns = ktime_get_ns();
@@ -452,6 +451,7 @@ static int frame_end(struct rkisp_bridge_device *dev, bool en)
spin_unlock_irqrestore(&hw->buf_lock, lock_flags);
} else {
u64 sof_ns = 0;
struct rkisp_ispp_reg *reg_buf = NULL;
ns = 0;
rkisp_dmarx_get_frame(dev->ispdev,
@@ -462,7 +462,8 @@ static int frame_end(struct rkisp_bridge_device *dev, bool en)
ns = ktime_get_ns();
hw->cur_buf->frame_timestamp = ns;
hw->cur_buf->index = dev->ispdev->dev_id;
rkispp_request_regbuf(sd, &reg_buf);
v4l2_subdev_call(sd, core, ioctl, RKISP_ISPP_CMD_REQUEST_REGBUF,
&reg_buf);
if (reg_buf) {
reg_buf->stat = ISP_ISPP_INUSE;
reg_buf->dev_id = hw->cur_buf->index;

View File

@@ -22,6 +22,10 @@
_IOW('V', BASE_VIDIOC_PRIVATE + 0, struct rkisp_ispp_mode)
#define RKISP_ISPP_CMD_SET_FMT \
_IOW('V', BASE_VIDIOC_PRIVATE + 1, struct max_input)
#define RKISP_ISPP_CMD_REQUEST_REGBUF \
_IOW('V', BASE_VIDIOC_PRIVATE + 2, struct rkisp_ispp_reg *)
#define RKISP_ISPP_CMD_GET_REG_WITHSTREAM \
_IOW('V', BASE_VIDIOC_PRIVATE + 3, bool)
enum rkisp_ispp_dev {
DEV_ID0 = 0,
@@ -113,20 +117,4 @@ static inline void rkisp_get_bridge_sd(struct platform_device *dev,
}
#endif
#if IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISPP)
void rkispp_request_regbuf(struct v4l2_subdev *sd, struct rkisp_ispp_reg **free_buf);
bool rkispp_get_reg_withstream(void);
#else
static inline void rkispp_request_regbuf(struct v4l2_subdev *sd,
struct rkisp_ispp_reg **free_buf)
{
*free_buf = NULL;
}
static inline bool rkispp_get_reg_withstream(void)
{
return false;
}
#endif
#endif

View File

@@ -1257,11 +1257,15 @@ rkisp_stats_send_meas_v2x(struct rkisp_isp_stats_vdev *stats_vdev,
}
if (cur_buf) {
bool reg_withstream = false;
struct v4l2_subdev *sd = v4l2_get_subdev_hostdata(&stats_vdev->dev->br_dev.sd);
vb2_set_plane_payload(&cur_buf->vb.vb2_buf, 0,
sizeof(struct rkisp_isp2x_stat_buffer));
cur_buf->vb.sequence = cur_frame_id;
cur_buf->vb.vb2_buf.timestamp = meas_work->timestamp;
if (rkispp_get_reg_withstream()) {
v4l2_subdev_call(sd, core, ioctl, RKISP_ISPP_CMD_GET_REG_WITHSTREAM, &reg_withstream);
if (reg_withstream) {
struct rkisp_isp2x_stat_buffer *tmp_statsbuf;
tmp_statsbuf = (struct rkisp_isp2x_stat_buffer *)stats_vdev->tmp_statsbuf.vaddr;
@@ -1462,6 +1466,9 @@ static struct rkisp_isp_stats_ops rkisp_isp_stats_ops_tbl = {
void rkisp_stats_first_ddr_config_v2x(struct rkisp_isp_stats_vdev *stats_vdev)
{
bool reg_withstream = false;
struct v4l2_subdev *sd = v4l2_get_subdev_hostdata(&stats_vdev->dev->br_dev.sd);
if (stats_vdev->rd_stats_from_ddr) {
stats_vdev->wr_buf_idx = 0;
stats_vdev->rd_buf_idx = 0;
@@ -1474,7 +1481,8 @@ void rkisp_stats_first_ddr_config_v2x(struct rkisp_isp_stats_vdev *stats_vdev)
SW_3A_DDR_WRITE_EN, false);
}
if (rkispp_get_reg_withstream()) {
v4l2_subdev_call(sd, core, ioctl, RKISP_ISPP_CMD_GET_REG_WITHSTREAM, &reg_withstream);
if (reg_withstream) {
stats_vdev->tmp_statsbuf.is_need_vaddr = true;
stats_vdev->tmp_statsbuf.size = sizeof(struct rkisp_isp2x_stat_buffer);
rkisp_alloc_buffer(stats_vdev->dev, &stats_vdev->tmp_statsbuf);

View File

@@ -457,10 +457,8 @@ void rkispp_release_regbuf(struct rkispp_device *ispp, struct rkisp_ispp_reg *fr
freebuf->stat = ISP_ISPP_FREE;
}
void rkispp_request_regbuf(struct v4l2_subdev *sd, struct rkisp_ispp_reg **free_buf)
void rkispp_request_regbuf(struct rkispp_device *dev, struct rkisp_ispp_reg **free_buf)
{
struct rkispp_subdev *ispp_sdev = v4l2_get_subdevdata(sd);
struct rkispp_device *dev = ispp_sdev->dev;
struct rkispp_hw_dev *hw = dev->hw_dev;
int ret;
@@ -474,11 +472,8 @@ void rkispp_request_regbuf(struct v4l2_subdev *sd, struct rkisp_ispp_reg **free_
(*free_buf)->stat = ISP_ISPP_INUSE;
}
}
EXPORT_SYMBOL(rkispp_request_regbuf);
bool rkispp_get_reg_withstream(void)
{
return rkispp_reg_withstream;
}
EXPORT_SYMBOL(rkispp_get_reg_withstream);

View File

@@ -121,4 +121,6 @@ void rkispp_free_common_dummy_buf(struct rkispp_device *dev);
int rkispp_find_regbuf_by_id(struct rkispp_device *ispp, struct rkisp_ispp_reg **free_buf,
u32 dev_id, u32 frame_id);
void rkispp_release_regbuf(struct rkispp_device *ispp, struct rkisp_ispp_reg *freebuf);
void rkispp_request_regbuf(struct rkispp_device *dev, struct rkisp_ispp_reg **free_buf);
bool rkispp_get_reg_withstream(void);
#endif

View File

@@ -374,6 +374,8 @@ static long rkispp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
struct rkispp_device *ispp_dev = ispp_sdev->dev;
struct rkispp_fecbuf_info *fecbuf;
struct rkispp_fecbuf_size *fecsize;
struct rkisp_ispp_reg **reg_buf;
bool *rkispp_reg_withstream;
long ret = 0;
if (!arg)
@@ -388,6 +390,14 @@ static long rkispp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
fecsize = (struct rkispp_fecbuf_size *)arg;
rkispp_params_set_fecbuf_size(&ispp_dev->params_vdev, fecsize);
break;
case RKISP_ISPP_CMD_REQUEST_REGBUF:
reg_buf = (struct rkisp_ispp_reg **)arg;
rkispp_request_regbuf(ispp_dev, reg_buf);
break;
case RKISP_ISPP_CMD_GET_REG_WITHSTREAM:
rkispp_reg_withstream = arg;
*rkispp_reg_withstream = rkispp_get_reg_withstream();
break;
default:
ret = -ENOIOCTLCMD;
}