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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxx>
> 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@xxxxxx>

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@xxxxxx	XMPP: sailus@xxxxxxxxxxxxxx



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux