[01/18,media] tuner-core: add an input pad
Commit Message
Tuners actually have at least one connector on its
input.
Add a PAD to connect it.
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Comments
On 09/06/2015 07:30 PM, Mauro Carvalho Chehab wrote:
> Tuners actually have at least one connector on its
> input.
>
> Add a PAD to connect it.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
And yes, I do think tuner.h is the best place for the pad info.
Regards,
Hans
>
> diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c
> index f00f1a5f279c..a8e7e2398f7a 100644
> --- a/drivers/media/dvb-core/dvbdev.c
> +++ b/drivers/media/dvb-core/dvbdev.c
> @@ -34,6 +34,9 @@
> #include <linux/mutex.h>
> #include "dvbdev.h"
>
> +/* Due to enum tuner_pad_index */
> +#include <media/tuner.h>
> +
> static DEFINE_MUTEX(dvbdev_mutex);
> static int dvbdev_debug;
>
> @@ -552,7 +555,7 @@ void dvb_create_media_graph(struct dvb_adapter *adap)
> }
>
> if (tuner && demod)
> - media_create_pad_link(tuner, 0, demod, 0, 0);
> + media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, demod, 0, 0);
>
> if (demod && demux)
> media_create_pad_link(demod, 1, demux, 0, MEDIA_LNK_FL_ENABLED);
> diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c
> index e28cabe65934..f54c7d10f350 100644
> --- a/drivers/media/usb/au0828/au0828-core.c
> +++ b/drivers/media/usb/au0828/au0828-core.c
> @@ -27,6 +27,9 @@
> #include <media/v4l2-common.h>
> #include <linux/mutex.h>
>
> +/* Due to enum tuner_pad_index */
> +#include <media/tuner.h>
> +
> /*
> * 1 = General debug messages
> * 2 = USB handling
> @@ -260,7 +263,7 @@ static void au0828_create_media_graph(struct au0828_dev *dev)
> return;
>
> if (tuner)
> - media_create_pad_link(tuner, 0, decoder, 0,
> + media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, decoder, 0,
> MEDIA_LNK_FL_ENABLED);
> media_create_pad_link(decoder, 1, &dev->vdev.entity, 0,
> MEDIA_LNK_FL_ENABLED);
> diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c b/drivers/media/usb/cx231xx/cx231xx-cards.c
> index 3b5c9ae39ad3..1070d87efc65 100644
> --- a/drivers/media/usb/cx231xx/cx231xx-cards.c
> +++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
> @@ -1264,7 +1264,7 @@ static void cx231xx_create_media_graph(struct cx231xx *dev)
> return;
>
> if (tuner)
> - media_create_pad_link(tuner, 0, decoder, 0,
> + media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, decoder, 0,
> MEDIA_LNK_FL_ENABLED);
> media_create_pad_link(decoder, 1, &dev->vdev.entity, 0,
> MEDIA_LNK_FL_ENABLED);
> diff --git a/drivers/media/v4l2-core/tuner-core.c b/drivers/media/v4l2-core/tuner-core.c
> index 100b8f069640..b90f2a52db96 100644
> --- a/drivers/media/v4l2-core/tuner-core.c
> +++ b/drivers/media/v4l2-core/tuner-core.c
> @@ -134,8 +134,9 @@ struct tuner {
> unsigned int type; /* chip type id */
> void *config;
> const char *name;
> +
> #if defined(CONFIG_MEDIA_CONTROLLER)
> - struct media_pad pad;
> + struct media_pad pad[TUNER_NUM_PADS];
> #endif
> };
>
> @@ -695,11 +696,12 @@ static int tuner_probe(struct i2c_client *client,
> /* Should be just before return */
> register_client:
> #if defined(CONFIG_MEDIA_CONTROLLER)
> - t->pad.flags = MEDIA_PAD_FL_SOURCE;
> + t->pad[TUNER_PAD_RF_INPUT].flags = MEDIA_PAD_FL_SINK;
> + t->pad[TUNER_PAD_IF_OUTPUT].flags = MEDIA_PAD_FL_SOURCE;
> t->sd.entity.type = MEDIA_ENT_T_V4L2_SUBDEV_TUNER;
> t->sd.entity.name = t->name;
>
> - ret = media_entity_init(&t->sd.entity, 1, &t->pad);
> + ret = media_entity_init(&t->sd.entity, TUNER_NUM_PADS, &t->pad[0]);
> if (ret < 0) {
> tuner_err("failed to initialize media entity!\n");
> kfree(t);
> diff --git a/include/media/tuner.h b/include/media/tuner.h
> index b46ebb48fe74..95835c8069dd 100644
> --- a/include/media/tuner.h
> +++ b/include/media/tuner.h
> @@ -25,6 +25,14 @@
>
> #include <linux/videodev2.h>
>
> +/* Tuner PADs */
> +/* FIXME: is this the right place for it? */
> +enum tuner_pad_index {
> + TUNER_PAD_RF_INPUT,
> + TUNER_PAD_IF_OUTPUT,
> + TUNER_NUM_PADS
> +};
> +
> #define ADDR_UNSET (255)
>
> #define TUNER_TEMIC_PAL 0 /* 4002 FH5 (3X 7756, 9483) */
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Mauro,
Thank you for the patch.
On Sunday 06 September 2015 14:30:44 Mauro Carvalho Chehab wrote:
> Tuners actually have at least one connector on its
> input.
>
> Add a PAD to connect it.
The patch looks fine to me, but have you checked that there are no driver
instantiating a tuner that would get confused by this additional pad, for
instance in graph traversal code ?
Additionally it should be documented somewhere that drivers instantiating
tuners are responsible for creating and linking a connector to the tuner
input.
> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
>
> diff --git a/drivers/media/dvb-core/dvbdev.c
> b/drivers/media/dvb-core/dvbdev.c index f00f1a5f279c..a8e7e2398f7a 100644
> --- a/drivers/media/dvb-core/dvbdev.c
> +++ b/drivers/media/dvb-core/dvbdev.c
> @@ -34,6 +34,9 @@
> #include <linux/mutex.h>
> #include "dvbdev.h"
>
> +/* Due to enum tuner_pad_index */
> +#include <media/tuner.h>
> +
> static DEFINE_MUTEX(dvbdev_mutex);
> static int dvbdev_debug;
>
> @@ -552,7 +555,7 @@ void dvb_create_media_graph(struct dvb_adapter *adap)
> }
>
> if (tuner && demod)
> - media_create_pad_link(tuner, 0, demod, 0, 0);
> + media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, demod, 0, 0);
>
> if (demod && demux)
> media_create_pad_link(demod, 1, demux, 0, MEDIA_LNK_FL_ENABLED);
> diff --git a/drivers/media/usb/au0828/au0828-core.c
> b/drivers/media/usb/au0828/au0828-core.c index e28cabe65934..f54c7d10f350
> 100644
> --- a/drivers/media/usb/au0828/au0828-core.c
> +++ b/drivers/media/usb/au0828/au0828-core.c
> @@ -27,6 +27,9 @@
> #include <media/v4l2-common.h>
> #include <linux/mutex.h>
>
> +/* Due to enum tuner_pad_index */
> +#include <media/tuner.h>
> +
> /*
> * 1 = General debug messages
> * 2 = USB handling
> @@ -260,7 +263,7 @@ static void au0828_create_media_graph(struct au0828_dev
> *dev) return;
>
> if (tuner)
> - media_create_pad_link(tuner, 0, decoder, 0,
> + media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, decoder, 0,
> MEDIA_LNK_FL_ENABLED);
> media_create_pad_link(decoder, 1, &dev->vdev.entity, 0,
> MEDIA_LNK_FL_ENABLED);
> diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c
> b/drivers/media/usb/cx231xx/cx231xx-cards.c index
> 3b5c9ae39ad3..1070d87efc65 100644
> --- a/drivers/media/usb/cx231xx/cx231xx-cards.c
> +++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
> @@ -1264,7 +1264,7 @@ static void cx231xx_create_media_graph(struct cx231xx
> *dev) return;
>
> if (tuner)
> - media_create_pad_link(tuner, 0, decoder, 0,
> + media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, decoder, 0,
> MEDIA_LNK_FL_ENABLED);
> media_create_pad_link(decoder, 1, &dev->vdev.entity, 0,
> MEDIA_LNK_FL_ENABLED);
> diff --git a/drivers/media/v4l2-core/tuner-core.c
> b/drivers/media/v4l2-core/tuner-core.c index 100b8f069640..b90f2a52db96
> 100644
> --- a/drivers/media/v4l2-core/tuner-core.c
> +++ b/drivers/media/v4l2-core/tuner-core.c
> @@ -134,8 +134,9 @@ struct tuner {
> unsigned int type; /* chip type id */
> void *config;
> const char *name;
> +
> #if defined(CONFIG_MEDIA_CONTROLLER)
> - struct media_pad pad;
> + struct media_pad pad[TUNER_NUM_PADS];
> #endif
> };
>
> @@ -695,11 +696,12 @@ static int tuner_probe(struct i2c_client *client,
> /* Should be just before return */
> register_client:
> #if defined(CONFIG_MEDIA_CONTROLLER)
> - t->pad.flags = MEDIA_PAD_FL_SOURCE;
> + t->pad[TUNER_PAD_RF_INPUT].flags = MEDIA_PAD_FL_SINK;
> + t->pad[TUNER_PAD_IF_OUTPUT].flags = MEDIA_PAD_FL_SOURCE;
> t->sd.entity.type = MEDIA_ENT_T_V4L2_SUBDEV_TUNER;
> t->sd.entity.name = t->name;
>
> - ret = media_entity_init(&t->sd.entity, 1, &t->pad);
> + ret = media_entity_init(&t->sd.entity, TUNER_NUM_PADS, &t->pad[0]);
> if (ret < 0) {
> tuner_err("failed to initialize media entity!\n");
> kfree(t);
> diff --git a/include/media/tuner.h b/include/media/tuner.h
> index b46ebb48fe74..95835c8069dd 100644
> --- a/include/media/tuner.h
> +++ b/include/media/tuner.h
> @@ -25,6 +25,14 @@
>
> #include <linux/videodev2.h>
>
> +/* Tuner PADs */
> +/* FIXME: is this the right place for it? */
> +enum tuner_pad_index {
> + TUNER_PAD_RF_INPUT,
> + TUNER_PAD_IF_OUTPUT,
> + TUNER_NUM_PADS
> +};
> +
> #define ADDR_UNSET (255)
>
> #define TUNER_TEMIC_PAL 0 /* 4002 FH5 (3X 7756, 9483) */
Em Mon, 23 Nov 2015 22:01:23 +0200
Laurent Pinchart <laurent.pinchart@ideasonboard.com> escreveu:
> Hi Mauro,
>
> Thank you for the patch.
>
> On Sunday 06 September 2015 14:30:44 Mauro Carvalho Chehab wrote:
> > Tuners actually have at least one connector on its
> > input.
> >
> > Add a PAD to connect it.
>
> The patch looks fine to me, but have you checked that there are no driver
> instantiating a tuner that would get confused by this additional pad, for
> instance in graph traversal code ?
The only drivers that use tuners ATM are the hybrid TV drivers that
we're adding. My plan is to have all of those fixed in time for 4.5.
> Additionally it should be documented somewhere that drivers instantiating
> tuners are responsible for creating and linking a connector to the tuner
> input.
True. I'll add it at the documentation.
>
> > Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
> >
> > diff --git a/drivers/media/dvb-core/dvbdev.c
> > b/drivers/media/dvb-core/dvbdev.c index f00f1a5f279c..a8e7e2398f7a 100644
> > --- a/drivers/media/dvb-core/dvbdev.c
> > +++ b/drivers/media/dvb-core/dvbdev.c
> > @@ -34,6 +34,9 @@
> > #include <linux/mutex.h>
> > #include "dvbdev.h"
> >
> > +/* Due to enum tuner_pad_index */
> > +#include <media/tuner.h>
> > +
> > static DEFINE_MUTEX(dvbdev_mutex);
> > static int dvbdev_debug;
> >
> > @@ -552,7 +555,7 @@ void dvb_create_media_graph(struct dvb_adapter *adap)
> > }
> >
> > if (tuner && demod)
> > - media_create_pad_link(tuner, 0, demod, 0, 0);
> > + media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, demod, 0, 0);
> >
> > if (demod && demux)
> > media_create_pad_link(demod, 1, demux, 0, MEDIA_LNK_FL_ENABLED);
> > diff --git a/drivers/media/usb/au0828/au0828-core.c
> > b/drivers/media/usb/au0828/au0828-core.c index e28cabe65934..f54c7d10f350
> > 100644
> > --- a/drivers/media/usb/au0828/au0828-core.c
> > +++ b/drivers/media/usb/au0828/au0828-core.c
> > @@ -27,6 +27,9 @@
> > #include <media/v4l2-common.h>
> > #include <linux/mutex.h>
> >
> > +/* Due to enum tuner_pad_index */
> > +#include <media/tuner.h>
> > +
> > /*
> > * 1 = General debug messages
> > * 2 = USB handling
> > @@ -260,7 +263,7 @@ static void au0828_create_media_graph(struct au0828_dev
> > *dev) return;
> >
> > if (tuner)
> > - media_create_pad_link(tuner, 0, decoder, 0,
> > + media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, decoder, 0,
> > MEDIA_LNK_FL_ENABLED);
> > media_create_pad_link(decoder, 1, &dev->vdev.entity, 0,
> > MEDIA_LNK_FL_ENABLED);
> > diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c
> > b/drivers/media/usb/cx231xx/cx231xx-cards.c index
> > 3b5c9ae39ad3..1070d87efc65 100644
> > --- a/drivers/media/usb/cx231xx/cx231xx-cards.c
> > +++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
> > @@ -1264,7 +1264,7 @@ static void cx231xx_create_media_graph(struct cx231xx
> > *dev) return;
> >
> > if (tuner)
> > - media_create_pad_link(tuner, 0, decoder, 0,
> > + media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, decoder, 0,
> > MEDIA_LNK_FL_ENABLED);
> > media_create_pad_link(decoder, 1, &dev->vdev.entity, 0,
> > MEDIA_LNK_FL_ENABLED);
> > diff --git a/drivers/media/v4l2-core/tuner-core.c
> > b/drivers/media/v4l2-core/tuner-core.c index 100b8f069640..b90f2a52db96
> > 100644
> > --- a/drivers/media/v4l2-core/tuner-core.c
> > +++ b/drivers/media/v4l2-core/tuner-core.c
> > @@ -134,8 +134,9 @@ struct tuner {
> > unsigned int type; /* chip type id */
> > void *config;
> > const char *name;
> > +
> > #if defined(CONFIG_MEDIA_CONTROLLER)
> > - struct media_pad pad;
> > + struct media_pad pad[TUNER_NUM_PADS];
> > #endif
> > };
> >
> > @@ -695,11 +696,12 @@ static int tuner_probe(struct i2c_client *client,
> > /* Should be just before return */
> > register_client:
> > #if defined(CONFIG_MEDIA_CONTROLLER)
> > - t->pad.flags = MEDIA_PAD_FL_SOURCE;
> > + t->pad[TUNER_PAD_RF_INPUT].flags = MEDIA_PAD_FL_SINK;
> > + t->pad[TUNER_PAD_IF_OUTPUT].flags = MEDIA_PAD_FL_SOURCE;
> > t->sd.entity.type = MEDIA_ENT_T_V4L2_SUBDEV_TUNER;
> > t->sd.entity.name = t->name;
> >
> > - ret = media_entity_init(&t->sd.entity, 1, &t->pad);
> > + ret = media_entity_init(&t->sd.entity, TUNER_NUM_PADS, &t->pad[0]);
> > if (ret < 0) {
> > tuner_err("failed to initialize media entity!\n");
> > kfree(t);
> > diff --git a/include/media/tuner.h b/include/media/tuner.h
> > index b46ebb48fe74..95835c8069dd 100644
> > --- a/include/media/tuner.h
> > +++ b/include/media/tuner.h
> > @@ -25,6 +25,14 @@
> >
> > #include <linux/videodev2.h>
> >
> > +/* Tuner PADs */
> > +/* FIXME: is this the right place for it? */
> > +enum tuner_pad_index {
> > + TUNER_PAD_RF_INPUT,
> > + TUNER_PAD_IF_OUTPUT,
> > + TUNER_NUM_PADS
> > +};
> > +
> > #define ADDR_UNSET (255)
> >
> > #define TUNER_TEMIC_PAL 0 /* 4002 FH5 (3X 7756, 9483) */
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
@@ -34,6 +34,9 @@
#include <linux/mutex.h>
#include "dvbdev.h"
+/* Due to enum tuner_pad_index */
+#include <media/tuner.h>
+
static DEFINE_MUTEX(dvbdev_mutex);
static int dvbdev_debug;
@@ -552,7 +555,7 @@ void dvb_create_media_graph(struct dvb_adapter *adap)
}
if (tuner && demod)
- media_create_pad_link(tuner, 0, demod, 0, 0);
+ media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, demod, 0, 0);
if (demod && demux)
media_create_pad_link(demod, 1, demux, 0, MEDIA_LNK_FL_ENABLED);
@@ -27,6 +27,9 @@
#include <media/v4l2-common.h>
#include <linux/mutex.h>
+/* Due to enum tuner_pad_index */
+#include <media/tuner.h>
+
/*
* 1 = General debug messages
* 2 = USB handling
@@ -260,7 +263,7 @@ static void au0828_create_media_graph(struct au0828_dev *dev)
return;
if (tuner)
- media_create_pad_link(tuner, 0, decoder, 0,
+ media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, decoder, 0,
MEDIA_LNK_FL_ENABLED);
media_create_pad_link(decoder, 1, &dev->vdev.entity, 0,
MEDIA_LNK_FL_ENABLED);
@@ -1264,7 +1264,7 @@ static void cx231xx_create_media_graph(struct cx231xx *dev)
return;
if (tuner)
- media_create_pad_link(tuner, 0, decoder, 0,
+ media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT, decoder, 0,
MEDIA_LNK_FL_ENABLED);
media_create_pad_link(decoder, 1, &dev->vdev.entity, 0,
MEDIA_LNK_FL_ENABLED);
@@ -134,8 +134,9 @@ struct tuner {
unsigned int type; /* chip type id */
void *config;
const char *name;
+
#if defined(CONFIG_MEDIA_CONTROLLER)
- struct media_pad pad;
+ struct media_pad pad[TUNER_NUM_PADS];
#endif
};
@@ -695,11 +696,12 @@ static int tuner_probe(struct i2c_client *client,
/* Should be just before return */
register_client:
#if defined(CONFIG_MEDIA_CONTROLLER)
- t->pad.flags = MEDIA_PAD_FL_SOURCE;
+ t->pad[TUNER_PAD_RF_INPUT].flags = MEDIA_PAD_FL_SINK;
+ t->pad[TUNER_PAD_IF_OUTPUT].flags = MEDIA_PAD_FL_SOURCE;
t->sd.entity.type = MEDIA_ENT_T_V4L2_SUBDEV_TUNER;
t->sd.entity.name = t->name;
- ret = media_entity_init(&t->sd.entity, 1, &t->pad);
+ ret = media_entity_init(&t->sd.entity, TUNER_NUM_PADS, &t->pad[0]);
if (ret < 0) {
tuner_err("failed to initialize media entity!\n");
kfree(t);
@@ -25,6 +25,14 @@
#include <linux/videodev2.h>
+/* Tuner PADs */
+/* FIXME: is this the right place for it? */
+enum tuner_pad_index {
+ TUNER_PAD_RF_INPUT,
+ TUNER_PAD_IF_OUTPUT,
+ TUNER_NUM_PADS
+};
+
#define ADDR_UNSET (255)
#define TUNER_TEMIC_PAL 0 /* 4002 FH5 (3X 7756, 9483) */