Re: [PATCH] v4l: mt9v032: Add OF support

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

 




Hi Laurent,

I am agree with your argumentations. I hope for the v2.

Best regards,

Carlos Sanmartín

2015-03-09 12:19 GMT+01:00 Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>:
> Hi Carlos,
>
> Thank you for the review.
>
> On Monday 09 March 2015 10:45:31 Carlos Sanmartín Bustos wrote:
>> Hi Laurent,
>>
>> Looks good. One question, why not deprecate the platform data? I can't
>> see any device using the mt9v032 pdata, I was making a similar patch
>> but deprecating pdata.
>
> The sensor could be used on non-DT platforms. As keeping platform data support
> doesn't really make the code more complex and doesn't prevent cleanups or
> other refactoring, I don't see much harm in keeping it for now.
>
> For DT-based platforms, of course, DT should be used.
>
>> Some more comment:
>>
>> 2015-03-08 14:45 GMT+01:00 Laurent Pinchart:
>> > Parse DT properties into a platform data structure when a DT node is
>> > available.
>> >
>> > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
>> > ---
>> >
>> >  .../devicetree/bindings/media/i2c/mt9v032.txt      | 41 ++++++++++++++
>> >  MAINTAINERS                                        |  1 +
>> >  drivers/media/i2c/mt9v032.c                        | 66 ++++++++++++++++-
>> >  3 files changed, 107 insertions(+), 1 deletion(-)
>> >  create mode 100644
>> >  Documentation/devicetree/bindings/media/i2c/mt9v032.txt
>
> [snip]
>
>> > diff --git a/drivers/media/i2c/mt9v032.c b/drivers/media/i2c/mt9v032.c
>> > index 3267c18..a6ea091 100644
>> > --- a/drivers/media/i2c/mt9v032.c
>> > +++ b/drivers/media/i2c/mt9v032.c
>
> [snip]
>
>> > +static struct mt9v032_platform_data *
>> > +mt9v032_get_pdata(struct i2c_client *client)
>> > +{
>> > +       struct mt9v032_platform_data *pdata;
>> > +       struct v4l2_of_endpoint endpoint;
>> > +       struct device_node *np;
>> > +       struct property *prop;
>> > +
>> > +       if (!IS_ENABLED(CONFIG_OF) || !client->dev.of_node)
>> > +               return client->dev.platform_data;
>> > +
>> > +       np = v4l2_of_get_next_endpoint(client->dev.of_node, NULL);
>> > +       if (!np)
>> > +               return NULL;
>> > +
>> > +       if (v4l2_of_parse_endpoint(np, &endpoint) < 0)
>> > +               goto done;
>>
>> Here I have one little testing:
>>
>> if (endpoint.bus_type != V4L2_MBUS_PARALLEL) {
>>         dev_err(dev, "invalid bus type, must be parallel\n");
>>         goto done;
>> }
>
> Good question, should drivers check DT properties that they don't use, in
> order to catch errors in DT ? This would slightly increase the kernel size in
> order to prevent people from connecting a parallel sensor to a CSI-2 bus,
> which is obviously impossible in hardware :-)
>
>> > +
>> > +       pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
>> > +       if (!pdata)
>> > +               goto done;
>> > +
>> > +       prop = of_find_property(np, "link-freqs", NULL);
>> > +       if (prop) {
>> > +               size_t size = prop->length / 8;
>> > +               u64 *link_freqs;
>> > +
>> > +               link_freqs = devm_kzalloc(&client->dev,
>> > +                                         size * sizeof(*link_freqs),
>> > +                                         GFP_KERNEL);
>> > +               if (!link_freqs)
>> > +                       goto done;
>> > +
>> > +               if (of_property_read_u64_array(np, "link-frequencies",
>> > +                                              link_freqs, size) < 0)
>> > +                       goto done;
>> > +
>> > +               pdata->link_freqs = link_freqs;
>> > +               pdata->link_def_freq = link_freqs[0];
>> > +       }
>> > +
>> > +       pdata->clk_pol = !!(endpoint.bus.parallel.flags &
>> > +                           V4L2_MBUS_PCLK_SAMPLE_RISING);
>> > +
>> > +done:
>> > +       of_node_put(np);
>> > +       return pdata;
>> > +}
>
> [snip]
>
>> > @@ -1034,9 +1086,21 @@ static const struct i2c_device_id mt9v032_id[] = {
>> >  };
>> >  MODULE_DEVICE_TABLE(i2c, mt9v032_id);
>> >
>> > +#if IS_ENABLED(CONFIG_OF)
>> > +static const struct of_device_id mt9v032_of_match[] = {
>> > +       { .compatible = "mt9v032" },
>> > +       { .compatible = "mt9v032m" },
>> > +       { .compatible = "mt9v034" },
>> > +       { .compatible = "mt9v034m" },
>> > +       { /* Sentinel */ }
>> > +};
>> > +MODULE_DEVICE_TABLE(of, mt9v032_of_match);
>> > +#endif
>>
>> I have this:
>> #if IS_ENABLED(CONFIG_OF)
>> static const struct of_device_id mt9v032_of_match[] = {
>>     { .compatible = "aptina,mt9v022", },
>>     { .compatible = "aptina,mt9v022m", },
>>     { .compatible = "aptina,mt9v024", },
>>     { .compatible = "aptina,mt9v024m", },
>>     { .compatible = "aptina,mt9v032", },
>>     { .compatible = "aptina,mt9v032m", },
>>     { .compatible = "aptina,mt9v034", },
>>     { .compatible = "aptina,mt9v034m", },
>
> Looks like I forgot to update my patch for mt9v02* support. Sorry about that,
> I'll fix it. And the "aptina," prefix of course belongs there.
>
>>     { /* sentinel */ },
>> };
>>
>> MODULE_DEVICE_TABLE(of, mt9v032_of_match);
>> #endi
>
>
> --
> Regards,
>
> Laurent Pinchart
>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux