[PATCH v3 16/23] v4l: fwnode: Initialise the V4L2 fwnode endpoints to zero
jacopo mondi
jacopo at jmondi.org
Thu Sep 13 09:46:14 UTC 2018
Hi Sakari,
On Thu, Sep 13, 2018 at 12:29:35AM +0300, Sakari Ailus wrote:
> Initialise the V4L2 fwnode endpoints to zero in all drivers using
> v4l2_fwnode_endpoint_parse(). This prepares for setting default endpoint
> flags as well as the bus type. Setting bus type to zero will continue to
> guess the bus among the guessable set (parallel, Bt.656 and CSI-2 D-PHY).
>
I've played around with this patch, trying to use defaults in the
renesas-ceu driver.
This is the resulting patch, if you want I can send it as follow-up or
send it so that you can include it in your series if it's correct):
https://paste.debian.net/hidden/a7795d3e/
Thanks
j
> Signed-off-by: Sakari Ailus <sakari.ailus at linux.intel.com>
> Tested-by: Steve Longerbeam <steve_longerbeam at mentor.com>
> ---
> drivers/media/i2c/adv7604.c | 2 +-
> drivers/media/i2c/mt9v032.c | 2 +-
> drivers/media/i2c/ov5647.c | 2 +-
> drivers/media/i2c/ov7670.c | 2 +-
> drivers/media/i2c/s5c73m3/s5c73m3-core.c | 2 +-
> drivers/media/i2c/s5k5baf.c | 2 +-
> drivers/media/i2c/tda1997x.c | 2 +-
> drivers/media/i2c/tvp514x.c | 2 +-
> drivers/media/i2c/tvp5150.c | 2 +-
> drivers/media/i2c/tvp7002.c | 2 +-
> drivers/media/platform/am437x/am437x-vpfe.c | 2 +-
> drivers/media/platform/atmel/atmel-isc.c | 3 ++-
> drivers/media/platform/atmel/atmel-isi.c | 2 +-
> drivers/media/platform/cadence/cdns-csi2rx.c | 2 +-
> drivers/media/platform/cadence/cdns-csi2tx.c | 2 +-
> drivers/media/platform/davinci/vpif_capture.c | 2 +-
> drivers/media/platform/exynos4-is/media-dev.c | 2 +-
> drivers/media/platform/exynos4-is/mipi-csis.c | 2 +-
> drivers/media/platform/pxa_camera.c | 2 +-
> drivers/media/platform/rcar-vin/rcar-csi2.c | 2 +-
> drivers/media/platform/renesas-ceu.c | 3 ++-
> drivers/media/platform/stm32/stm32-dcmi.c | 2 +-
> drivers/staging/media/imx/imx-media-csi.c | 8 ++++----
> include/media/v4l2-fwnode.h | 2 ++
> 24 files changed, 30 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/media/i2c/adv7604.c b/drivers/media/i2c/adv7604.c
> index 668be2bca57a..413578dc23a3 100644
> --- a/drivers/media/i2c/adv7604.c
> +++ b/drivers/media/i2c/adv7604.c
> @@ -3093,7 +3093,7 @@ MODULE_DEVICE_TABLE(of, adv76xx_of_id);
>
> static int adv76xx_parse_dt(struct adv76xx_state *state)
> {
> - struct v4l2_fwnode_endpoint bus_cfg;
> + struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
> struct device_node *endpoint;
> struct device_node *np;
> unsigned int flags;
> diff --git a/drivers/media/i2c/mt9v032.c b/drivers/media/i2c/mt9v032.c
> index f74730d24d8f..67f69ad6ecf4 100644
> --- a/drivers/media/i2c/mt9v032.c
> +++ b/drivers/media/i2c/mt9v032.c
> @@ -989,7 +989,7 @@ static struct mt9v032_platform_data *
> mt9v032_get_pdata(struct i2c_client *client)
> {
> struct mt9v032_platform_data *pdata = NULL;
> - struct v4l2_fwnode_endpoint endpoint;
> + struct v4l2_fwnode_endpoint endpoint = { .bus_type = 0 };
> struct device_node *np;
> struct property *prop;
>
> diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c
> index da39c49de503..4589631798c9 100644
> --- a/drivers/media/i2c/ov5647.c
> +++ b/drivers/media/i2c/ov5647.c
> @@ -532,7 +532,7 @@ static const struct v4l2_subdev_internal_ops ov5647_subdev_internal_ops = {
>
> static int ov5647_parse_dt(struct device_node *np)
> {
> - struct v4l2_fwnode_endpoint bus_cfg;
> + struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
> struct device_node *ep;
>
> int ret;
> diff --git a/drivers/media/i2c/ov7670.c b/drivers/media/i2c/ov7670.c
> index 31bf577b0bd3..92f59ae1b624 100644
> --- a/drivers/media/i2c/ov7670.c
> +++ b/drivers/media/i2c/ov7670.c
> @@ -1728,7 +1728,7 @@ static int ov7670_parse_dt(struct device *dev,
> struct ov7670_info *info)
> {
> struct fwnode_handle *fwnode = dev_fwnode(dev);
> - struct v4l2_fwnode_endpoint bus_cfg;
> + struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
> struct fwnode_handle *ep;
> int ret;
>
> diff --git a/drivers/media/i2c/s5c73m3/s5c73m3-core.c b/drivers/media/i2c/s5c73m3/s5c73m3-core.c
> index 479c9753e863..9bb28faad1b3 100644
> --- a/drivers/media/i2c/s5c73m3/s5c73m3-core.c
> +++ b/drivers/media/i2c/s5c73m3/s5c73m3-core.c
> @@ -1603,7 +1603,7 @@ static int s5c73m3_get_platform_data(struct s5c73m3 *state)
> const struct s5c73m3_platform_data *pdata = dev->platform_data;
> struct device_node *node = dev->of_node;
> struct device_node *node_ep;
> - struct v4l2_fwnode_endpoint ep;
> + struct v4l2_fwnode_endpoint ep = { .bus_type = 0 };
> int ret;
>
> if (!node) {
> diff --git a/drivers/media/i2c/s5k5baf.c b/drivers/media/i2c/s5k5baf.c
> index 4c41a770b132..727db7c0670a 100644
> --- a/drivers/media/i2c/s5k5baf.c
> +++ b/drivers/media/i2c/s5k5baf.c
> @@ -1841,7 +1841,7 @@ static int s5k5baf_parse_device_node(struct s5k5baf *state, struct device *dev)
> {
> struct device_node *node = dev->of_node;
> struct device_node *node_ep;
> - struct v4l2_fwnode_endpoint ep;
> + struct v4l2_fwnode_endpoint ep = { .bus_type = 0 };
> int ret;
>
> if (!node) {
> diff --git a/drivers/media/i2c/tda1997x.c b/drivers/media/i2c/tda1997x.c
> index d114ac5243ec..c4c2a6134e1e 100644
> --- a/drivers/media/i2c/tda1997x.c
> +++ b/drivers/media/i2c/tda1997x.c
> @@ -2265,7 +2265,7 @@ MODULE_DEVICE_TABLE(of, tda1997x_of_id);
> static int tda1997x_parse_dt(struct tda1997x_state *state)
> {
> struct tda1997x_platform_data *pdata = &state->pdata;
> - struct v4l2_fwnode_endpoint bus_cfg;
> + struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
> struct device_node *ep;
> struct device_node *np;
> unsigned int flags;
> diff --git a/drivers/media/i2c/tvp514x.c b/drivers/media/i2c/tvp514x.c
> index 675b9ae212ab..1cc83cb934e2 100644
> --- a/drivers/media/i2c/tvp514x.c
> +++ b/drivers/media/i2c/tvp514x.c
> @@ -989,7 +989,7 @@ static struct tvp514x_platform_data *
> tvp514x_get_pdata(struct i2c_client *client)
> {
> struct tvp514x_platform_data *pdata = NULL;
> - struct v4l2_fwnode_endpoint bus_cfg;
> + struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
> struct device_node *endpoint;
> unsigned int flags;
>
> diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
> index 76e6bed5a1da..a305c3022c9d 100644
> --- a/drivers/media/i2c/tvp5150.c
> +++ b/drivers/media/i2c/tvp5150.c
> @@ -1362,7 +1362,7 @@ static int tvp5150_init(struct i2c_client *c)
>
> static int tvp5150_parse_dt(struct tvp5150 *decoder, struct device_node *np)
> {
> - struct v4l2_fwnode_endpoint bus_cfg;
> + struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
> struct device_node *ep;
> #ifdef CONFIG_MEDIA_CONTROLLER
> struct device_node *connectors, *child;
> diff --git a/drivers/media/i2c/tvp7002.c b/drivers/media/i2c/tvp7002.c
> index 4f5c627579c7..cab2f2bd0aa9 100644
> --- a/drivers/media/i2c/tvp7002.c
> +++ b/drivers/media/i2c/tvp7002.c
> @@ -889,7 +889,7 @@ static const struct v4l2_subdev_ops tvp7002_ops = {
> static struct tvp7002_config *
> tvp7002_get_pdata(struct i2c_client *client)
> {
> - struct v4l2_fwnode_endpoint bus_cfg;
> + struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
> struct tvp7002_config *pdata = NULL;
> struct device_node *endpoint;
> unsigned int flags;
> diff --git a/drivers/media/platform/am437x/am437x-vpfe.c b/drivers/media/platform/am437x/am437x-vpfe.c
> index 0b1a03b64b19..e13d2b3a7168 100644
> --- a/drivers/media/platform/am437x/am437x-vpfe.c
> +++ b/drivers/media/platform/am437x/am437x-vpfe.c
> @@ -2426,7 +2426,6 @@ static struct vpfe_config *
> vpfe_get_pdata(struct vpfe_device *vpfe)
> {
> struct device_node *endpoint = NULL;
> - struct v4l2_fwnode_endpoint bus_cfg;
> struct device *dev = vpfe->pdev;
> struct vpfe_subdev_info *sdinfo;
> struct vpfe_config *pdata;
> @@ -2446,6 +2445,7 @@ vpfe_get_pdata(struct vpfe_device *vpfe)
> return NULL;
>
> for (i = 0; ; i++) {
> + struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
> struct device_node *rem;
>
> endpoint = of_graph_get_next_endpoint(dev->of_node, endpoint);
> diff --git a/drivers/media/platform/atmel/atmel-isc.c b/drivers/media/platform/atmel/atmel-isc.c
> index 334de0f2e36a..50178968b8a6 100644
> --- a/drivers/media/platform/atmel/atmel-isc.c
> +++ b/drivers/media/platform/atmel/atmel-isc.c
> @@ -2028,7 +2028,6 @@ static int isc_parse_dt(struct device *dev, struct isc_device *isc)
> {
> struct device_node *np = dev->of_node;
> struct device_node *epn = NULL, *rem;
> - struct v4l2_fwnode_endpoint v4l2_epn;
> struct isc_subdev_entity *subdev_entity;
> unsigned int flags;
> int ret;
> @@ -2036,6 +2035,8 @@ static int isc_parse_dt(struct device *dev, struct isc_device *isc)
> INIT_LIST_HEAD(&isc->subdev_entities);
>
> while (1) {
> + struct v4l2_fwnode_endpoint v4l2_epn = { .bus_type = 0 };
> +
> epn = of_graph_get_next_endpoint(np, epn);
> if (!epn)
> return 0;
> diff --git a/drivers/media/platform/atmel/atmel-isi.c b/drivers/media/platform/atmel/atmel-isi.c
> index c4d5f05786e8..fdb255e4a956 100644
> --- a/drivers/media/platform/atmel/atmel-isi.c
> +++ b/drivers/media/platform/atmel/atmel-isi.c
> @@ -790,7 +790,7 @@ static int atmel_isi_parse_dt(struct atmel_isi *isi,
> struct platform_device *pdev)
> {
> struct device_node *np = pdev->dev.of_node;
> - struct v4l2_fwnode_endpoint ep;
> + struct v4l2_fwnode_endpoint ep = { .bus_type = 0 };
> int err;
>
> /* Default settings for ISI */
> diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/platform/cadence/cdns-csi2rx.c
> index 0776a34f28ee..31ace114eda1 100644
> --- a/drivers/media/platform/cadence/cdns-csi2rx.c
> +++ b/drivers/media/platform/cadence/cdns-csi2rx.c
> @@ -361,7 +361,7 @@ static int csi2rx_get_resources(struct csi2rx_priv *csi2rx,
>
> static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
> {
> - struct v4l2_fwnode_endpoint v4l2_ep;
> + struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 };
> struct fwnode_handle *fwh;
> struct device_node *ep;
> int ret;
> diff --git a/drivers/media/platform/cadence/cdns-csi2tx.c b/drivers/media/platform/cadence/cdns-csi2tx.c
> index 6224daf891d7..5042d053b94e 100644
> --- a/drivers/media/platform/cadence/cdns-csi2tx.c
> +++ b/drivers/media/platform/cadence/cdns-csi2tx.c
> @@ -432,7 +432,7 @@ static int csi2tx_get_resources(struct csi2tx_priv *csi2tx,
>
> static int csi2tx_check_lanes(struct csi2tx_priv *csi2tx)
> {
> - struct v4l2_fwnode_endpoint v4l2_ep;
> + struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 };
> struct device_node *ep;
> int ret;
>
> diff --git a/drivers/media/platform/davinci/vpif_capture.c b/drivers/media/platform/davinci/vpif_capture.c
> index 23e237a5ea1a..69fec88031fd 100644
> --- a/drivers/media/platform/davinci/vpif_capture.c
> +++ b/drivers/media/platform/davinci/vpif_capture.c
> @@ -1511,7 +1511,6 @@ static struct vpif_capture_config *
> vpif_capture_get_pdata(struct platform_device *pdev)
> {
> struct device_node *endpoint = NULL;
> - struct v4l2_fwnode_endpoint bus_cfg;
> struct vpif_capture_config *pdata;
> struct vpif_subdev_info *sdinfo;
> struct vpif_capture_chan_config *chan;
> @@ -1541,6 +1540,7 @@ vpif_capture_get_pdata(struct platform_device *pdev)
> return NULL;
>
> for (i = 0; i < VPIF_CAPTURE_NUM_CHANNELS; i++) {
> + struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
> struct device_node *rem;
> unsigned int flags;
> int err;
> diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c
> index fbad0635c6b5..870501b0f351 100644
> --- a/drivers/media/platform/exynos4-is/media-dev.c
> +++ b/drivers/media/platform/exynos4-is/media-dev.c
> @@ -390,7 +390,7 @@ static int fimc_md_parse_port_node(struct fimc_md *fmd,
> {
> struct fimc_source_info *pd = &fmd->sensor[index].pdata;
> struct device_node *rem, *ep, *np;
> - struct v4l2_fwnode_endpoint endpoint;
> + struct v4l2_fwnode_endpoint endpoint = { .bus_type = 0 };
> int ret;
>
> /* Assume here a port node can have only one endpoint node. */
> diff --git a/drivers/media/platform/exynos4-is/mipi-csis.c b/drivers/media/platform/exynos4-is/mipi-csis.c
> index b4e28a299e26..35cb0162085b 100644
> --- a/drivers/media/platform/exynos4-is/mipi-csis.c
> +++ b/drivers/media/platform/exynos4-is/mipi-csis.c
> @@ -718,7 +718,7 @@ static int s5pcsis_parse_dt(struct platform_device *pdev,
> struct csis_state *state)
> {
> struct device_node *node = pdev->dev.of_node;
> - struct v4l2_fwnode_endpoint endpoint;
> + struct v4l2_fwnode_endpoint endpoint = { .bus_type = 0 };
> int ret;
>
> if (of_property_read_u32(node, "clock-frequency",
> diff --git a/drivers/media/platform/pxa_camera.c b/drivers/media/platform/pxa_camera.c
> index a47be1242cf4..d16ca667ec44 100644
> --- a/drivers/media/platform/pxa_camera.c
> +++ b/drivers/media/platform/pxa_camera.c
> @@ -2298,7 +2298,7 @@ static int pxa_camera_pdata_from_dt(struct device *dev,
> {
> u32 mclk_rate;
> struct device_node *remote, *np = dev->of_node;
> - struct v4l2_fwnode_endpoint ep;
> + struct v4l2_fwnode_endpoint ep = { .bus_type = 0 };
> int err = of_property_read_u32(np, "clock-frequency",
> &mclk_rate);
> if (!err) {
> diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c b/drivers/media/platform/rcar-vin/rcar-csi2.c
> index 25edc2edd197..b0044a08e71e 100644
> --- a/drivers/media/platform/rcar-vin/rcar-csi2.c
> +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c
> @@ -743,7 +743,7 @@ static int rcsi2_parse_v4l2(struct rcar_csi2 *priv,
> static int rcsi2_parse_dt(struct rcar_csi2 *priv)
> {
> struct device_node *ep;
> - struct v4l2_fwnode_endpoint v4l2_ep;
> + struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 };
> int ret;
>
> ep = of_graph_get_endpoint_by_regs(priv->dev->of_node, 0, 0);
> diff --git a/drivers/media/platform/renesas-ceu.c b/drivers/media/platform/renesas-ceu.c
> index eee4ae7234be..035f1d3f10e5 100644
> --- a/drivers/media/platform/renesas-ceu.c
> +++ b/drivers/media/platform/renesas-ceu.c
> @@ -1536,7 +1536,6 @@ static int ceu_parse_platform_data(struct ceu_device *ceudev,
> static int ceu_parse_dt(struct ceu_device *ceudev)
> {
> struct device_node *of = ceudev->dev->of_node;
> - struct v4l2_fwnode_endpoint fw_ep;
> struct device_node *ep, *remote;
> struct ceu_subdev *ceu_sd;
> unsigned int i;
> @@ -1552,6 +1551,8 @@ static int ceu_parse_dt(struct ceu_device *ceudev)
> return ret;
>
> for (i = 0; i < num_ep; i++) {
> + struct v4l2_fwnode_endpoint fw_ep = { .bus_type = 0 };
> +
> ep = of_graph_get_endpoint_by_regs(of, 0, i);
> if (!ep) {
> dev_err(ceudev->dev,
> diff --git a/drivers/media/platform/stm32/stm32-dcmi.c b/drivers/media/platform/stm32/stm32-dcmi.c
> index da296a2afc2e..07d154024183 100644
> --- a/drivers/media/platform/stm32/stm32-dcmi.c
> +++ b/drivers/media/platform/stm32/stm32-dcmi.c
> @@ -1621,7 +1621,7 @@ static int dcmi_probe(struct platform_device *pdev)
> {
> struct device_node *np = pdev->dev.of_node;
> const struct of_device_id *match = NULL;
> - struct v4l2_fwnode_endpoint ep;
> + struct v4l2_fwnode_endpoint ep = { .bus_type = 0 };
> struct stm32_dcmi *dcmi;
> struct vb2_queue *q;
> struct dma_chan *chan;
> diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c
> index 539159d9af6b..ac9d718d7ff0 100644
> --- a/drivers/staging/media/imx/imx-media-csi.c
> +++ b/drivers/staging/media/imx/imx-media-csi.c
> @@ -1050,7 +1050,7 @@ static int csi_link_validate(struct v4l2_subdev *sd,
> struct v4l2_subdev_format *sink_fmt)
> {
> struct csi_priv *priv = v4l2_get_subdevdata(sd);
> - struct v4l2_fwnode_endpoint upstream_ep = {};
> + struct v4l2_fwnode_endpoint upstream_ep = { .bus_type = 0 };
> bool is_csi2;
> int ret;
>
> @@ -1164,7 +1164,7 @@ static int csi_enum_mbus_code(struct v4l2_subdev *sd,
> struct v4l2_subdev_mbus_code_enum *code)
> {
> struct csi_priv *priv = v4l2_get_subdevdata(sd);
> - struct v4l2_fwnode_endpoint upstream_ep;
> + struct v4l2_fwnode_endpoint upstream_ep = { .bus_type = 0 };
> const struct imx_media_pixfmt *incc;
> struct v4l2_mbus_framefmt *infmt;
> int ret = 0;
> @@ -1403,7 +1403,7 @@ static int csi_set_fmt(struct v4l2_subdev *sd,
> {
> struct csi_priv *priv = v4l2_get_subdevdata(sd);
> struct imx_media_video_dev *vdev = priv->vdev;
> - struct v4l2_fwnode_endpoint upstream_ep;
> + struct v4l2_fwnode_endpoint upstream_ep = { .bus_type = 0 };
> const struct imx_media_pixfmt *cc;
> struct v4l2_pix_format vdev_fmt;
> struct v4l2_mbus_framefmt *fmt;
> @@ -1542,7 +1542,7 @@ static int csi_set_selection(struct v4l2_subdev *sd,
> struct v4l2_subdev_selection *sel)
> {
> struct csi_priv *priv = v4l2_get_subdevdata(sd);
> - struct v4l2_fwnode_endpoint upstream_ep;
> + struct v4l2_fwnode_endpoint upstream_ep = { .bus_type = 0 };
> struct v4l2_mbus_framefmt *infmt;
> struct v4l2_rect *crop, *compose;
> int pad, ret;
> diff --git a/include/media/v4l2-fwnode.h b/include/media/v4l2-fwnode.h
> index 4a371c3ad86c..1ea1a3ecf6d5 100644
> --- a/include/media/v4l2-fwnode.h
> +++ b/include/media/v4l2-fwnode.h
> @@ -139,6 +139,8 @@ struct v4l2_fwnode_link {
> * set the V4L2_MBUS_CSI2_CONTINUOUS_CLOCK flag. The caller should hold a
> * reference to @fwnode.
> *
> + * The caller must set the bus_type field of @vep to zero.
> + *
> * NOTE: This function does not parse properties the size of which is variable
> * without a low fixed limit. Please use v4l2_fwnode_endpoint_alloc_parse() in
> * new drivers instead.
> --
> 2.11.0
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20180913/e378bd93/attachment.sig>
More information about the dri-devel
mailing list