cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

imx-media-of.c (1669B)


      1// SPDX-License-Identifier: GPL-2.0+
      2/*
      3 * Media driver for Freescale i.MX5/6 SOC
      4 *
      5 * Open Firmware parsing.
      6 *
      7 * Copyright (c) 2016 Mentor Graphics Inc.
      8 */
      9#include <linux/of_platform.h>
     10#include <media/v4l2-ctrls.h>
     11#include <media/v4l2-device.h>
     12#include <media/v4l2-fwnode.h>
     13#include <media/v4l2-subdev.h>
     14#include <media/videobuf2-dma-contig.h>
     15#include <linux/of_graph.h>
     16#include <video/imx-ipu-v3.h>
     17#include "imx-media.h"
     18
     19int imx_media_of_add_csi(struct imx_media_dev *imxmd,
     20			 struct device_node *csi_np)
     21{
     22	struct v4l2_async_subdev *asd;
     23	int ret = 0;
     24
     25	if (!of_device_is_available(csi_np)) {
     26		dev_dbg(imxmd->md.dev, "%s: %pOFn not enabled\n", __func__,
     27			csi_np);
     28		return -ENODEV;
     29	}
     30
     31	/* add CSI fwnode to async notifier */
     32	asd = v4l2_async_nf_add_fwnode(&imxmd->notifier,
     33				       of_fwnode_handle(csi_np),
     34				       struct v4l2_async_subdev);
     35	if (IS_ERR(asd)) {
     36		ret = PTR_ERR(asd);
     37		if (ret == -EEXIST)
     38			dev_dbg(imxmd->md.dev, "%s: already added %pOFn\n",
     39				__func__, csi_np);
     40	}
     41
     42	return ret;
     43}
     44EXPORT_SYMBOL_GPL(imx_media_of_add_csi);
     45
     46int imx_media_add_of_subdevs(struct imx_media_dev *imxmd,
     47			     struct device_node *np)
     48{
     49	struct device_node *csi_np;
     50	int i, ret;
     51
     52	for (i = 0; ; i++) {
     53		csi_np = of_parse_phandle(np, "ports", i);
     54		if (!csi_np)
     55			break;
     56
     57		ret = imx_media_of_add_csi(imxmd, csi_np);
     58		if (ret) {
     59			/* unavailable or already added is not an error */
     60			if (ret == -ENODEV || ret == -EEXIST) {
     61				of_node_put(csi_np);
     62				continue;
     63			}
     64
     65			/* other error, can't continue */
     66			goto err_out;
     67		}
     68	}
     69
     70	return 0;
     71
     72err_out:
     73	of_node_put(csi_np);
     74	return ret;
     75}
     76EXPORT_SYMBOL_GPL(imx_media_add_of_subdevs);