From: Sylwester Nawrocki <sylvester.nawrocki@gmail.com>
To: Prabhakar Lad <prabhakar.csengg@gmail.com>
Cc: LMML <linux-media@vger.kernel.org>,
DLOS <davinci-linux-open-source@linux.davincidsp.com>,
LKML <linux-kernel@vger.kernel.org>,
devicetree-discuss@lists.ozlabs.org
Subject: Re: [PATCH v2] media: i2c: adv7343: add OF support
Date: Sun, 14 Jul 2013 22:33:08 +0200 [thread overview]
Message-ID: <51E30B04.8090009@gmail.com> (raw)
In-Reply-To: <1373713959-31066-1-git-send-email-prabhakar.csengg@gmail.com>
Hi Prabhakar,
On 07/13/2013 01:12 PM, Prabhakar Lad wrote:
> From: "Lad, Prabhakar"<prabhakar.csengg@gmail.com>
>
> add OF support for the adv7343 driver.
>
> Signed-off-by: Lad, Prabhakar<prabhakar.csengg@gmail.com>
> ---
> Changes for v2:
> 1: Fixed naming of properties.
>
> .../devicetree/bindings/media/i2c/adv7343.txt | 54 ++++++++++++++++
> drivers/media/i2c/adv7343.c | 65 +++++++++++++++++++-
> 2 files changed, 118 insertions(+), 1 deletion(-)
> create mode 100644 Documentation/devicetree/bindings/media/i2c/adv7343.txt
>
> diff --git a/Documentation/devicetree/bindings/media/i2c/adv7343.txt b/Documentation/devicetree/bindings/media/i2c/adv7343.txt
> new file mode 100644
> index 0000000..1d2e854
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/media/i2c/adv7343.txt
> @@ -0,0 +1,54 @@
> +* Analog Devices adv7343 video encoder
> +
> +The ADV7343 are high speed, digital-to-analog video encoders in a 64-lead LQFP
> +package. Six high speed, 3.3 V, 11-bit video DACs provide support for composite
> +(CVBS), S-Video (Y-C), and component (YPrPb/RGB) analog outputs in standard
> +definition (SD), enhanced definition (ED), or high definition (HD) video
> +formats.
> +
> +Required Properties :
> +- compatible: Must be "ad,adv7343"
Please have a look at Documentation/devicetree/bindings/vendor-prefixes.txt.
'ad' is a vendor prefix reserved for "Avionic Design GmbH".
For "Analog Devices, Inc." 'adi' should be used.
If I would have to draft a new DT binding proposal checklist checking
vendor-prefixes.txt would certainly be one of the first steps.
> +Optional Properties :
> +- ad,adv7343-power-mode-sleep-mode: on enable the current consumption is
> + reduced to micro ampere level. All DACs and
> + the internal PLL circuit are disabled.
> +- ad,adv7343-power-mode-pll-ctrl: PLL and oversampling control. This control
> + allows internal PLL 1 circuit to be powered
> + down and the oversampling to beswitched off.
> +- ad,adv7343-power-mode-dac-1: power on/off DAC 1, 0 = OFF and 1 = ON.
> +- ad,adv7343-power-mode-dac-2: power on/off DAC 2, 0 = OFF and 1 = ON.
> +- ad,adv7343-power-mode-dac-3: power on/off DAC 3, 0 = OFF and 1 = ON.
> +- ad,adv7343-power-mode-dac-4: power on/off DAC 4, 0 = OFF and 1 = ON.
> +- ad,adv7343-power-mode-dac-5: power on/off DAC 5, 0 = OFF and 1 = ON.
> +- ad,adv7343-power-mode-dac-6: power on/off DAC 6, 0 = OFF and 1 = ON.
> +- ad,adv7343-sd-config-dac-out-1: Configure SD DAC Output 1.
> +- ad,adv7343-sd-config-dac-out-2: Configure SD DAC Output 2.
All these properties look more like hardware configuration, rather than
hardware description. So at first sight I would say none of these properties
is suitable for the device tree.
sleep mode and pll ctrl should likely only have default values in the
driver.
sleep-mode disables all DAC, while power-mode-dac-? does power on/off
(enables / disables?) individual DACs. How those properties interact,
what's
going on here exactly ? :)
That said, how about only leaving the properties indicating which DACs
(including SD DACs) should be enabled ? E.g.
adi,dac-enable - an array indicating which DACs are enabled, in order
DAC1...DAC6, 1 to enable DAC, 0 to disable.
adi,sd-dac-enable - an array indicating which SD DACs are enabled, in order
DAC1...DAC2, 1 to enable SD DAC, 0 to disable.
Please note you don't need ",adv7343-" prefix in each single property
for that device.
> +Example:
> +
> +i2c0@1c22000 {
> + ...
> + ...
> +
> + adv7343@2a {
> + compatible = "ad,adv7343";
> + reg =<0x2a>;
> +
> + port {
> + adv7343_1: endpoint {
> + ad,adv7343-power-mode-sleep-mode;
> + ad,adv7343-power-mode-pll-ctrl;
> + ad,adv7343-power-mode-dac-1;
> + ad,adv7343-power-mode-dac-2;
> + ad,adv7343-power-mode-dac-3;
> + ad,adv7343-power-mode-dac-4;
> + ad,adv7343-power-mode-dac-5;
> + ad,adv7343-power-mode-dac-6;
Then this would have become:
adi,dac-enable = <1 1 1 1 1 1>;
But I would put some disabled DACs in the example as well:
/* Use DAC1..3, DAC6 */
adi,dac-enable = <1 1 1 0 0 1>;
> + ad,adv7343-sd-config-dac-out-1;
> + ad,adv7343-sd-config-dac-out-2;
And this:
adi,sd-dac-enable = <1 1>;
> + };
> + };
> + };
> + ...
> +};
> diff --git a/drivers/media/i2c/adv7343.c b/drivers/media/i2c/adv7343.c
> index 7606218..22ee6f4 100644
> --- a/drivers/media/i2c/adv7343.c
> +++ b/drivers/media/i2c/adv7343.c
> @@ -29,6 +29,7 @@
> #include<media/adv7343.h>
> #include<media/v4l2-device.h>
> #include<media/v4l2-ctrls.h>
> +#include<media/v4l2-of.h>
>
> #include "adv7343_regs.h"
>
> @@ -398,6 +399,59 @@ static int adv7343_initialize(struct v4l2_subdev *sd)
> return err;
> }
>
> +static struct adv7343_platform_data *
> +adv7343_get_pdata(struct i2c_client *client)
> +{
> + struct adv7343_platform_data *pdata;
> + struct device_node *np;
> +
> + 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;
> +
> + pdata = devm_kzalloc(&client->dev, sizeof(struct adv7343_platform_data),
> + GFP_KERNEL);
> + if (!pdata)
> + goto done;
> +
> + pdata->mode_config.sleep_mode =
> + of_property_read_bool(np, "ad,adv7343-power-mode-sleep-mode");
> +
> + pdata->mode_config.pll_control =
> + of_property_read_bool(np, "ad,adv7343-power-mode-pll-ctrl");
> +
> + pdata->mode_config.dac_1 =
> + of_property_read_bool(np, "ad,adv7343-power-mode-dac-1");
> +
> + pdata->mode_config.dac_2 =
> + of_property_read_bool(np, "ad,adv7343-power-mode-dac-2");
> +
> + pdata->mode_config.dac_3 =
> + of_property_read_bool(np, "ad,adv7343-power-mode-dac-3");
> +
> + pdata->mode_config.dac_4 =
> + of_property_read_bool(np, "ad,adv7343-power-mode-dac-4");
> +
> + pdata->mode_config.dac_5 =
> + of_property_read_bool(np, "ad,adv7343-power-mode-dac-5");
> +
> + pdata->mode_config.dac_6 =
> + of_property_read_bool(np, "ad,adv7343-power-mode-dac-6");
> +
> + pdata->sd_config.sd_dac_out1 =
> + of_property_read_bool(np, "ad,adv7343-sd-config-dac-out-1");
> +
> + pdata->sd_config.sd_dac_out2 =
> + of_property_read_bool(np, "ad,adv7343-sd-config-dac-out-2");
This doesn't look very impressive. IMHO changing
pdata->mode_config.{dac,sd_dac}
to an array type could simplify this code a little. But you could as
well use
of_property_read_u32_array() and assign each element to corresponding
mode_config.(sd_)dac field.
> +done:
> + of_node_put(np);
> + return pdata;
> +}
> +
--
Thanks,
Sylwester
next prev parent reply other threads:[~2013-07-14 20:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-13 11:12 [PATCH v2] media: i2c: adv7343: add OF support Prabhakar Lad
2013-07-14 20:33 ` Sylwester Nawrocki [this message]
2013-07-15 14:36 ` Prabhakar Lad
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51E30B04.8090009@gmail.com \
--to=sylvester.nawrocki@gmail.com \
--cc=davinci-linux-open-source@linux.davincidsp.com \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=prabhakar.csengg@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.