[media] cx25840: fill the media controller entity
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>
Sat, 3 Jan 2015 16:10:08 +0000 (13:10 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Fri, 13 Feb 2015 23:10:14 +0000 (21:10 -0200)
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>
drivers/media/i2c/cx25840/cx25840-core.c
drivers/media/i2c/cx25840/cx25840-core.h

index 573e08826b9bb4bdc21a3f33d8344c4fef2e0c1a..bdb5bb6b58daa5c135bacd4ccfdf21704db14d2f 100644 (file)
@@ -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:
index 37bc04217c4457cae322c91ce8fb9ed3ece6167f..17b409f55445d393272edab3feb8aecb97b5bba2 100644 (file)
@@ -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)