forked from Minki/linux
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,
|
||||
struct v4l2_fwnode_endpoint *vep)
|
||||
{
|
||||
u32 bus_type = 0;
|
||||
u32 bus_type = V4L2_FWNODE_BUS_TYPE_GUESS;
|
||||
enum v4l2_mbus_type mbus_type;
|
||||
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_mbus_type_to_string(vep->bus_type),
|
||||
vep->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:
|
||||
rval = v4l2_fwnode_endpoint_parse_csi2_bus(fwnode, vep,
|
||||
mbus_type);
|
||||
V4L2_MBUS_UNKNOWN);
|
||||
if (rval)
|
||||
return rval;
|
||||
|
||||
@ -448,20 +459,20 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,
|
||||
break;
|
||||
case V4L2_MBUS_CCP2:
|
||||
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;
|
||||
case V4L2_MBUS_CSI2_DPHY:
|
||||
vep->bus_type = V4L2_MBUS_CSI2_DPHY;
|
||||
rval = v4l2_fwnode_endpoint_parse_csi2_bus(fwnode, vep,
|
||||
mbus_type);
|
||||
vep->bus_type);
|
||||
if (rval)
|
||||
return rval;
|
||||
|
||||
break;
|
||||
case V4L2_MBUS_PARALLEL:
|
||||
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;
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user