[1/4] media: vidtv: Add media controller support

Message ID 20210105130956.1133222-2-dwlsalmeida@gmail.com (mailing list archive)
State Superseded, archived
Headers
Series media: vidtv: add media controller support |

Commit Message

Daniel Almeida Jan. 5, 2021, 1:09 p.m. UTC
  From: "Daniel W. S. Almeida" <dwlsalmeida@gmail.com>

Add media controller support when CONFIG_MEDIA_CONTROLLER_DVB is set
so that, in the future, a test sequence in v4l-utils can be written
without having to know which /dev/fooX device should be used.

Signed-off-by: Daniel W. S. Almeida <dwlsalmeida@gmail.com>
---
 .../media/test-drivers/vidtv/vidtv_bridge.c   | 26 +++++++++++++++++++
 .../media/test-drivers/vidtv/vidtv_bridge.h   |  6 +++++
 2 files changed, 32 insertions(+)
  

Comments

kernel test robot Jan. 5, 2021, 3:39 p.m. UTC | #1
Hi "Daniel,

I love your patch! Yet something to improve:

[auto build test ERROR on linuxtv-media/master]
[also build test ERROR on v5.11-rc2 next-20210104]
[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]

url:    https://github.com/0day-ci/linux/commits/Daniel-W-S-Almeida/media-vidtv-add-media-controller-support/20210105-211434
base:   git://linuxtv.org/media_tree.git master
config: x86_64-randconfig-s022-20210105 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.3-208-g46a52ca4-dirty
        # https://github.com/0day-ci/linux/commit/c06a13465ff899cdd2a6badae988b0f8f157f382
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Daniel-W-S-Almeida/media-vidtv-add-media-controller-support/20210105-211434
        git checkout c06a13465ff899cdd2a6badae988b0f8f157f382
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64 

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

All errors (new ones prefixed by >>):

   drivers/media/test-drivers/vidtv/vidtv_bridge.c: In function 'vidtv_bridge_probe':
>> drivers/media/test-drivers/vidtv/vidtv_bridge.c:527:29: error: 'struct vidtv_dvb' has no member named 'mdev'; did you mean 'pdev'?
     527 |  media_device_cleanup(&dvb->mdev);
         |                             ^~~~
         |                             pdev
   drivers/media/test-drivers/vidtv/vidtv_bridge.c:526:1: warning: label 'err_media_device_register' defined but not used [-Wunused-label]
     526 | err_media_device_register:
         | ^~~~~~~~~~~~~~~~~~~~~~~~~


vim +527 drivers/media/test-drivers/vidtv/vidtv_bridge.c

   522	
   523		dev_info(&pdev->dev, "Successfully initialized vidtv!\n");
   524		return ret;
   525	
   526	err_media_device_register:
 > 527		media_device_cleanup(&dvb->mdev);
   528	err_dvb:
   529		kfree(dvb);
   530		return ret;
   531	}
   532	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
  
kernel test robot Jan. 5, 2021, 4:44 p.m. UTC | #2
Hi "Daniel,

I love your patch! Yet something to improve:

[auto build test ERROR on linuxtv-media/master]
[also build test ERROR on v5.11-rc2 next-20210104]
[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]

url:    https://github.com/0day-ci/linux/commits/Daniel-W-S-Almeida/media-vidtv-add-media-controller-support/20210105-211434
base:   git://linuxtv.org/media_tree.git master
config: arm-randconfig-r021-20210105 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 5c951623bc8965fa1e89660f2f5f4a2944e4981a)
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
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://github.com/0day-ci/linux/commit/c06a13465ff899cdd2a6badae988b0f8f157f382
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Daniel-W-S-Almeida/media-vidtv-add-media-controller-support/20210105-211434
        git checkout c06a13465ff899cdd2a6badae988b0f8f157f382
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 

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

All errors (new ones prefixed by >>):

>> drivers/media/test-drivers/vidtv/vidtv_bridge.c:527:2: error: implicit declaration of function 'media_device_cleanup' [-Werror,-Wimplicit-function-declaration]
           media_device_cleanup(&dvb->mdev);
           ^
   drivers/media/test-drivers/vidtv/vidtv_bridge.c:527:2: note: did you mean 'media_device_pci_init'?
   include/media/media-device.h:468:20: note: 'media_device_pci_init' declared here
   static inline void media_device_pci_init(struct media_device *mdev,
                      ^
   drivers/media/test-drivers/vidtv/vidtv_bridge.c:527:29: error: no member named 'mdev' in 'struct vidtv_dvb'; did you mean 'pdev'?
           media_device_cleanup(&dvb->mdev);
                                      ^~~~
                                      pdev
   drivers/media/test-drivers/vidtv/vidtv_bridge.h:49:26: note: 'pdev' declared here
           struct platform_device *pdev;
                                   ^
   2 errors generated.


vim +/media_device_cleanup +527 drivers/media/test-drivers/vidtv/vidtv_bridge.c

   522	
   523		dev_info(&pdev->dev, "Successfully initialized vidtv!\n");
   524		return ret;
   525	
   526	err_media_device_register:
 > 527		media_device_cleanup(&dvb->mdev);
   528	err_dvb:
   529		kfree(dvb);
   530		return ret;
   531	}
   532	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
  
kernel test robot Jan. 5, 2021, 4:49 p.m. UTC | #3
Hi "Daniel,

I love your patch! Yet something to improve:

[auto build test ERROR on linuxtv-media/master]
[also build test ERROR on v5.11-rc2 next-20210104]
[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]

