@@ -30,23 +30,6 @@ static inline struct rkisp1_csi *to_rkisp1_csi(struct v4l2_subdev *sd)
30
30
return container_of (sd , struct rkisp1_csi , sd );
31
31
}
32
32
33
- static struct v4l2_mbus_framefmt *
34
- rkisp1_csi_get_pad_fmt (struct rkisp1_csi * csi ,
35
- struct v4l2_subdev_state * sd_state ,
36
- unsigned int pad , u32 which )
37
- {
38
- struct v4l2_subdev_state state = {
39
- .pads = csi -> pad_cfg
40
- };
41
-
42
- lockdep_assert_held (& csi -> lock );
43
-
44
- if (which == V4L2_SUBDEV_FORMAT_TRY )
45
- return v4l2_subdev_get_try_format (& csi -> sd , sd_state , pad );
46
- else
47
- return v4l2_subdev_get_try_format (& csi -> sd , & state , pad );
48
- }
49
-
50
33
int rkisp1_csi_link_sensor (struct rkisp1_device * rkisp1 , struct v4l2_subdev * sd ,
51
34
struct rkisp1_sensor_async * s_asd ,
52
35
unsigned int source_pad )
@@ -76,7 +59,8 @@ int rkisp1_csi_link_sensor(struct rkisp1_device *rkisp1, struct v4l2_subdev *sd,
76
59
}
77
60
78
61
static int rkisp1_csi_config (struct rkisp1_csi * csi ,
79
- const struct rkisp1_sensor_async * sensor )
62
+ const struct rkisp1_sensor_async * sensor ,
63
+ const struct rkisp1_mbus_info * format )
80
64
{
81
65
struct rkisp1_device * rkisp1 = csi -> rkisp1 ;
82
66
unsigned int lanes = sensor -> lanes ;
@@ -98,7 +82,7 @@ static int rkisp1_csi_config(struct rkisp1_csi *csi,
98
82
99
83
/* Configure Data Type and Virtual Channel */
100
84
rkisp1_write (rkisp1 , RKISP1_CIF_MIPI_IMG_DATA_SEL ,
101
- RKISP1_CIF_MIPI_DATA_SEL_DT (csi -> sink_fmt -> mipi_dt ) |
85
+ RKISP1_CIF_MIPI_DATA_SEL_DT (format -> mipi_dt ) |
102
86
RKISP1_CIF_MIPI_DATA_SEL_VC (0 ));
103
87
104
88
/* Clear MIPI interrupts */
@@ -151,15 +135,16 @@ static void rkisp1_csi_disable(struct rkisp1_csi *csi)
151
135
}
152
136
153
137
static int rkisp1_csi_start (struct rkisp1_csi * csi ,
154
- const struct rkisp1_sensor_async * sensor )
138
+ const struct rkisp1_sensor_async * sensor ,
139
+ const struct rkisp1_mbus_info * format )
155
140
{
156
141
struct rkisp1_device * rkisp1 = csi -> rkisp1 ;
157
142
union phy_configure_opts opts ;
158
143
struct phy_configure_opts_mipi_dphy * cfg = & opts .mipi_dphy ;
159
144
s64 pixel_clock ;
160
145
int ret ;
161
146
162
- ret = rkisp1_csi_config (csi , sensor );
147
+ ret = rkisp1_csi_config (csi , sensor , format );
163
148
if (ret )
164
149
return ret ;
165
150
@@ -169,7 +154,7 @@ static int rkisp1_csi_start(struct rkisp1_csi *csi,
169
154
return - EINVAL ;
170
155
}
171
156
172
- phy_mipi_dphy_get_default_config (pixel_clock , csi -> sink_fmt -> bus_width ,
157
+ phy_mipi_dphy_get_default_config (pixel_clock , format -> bus_width ,
173
158
sensor -> lanes , cfg );
174
159
phy_set_mode (csi -> dphy , PHY_MODE_MIPI_DPHY );
175
160
phy_configure (csi -> dphy , & opts );
@@ -248,7 +233,6 @@ static int rkisp1_csi_enum_mbus_code(struct v4l2_subdev *sd,
248
233
struct v4l2_subdev_state * sd_state ,
249
234
struct v4l2_subdev_mbus_code_enum * code )
250
235
{
251
- struct rkisp1_csi * csi = to_rkisp1_csi (sd );
252
236
unsigned int i ;
253
237
int pos = 0 ;
254
238
@@ -258,15 +242,10 @@ static int rkisp1_csi_enum_mbus_code(struct v4l2_subdev *sd,
258
242
if (code -> index )
259
243
return - EINVAL ;
260
244
261
- mutex_lock (& csi -> lock );
262
-
263
- sink_fmt = rkisp1_csi_get_pad_fmt (csi , sd_state ,
264
- RKISP1_CSI_PAD_SINK ,
265
- code -> which );
245
+ sink_fmt = v4l2_subdev_get_pad_format (sd , sd_state ,
246
+ RKISP1_CSI_PAD_SINK );
266
247
code -> code = sink_fmt -> code ;
267
248
268
- mutex_unlock (& csi -> lock );
269
-
270
249
return 0 ;
271
250
}
272
251
@@ -296,9 +275,9 @@ static int rkisp1_csi_init_config(struct v4l2_subdev *sd,
296
275
{
297
276
struct v4l2_mbus_framefmt * sink_fmt , * src_fmt ;
298
277
299
- sink_fmt = v4l2_subdev_get_try_format (sd , sd_state ,
278
+ sink_fmt = v4l2_subdev_get_pad_format (sd , sd_state ,
300
279
RKISP1_CSI_PAD_SINK );
301
- src_fmt = v4l2_subdev_get_try_format (sd , sd_state ,
280
+ src_fmt = v4l2_subdev_get_pad_format (sd , sd_state ,
302
281
RKISP1_CSI_PAD_SRC );
303
282
304
283
sink_fmt -> width = RKISP1_DEFAULT_WIDTH ;
@@ -311,36 +290,18 @@ static int rkisp1_csi_init_config(struct v4l2_subdev *sd,
311
290
return 0 ;
312
291
}
313
292
314
- static int rkisp1_csi_get_fmt (struct v4l2_subdev * sd ,
315
- struct v4l2_subdev_state * sd_state ,
316
- struct v4l2_subdev_format * fmt )
317
- {
318
- struct rkisp1_csi * csi = to_rkisp1_csi (sd );
319
-
320
- mutex_lock (& csi -> lock );
321
- fmt -> format = * rkisp1_csi_get_pad_fmt (csi , sd_state , fmt -> pad ,
322
- fmt -> which );
323
- mutex_unlock (& csi -> lock );
324
-
325
- return 0 ;
326
- }
327
-
328
293
static int rkisp1_csi_set_fmt (struct v4l2_subdev * sd ,
329
294
struct v4l2_subdev_state * sd_state ,
330
295
struct v4l2_subdev_format * fmt )
331
296
{
332
- struct rkisp1_csi * csi = to_rkisp1_csi (sd );
333
297
const struct rkisp1_mbus_info * mbus_info ;
334
298
struct v4l2_mbus_framefmt * sink_fmt , * src_fmt ;
335
299
336
300
/* The format on the source pad always matches the sink pad. */
337
301
if (fmt -> pad == RKISP1_CSI_PAD_SRC )
338
- return rkisp1_csi_get_fmt (sd , sd_state , fmt );
302
+ return v4l2_subdev_get_fmt (sd , sd_state , fmt );
339
303
340
- mutex_lock (& csi -> lock );
341
-
342
- sink_fmt = rkisp1_csi_get_pad_fmt (csi , sd_state , RKISP1_CSI_PAD_SINK ,
343
- fmt -> which );
304
+ sink_fmt = v4l2_subdev_get_pad_format (sd , sd_state , RKISP1_CSI_PAD_SINK );
344
305
345
306
sink_fmt -> code = fmt -> format .code ;
346
307
@@ -359,16 +320,10 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
359
320
360
321
fmt -> format = * sink_fmt ;
361
322
362
- if (fmt -> which == V4L2_SUBDEV_FORMAT_ACTIVE )
363
- csi -> sink_fmt = mbus_info ;
364
-
365
323
/* Propagate the format to the source pad. */
366
- src_fmt = rkisp1_csi_get_pad_fmt (csi , sd_state , RKISP1_CSI_PAD_SRC ,
367
- fmt -> which );
324
+ src_fmt = v4l2_subdev_get_pad_format (sd , sd_state , RKISP1_CSI_PAD_SRC );
368
325
* src_fmt = * sink_fmt ;
369
326
370
- mutex_unlock (& csi -> lock );
371
-
372
327
return 0 ;
373
328
}
374
329
@@ -380,8 +335,11 @@ static int rkisp1_csi_s_stream(struct v4l2_subdev *sd, int enable)
380
335
{
381
336
struct rkisp1_csi * csi = to_rkisp1_csi (sd );
382
337
struct rkisp1_device * rkisp1 = csi -> rkisp1 ;
338
+ const struct v4l2_mbus_framefmt * sink_fmt ;
339
+ const struct rkisp1_mbus_info * format ;
383
340
struct rkisp1_sensor_async * source_asd ;
384
341
struct v4l2_async_connection * asc ;
342
+ struct v4l2_subdev_state * sd_state ;
385
343
struct media_pad * source_pad ;
386
344
struct v4l2_subdev * source ;
387
345
int ret ;
@@ -415,9 +373,12 @@ static int rkisp1_csi_s_stream(struct v4l2_subdev *sd, int enable)
415
373
if (source_asd -> mbus_type != V4L2_MBUS_CSI2_DPHY )
416
374
return - EINVAL ;
417
375
418
- mutex_lock (& csi -> lock );
419
- ret = rkisp1_csi_start (csi , source_asd );
420
- mutex_unlock (& csi -> lock );
376
+ sd_state = v4l2_subdev_lock_and_get_active_state (sd );
377
+ sink_fmt = v4l2_subdev_get_pad_format (sd , sd_state , RKISP1_CSI_PAD_SINK );
378
+ format = rkisp1_mbus_info_get_by_code (sink_fmt -> code );
379
+ v4l2_subdev_unlock_state (sd_state );
380
+
381
+ ret = rkisp1_csi_start (csi , source_asd , format );
421
382
if (ret )
422
383
return ret ;
423
384
@@ -447,7 +408,7 @@ static const struct v4l2_subdev_video_ops rkisp1_csi_video_ops = {
447
408
static const struct v4l2_subdev_pad_ops rkisp1_csi_pad_ops = {
448
409
.enum_mbus_code = rkisp1_csi_enum_mbus_code ,
449
410
.init_cfg = rkisp1_csi_init_config ,
450
- .get_fmt = rkisp1_csi_get_fmt ,
411
+ .get_fmt = v4l2_subdev_get_fmt ,
451
412
.set_fmt = rkisp1_csi_set_fmt ,
452
413
};
453
414
@@ -459,13 +420,11 @@ static const struct v4l2_subdev_ops rkisp1_csi_ops = {
459
420
int rkisp1_csi_register (struct rkisp1_device * rkisp1 )
460
421
{
461
422
struct rkisp1_csi * csi = & rkisp1 -> csi ;
462
- struct v4l2_subdev_state state = {};
463
423
struct media_pad * pads ;
464
424
struct v4l2_subdev * sd ;
465
425
int ret ;
466
426
467
427
csi -> rkisp1 = rkisp1 ;
468
- mutex_init (& csi -> lock );
469
428
470
429
sd = & csi -> sd ;
471
430
v4l2_subdev_init (sd , & rkisp1_csi_ops );
@@ -481,26 +440,26 @@ int rkisp1_csi_register(struct rkisp1_device *rkisp1)
481
440
pads [RKISP1_CSI_PAD_SRC ].flags = MEDIA_PAD_FL_SOURCE |
482
441
MEDIA_PAD_FL_MUST_CONNECT ;
483
442
484
- csi -> sink_fmt = rkisp1_mbus_info_get_by_code (RKISP1_CSI_DEF_FMT );
485
-
486
443
ret = media_entity_pads_init (& sd -> entity , RKISP1_CSI_PAD_NUM , pads );
487
444
if (ret )
488
- goto error ;
445
+ goto err_entity_cleanup ;
489
446
490
- state .pads = csi -> pad_cfg ;
491
- rkisp1_csi_init_config (sd , & state );
447
+ ret = v4l2_subdev_init_finalize (sd );
448
+ if (ret )
449
+ goto err_entity_cleanup ;
492
450
493
451
ret = v4l2_device_register_subdev (& csi -> rkisp1 -> v4l2_dev , sd );
494
452
if (ret ) {
495
453
dev_err (sd -> dev , "Failed to register csi receiver subdev\n" );
496
- goto error ;
454
+ goto err_subdev_cleanup ;
497
455
}
498
456
499
457
return 0 ;
500
458
501
- error :
459
+ err_subdev_cleanup :
460
+ v4l2_subdev_cleanup (sd );
461
+ err_entity_cleanup :
502
462
media_entity_cleanup (& sd -> entity );
503
- mutex_destroy (& csi -> lock );
504
463
csi -> rkisp1 = NULL ;
505
464
return ret ;
506
465
}
@@ -513,8 +472,8 @@ void rkisp1_csi_unregister(struct rkisp1_device *rkisp1)
513
472
return ;
514
473
515
474
v4l2_device_unregister_subdev (& csi -> sd );
475
+ v4l2_subdev_cleanup (& csi -> sd );
516
476
media_entity_cleanup (& csi -> sd .entity );
517
- mutex_destroy (& csi -> lock );
518
477
}
519
478
520
479
int rkisp1_csi_init (struct rkisp1_device * rkisp1 )
0 commit comments