Re: subdevice config into pointer (was Re: [PATCH 1/4] v4l2: device_register_subdev_nodes: allow calling multiple times)

Sakari Ailus
2017-03-02T14:42:32Z

Hi Pavel,

On Thu, Mar 02, 2017 at 10:07:27AM +0100, Pavel Machek wrote:
> Hi!
>
> > Making the sub-device bus configuration a pointer should be in a separate
> > patch. It makes sense since the entire configuration is not valid for all
> > sub-devices attached to the ISP anymore. I think it originally was a
> > separate patch, but they probably have been merged at some point. I can't
> > find it right now anyway.
>
> Something like this?
> Pavel
>
> commit df9141c66678b549fac9d143bd55ed0b242cf36e
> Author: Pavel <pavel@ucw.cz>
> Date: Wed Mar 1 13:27:56 2017 +0100
>
> Turn bus in struct isp_async_subdev into pointer; some of our subdevs
> (flash, focus) will not need bus configuration.
>
> Signed-off-by: Pavel Machek <pavel@ucw.cz>

I applied this to the ccp2 branch with an improved patch description.

>
> diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
> index 8a456d4..36bd359 100644
> --- a/drivers/media/platform/omap3isp/isp.c
> +++ b/drivers/media/platform/omap3isp/isp.c
> @@ -2030,12 +2030,18 @@ enum isp_of_phy {
> static int isp_fwnode_parse(struct device *dev, struct fwnode_handle *fwn,
> struct isp_async_subdev *isd)
> {
> - struct isp_bus_cfg *buscfg = &isd->bus;
> + struct isp_bus_cfg *buscfg;
> struct v4l2_fwnode_endpoint vfwn;
> unsigned int i;
> int ret;
> bool csi1 = false;
>
> + buscfg = devm_kzalloc(dev, sizeof(*isd->bus), GFP_KERNEL);
> + if (!buscfg)
> + return -ENOMEM;
> +
> + isd->bus = buscfg;
> +
> ret = v4l2_fwnode_endpoint_parse(fwn, &vfwn);
> if (ret)
> return ret;
> @@ -2246,7 +2252,7 @@ static int isp_subdev_notifier_bound(struct v4l2_async_notifier *async,
> container_of(asd, struct isp_async_subdev, asd);
>
> isd->sd = subdev;
> - isd->sd->host_priv = &isd->bus;
> + isd->sd->host_priv = isd->bus;
>
> return 0;
> }
> diff --git a/drivers/media/platform/omap3isp/isp.h b/drivers/media/platform/omap3isp/isp.h
> index 7e6f663..c0b9d1d 100644
> --- a/drivers/media/platform/omap3isp/isp.h
> +++ b/drivers/media/platform/omap3isp/isp.h
> @@ -228,7 +228,7 @@ struct isp_device {
>
> struct isp_async_subdev {
> struct v4l2_subdev *sd;
> - struct isp_bus_cfg bus;
> + struct isp_bus_cfg *bus;
> struct v4l2_async_subdev asd;
> };
>
> diff --git a/drivers/media/platform/omap3isp/ispcsiphy.c b/drivers/media/platform/omap3isp/ispcsiphy.c
> index f20abe8..be23408 100644
> --- a/drivers/media/platform/omap3isp/ispcsiphy.c
> +++ b/drivers/media/platform/omap3isp/ispcsiphy.c
> @@ -202,7 +202,7 @@ static int omap3isp_csiphy_config(struct isp_csiphy *phy)
> struct isp_async_subdev *isd =
> container_of(pipe->external->asd,
> struct isp_async_subdev, asd);
> - buscfg = &isd->bus;
> + buscfg = isd->bus;
> }
>
> if (buscfg->interface == ISP_INTERFACE_CCP2B_PHY1
>
>

--
Regards,

Sakari Ailus
e-mail: sakari.ailus@iki.fi XMPP: sailus@retiisi.org.uk