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: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Steve Longerbeam <steve_longerbeam@mentor.com>
Reviewed-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
Tested-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
Sakari Ailus 2018-01-02 08:14:30 -05:00 committed by Mauro Carvalho Chehab
parent 2835b5b153
commit 175b18b82d

View File

@ -123,8 +123,16 @@ static int v4l2_fwnode_endpoint_parse_csi2_bus(struct fwnode_handle *fwnode,
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(
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;
unsigned int flags = 0;
@ -189,16 +197,23 @@ static void v4l2_fwnode_endpoint_parse_parallel_bus(
pr_debug("data-enable-active %s\n", v ? "high" : "low");
}
bus->flags = flags;
if (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))
switch (bus_type) {
default:
bus->flags = flags;
if (flags & PARALLEL_MBUS_FLAGS)
vep->bus_type = V4L2_MBUS_PARALLEL;
else
vep->bus_type = V4L2_MBUS_BT656;
break;
case V4L2_FWNODE_BUS_TYPE_PARALLEL:
vep->bus_type = V4L2_MBUS_PARALLEL;
else
bus->flags = flags;
break;
case V4L2_FWNODE_BUS_TYPE_BT656:
vep->bus_type = V4L2_MBUS_BT656;
bus->flags = flags & ~PARALLEL_MBUS_FLAGS;
break;
}
}
static void
@ -258,13 +273,26 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
return rval;
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;
case V4L2_FWNODE_BUS_TYPE_CCP2:
case V4L2_FWNODE_BUS_TYPE_CSI1:
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;
default:
pr_warn("unsupported bus type %u\n", bus_type);