Drop the driver specific connector parsing since we can use the generic
parsing provided by the v4l2-fwnode core.

Signed-off-by: Marco Felsch <m.fel...@pengutronix.de>
---
 drivers/media/i2c/tvp5150.c | 75 ++++++++++---------------------------
 1 file changed, 20 insertions(+), 55 deletions(-)

diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
index 1f0dd9d3655c..f3a2ad00a40d 100644
--- a/drivers/media/i2c/tvp5150.c
+++ b/drivers/media/i2c/tvp5150.c
@@ -59,10 +59,9 @@ enum tvp5150_pads_state {
 };
 
 struct tvp5150_connector {
+       struct v4l2_fwnode_connector base;
        struct media_entity ent;
        struct media_pad pad;
-       unsigned int port_num;
-       bool is_svideo;
 };
 #endif
 
@@ -1310,7 +1309,8 @@ static int tvp5150_link_setup(struct media_entity *entity,
        /* check if the svideo connector should be enabled */
        for (i = 0; i < decoder->connectors_num; i++) {
                if (remote->entity == &decoder->connectors[i].ent) {
-                       is_svideo = decoder->connectors[i].is_svideo;
+                       is_svideo =
+                          decoder->connectors[i].base.type == V4L2_CON_SVIDEO;
                        break;
                }
        }
@@ -1555,8 +1555,9 @@ static int tvp5150_registered(struct v4l2_subdev *sd)
        for (i = 0; i < decoder->connectors_num; i++) {
                struct media_entity *con = &decoder->connectors[i].ent;
                struct media_pad *pad = &decoder->connectors[i].pad;
-               unsigned int port = decoder->connectors[i].port_num;
-               bool is_svideo = decoder->connectors[i].is_svideo;
+               unsigned int port = decoder->connectors[i].base.remote_port;
+               bool is_svideo =
+                       decoder->connectors[i].base.type == V4L2_CON_SVIDEO;
                int flags = i ? 0 : MEDIA_LNK_FL_ENABLED;
 
                pad->flags = MEDIA_PAD_FL_SOURCE;
@@ -1821,8 +1822,6 @@ static int tvp5150_init(struct i2c_client *c)
 static int tvp5150_add_of_connectors(struct tvp5150 *decoder)
 {
        struct device *dev = decoder->sd.dev;
-       struct device_node *rp;
-       struct of_endpoint ep;
        struct tvp5150_connector *connectors;
        unsigned int connectors_num = decoder->connectors_num;
        int i, ret;
@@ -1834,22 +1833,15 @@ static int tvp5150_add_of_connectors(struct tvp5150 
*decoder)
                return -ENOMEM;
 
        for (i = 0; i < connectors_num; i++) {
-               rp = of_graph_get_remote_port_parent(decoder->endpoints[i]);
-               of_graph_parse_endpoint(decoder->endpoints[i], &ep);
-               connectors[i].port_num = ep.port;
-               connectors[i].is_svideo = !!of_device_is_compatible(rp,
-                                                           "svideo-connector");
-
-               if (connectors[i].is_svideo)
-                       connectors[i].ent.function = MEDIA_ENT_F_CONN_SVIDEO;
-               else
-                       connectors[i].ent.function = MEDIA_ENT_F_CONN_COMPOSITE;
+               struct v4l2_fwnode_connector *c = &connectors[i].base;
+
+               ret = v4l2_fwnode_parse_connector(
+                                  of_fwnode_handle(decoder->endpoints[i]), c);
 
                connectors[i].ent.flags = MEDIA_ENT_FL_CONNECTOR;
-               ret = of_property_read_string(rp, "label",
-                                             &connectors[i].ent.name);
-               if (ret < 0)
-                       return ret;
+               connectors[i].ent.function = c->type == V4L2_CON_SVIDEO ?
+                       MEDIA_ENT_F_CONN_SVIDEO : MEDIA_ENT_F_CONN_COMPOSITE;
+               connectors[i].ent.name = c->label;
        }
 
        decoder->connectors = connectors;
@@ -1890,41 +1882,11 @@ static int tvp5150_mc_init(struct v4l2_subdev *sd)
        return ret;
 }
 
-static bool tvp5150_of_valid_input(struct device_node *endpoint,
-                               unsigned int port, unsigned int id)
-{
-       struct device_node *rp = of_graph_get_remote_port_parent(endpoint);
-       const char *input;
-       int ret;
-
-       /* perform some basic checks needed for later mc_init */
-       switch (port) {
-       case TVP5150_PAD_AIP1A:
-               /* svideo must be connected to endpoint@1  */
-               ret = id ? of_device_is_compatible(rp, "svideo-connector") :
-                          of_device_is_compatible(rp,
-                                                  "composite-video-connector");
-               if (!ret)
-                       return false;
-               break;
-       case TVP5150_PAD_AIP1B:
-               ret = of_device_is_compatible(rp, "composite-video-connector");
-               if (!ret)
-                       return false;
-               break;
-       }
-
-       ret = of_property_read_string(rp, "label", &input);
-       if (ret < 0)
-               return false;
-
-       return true;
-}
-
 static int tvp5150_parse_dt(struct tvp5150 *decoder, struct device_node *np)
 {
        struct device *dev = decoder->sd.dev;
        struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
+       struct v4l2_fwnode_connector c;
        struct device_node *ep_np;
        unsigned int flags;
        int ret, i = 0, in = 0;
@@ -1953,10 +1915,13 @@ static int tvp5150_parse_dt(struct tvp5150 *decoder, 
struct device_node *np)
                        /* fall through */
                case TVP5150_PAD_AIP1A:
                case TVP5150_PAD_AIP1B:
-                       if (!tvp5150_of_valid_input(ep_np, ep.port, ep.id)) {
+                       ret = v4l2_fwnode_parse_connector(
+                                                  of_fwnode_handle(ep_np), &c);
+                       if (c.type != V4L2_CON_COMPOSITE &&
+                           c.type != V4L2_CON_SVIDEO) {
                                dev_err(dev,
-                                       "Invalid endpoint %pOF on port %d\n",
-                                       ep.local_node, ep.port);
+                                       "Invalid endpoint %d on port %d\n",
+                                       c.remote_id, c.remote_port);
                                ret = -EINVAL;
                                goto err;
                        }
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to