Skip to content

Commit c540a82

Browse files
Lian Xurkhuangtao
authored andcommitted
media: rockchip: isp: add the double isp_dev in rockit for isp32
Change-Id: I8aca92b674d81252e7109bf0c07ce9374f31ce0a Signed-off-by: Lian Xu <[email protected]>
1 parent be1ce10 commit c540a82

File tree

4 files changed

+61
-44
lines changed

4 files changed

+61
-44
lines changed

drivers/media/platform/rockchip/isp/capture.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,7 +1468,7 @@ static int rkisp_set_fps(struct rkisp_stream *stream, int *fps)
14681468
if (dev->isp_ver != ISP_V32)
14691469
return -EINVAL;
14701470

1471-
rkisp_rockit_fps_set(fps, stream->id);
1471+
rkisp_rockit_fps_set(fps, stream);
14721472
return 0;
14731473
}
14741474

@@ -1479,7 +1479,7 @@ static int rkisp_get_fps(struct rkisp_stream *stream, int *fps)
14791479
if (dev->isp_ver != ISP_V32)
14801480
return -EINVAL;
14811481

1482-
rkisp_rockit_fps_get(fps, stream->id);
1482+
rkisp_rockit_fps_get(fps, stream);
14831483
return 0;
14841484
}
14851485

