media: v4l: fwnode: Use V4L2 fwnode endpoint media bus type if set
Use the given media bus type set by the caller. If none is given (i.e. the mbus type is V4L2_MBUS_UNKNOWN, or 0), fall back to the old behaviour. This is to obtain the information from the DT or try to guess the bus type. -ENXIO is returned if the caller sets the bus type but that does not match with what's in DT. Also return -ENXIO if bus type detection failed to separate this from the rest of the errors. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Tested-by: Steve Longerbeam <steve_longerbeam@mentor.com> Tested-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
3eb32c264d
commit
e7b2f5185e
|
@ -404,7 +404,7 @@ v4l2_fwnode_endpoint_parse_csi1_bus(struct fwnode_handle *fwnode,
|
||||||
static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
|
static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
|
||||||
struct v4l2_fwnode_endpoint *vep)
|
struct v4l2_fwnode_endpoint *vep)
|
||||||
{
|
{
|
||||||
u32 bus_type = 0;
|
u32 bus_type = V4L2_FWNODE_BUS_TYPE_GUESS;
|
||||||
enum v4l2_mbus_type mbus_type;
|
enum v4l2_mbus_type mbus_type;
|
||||||
int rval;
|
int rval;
|
||||||
|
|
||||||
|
@ -427,13 +427,24 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
|
||||||
v4l2_fwnode_bus_type_to_string(bus_type), bus_type,
|
v4l2_fwnode_bus_type_to_string(bus_type), bus_type,
|
||||||
v4l2_fwnode_mbus_type_to_string(vep->bus_type),
|
v4l2_fwnode_mbus_type_to_string(vep->bus_type),
|
||||||
vep->bus_type);
|
vep->bus_type);
|
||||||
|
|
||||||
mbus_type = v4l2_fwnode_bus_type_to_mbus(bus_type);
|
mbus_type = v4l2_fwnode_bus_type_to_mbus(bus_type);
|
||||||
|
|
||||||
switch (mbus_type) {
|
if (vep->bus_type != V4L2_MBUS_UNKNOWN) {
|
||||||
|
if (mbus_type != V4L2_MBUS_UNKNOWN &&
|
||||||
|
vep->bus_type != mbus_type) {
|
||||||
|
pr_debug("expecting bus type %s\n",
|
||||||
|
v4l2_fwnode_mbus_type_to_string(
|
||||||
|
vep->bus_type));
|
||||||
|
return -ENXIO;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
vep->bus_type = mbus_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (vep->bus_type) {
|
||||||
case V4L2_MBUS_UNKNOWN:
|
case V4L2_MBUS_UNKNOWN:
|
||||||
rval = v4l2_fwnode_endpoint_parse_csi2_bus(fwnode, vep,
|
rval = v4l2_fwnode_endpoint_parse_csi2_bus(fwnode, vep,
|
||||||
mbus_type);
|
V4L2_MBUS_UNKNOWN);
|
||||||
if (rval)
|
if (rval)
|
||||||
return rval;
|
return rval;
|
||||||
|
|
||||||
|
@ -448,20 +459,20 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
|
||||||
break;
|
break;
|
||||||
case V4L2_MBUS_CCP2:
|
case V4L2_MBUS_CCP2:
|
||||||
case V4L2_MBUS_CSI1:
|
case V4L2_MBUS_CSI1:
|
||||||
v4l2_fwnode_endpoint_parse_csi1_bus(fwnode, vep, mbus_type);
|
v4l2_fwnode_endpoint_parse_csi1_bus(fwnode, vep, vep->bus_type);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case V4L2_MBUS_CSI2_DPHY:
|
case V4L2_MBUS_CSI2_DPHY:
|
||||||
vep->bus_type = V4L2_MBUS_CSI2_DPHY;
|
|
||||||
rval = v4l2_fwnode_endpoint_parse_csi2_bus(fwnode, vep,
|
rval = v4l2_fwnode_endpoint_parse_csi2_bus(fwnode, vep,
|
||||||
mbus_type);
|
vep->bus_type);
|
||||||
if (rval)
|
if (rval)
|
||||||
return rval;
|
return rval;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case V4L2_MBUS_PARALLEL:
|
case V4L2_MBUS_PARALLEL:
|
||||||
case V4L2_MBUS_BT656:
|
case V4L2_MBUS_BT656:
|
||||||
v4l2_fwnode_endpoint_parse_parallel_bus(fwnode, vep, mbus_type);
|
v4l2_fwnode_endpoint_parse_parallel_bus(fwnode, vep,
|
||||||
|
vep->bus_type);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in a new issue