[v11,6/6] media: microchip: microchip-isc: move media_pipeline_* to (un)prepare cb

Message ID 20221102131500.476024-7-eugen.hristev@microchip.com
State New
Headers
Series media: atmel: atmel-isc: driver redesign |

Commit Message

Eugen Hristev Nov. 2, 2022, 1:15 p.m. UTC
  Move the media_pipeline_start/stop calls from start/stop streaming to
the new prepare_streaming and unprepare_streaming callbacks.

Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
---
 .../platform/microchip/microchip-isc-base.c   | 27 ++++++++++++-------
 1 file changed, 17 insertions(+), 10 deletions(-)
  

Comments

kernel test robot Nov. 2, 2022, 4:54 p.m. UTC | #1
Hi Eugen,

I love your patch! Perhaps something to improve:

[auto build test WARNING on media-tree/master]
[also build test WARNING on sailus-media-tree/streams soc/for-next linus/master v6.1-rc3 next-20221102]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Eugen-Hristev/media-atmel-atmel-isc-driver-redesign/20221102-211809
base:   git://linuxtv.org/media_tree.git master
patch link:    https://lore.kernel.org/r/20221102131500.476024-7-eugen.hristev%40microchip.com
patch subject: [PATCH v11 6/6] media: microchip: microchip-isc: move media_pipeline_* to (un)prepare cb
config: sparc-allyesconfig
compiler: sparc64-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/1a1878d4c57910ecb143eaf6056fbbac80c29027
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Eugen-Hristev/media-atmel-atmel-isc-driver-redesign/20221102-211809
        git checkout 1a1878d4c57910ecb143eaf6056fbbac80c29027
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sparc SHELL=/bin/bash drivers/media/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/media/platform/microchip/microchip-isc-base.c:480:10: error: 'const struct vb2_ops' has no member named 'prepare_streaming'; did you mean 'start_streaming'?
     480 |         .prepare_streaming      = isc_prepare_streaming,
         |          ^~~~~~~~~~~~~~~~~
         |          start_streaming
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: error: initialization of 'void (*)(struct vb2_buffer *)' from incompatible pointer type 'int (*)(struct vb2_queue *)' [-Werror=incompatible-pointer-types]
     480 |         .prepare_streaming      = isc_prepare_streaming,
         |                                   ^~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: note: (near initialization for 'isc_vb2_ops.buf_request_complete')
   drivers/media/platform/microchip/microchip-isc-base.c:481:10: error: 'const struct vb2_ops' has no member named 'unprepare_streaming'; did you mean 'start_streaming'?
     481 |         .unprepare_streaming    = isc_unprepare_streaming,
         |          ^~~~~~~~~~~~~~~~~~~
         |          start_streaming
>> drivers/media/platform/microchip/microchip-isc-base.c:481:35: warning: excess elements in struct initializer
     481 |         .unprepare_streaming    = isc_unprepare_streaming,
         |                                   ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/microchip/microchip-isc-base.c:481:35: note: (near initialization for 'isc_vb2_ops')
   cc1: some warnings being treated as errors


vim +481 drivers/media/platform/microchip/microchip-isc-base.c

   471	
   472	static const struct vb2_ops isc_vb2_ops = {
   473		.queue_setup		= isc_queue_setup,
   474		.wait_prepare		= vb2_ops_wait_prepare,
   475		.wait_finish		= vb2_ops_wait_finish,
   476		.buf_prepare		= isc_buffer_prepare,
   477		.start_streaming	= isc_start_streaming,
   478		.stop_streaming		= isc_stop_streaming,
   479		.buf_queue		= isc_buffer_queue,
   480		.prepare_streaming	= isc_prepare_streaming,
 > 481		.unprepare_streaming	= isc_unprepare_streaming,
   482	};
   483
  
kernel test robot Nov. 2, 2022, 11:59 p.m. UTC | #2
Hi Eugen,

I love your patch! Yet something to improve:

[auto build test ERROR on media-tree/master]
[also build test ERROR on sailus-media-tree/streams soc/for-next linus/master v6.1-rc3 next-20221102]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Eugen-Hristev/media-atmel-atmel-isc-driver-redesign/20221102-211809
base:   git://linuxtv.org/media_tree.git master
patch link:    https://lore.kernel.org/r/20221102131500.476024-7-eugen.hristev%40microchip.com
patch subject: [PATCH v11 6/6] media: microchip: microchip-isc: move media_pipeline_* to (un)prepare cb
config: s390-allyesconfig
compiler: s390-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/1a1878d4c57910ecb143eaf6056fbbac80c29027
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Eugen-Hristev/media-atmel-atmel-isc-driver-redesign/20221102-211809
        git checkout 1a1878d4c57910ecb143eaf6056fbbac80c29027
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=s390 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/media/platform/microchip/microchip-isc-base.c:480:10: error: 'const struct vb2_ops' has no member named 'prepare_streaming'; did you mean 'start_streaming'?
     480 |         .prepare_streaming      = isc_prepare_streaming,
         |          ^~~~~~~~~~~~~~~~~
         |          start_streaming
