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

Pavel Machek
2017-03-02T09:09:29Z

[-- Attachment #1: Type: text/plain, Size: 2775 bytes --]

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>

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