@@ -128,7 +128,6 @@ struct mei_csi {
128128 int streaming ;
129129
130130 struct media_pad pads [CSI_NUM_PADS ];
131- struct v4l2_mbus_framefmt format_mbus [CSI_NUM_PADS ];
132131
133132 /* number of data lanes used on the CSI-2 link */
134133 u32 nr_of_lanes ;
@@ -329,79 +328,35 @@ static int mei_csi_set_stream(struct v4l2_subdev *sd, int enable)
329328 return ret ;
330329}
331330
332- static struct v4l2_mbus_framefmt *
333- mei_csi_get_pad_format (struct v4l2_subdev * sd ,
334- struct v4l2_subdev_state * sd_state ,
335- unsigned int pad , u32 which )
336- {
337- struct mei_csi * csi = sd_to_csi (sd );
338-
339- switch (which ) {
340- case V4L2_SUBDEV_FORMAT_TRY :
341- return v4l2_subdev_state_get_format (sd_state , pad );
342- case V4L2_SUBDEV_FORMAT_ACTIVE :
343- return & csi -> format_mbus [pad ];
344- default :
345- return NULL ;
346- }
347- }
348-
349331static int mei_csi_init_state (struct v4l2_subdev * sd ,
350332 struct v4l2_subdev_state * sd_state )
351333{
352334 struct v4l2_mbus_framefmt * mbusformat ;
353- struct mei_csi * csi = sd_to_csi (sd );
354335 unsigned int i ;
355336
356- mutex_lock (& csi -> lock );
357-
358337 for (i = 0 ; i < sd -> entity .num_pads ; i ++ ) {
359338 mbusformat = v4l2_subdev_state_get_format (sd_state , i );
360339 * mbusformat = mei_csi_format_mbus_default ;
361340 }
362341
363- mutex_unlock (& csi -> lock );
364-
365- return 0 ;
366- }
367-
368- static int mei_csi_get_fmt (struct v4l2_subdev * sd ,
369- struct v4l2_subdev_state * sd_state ,
370- struct v4l2_subdev_format * format )
371- {
372- struct v4l2_mbus_framefmt * mbusformat ;
373- struct mei_csi * csi = sd_to_csi (sd );
374-
375- mutex_lock (& csi -> lock );
376-
377- mbusformat = mei_csi_get_pad_format (sd , sd_state , format -> pad ,
378- format -> which );
379- if (mbusformat )
380- format -> format = * mbusformat ;
381-
382- mutex_unlock (& csi -> lock );
383-
384342 return 0 ;
385343}
386344
387345static int mei_csi_set_fmt (struct v4l2_subdev * sd ,
388346 struct v4l2_subdev_state * sd_state ,
389347 struct v4l2_subdev_format * format )
390348{
391- struct v4l2_mbus_framefmt * source_mbusformat ;
392- struct v4l2_mbus_framefmt * mbusformat ;
393- struct mei_csi * csi = sd_to_csi (sd );
394- struct media_pad * pad ;
349+ struct v4l2_mbus_framefmt * source_fmt ;
350+ struct v4l2_mbus_framefmt * sink_fmt ;
395351
396- mbusformat = mei_csi_get_pad_format (sd , sd_state , format -> pad ,
397- format -> which );
398- if (!mbusformat )
399- return - EINVAL ;
352+ sink_fmt = v4l2_subdev_state_get_format (sd_state , CSI_PAD_SINK );
353+ source_fmt = v4l2_subdev_state_get_format (sd_state , CSI_PAD_SOURCE );
400354
401- source_mbusformat = mei_csi_get_pad_format (sd , sd_state , CSI_PAD_SOURCE ,
402- format -> which );
403- if (!source_mbusformat )
404- return - EINVAL ;
355+ if (format -> pad ) {
356+ * source_fmt = * sink_fmt ;
357+
358+ return 0 ;
359+ }
405360
406361 v4l_bound_align_image (& format -> format .width , 1 , 65536 , 0 ,
407362 & format -> format .height , 1 , 65536 , 0 , 0 );
@@ -504,18 +459,8 @@ static int mei_csi_set_fmt(struct v4l2_subdev *sd,
504459 if (format -> format .field == V4L2_FIELD_ANY )
505460 format -> format .field = V4L2_FIELD_NONE ;
506461
507- mutex_lock (& csi -> lock );
508-
509- pad = & csi -> pads [format -> pad ];
510- if (pad -> flags & MEDIA_PAD_FL_SOURCE )
511- format -> format = csi -> format_mbus [CSI_PAD_SINK ];
512-
513- * mbusformat = format -> format ;
514-
515- if (pad -> flags & MEDIA_PAD_FL_SINK )
516- * source_mbusformat = format -> format ;
517-
518- mutex_unlock (& csi -> lock );
462+ * sink_fmt = format -> format ;
463+ * source_fmt = * sink_fmt ;
519464
520465 return 0 ;
521466}
@@ -554,7 +499,7 @@ static const struct v4l2_subdev_video_ops mei_csi_video_ops = {
554499};
555500
556501static const struct v4l2_subdev_pad_ops mei_csi_pad_ops = {
557- .get_fmt = mei_csi_get_fmt ,
502+ .get_fmt = v4l2_subdev_get_fmt ,
558503 .set_fmt = mei_csi_set_fmt ,
559504};
560505
@@ -749,6 +694,7 @@ static int mei_csi_probe(struct mei_cl_device *cldev,
749694 goto err_disable ;
750695
751696 csi -> subdev .dev = & cldev -> dev ;
697+ csi -> subdev .state_lock = & csi -> lock ;
752698 v4l2_subdev_init (& csi -> subdev , & mei_csi_subdev_ops );
753699 csi -> subdev .internal_ops = & mei_csi_internal_ops ;
754700 v4l2_set_subdevdata (& csi -> subdev , csi );
@@ -764,9 +710,6 @@ static int mei_csi_probe(struct mei_cl_device *cldev,
764710 if (ret )
765711 goto err_ctrl_handler ;
766712
767- csi -> format_mbus [CSI_PAD_SOURCE ] = mei_csi_format_mbus_default ;
768- csi -> format_mbus [CSI_PAD_SINK ] = mei_csi_format_mbus_default ;
769-
770713 csi -> pads [CSI_PAD_SOURCE ].flags = MEDIA_PAD_FL_SOURCE ;
771714 csi -> pads [CSI_PAD_SINK ].flags = MEDIA_PAD_FL_SINK ;
772715 ret = media_entity_pads_init (& csi -> subdev .entity , CSI_NUM_PADS ,
0 commit comments