Commit 175b18b8 authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab

media: v4l: fwnode: Make use of newly specified bus types

Add support for parsing CSI-2 D-PHY, parallel or Bt.656 bus explicitly.
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: default avatarSteve Longerbeam <steve_longerbeam@mentor.com>
Reviewed-by: default avatarJacopo Mondi <jacopo+renesas@jmondi.org>
Tested-by: default avatarJacopo Mondi <jacopo+renesas@jmondi.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 2835b5b1
...@@ -123,8 +123,16 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode, ...@@ -123,8 +123,16 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
return 0; return 0;
} }
#define PARALLEL_MBUS_FLAGS (V4L2_MBUS_HSYNC_ACTIVE_HIGH | \
V4L2_MBUS_HSYNC_ACTIVE_LOW | \
V4L2_MBUS_VSYNC_ACTIVE_HIGH | \
V4L2_MBUS_VSYNC_ACTIVE_LOW | \
V4L2_MBUS_FIELD_EVEN_HIGH | \
V4L2_MBUS_FIELD_EVEN_LOW)
static void v4l2_fwnode_endpoint_parse_parallel_bus( static void v4l2_fwnode_endpoint_parse_parallel_bus(
struct fwnode_handle *fwnode, struct v4l2_fwnode_endpoint *vep) struct fwnode_handle *fwnode, struct v4l2_fwnode_endpoint *vep,
enum v4l2_fwnode_bus_type bus_type)
{ {
struct v4l2_fwnode_bus_parallel *bus = &vep->bus.parallel; struct v4l2_fwnode_bus_parallel *bus = &vep->bus.parallel;
unsigned int flags = 0; unsigned int flags = 0;
...@@ -189,16 +197,23 @@ static void v4l2_fwnode_endpoint_parse_parallel_bus( ...@@ -189,16 +197,23 @@ static void v4l2_fwnode_endpoint_parse_parallel_bus(
pr_debug("data-enable-active %s\n", v ? "high" : "low"); pr_debug("data-enable-active %s\n", v ? "high" : "low");
} }
bus->flags = flags; switch (bus_type) {
if (flags & (V4L2_MBUS_HSYNC_ACTIVE_HIGH | default:
V4L2_MBUS_HSYNC_ACTIVE_LOW | bus->flags = flags;
V4L2_MBUS_VSYNC_ACTIVE_HIGH | if (flags & PARALLEL_MBUS_FLAGS)
V4L2_MBUS_VSYNC_ACTIVE_LOW | vep->bus_type = V4L2_MBUS_PARALLEL;
V4L2_MBUS_FIELD_EVEN_HIGH | else
V4L2_MBUS_FIELD_EVEN_LOW)) vep->bus_type = V4L2_MBUS_BT656;
break;
case V4L2_FWNODE_BUS_TYPE_PARALLEL:
vep->bus_type = V4L2_MBUS_PARALLEL; vep->bus_type = V4L2_MBUS_PARALLEL;
else bus->flags = flags;
break;
case V4L2_FWNODE_BUS_TYPE_BT656:
vep->bus_type = V4L2_MBUS_BT656; vep->bus_type = V4L2_MBUS_BT656;
bus->flags = flags & ~PARALLEL_MBUS_FLAGS;
break;
}
} }
static void static void
...@@ -258,13 +273,26 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode, ...@@ -258,13 +273,26 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
return rval; return rval;
if (vep->bus_type == V4L2_MBUS_UNKNOWN) if (vep->bus_type == V4L2_MBUS_UNKNOWN)
v4l2_fwnode_endpoint_parse_parallel_bus(fwnode, vep); v4l2_fwnode_endpoint_parse_parallel_bus(
fwnode, vep, V4L2_MBUS_UNKNOWN);
break; break;
case V4L2_FWNODE_BUS_TYPE_CCP2: case V4L2_FWNODE_BUS_TYPE_CCP2:
case V4L2_FWNODE_BUS_TYPE_CSI1: case V4L2_FWNODE_BUS_TYPE_CSI1:
v4l2_fwnode_endpoint_parse_csi1_bus(fwnode, vep, bus_type); v4l2_fwnode_endpoint_parse_csi1_bus(fwnode, vep, bus_type);
break;
case V4L2_FWNODE_BUS_TYPE_CSI2_DPHY:
vep->bus_type = V4L2_MBUS_CSI2_DPHY;
rval = v4l2_fwnode_endpoint_parse_csi2_bus(fwnode, vep);
if (rval)
return rval;
break;
case V4L2_FWNODE_BUS_TYPE_PARALLEL:
case V4L2_FWNODE_BUS_TYPE_BT656:
v4l2_fwnode_endpoint_parse_parallel_bus(fwnode, vep, bus_type);
break; break;
default: default:
pr_warn("unsupported bus type %u\n", bus_type); pr_warn("unsupported bus type %u\n", bus_type);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment