@@ -30,23 +30,6 @@ static inline struct rkisp1_csi *to_rkisp1_csi(struct v4l2_subdev *sd)
3030 return container_of (sd , struct rkisp1_csi , sd );
3131}
3232
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-
5033int rkisp1_csi_link_sensor (struct rkisp1_device * rkisp1 , struct v4l2_subdev * sd ,
5134 struct rkisp1_sensor_async * s_asd ,
5235 unsigned int source_pad )
@@ -76,7 +59,8 @@ int rkisp1_csi_link_sensor(struct rkisp1_device *rkisp1, struct v4l2_subdev *sd,
7659}
7760
7861static 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 )
8064{
8165 struct rkisp1_device * rkisp1 = csi -> rkisp1 ;
8266 unsigned int lanes = sensor -> lanes ;
@@ -98,7 +82,7 @@ static int rkisp1_csi_config(struct rkisp1_csi *csi,
9882
9983 /* Configure Data Type and Virtual Channel */
10084 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 ) |
10286 RKISP1_CIF_MIPI_DATA_SEL_VC (0 ));
10387
10488 /* Clear MIPI interrupts */
@@ -151,15 +135,16 @@ static void rkisp1_csi_disable(struct rkisp1_csi *csi)
151135}
152136
153137static 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 )
155140{
156141 struct rkisp1_device * rkisp1 = csi -> rkisp1 ;
157142 union phy_configure_opts opts ;
158143 struct phy_configure_opts_mipi_dphy * cfg = & opts .mipi_dphy ;
159144 s64 pixel_clock ;
160145 int ret ;
161146
162- ret = rkisp1_csi_config (csi , sensor );
147+ ret = rkisp1_csi_config (csi , sensor , format );
163148 if (ret )
164149 return ret ;
165150
@@ -169,7 +154,7 @@ static int rkisp1_csi_start(struct rkisp1_csi *csi,
169154 return - EINVAL ;
170155 }
171156
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 ,
173158 sensor -> lanes , cfg );
174159 phy_set_mode (csi -> dphy , PHY_MODE_MIPI_DPHY );
175160 phy_configure (csi -> dphy , & opts );
@@ -248,7 +233,6 @@ static int rkisp1_csi_enum_mbus_code(struct v4l2_subdev *sd,
248233 struct v4l2_subdev_state * sd_state ,
249234 struct v4l2_subdev_mbus_code_enum * code )
250235{
251- struct rkisp1_csi * csi = to_rkisp1_csi (sd );
252236 unsigned int i ;
253237 int pos = 0 ;
254238
@@ -258,15 +242,10 @@ static int rkisp1_csi_enum_mbus_code(struct v4l2_subdev *sd,
258242 if (code -> index )
259243 return - EINVAL ;
260244
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 );
266247 code -> code = sink_fmt -> code ;
267248
268- mutex_unlock (& csi -> lock );
269-
270249 return 0 ;
271250 }
272251
@@ -296,9 +275,9 @@ static int rkisp1_csi_init_config(struct v4l2_subdev *sd,
296275{
297276 struct v4l2_mbus_framefmt * sink_fmt , * src_fmt ;
298277
299- sink_fmt = v4l2_subdev_get_try_format (sd , sd_state ,
278+ sink_fmt = v4l2_subdev_get_pad_format (sd , sd_state ,
300279 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 ,
302281 RKISP1_CSI_PAD_SRC );
303282
304283 sink_fmt -> width = RKISP1_DEFAULT_WIDTH ;
@@ -311,36 +290,18 @@ static int rkisp1_csi_init_config(struct v4l2_subdev *sd,
311290 return 0 ;
312291}
313292
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-
328293static int rkisp1_csi_set_fmt (struct v4l2_subdev * sd ,
329294 struct v4l2_subdev_state * sd_state ,
330295 struct v4l2_subdev_format * fmt )
331296{
332- struct rkisp1_csi * csi = to_rkisp1_csi (sd );
333297 const struct rkisp1_mbus_info * mbus_info ;
334298 struct v4l2_mbus_framefmt * sink_fmt , * src_fmt ;
335299
336300 /* The format on the source pad always matches the sink pad. */
337301 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 );
339303
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 );
344305
345306 sink_fmt -> code = fmt -> format .code ;
346307
@@ -359,16 +320,10 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
359320
360321 fmt -> format = * sink_fmt ;
361322
362- if (fmt -> which == V4L2_SUBDEV_FORMAT_ACTIVE )
363- csi -> sink_fmt = mbus_info ;
364-
365323 /* 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 );
368325 * src_fmt = * sink_fmt ;
369326
370- mutex_unlock (& csi -> lock );
371-
372327 return 0 ;
373328}
374329
@@ -380,8 +335,11 @@ static int rkisp1_csi_s_stream(struct v4l2_subdev *sd, int enable)
380335{
381336 struct rkisp1_csi * csi = to_rkisp1_csi (sd );
382337 struct rkisp1_device * rkisp1 = csi -> rkisp1 ;
338+ const struct v4l2_mbus_framefmt * sink_fmt ;
339+ const struct rkisp1_mbus_info * format ;
383340 struct rkisp1_sensor_async * source_asd ;
384341 struct v4l2_async_connection * asc ;
342+ struct v4l2_subdev_state * sd_state ;
385343 struct media_pad * source_pad ;
386344 struct v4l2_subdev * source ;
387345 int ret ;
@@ -415,9 +373,12 @@ static int rkisp1_csi_s_stream(struct v4l2_subdev *sd, int enable)
415373 if (source_asd -> mbus_type != V4L2_MBUS_CSI2_DPHY )
416374 return - EINVAL ;
417375
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 );
421382 if (ret )
422383 return ret ;
423384
@@ -447,7 +408,7 @@ static const struct v4l2_subdev_video_ops rkisp1_csi_video_ops = {
447408static const struct v4l2_subdev_pad_ops rkisp1_csi_pad_ops = {
448409 .enum_mbus_code = rkisp1_csi_enum_mbus_code ,
449410 .init_cfg = rkisp1_csi_init_config ,
450- .get_fmt = rkisp1_csi_get_fmt ,
411+ .get_fmt = v4l2_subdev_get_fmt ,
451412 .set_fmt = rkisp1_csi_set_fmt ,
452413};
453414
@@ -459,13 +420,11 @@ static const struct v4l2_subdev_ops rkisp1_csi_ops = {
459420int rkisp1_csi_register (struct rkisp1_device * rkisp1 )
460421{
461422 struct rkisp1_csi * csi = & rkisp1 -> csi ;
462- struct v4l2_subdev_state state = {};
463423 struct media_pad * pads ;
464424 struct v4l2_subdev * sd ;
465425 int ret ;
466426
467427 csi -> rkisp1 = rkisp1 ;
468- mutex_init (& csi -> lock );
469428
470429 sd = & csi -> sd ;
471430 v4l2_subdev_init (sd , & rkisp1_csi_ops );
@@ -481,26 +440,26 @@ int rkisp1_csi_register(struct rkisp1_device *rkisp1)
481440 pads [RKISP1_CSI_PAD_SRC ].flags = MEDIA_PAD_FL_SOURCE |
482441 MEDIA_PAD_FL_MUST_CONNECT ;
483442
484- csi -> sink_fmt = rkisp1_mbus_info_get_by_code (RKISP1_CSI_DEF_FMT );
485-
486443 ret = media_entity_pads_init (& sd -> entity , RKISP1_CSI_PAD_NUM , pads );
487444 if (ret )
488- goto error ;
445+ goto err_entity_cleanup ;
489446
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 ;
492450
493451 ret = v4l2_device_register_subdev (& csi -> rkisp1 -> v4l2_dev , sd );
494452 if (ret ) {
495453 dev_err (sd -> dev , "Failed to register csi receiver subdev\n" );
496- goto error ;
454+ goto err_subdev_cleanup ;
497455 }
498456
499457 return 0 ;
500458
501- error :
459+ err_subdev_cleanup :
460+ v4l2_subdev_cleanup (sd );
461+ err_entity_cleanup :
502462 media_entity_cleanup (& sd -> entity );
503- mutex_destroy (& csi -> lock );
504463 csi -> rkisp1 = NULL ;
505464 return ret ;
506465}
@@ -513,8 +472,8 @@ void rkisp1_csi_unregister(struct rkisp1_device *rkisp1)
513472 return ;
514473
515474 v4l2_device_unregister_subdev (& csi -> sd );
475+ v4l2_subdev_cleanup (& csi -> sd );
516476 media_entity_cleanup (& csi -> sd .entity );
517- mutex_destroy (& csi -> lock );
518477}
519478
520479int rkisp1_csi_init (struct rkisp1_device * rkisp1 )
0 commit comments