Skip to content

Commit

Permalink
media: i2c: imx274: implement fwnode parsing
Browse files Browse the repository at this point in the history
Implement fwnode parsing at probe time.
Check if the bus and number of lanes are supported.

Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
  • Loading branch information
Eugen Hristev authored and Mauro Carvalho Chehab committed Nov 30, 2021
1 parent 57de5bb commit 0abb8f9
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions drivers/media/i2c/imx274.c
Original file line number Diff line number Diff line change
@@ -27,6 +27,7 @@

#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fwnode.h>
#include <media/v4l2-subdev.h>

/*
@@ -1957,6 +1958,41 @@ static const struct i2c_device_id imx274_id[] = {
};
MODULE_DEVICE_TABLE(i2c, imx274_id);

static int imx274_fwnode_parse(struct device *dev)
{
struct fwnode_handle *endpoint;
/* Only CSI2 is supported */
struct v4l2_fwnode_endpoint ep = {
.bus_type = V4L2_MBUS_CSI2_DPHY
};
int ret;

endpoint = fwnode_graph_get_next_endpoint(dev_fwnode(dev), NULL);
if (!endpoint) {
dev_err(dev, "Endpoint node not found\n");
return -EINVAL;
}

ret = v4l2_fwnode_endpoint_parse(endpoint, &ep);
fwnode_handle_put(endpoint);
if (ret == -ENXIO) {
dev_err(dev, "Unsupported bus type, should be CSI2\n");
return ret;
} else if (ret) {
dev_err(dev, "Parsing endpoint node failed %d\n", ret);
return ret;
}

/* Check number of data lanes, only 4 lanes supported */
if (ep.bus.mipi_csi2.num_data_lanes != 4) {
dev_err(dev, "Invalid data lanes: %d\n",
ep.bus.mipi_csi2.num_data_lanes);
return -EINVAL;
}

return 0;
}

static int imx274_probe(struct i2c_client *client)
{
struct v4l2_subdev *sd;
@@ -1971,6 +2007,10 @@ static int imx274_probe(struct i2c_client *client)

mutex_init(&imx274->lock);

ret = imx274_fwnode_parse(dev);
if (ret)
return ret;

imx274->inck = devm_clk_get_optional(dev, "inck");
if (IS_ERR(imx274->inck))
return PTR_ERR(imx274->inck);

0 comments on commit 0abb8f9

Please sign in to comment.