url:    https://github.com/0day-ci/linux/commits/Daniel-W-S-Almeida/media-vidtv-add-media-controller-support/20210105-211434
base:   git://linuxtv.org/media_tree.git master
config: h8300-randconfig-r014-20210105 (attached as .config)
compiler: h8300-linux-gcc (GCC) 9.3.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/0day-ci/linux/commit/c06a13465ff899cdd2a6badae988b0f8f157f382
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Daniel-W-S-Almeida/media-vidtv-add-media-controller-support/20210105-211434
        git checkout c06a13465ff899cdd2a6badae988b0f8f157f382
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=h8300 

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

All errors (new ones prefixed by >>):

   drivers/media/test-drivers/vidtv/vidtv_bridge.c: In function 'vidtv_bridge_probe':
>> drivers/media/test-drivers/vidtv/vidtv_bridge.c:527:2: error: implicit declaration of function 'media_device_cleanup'; did you mean 'media_entity_cleanup'? [-Werror=implicit-function-declaration]
     527 |  media_device_cleanup(&dvb->mdev);
         |  ^~~~~~~~~~~~~~~~~~~~
         |  media_entity_cleanup
   drivers/media/test-drivers/vidtv/vidtv_bridge.c:527:29: error: 'struct vidtv_dvb' has no member named 'mdev'; did you mean 'pdev'?
     527 |  media_device_cleanup(&dvb->mdev);
         |                             ^~~~
         |                             pdev
   drivers/media/test-drivers/vidtv/vidtv_bridge.c:526:1: warning: label 'err_media_device_register' defined but not used [-Wunused-label]
     526 | err_media_device_register:
         | ^~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors


vim +527 drivers/media/test-drivers/vidtv/vidtv_bridge.c

   522	
   523		dev_info(&pdev->dev, "Successfully initialized vidtv!\n");
   524		return ret;
   525	
   526	err_media_device_register:
 > 527		media_device_cleanup(&dvb->mdev);
   528	err_dvb:
   529		kfree(dvb);
   530		return ret;
   531	}
   532	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
  

Patch

diff --git a/drivers/media/test-drivers/vidtv/vidtv_bridge.c b/drivers/media/test-drivers/vidtv/vidtv_bridge.c
index fc64d0c8492a..4424f9585f86 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_bridge.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_bridge.c
@@ -17,6 +17,8 @@ 
 #include <linux/time.h>
 #include <linux/types.h>
 #include <linux/workqueue.h>
+#include <media/dvbdev.h>
+#include <media/media-device.h>
 
 #include "vidtv_bridge.h"
 #include "vidtv_common.h"
@@ -501,9 +503,28 @@  static int vidtv_bridge_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, dvb);
 
+#ifdef CONFIG_MEDIA_CONTROLLER_DVB
+	dvb->mdev.dev = &pdev->dev;
+
+	strscpy(dvb->mdev.model, "vidtv", sizeof(dvb->mdev.model));
+	strscpy(dvb->mdev.bus_info, "platform:vidtv", sizeof(dvb->mdev.bus_info));
+
+	media_device_init(&dvb->mdev);
+	ret = media_device_register(&dvb->mdev);
+	if (ret) {
+		dev_err(dvb->mdev.dev,
+			"media device register failed (err=%d)\n", ret);
+		goto err_media_device_register;
+	}
+
+	dvb_register_media_controller(&dvb->adapter, &dvb->mdev);
+#endif //CONFIG_MEDIA_CONTROLLER_DVB
+
 	dev_info(&pdev->dev, "Successfully initialized vidtv!\n");
 	return ret;
 
+err_media_device_register:
+	media_device_cleanup(&dvb->mdev);
 err_dvb:
 	kfree(dvb);
 	return ret;
@@ -516,6 +537,11 @@  static int vidtv_bridge_remove(struct platform_device *pdev)
 
 	dvb = platform_get_drvdata(pdev);
 
+#ifdef CONFIG_MEDIA_CONTROLLER_DVB
+	media_device_unregister(&dvb->mdev);
+	media_device_cleanup(&dvb->mdev);
+#endif //CONFIG_MEDIA_CONTROLLER_DVB
+
 	mutex_destroy(&dvb->feed_lock);
 
 	for (i = 0; i < NUM_FE; ++i) {
diff --git a/drivers/media/test-drivers/vidtv/vidtv_bridge.h b/drivers/media/test-drivers/vidtv/vidtv_bridge.h
index 2528adaee27d..d42899a31295 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_bridge.h
+++ b/drivers/media/test-drivers/vidtv/vidtv_bridge.h
@@ -24,6 +24,7 @@ 
 #include <media/dmxdev.h>
 #include <media/dvb_demux.h>
 #include <media/dvb_frontend.h>
+#include <media/media-device.h>
 
 #include "vidtv_mux.h"
 
@@ -42,6 +43,7 @@ 
  * @feed_lock: Protects access to the start/stop stream logic/data.
  * @streaming: Whether we are streaming now.
  * @mux: The abstraction responsible for delivering MPEG TS packets to the bridge.
+ * @mdev: The media_device struct for media controller support.
  */
 struct vidtv_dvb {
 	struct platform_device *pdev;
@@ -60,6 +62,10 @@  struct vidtv_dvb {
 	bool streaming;
 
 	struct vidtv_mux *mux;
+
+#ifdef CONFIG_MEDIA_CONTROLLER_DVB
+	struct media_device mdev;
+#endif //CONFIG_MEDIA_CONTROLLER_DVB
 };
 
 #endif // VIDTV_BRIDG_H