Commit e259572d authored by Daniel W. S. Almeida's avatar Daniel W. S. Almeida Committed by Mauro Carvalho Chehab
Browse files

media: vidtv: Add media controller support



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.

[mchehab: avoided usage of C99 comments]
Signed-off-by: default avatarDaniel W. S. Almeida <dwlsalmeida@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 8d23ada8
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -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,30 @@ 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;

#ifdef CONFIG_MEDIA_CONTROLLER_DVB
err_media_device_register:
	media_device_cleanup(&dvb->mdev);
#endif /* CONFIG_MEDIA_CONTROLLER_DVB */
err_dvb:
	kfree(dvb);
	return ret;
@@ -516,6 +539,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) {
+6 −0
Original line number Diff line number Diff line
@@ -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