drivers/media/platform/rockchip/isp/capture_v3x.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ void rkisp_mipi_v32_isr(u32 phy, u32 packet, u32 overflow, u32 state, struct rki
2929
int rkisp_rockit_buf_free(struct rkisp_stream *stream);
3030
void rkisp_rockit_dev_init(struct rkisp_device *dev);
3131
bool rkisp_rockit_ctrl_fps(struct rkisp_stream *stream);
32-
void rkisp_rockit_fps_set(int *dst_fps, unsigned int id);
33-
void rkisp_rockit_fps_get(int *dst_fps, unsigned int id);
32+
void rkisp_rockit_fps_set(int *dst_fps, struct rkisp_stream *stream);
33+
void rkisp_rockit_fps_get(int *dst_fps, struct rkisp_stream *stream);
3434
int rkisp_rockit_buf_done(struct rkisp_stream *stream, int cmd);
3535
#else
3636
static inline int rkisp_register_stream_v32(struct rkisp_device *dev) { return -EINVAL; }
@@ -41,8 +41,8 @@ static inline void rkisp_mipi_v32_isr(u32 phy, u32 packet, u32 overflow, u32 sta
4141
static inline int rkisp_rockit_buf_free(struct rkisp_stream *stream) { return -EINVAL; }
4242
static inline void rkisp_rockit_dev_init(struct rkisp_device *dev) { return; }
4343
static inline bool rkisp_rockit_ctrl_fps(struct rkisp_stream *stream) { return false; }
44-
static inline void rkisp_rockit_fps_set(int *dst_fps, unsigned int id) { return; }
45-
static inline void rkisp_rockit_fps_get(int *dst_fps, unsigned int id) { return; }
44+
static inline void rkisp_rockit_fps_set(int *dst_fps, struct rkisp_stream *stream) { return; }
45+
static inline void rkisp_rockit_fps_get(int *dst_fps, struct rkisp_stream *stream) { return; }
4646
static inline int rkisp_rockit_buf_done(struct rkisp_stream *stream, int cmd) { return -EINVAL; }
4747
#endif
4848

drivers/media/platform/rockchip/isp/isp_rockit.c

Lines changed: 54 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ int rkisp_rockit_buf_queue(struct rockit_cfg *input_rockit_cfg)
8383
struct rkisp_rockit_buffer *isprk_buf = NULL;
8484
struct rkisp_device *ispdev = NULL;
8585
const struct vb2_mem_ops *g_ops = NULL;
86-
int i, ret, height, offset;
86+
int i, ret, height, offset, dev_id;
8787
struct rkisp_stream_cfg *stream_cfg = NULL;
8888
void *mem = NULL;
8989
struct sg_table *sg_tbl;
@@ -96,22 +96,27 @@ int rkisp_rockit_buf_queue(struct rockit_cfg *input_rockit_cfg)
9696
return -EINVAL;
9797
}
9898

99-
stream_cfg = &rockit_cfg->rkisp_stream_cfg[stream->id];
99+
dev_id = stream->ispdev->dev_id;
100+
ispdev = stream->ispdev;
101+
g_ops = ispdev->hw_dev->mem_ops;
100102

101-
for (i = 0; i < ROCKIT_BUF_NUM_MAX; i++) {
102-
if (stream_cfg->buff_id[i] == input_rockit_cfg->mpi_id) {
103-
input_rockit_cfg->is_alloc = 0;
104-
break;
105-
}
103+
if (!rockit_cfg->rkisp_dev_cfg[dev_id].rkisp_stream_cfg[stream->id]) {
104+
rockit_cfg->rkisp_dev_cfg[dev_id].rkisp_stream_cfg[stream->id] =
105+
kzalloc(sizeof(struct rkisp_stream_cfg), GFP_KERNEL);
106106
}
107107

108+
stream_cfg = rockit_cfg->rkisp_dev_cfg[dev_id].rkisp_stream_cfg[stream->id];
108109
stream_cfg->node = input_rockit_cfg->node;
109110

110111
if (!input_rockit_cfg->buf)
111112
return -EINVAL;
112113

113-
ispdev = stream->ispdev;
114-
g_ops = ispdev->hw_dev->mem_ops;
114+
for (i = 0; i < ROCKIT_BUF_NUM_MAX; i++) {
115+
if (stream_cfg->buff_id[i] == input_rockit_cfg->mpi_id) {
116+
input_rockit_cfg->is_alloc = 0;
117+
break;
118+
}
119+
}
115120

116121
if (input_rockit_cfg->is_alloc) {
117122
for (i = 0; i < ROCKIT_BUF_NUM_MAX; i++) {
@@ -202,10 +207,12 @@ int rkisp_rockit_buf_done(struct rkisp_stream *stream, int cmd)
202207
{
203208
struct rkisp_device *dev = stream->ispdev;
204209
struct rkisp_rockit_buffer *isprk_buf = NULL;
205-
struct rkisp_stream_cfg *stream_cfg = &rockit_cfg->rkisp_stream_cfg[stream->id];
206-
u32 seq;
210+
struct rkisp_stream_cfg *stream_cfg = NULL;
211+
u32 seq, dev_id = stream->ispdev->dev_id;
207212
u64 ns = 0;
208213

214+
stream_cfg = rockit_cfg->rkisp_dev_cfg[dev_id].rkisp_stream_cfg[stream->id];
215+
209216
if (!rockit_cfg->rkisp_rockit_mpibuf_done)
210217
return -EINVAL;
211218

@@ -367,23 +374,25 @@ EXPORT_SYMBOL(rkisp_rockit_resume_stream);
367374
int rkisp_rockit_buf_free(struct rkisp_stream *stream)
368375
{
369376
struct rkisp_rockit_buffer *isprk_buf = NULL;
370-
int i = 0;
377+
u32 i = 0, dev_id = stream->ispdev->dev_id;
371378
const struct vb2_mem_ops *g_ops = stream->ispdev->hw_dev->mem_ops;
372-
struct rkisp_stream_cfg *stream_cfg = &rockit_cfg->rkisp_stream_cfg[stream->id];
373-
374-
stream_cfg->is_discard = false;
379+
struct rkisp_stream_cfg *stream_cfg = NULL;
375380

376-
for (i = 0; i < ROCKIT_BUF_NUM_MAX; i++) {
377-
if (stream_cfg->rkisp_buff[i]) {
378-
isprk_buf = (struct rkisp_rockit_buffer *)stream_cfg->rkisp_buff[i];
379-
if (isprk_buf->mpi_mem) {
380-
g_ops->unmap_dmabuf(isprk_buf->mpi_mem);
381-
g_ops->detach_dmabuf(isprk_buf->mpi_mem);
382-
dma_buf_put(isprk_buf->dmabuf);
381+
stream_cfg = rockit_cfg->rkisp_dev_cfg[dev_id].rkisp_stream_cfg[stream->id];
382+
if (stream_cfg) {
383+
stream_cfg->is_discard = false;
384+
for (i = 0; i < ROCKIT_BUF_NUM_MAX; i++) {
385+
if (stream_cfg->rkisp_buff[i]) {
386+
isprk_buf = (struct rkisp_rockit_buffer *)stream_cfg->rkisp_buff[i];
387+
if (isprk_buf->mpi_mem) {
388+
g_ops->unmap_dmabuf(isprk_buf->mpi_mem);
389+
g_ops->detach_dmabuf(isprk_buf->mpi_mem);
390+
dma_buf_put(isprk_buf->dmabuf);
391+
}
392+
kfree(stream_cfg->rkisp_buff[i]);
393+
stream_cfg->rkisp_buff[i] = NULL;
394+
stream_cfg->buff_id[i] = 0;
383395
}
384-
kfree(stream_cfg->rkisp_buff[i]);
385-
stream_cfg->rkisp_buff[i] = NULL;
386-
stream_cfg->buff_id[i] = 0;
387396
}
388397
}
389398
return 0;
@@ -409,9 +418,12 @@ void rkisp_rockit_dev_init(struct rkisp_device *dev)
409418
}
410419
}
411420

412-
void rkisp_rockit_fps_set(int *dst_fps, unsigned int id)
421+
void rkisp_rockit_fps_set(int *dst_fps, struct rkisp_stream *stream)
413422
{
414-
if (id >= ROCKIT_STREAM_NUM_MAX) {
423+
int dev_id = stream->ispdev->dev_id;
424+
int id = stream->id;
425+
426+
if (stream->id >= ROCKIT_STREAM_NUM_MAX) {
415427
pr_err("fps_set stream id %u exceeds maximum\n", id);
416428
return;
417429
}
@@ -421,12 +433,15 @@ void rkisp_rockit_fps_set(int *dst_fps, unsigned int id)
421433
return;
422434
}
423435

424-
rockit_cfg->rkisp_stream_cfg[id].dst_fps = *dst_fps;
425-
rockit_cfg->rkisp_stream_cfg[id].fps_cnt = *dst_fps;
436+
rockit_cfg->rkisp_dev_cfg[dev_id].rkisp_stream_cfg[id]->dst_fps = *dst_fps;
437+
rockit_cfg->rkisp_dev_cfg[dev_id].rkisp_stream_cfg[id]->fps_cnt = *dst_fps;
426438
}
427439

428-
void rkisp_rockit_fps_get(int *dst_fps, unsigned int id)
440+
void rkisp_rockit_fps_get(int *dst_fps, struct rkisp_stream *stream)
429441
{
442+
int dev_id = stream->ispdev->dev_id;
443+
int id = stream->id;
444+
430445
if (id >= ROCKIT_STREAM_NUM_MAX) {
431446
pr_err("fps_get stream id %u exceeds maximum\n", id);
432447
return;
@@ -437,21 +452,24 @@ void rkisp_rockit_fps_get(int *dst_fps, unsigned int id)
437452
return;
438453
}
439454

440-
*dst_fps = rockit_cfg->rkisp_stream_cfg[id].cur_fps;
455+
*dst_fps = rockit_cfg->rkisp_dev_cfg[dev_id].rkisp_stream_cfg[id]->cur_fps;
441456
}
442457

443458
bool rkisp_rockit_ctrl_fps(struct rkisp_stream *stream)
444459
{
445460
struct rkisp_device *dev = stream->ispdev;
446461
struct rkisp_sensor_info *sensor = NULL;
447-
int *fps_cnt = &rockit_cfg->rkisp_stream_cfg[stream->id].fps_cnt;
462+
int dev_id = stream->ispdev->dev_id, id = stream->id;
463+
struct rkisp_stream_cfg *stream_cfg =
464+
rockit_cfg->rkisp_dev_cfg[dev_id].rkisp_stream_cfg[id];
465+
int *fps_cnt = &stream_cfg->fps_cnt;
448466
int ret, dst_fps;
449467
static int fps_in, cur_fps[ROCKIT_STREAM_NUM_MAX];
450468
u32 denominator = 0, numerator = 0;
451-
bool *is_discard = &rockit_cfg->rkisp_stream_cfg[stream->id].is_discard;
452-
u64 cur_time, *old_time = &rockit_cfg->rkisp_stream_cfg[stream->id].old_time;
469+
bool *is_discard = &stream_cfg->is_discard;
470+
u64 cur_time, *old_time = &stream_cfg->old_time;
453471

454-
dst_fps = rockit_cfg->rkisp_stream_cfg[stream->id].dst_fps;
472+
dst_fps = stream_cfg->dst_fps;
455473
if (dst_fps == 0 || !stream->streaming) {
456474
*is_discard = false;
457475
return false;
@@ -495,8 +513,7 @@ bool rkisp_rockit_ctrl_fps(struct rkisp_stream *stream)
495513
cur_time = ktime_get_ns();
496514
if (cur_time - *old_time >= 1000000000) {
497515
*old_time = cur_time;
498-
rockit_cfg->rkisp_stream_cfg[stream->id].cur_fps =
499-
cur_fps[stream->id];
516+
stream_cfg->cur_fps = cur_fps[stream->id];
500517
cur_fps[stream->id] = 0;
501518
}
502519
}

include/soc/rockchip/rockchip_rockit.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ struct ISP_VIDEO_FRAMES {
4949
struct rkisp_dev_cfg {
5050
char *isp_name;
5151
void *isp_dev;
52+
struct rkisp_stream_cfg *rkisp_stream_cfg[ROCKIT_STREAM_NUM_MAX];
5253
};
5354

5455
struct rockit_cfg {
@@ -69,7 +70,6 @@ struct rockit_cfg {
6970
struct dma_buf *buf;
7071
struct ISP_VIDEO_FRAMES frame;
7172
struct rkisp_dev_cfg rkisp_dev_cfg[ROCKIT_ISP_NUM_MAX];
72-
struct rkisp_stream_cfg rkisp_stream_cfg[ROCKIT_STREAM_NUM_MAX];
7373
int (*rkisp_rockit_mpibuf_done)(struct rockit_cfg *rockit_isp_cfg);
7474
};
7575

0 commit comments

Comments
 (0)