mirror of
https://github.com/torvalds/linux
synced 2024-10-17 16:58:15 +00:00
media: sun6i-csi: Detect the availability of the ISP
Add a helper to detect whether the ISP is available and connected and store the indication in the driver-specific device structure. Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
24e6c88a07
commit
0fbbb09c02
|
@ -24,6 +24,36 @@
|
|||
#include "sun6i_csi_capture.h"
|
||||
#include "sun6i_csi_reg.h"
|
||||
|
||||
/* ISP */
|
||||
|
||||
static int sun6i_csi_isp_detect(struct sun6i_csi_device *csi_dev)
|
||||
{
|
||||
struct device *dev = csi_dev->dev;
|
||||
struct fwnode_handle *handle;
|
||||
|
||||
/*
|
||||
* ISP is not available if not connected via fwnode graph.
|
||||
* This will also check that the remote parent node is available.
|
||||
*/
|
||||
handle = fwnode_graph_get_endpoint_by_id(dev_fwnode(dev),
|
||||
SUN6I_CSI_PORT_ISP, 0,
|
||||
FWNODE_GRAPH_ENDPOINT_NEXT);
|
||||
if (!handle)
|
||||
return 0;
|
||||
|
||||
fwnode_handle_put(handle);
|
||||
|
||||
if (!IS_ENABLED(CONFIG_VIDEO_SUN6I_ISP)) {
|
||||
dev_warn(dev,
|
||||
"ISP link is detected but not enabled in kernel config!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
csi_dev->isp_available = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Media */
|
||||
|
||||
static const struct media_device_ops sun6i_csi_media_ops = {
|
||||
|
@ -289,6 +319,10 @@ static int sun6i_csi_probe(struct platform_device *platform_dev)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = sun6i_csi_isp_detect(csi_dev);
|
||||
if (ret)
|
||||
goto error_resources;
|
||||
|
||||
ret = sun6i_csi_v4l2_setup(csi_dev);
|
||||
if (ret)
|
||||
goto error_resources;
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
enum sun6i_csi_port {
|
||||
SUN6I_CSI_PORT_PARALLEL = 0,
|
||||
SUN6I_CSI_PORT_MIPI_CSI2 = 1,
|
||||
SUN6I_CSI_PORT_ISP = 2,
|
||||
};
|
||||
|
||||
struct sun6i_csi_buffer {
|
||||
|
@ -44,6 +45,8 @@ struct sun6i_csi_device {
|
|||
struct clk *clock_mod;
|
||||
struct clk *clock_ram;
|
||||
struct reset_control *reset;
|
||||
|
||||
bool isp_available;
|
||||
};
|
||||
|
||||
struct sun6i_csi_variant {
|
||||
|
|
Loading…
Reference in a new issue