From: Javier Martinez Canillas <javier-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org>
To: Laurent Pinchart
<laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Mauro Carvalho Chehab
<mchehab-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org>,
Enrico Butera <ebutera-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Sakari Ailus
<sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Enric Balletbo i Serra
<eballetbo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Eduard Gavin <egavinc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Hans Verkuil
<hans.verkuil-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>,
linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 09/10] [media] tvp5150: Initialize the chip on probe
Date: Wed, 6 Jan 2016 08:39:05 -0300 [thread overview]
Message-ID: <568CFCD9.1010809@osg.samsung.com> (raw)
In-Reply-To: <1730920.ntKvfybiDd@avalon>
Hello Laurent,
On 01/06/2016 07:59 AM, Laurent Pinchart wrote:
> Hi Javier,
>
> Thankk you for the patch.
>
Thanks a lot for your feedback.
> On Monday 04 January 2016 09:25:31 Javier Martinez Canillas wrote:
>> After power-up, the tvp5150 decoder is in a unknown state until the
>> RESETB pin is driven LOW which reset all the registers and restarts
>> the chip's internal state machine.
>>
>> The init sequence has some timing constraints and the RESETB signal
>> can only be used if the PDN (Power-down) pin is first released.
>>
>> So, the initialization sequence is as follows:
>>
>> 1- PDN (active-low) is driven HIGH so the chip is power-up
>> 2- A 20 ms delay is needed before sending a RESETB (active-low) signal.
>> 3- The RESETB pulse duration is 500 ns.
>> 4- A 200 us delay is needed for the I2C client to be active after reset.
>>
>> This patch used as a reference the logic in the IGEPv2 board file from
>> the ISEE 2.6.37 vendor tree.
>>
>> Signed-off-by: Javier Martinez Canillas <javier-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org>
>> ---
>>
>> drivers/media/i2c/tvp5150.c | 35 +++++++++++++++++++++++++++++++++++
>> 1 file changed, 35 insertions(+)
>>
>> diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
>> index caac96a577f8..fed89a811ab7 100644
>> --- a/drivers/media/i2c/tvp5150.c
>> +++ b/drivers/media/i2c/tvp5150.c
>> @@ -5,6 +5,7 @@
>> * This code is placed under the terms of the GNU General Public License v2
>> */
>>
>> +#include <linux/of_gpio.h>
>
> Let's keep the headers sorted alphabetically if you don't mind :-)
>
Right, sorry about that.
>> #include <linux/i2c.h>
>> #include <linux/slab.h>
>> #include <linux/videodev2.h>
>> @@ -1197,6 +1198,36 @@ static int tvp5150_detect_version(struct tvp5150
>> *core) return 0;
>> }
>>
>> +static inline int tvp5150_init(struct i2c_client *c)
>> +{
>> + struct gpio_desc *pdn_gpio;
>> + struct gpio_desc *reset_gpio;
>> +
>> + pdn_gpio = devm_gpiod_get_optional(&c->dev, "powerdown", GPIOD_OUT_HIGH);
>> + if (IS_ERR(pdn_gpio))
>> + return PTR_ERR(pdn_gpio);
>> +
>> + if (pdn_gpio) {
>> + gpiod_set_value_cansleep(pdn_gpio, 0);
>> + /* Delay time between power supplies active and reset */
>> + msleep(20);
>
> How about usleep_range() instead ?
>
Documentation/timers/timers-howto.txt says that usleep_range() should be
used for 1ms - 20ms and msleep() for 20ms+ so since this was a boundary
value, I chose for msleep() but I can use usleep_range() if you want.
I've no strong opinion on this.
>> + }
>> +
>> + reset_gpio = devm_gpiod_get_optional(&c->dev, "reset", GPIOD_OUT_HIGH);
>> + if (IS_ERR(reset_gpio))
>> + return PTR_ERR(reset_gpio);
>> +
>> + if (reset_gpio) {
>> + /* RESETB pulse duration */
>> + ndelay(500);
>
> Is the timing so sensitive that we need a delay, or could we use
> usleep_range() ?
>
According to my tests, it is a minimum value but I chose to do a delay since
the time is very short and also Documentation/timers/timers-howto.txt says
that using usleep for very short periods may not be worth it due the overhead
of setting up the hrtimers for usleep.
Best regards,
--
Javier Martinez Canillas
Open Source Group
Samsung Research America
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Javier Martinez Canillas <javier@osg.samsung.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
Enrico Butera <ebutera@gmail.com>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Enric Balletbo i Serra <eballetbo@gmail.com>,
Rob Herring <robh+dt@kernel.org>,
Eduard Gavin <egavinc@gmail.com>,
Hans Verkuil <hans.verkuil@cisco.com>,
linux-media@vger.kernel.org
Subject: Re: [PATCH 09/10] [media] tvp5150: Initialize the chip on probe
Date: Wed, 6 Jan 2016 08:39:05 -0300 [thread overview]
Message-ID: <568CFCD9.1010809@osg.samsung.com> (raw)
In-Reply-To: <1730920.ntKvfybiDd@avalon>
Hello Laurent,
On 01/06/2016 07:59 AM, Laurent Pinchart wrote:
> Hi Javier,
>
> Thankk you for the patch.
>
Thanks a lot for your feedback.
> On Monday 04 January 2016 09:25:31 Javier Martinez Canillas wrote:
>> After power-up, the tvp5150 decoder is in a unknown state until the
>> RESETB pin is driven LOW which reset all the registers and restarts
>> the chip's internal state machine.
>>
>> The init sequence has some timing constraints and the RESETB signal
>> can only be used if the PDN (Power-down) pin is first released.
>>
>> So, the initialization sequence is as follows:
>>
>> 1- PDN (active-low) is driven HIGH so the chip is power-up
>> 2- A 20 ms delay is needed before sending a RESETB (active-low) signal.
>> 3- The RESETB pulse duration is 500 ns.
>> 4- A 200 us delay is needed for the I2C client to be active after reset.
>>
>> This patch used as a reference the logic in the IGEPv2 board file from
>> the ISEE 2.6.37 vendor tree.
>>
>> Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
>> ---
>>
>> drivers/media/i2c/tvp5150.c | 35 +++++++++++++++++++++++++++++++++++
>> 1 file changed, 35 insertions(+)
>>
>> diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
>> index caac96a577f8..fed89a811ab7 100644
>> --- a/drivers/media/i2c/tvp5150.c
>> +++ b/drivers/media/i2c/tvp5150.c
>> @@ -5,6 +5,7 @@
>> * This code is placed under the terms of the GNU General Public License v2
>> */
>>
>> +#include <linux/of_gpio.h>
>
> Let's keep the headers sorted alphabetically if you don't mind :-)
>
Right, sorry about that.
>> #include <linux/i2c.h>
>> #include <linux/slab.h>
>> #include <linux/videodev2.h>
>> @@ -1197,6 +1198,36 @@ static int tvp5150_detect_version(struct tvp5150
>> *core) return 0;
>> }
>>
>> +static inline int tvp5150_init(struct i2c_client *c)
>> +{
>> + struct gpio_desc *pdn_gpio;
>> + struct gpio_desc *reset_gpio;
>> +
>> + pdn_gpio = devm_gpiod_get_optional(&c->dev, "powerdown", GPIOD_OUT_HIGH);
>> + if (IS_ERR(pdn_gpio))
>> + return PTR_ERR(pdn_gpio);
>> +
>> + if (pdn_gpio) {
>> + gpiod_set_value_cansleep(pdn_gpio, 0);
>> + /* Delay time between power supplies active and reset */
>> + msleep(20);
>
> How about usleep_range() instead ?
>
Documentation/timers/timers-howto.txt says that usleep_range() should be
used for 1ms - 20ms and msleep() for 20ms+ so since this was a boundary
value, I chose for msleep() but I can use usleep_range() if you want.
I've no strong opinion on this.
>> + }
>> +
>> + reset_gpio = devm_gpiod_get_optional(&c->dev, "reset", GPIOD_OUT_HIGH);
>> + if (IS_ERR(reset_gpio))
>> + return PTR_ERR(reset_gpio);
>> +
>> + if (reset_gpio) {
>> + /* RESETB pulse duration */
>> + ndelay(500);
>
> Is the timing so sensitive that we need a delay, or could we use
> usleep_range() ?
>
According to my tests, it is a minimum value but I chose to do a delay since
the time is very short and also Documentation/timers/timers-howto.txt says
that using usleep for very short periods may not be worth it due the overhead
of setting up the hrtimers for usleep.
Best regards,
--
Javier Martinez Canillas
Open Source Group
Samsung Research America
next prev parent reply other threads:[~2016-01-06 11:39 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-04 12:25 [PATCH 00/10] [media] tvp5150: add MC and DT support Javier Martinez Canillas
2016-01-04 12:25 ` Javier Martinez Canillas
2016-01-04 12:25 ` [PATCH 01/10] [media] tvp5150: Restructure version detection Javier Martinez Canillas
2016-01-04 12:25 ` [PATCH 02/10] [media] tvp5150: Add tvp5151 support Javier Martinez Canillas
2016-01-04 12:25 ` [PATCH 03/10] [media] tvp5150: Add pad-level subdev operations Javier Martinez Canillas
2016-01-04 12:25 ` [PATCH 04/10] [media] tvp5150: Add pixel rate control support Javier Martinez Canillas
2016-01-04 12:25 ` [PATCH 05/10] [media] tvp5150: Add s_stream subdev operation support Javier Martinez Canillas
2016-01-04 12:25 ` [PATCH 06/10] [media] tvp5150: Add g_mbus_config " Javier Martinez Canillas
2016-01-04 12:25 ` [PATCH 07/10] [media] tvp5150: Add device tree binding document Javier Martinez Canillas
[not found] ` <1451910332-23385-8-git-send-email-javier-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org>
2016-01-04 14:07 ` Rob Herring
2016-01-04 14:07 ` Rob Herring
2016-01-04 16:16 ` Javier Martinez Canillas
2016-01-04 16:16 ` Javier Martinez Canillas
2016-01-06 10:39 ` Laurent Pinchart
2016-01-06 10:39 ` Laurent Pinchart
2016-01-06 10:46 ` Javier Martinez Canillas
2016-01-06 11:00 ` Laurent Pinchart
2016-01-04 12:25 ` [PATCH 08/10] [media] tvp5150: Add OF match table Javier Martinez Canillas
2016-01-06 10:40 ` Laurent Pinchart
2016-01-04 12:25 ` [PATCH 09/10] [media] tvp5150: Initialize the chip on probe Javier Martinez Canillas
[not found] ` <1451910332-23385-10-git-send-email-javier-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org>
2016-01-04 12:40 ` kbuild test robot
2016-01-04 12:40 ` kbuild test robot
[not found] ` <201601042006.Dk9Wav4W%fengguang.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-04 12:53 ` Javier Martinez Canillas
2016-01-04 12:53 ` Javier Martinez Canillas
2016-01-06 10:59 ` Laurent Pinchart
2016-01-06 10:59 ` Laurent Pinchart
2016-01-06 11:39 ` Javier Martinez Canillas [this message]
2016-01-06 11:39 ` Javier Martinez Canillas
2016-01-04 12:25 ` [PATCH 10/10] [media] tvp5150: Configure data interface via pdata or DT Javier Martinez Canillas
2016-01-06 10:56 ` Laurent Pinchart
2016-01-06 11:27 ` Javier Martinez Canillas
2016-01-06 11:27 ` Javier Martinez Canillas
[not found] ` <568CFA1E.6060309-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org>
2016-01-06 13:48 ` Laurent Pinchart
2016-01-06 13:48 ` Laurent Pinchart
2016-01-06 15:04 ` Javier Martinez Canillas
2016-01-06 15:04 ` Javier Martinez Canillas
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=568CFCD9.1010809@osg.samsung.com \
--to=javier-jph+aebz4p+uejcrhfaqsw@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=eballetbo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=ebutera-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=egavinc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=hans.verkuil-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org \
--cc=laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mchehab-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
/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.