[PATCH 10/14] media: soc-camera: support OF cameras
Guennadi Liakhovetski
g.liakhovetski at gmx.de
Mon Oct 8 19:37:32 EST 2012
Hi Sylwester
On Fri, 5 Oct 2012, Sylwester Nawrocki wrote:
> On 09/27/2012 04:07 PM, Guennadi Liakhovetski wrote:
> > With OF we aren't getting platform data any more. To minimise changes we
> > create all the missing data ourselves, including compulsory struct
> > soc_camera_link objects. Host-client linking is now done, based on the OF
> > data. Media bus numbers also have to be assigned dynamically.
> >
> > Signed-off-by: Guennadi Liakhovetski<g.liakhovetski at gmx.de>
> > ---
> ...
> > static int soc_camera_i2c_notify(struct notifier_block *nb,
> > unsigned long action, void *data)
> > {
> > @@ -1203,13 +1434,20 @@ static int soc_camera_i2c_notify(struct
> > notifier_block *nb,
> > struct v4l2_subdev *subdev;
> > int ret;
> >
> > - if (client->addr != icl->board_info->addr ||
> > - client->adapter->nr != icl->i2c_adapter_id)
> > + dev_dbg(dev, "%s(%lu): %x on %u\n", __func__, action,
> > + client->addr, client->adapter->nr);
> > +
> > + if (!soc_camera_i2c_client_match(icl, client))
> > return NOTIFY_DONE;
> >
> > switch (action) {
> > case BUS_NOTIFY_BIND_DRIVER:
> > client->dev.platform_data = icl;
> > + if (icl->of_link) {
> > + struct soc_camera_of_client *sofc =
> > container_of(icl->of_link,
> > + struct soc_camera_of_client,
> > of_link);
> > + soc_camera_of_i2c_ifill(sofc, client);
> > + }
> >
> > return NOTIFY_OK;
> > case BUS_NOTIFY_BOUND_DRIVER:
>
> There is no need for different handling of this event as well ?
There is. The former is entered before the sensor I2C probe method is
called and prepares the data for probing, the latter is entered after a
successful sensor I2C probing.
> Further, there is code like:
>
> adap = i2c_get_adapter(icl->i2c_adapter_id);
>
> which is clearly not going to work in OF case.
It does work. See the call to soc_camera_of_i2c_ifill() under
BUS_NOTIFY_BIND_DRIVER above. In it
icl->i2c_adapter_id = client->adapter->nr;
> Could you clarify how it is supposed to work ?
It is not only supposed to work, it actually does work. Does the above
explain it sufficiently?
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
More information about the devicetree-discuss
mailing list