>> drivers/media/platform/microchip/microchip-isc-base.c:480:35: error: positional initialization of field in 'struct' declared with 'designated_init' attribute [-Werror=designated-init]
     480 |         .prepare_streaming      = isc_prepare_streaming,
         |                                   ^~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: note: (near initialization for 'isc_vb2_ops')
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: error: initialization of 'void (*)(struct vb2_queue *)' from incompatible pointer type 'int (*)(struct vb2_queue *)' [-Werror=incompatible-pointer-types]
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: note: (near initialization for 'isc_vb2_ops.wait_finish')
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: warning: initialized field overwritten [-Woverride-init]
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: note: (near initialization for 'isc_vb2_ops.wait_finish')
   drivers/media/platform/microchip/microchip-isc-base.c:481:10: error: 'const struct vb2_ops' has no member named 'unprepare_streaming'; did you mean 'start_streaming'?
     481 |         .unprepare_streaming    = isc_unprepare_streaming,
         |          ^~~~~~~~~~~~~~~~~~~
         |          start_streaming
   drivers/media/platform/microchip/microchip-isc-base.c:481:35: error: positional initialization of field in 'struct' declared with 'designated_init' attribute [-Werror=designated-init]
     481 |         .unprepare_streaming    = isc_unprepare_streaming,
         |                                   ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/microchip/microchip-isc-base.c:481:35: note: (near initialization for 'isc_vb2_ops')
   drivers/media/platform/microchip/microchip-isc-base.c:481:35: error: initialization of 'int (*)(struct vb2_buffer *)' from incompatible pointer type 'void (*)(struct vb2_queue *)' [-Werror=incompatible-pointer-types]
   drivers/media/platform/microchip/microchip-isc-base.c:481:35: note: (near initialization for 'isc_vb2_ops.buf_init')
   cc1: some warnings being treated as errors


vim +480 drivers/media/platform/microchip/microchip-isc-base.c

   471	
   472	static const struct vb2_ops isc_vb2_ops = {
   473		.queue_setup		= isc_queue_setup,
   474		.wait_prepare		= vb2_ops_wait_prepare,
   475		.wait_finish		= vb2_ops_wait_finish,
   476		.buf_prepare		= isc_buffer_prepare,
   477		.start_streaming	= isc_start_streaming,
   478		.stop_streaming		= isc_stop_streaming,
   479		.buf_queue		= isc_buffer_queue,
 > 480		.prepare_streaming	= isc_prepare_streaming,
   481		.unprepare_streaming	= isc_unprepare_streaming,
   482	};
   483
  
kernel test robot Nov. 3, 2022, 5:13 a.m. UTC | #3
Hi Eugen,

I love your patch! Yet something to improve:

[auto build test ERROR on media-tree/master]
[also build test ERROR on sailus-media-tree/streams soc/for-next linus/master v6.1-rc3 next-20221102]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Eugen-Hristev/media-atmel-atmel-isc-driver-redesign/20221102-211809
base:   git://linuxtv.org/media_tree.git master
patch link:    https://lore.kernel.org/r/20221102131500.476024-7-eugen.hristev%40microchip.com
patch subject: [PATCH v11 6/6] media: microchip: microchip-isc: move media_pipeline_* to (un)prepare cb
config: mips-allyesconfig
compiler: mips-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/1a1878d4c57910ecb143eaf6056fbbac80c29027
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Eugen-Hristev/media-atmel-atmel-isc-driver-redesign/20221102-211809
        git checkout 1a1878d4c57910ecb143eaf6056fbbac80c29027
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/media/platform/microchip/microchip-isc-base.c:480:10: error: 'const struct vb2_ops' has no member named 'prepare_streaming'; did you mean 'start_streaming'?
     480 |         .prepare_streaming      = isc_prepare_streaming,
         |          ^~~~~~~~~~~~~~~~~
         |          start_streaming
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: error: positional initialization of field in 'struct' declared with 'designated_init' attribute [-Werror=designated-init]
     480 |         .prepare_streaming      = isc_prepare_streaming,
         |                                   ^~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: note: (near initialization for 'isc_vb2_ops')
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: error: initialization of 'int (*)(struct vb2_queue *, unsigned int *, unsigned int *, unsigned int *, struct device **)' from incompatible pointer type 'int (*)(struct vb2_queue *)' [-Werror=incompatible-pointer-types]
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: note: (near initialization for 'isc_vb2_ops.queue_setup')
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: warning: initialized field overwritten [-Woverride-init]
   drivers/media/platform/microchip/microchip-isc-base.c:480:35: note: (near initialization for 'isc_vb2_ops.queue_setup')
   drivers/media/platform/microchip/microchip-isc-base.c:481:10: error: 'const struct vb2_ops' has no member named 'unprepare_streaming'; did you mean 'start_streaming'?
     481 |         .unprepare_streaming    = isc_unprepare_streaming,
         |          ^~~~~~~~~~~~~~~~~~~
         |          start_streaming
   drivers/media/platform/microchip/microchip-isc-base.c:481:35: error: positional initialization of field in 'struct' declared with 'designated_init' attribute [-Werror=designated-init]
     481 |         .unprepare_streaming    = isc_unprepare_streaming,
         |                                   ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/microchip/microchip-isc-base.c:481:35: note: (near initialization for 'isc_vb2_ops')
