summaryrefslogtreecommitdiff
path: root/drivers/media/i2c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-01-03 16:10:08 (GMT)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-02-13 23:10:14 (GMT)
commit8cd61969c8a9b564435f4f903bddc09dfd39f944 (patch)
treeffa6e758ec0e6c22fd32cc74241399edd6371121 /drivers/media/i2c
parent00a5a4bf7bb40fe8cd5de042948b925c54b016de (diff)
downloadlinux-8cd61969c8a9b564435f4f903bddc09dfd39f944.tar.xz
[media] cx25840: fill the media controller entity
Instead of keeping the media controller entity not initialized, fill it and create the pads for cx25840. Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/i2c')
-rw-r--r--drivers/media/i2c/cx25840/cx25840-core.c18
-rw-r--r--drivers/media/i2c/cx25840/cx25840-core.h3
2 files changed, 21 insertions, 0 deletions
diff --git a/drivers/media/i2c/cx25840/cx25840-core.c b/drivers/media/i2c/cx25840/cx25840-core.c
index 573e088..bdb5bb6 100644
--- a/drivers/media/i2c/cx25840/cx25840-core.c
+++ b/drivers/media/i2c/cx25840/cx25840-core.c
@@ -5137,6 +5137,9 @@ static int cx25840_probe(struct i2c_client *client,
int default_volume;
u32 id;
u16 device_id;
+#if defined(CONFIG_MEDIA_CONTROLLER)
+ int ret;
+#endif
/* Check if the adapter supports the needed features */
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
@@ -5178,6 +5181,21 @@ static int cx25840_probe(struct i2c_client *client,
sd = &state->sd;
v4l2_i2c_subdev_init(sd, client, &cx25840_ops);
+#if defined(CONFIG_MEDIA_CONTROLLER)
+ /* TODO: need to represent analog inputs too */
+ state->pads[0].flags = MEDIA_PAD_FL_SINK; /* Tuner or input */
+ state->pads[1].flags = MEDIA_PAD_FL_SOURCE; /* Video */
+ state->pads[2].flags = MEDIA_PAD_FL_SOURCE; /* VBI */
+ sd->entity.type = MEDIA_ENT_T_V4L2_SUBDEV_DECODER;
+
+ ret = media_entity_init(&sd->entity, ARRAY_SIZE(state->pads),
+ state->pads, 0);
+ if (ret < 0) {
+ v4l_info(client, "failed to initialize media entity!\n");
+ kfree(state);
+ return -ENODEV;
+ }
+#endif
switch (id) {
case CX23885_AV:
diff --git a/drivers/media/i2c/cx25840/cx25840-core.h b/drivers/media/i2c/cx25840/cx25840-core.h
index 37bc042..17b409f 100644
--- a/drivers/media/i2c/cx25840/cx25840-core.h
+++ b/drivers/media/i2c/cx25840/cx25840-core.h
@@ -64,6 +64,9 @@ struct cx25840_state {
wait_queue_head_t fw_wait; /* wake up when the fw load is finished */
struct work_struct fw_work; /* work entry for fw load */
struct cx25840_ir_state *ir_state;
+#if defined(CONFIG_MEDIA_CONTROLLER)
+ struct media_pad pads[3];
+#endif
};
static inline struct cx25840_state *to_state(struct v4l2_subdev *sd)