>> drivers/media/platform/microchip/microchip-isc-base.c:481:35: error: initialization of 'int (*)(struct vb2_buffer *)' from incompatible pointer type 'void (*)(struct vb2_queue *)' [-Werror=incompatible-pointer-types]
   drivers/media/platform/microchip/microchip-isc-base.c:481:35: note: (near initialization for 'isc_vb2_ops.buf_prepare')
   drivers/media/platform/microchip/microchip-isc-base.c:481:35: warning: initialized field overwritten [-Woverride-init]
   drivers/media/platform/microchip/microchip-isc-base.c:481:35: note: (near initialization for 'isc_vb2_ops.buf_prepare')
   cc1: some warnings being treated as errors


vim +481 drivers/media/platform/microchip/microchip-isc-base.c

   471	
   472	static const struct vb2_ops isc_vb2_ops = {
   473		.queue_setup		= isc_queue_setup,
   474		.wait_prepare		= vb2_ops_wait_prepare,
   475		.wait_finish		= vb2_ops_wait_finish,
   476		.buf_prepare		= isc_buffer_prepare,
   477		.start_streaming	= isc_start_streaming,
   478		.stop_streaming		= isc_stop_streaming,
   479		.buf_queue		= isc_buffer_queue,
   480		.prepare_streaming	= isc_prepare_streaming,
 > 481		.unprepare_streaming	= isc_unprepare_streaming,
   482	};
   483
  

Patch

diff --git a/drivers/media/platform/microchip/microchip-isc-base.c b/drivers/media/platform/microchip/microchip-isc-base.c
index 00651c313e9d..eed96e2a6a00 100644
--- a/drivers/media/platform/microchip/microchip-isc-base.c
+++ b/drivers/media/platform/microchip/microchip-isc-base.c
@@ -328,6 +328,13 @@  static int isc_configure(struct isc_device *isc)
 	return isc_update_profile(isc);
 }
 
+static int isc_prepare_streaming(struct vb2_queue *vq)
+{
+	struct isc_device *isc = vb2_get_drv_priv(vq);
+
+	return media_pipeline_start(isc->video_dev.entity.pads, &isc->mpipe);
+}
+
 static int isc_start_streaming(struct vb2_queue *vq, unsigned int count)
 {
 	struct isc_device *isc = vb2_get_drv_priv(vq);
@@ -336,10 +343,6 @@  static int isc_start_streaming(struct vb2_queue *vq, unsigned int count)
 	unsigned long flags;
 	int ret;
 
-	ret = media_pipeline_start(isc->video_dev.entity.pads, &isc->mpipe);
-	if (ret)
-		goto err_pipeline_start;
-
 	/* Enable stream on the sub device */
 	ret = v4l2_subdev_call(isc->current_subdev->sd, video, s_stream, 1);
 	if (ret && ret != -ENOIOCTLCMD) {
@@ -389,9 +392,6 @@  static int isc_start_streaming(struct vb2_queue *vq, unsigned int count)
 	v4l2_subdev_call(isc->current_subdev->sd, video, s_stream, 0);
 
 err_start_stream:
-	media_pipeline_stop(isc->video_dev.entity.pads);
-
-err_pipeline_start:
 	spin_lock_irqsave(&isc->dma_queue_lock, flags);
 	list_for_each_entry(buf, &isc->dma_queue, list)
 		vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_QUEUED);
@@ -401,6 +401,14 @@  static int isc_start_streaming(struct vb2_queue *vq, unsigned int count)
 	return ret;
 }
 
+static void isc_unprepare_streaming(struct vb2_queue *vq)
+{
+	struct isc_device *isc = vb2_get_drv_priv(vq);
+
+	/* Stop media pipeline */
+	media_pipeline_stop(isc->video_dev.entity.pads);
+}
+
 static void isc_stop_streaming(struct vb2_queue *vq)
 {
 	struct isc_device *isc = vb2_get_drv_priv(vq);
@@ -430,9 +438,6 @@  static void isc_stop_streaming(struct vb2_queue *vq)
 	if (ret && ret != -ENOIOCTLCMD)
 		v4l2_err(&isc->v4l2_dev, "stream off failed in subdev\n");
 
-	/* Stop media pipeline */
-	media_pipeline_stop(isc->video_dev.entity.pads);
-
 	/* Release all active buffers */
 	spin_lock_irqsave(&isc->dma_queue_lock, flags);
 	if (unlikely(isc->cur_frm)) {
@@ -472,6 +477,8 @@  static const struct vb2_ops isc_vb2_ops = {
 	.start_streaming	= isc_start_streaming,
 	.stop_streaming		= isc_stop_streaming,
 	.buf_queue		= isc_buffer_queue,
+	.prepare_streaming	= isc_prepare_streaming,
+	.unprepare_streaming	= isc_unprepare_streaming,
 };
 
 static int isc_querycap(struct file *file, void *priv,