From: Josh Wu <josh.wu@atmel.com>
To: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: <jic23@cam.ac.uk>, <linux-arm-kernel@lists.infradead.org>,
<linux-iio@vger.kernel.org>, <plagnioj@jcrosoft.com>,
<nicolas.ferre@atmel.com>
Subject: Re: [PATCH 2/5] iio: at91: Use different prescal, startup mask in MR for different IP
Date: Tue, 16 Jul 2013 16:35:54 +0800 [thread overview]
Message-ID: <51E505EA.4060502@atmel.com> (raw)
In-Reply-To: <20130715125815.GC2962@lukather>
Hi, Maxime
On 7/15/2013 8:58 PM, Maxime Ripard wrote:
> Hi Josh,
>
> On Sun, Jul 14, 2013 at 04:04:26PM +0800, Josh Wu wrote:
>> For at91 boards, there are different IPs for adc. Different IPs has different
>> STARTUP & PRESCAL mask in ADC_MR.
>>
>> This patch can change the masks according to the different IP version.
>>
>> Signed-off-by: Josh Wu <josh.wu@atmel.com>
>> ---
>> arch/arm/mach-at91/include/mach/at91_adc.h | 9 ++++--
>> drivers/iio/adc/at91_adc.c | 48 ++++++++++++++++++++++++++--
>> 2 files changed, 53 insertions(+), 4 deletions(-)
>>
>> diff --git a/arch/arm/mach-at91/include/mach/at91_adc.h b/arch/arm/mach-at91/include/mach/at91_adc.h
>> index 8e7ed5c..ab273ee 100644
>> --- a/arch/arm/mach-at91/include/mach/at91_adc.h
>> +++ b/arch/arm/mach-at91/include/mach/at91_adc.h
>> @@ -28,9 +28,12 @@
>> #define AT91_ADC_TRGSEL_EXTERNAL (6 << 1)
>> #define AT91_ADC_LOWRES (1 << 4) /* Low Resolution */
>> #define AT91_ADC_SLEEP (1 << 5) /* Sleep Mode */
>> -#define AT91_ADC_PRESCAL (0x3f << 8) /* Prescalar Rate Selection */
>> +#define AT91_ADC_PRESCAL (0xff << 8) /* Prescalar Rate Selection */
>> +#define AT91_ADC_PRESCAL_9260 (0x3f << 8)
>> #define AT91_ADC_PRESCAL_(x) ((x) << 8)
>> -#define AT91_ADC_STARTUP (0x1f << 16) /* Startup Up Time */
>> +#define AT91_ADC_STARTUP (0xf << 16) /* Startup Up Time */
>> +#define AT91_ADC_STARTUP_9260 (0x1f << 16)
>> +#define AT91_ADC_STARTUP_9G45 (0x7f << 16)
>> #define AT91_ADC_STARTUP_(x) ((x) << 16)
>> #define AT91_ADC_SHTIM (0xf << 24) /* Sample & Hold Time */
>> #define AT91_ADC_SHTIM_(x) ((x) << 24)
>> @@ -58,4 +61,6 @@
>> #define AT91_ADC_CHR(n) (0x30 + ((n) * 4)) /* Channel Data Register N */
>> #define AT91_ADC_DATA (0x3ff)
>>
>> +#define AT91_ADC_VERSION 0xFC
>> +
>> #endif
>> diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c
>> index 18bd54f..14e99ba 100644
>> --- a/drivers/iio/adc/at91_adc.c
>> +++ b/drivers/iio/adc/at91_adc.c
>> @@ -39,6 +39,12 @@
>> #define at91_adc_writel(st, reg, val) \
>> (writel_relaxed(val, st->reg_base + reg))
>>
>> +struct at91_adc_caps {
>> + bool has_tsmr; /* only at91sam9x5, sama5d3 have TSMR reg */
>> + u32 mr_prescal_mask;
>> + u32 mr_startup_mask;
>> +};
>> +
>> struct at91_adc_state {
>> struct clk *adc_clk;
>> u16 *buffer;
>> @@ -62,6 +68,7 @@ struct at91_adc_state {
>> u32 res; /* resolution used for convertions */
>> bool low_res; /* the resolution corresponds to the lowest one */
>> wait_queue_head_t wq_data_avail;
>> + struct at91_adc_caps caps;
>> };
>>
>> static irqreturn_t at91_adc_trigger_handler(int irq, void *p)
>> @@ -580,6 +587,41 @@ static const struct iio_info at91_adc_info = {
>> .read_raw = &at91_adc_read_raw,
>> };
>>
>> +/*
>> + * Since atmel adc support different ip for touchscreen mode. Through the
>> + * IP check, we will know the touchscreen capbilities.
>> + */
>> +static void atmel_adc_get_cap(struct at91_adc_state *st)
>> +{
>> + unsigned int version;
>> + struct iio_dev *idev = iio_priv_to_dev(st);
>> +
>> + version = at91_adc_readl(st, AT91_ADC_VERSION);
>> + dev_dbg(&idev->dev, "version: 0x%x\n", version);
>> +
>> + st->caps.mr_prescal_mask = AT91_ADC_PRESCAL_9260;
>> + st->caps.mr_startup_mask = AT91_ADC_STARTUP_9260;
>> +
>> + /* keep only major version number */
>> + switch (version & 0xf00) {
>> + case 0x500: /* SAMA5D3 */
>> + case 0x400: /* AT91SAM9X5/9N12 */
>> + st->caps.has_tsmr = 1;
>> + st->caps.mr_startup_mask = AT91_ADC_STARTUP;
>> + case 0x200: /* AT91SAM9M10/9G45 */
>> + st->caps.mr_prescal_mask = AT91_ADC_PRESCAL;
>> +
>> + if ((version & 0xf00) == 0x200)
>> + st->caps.mr_startup_mask = AT91_ADC_STARTUP_9G45;
>> + case 0x100: /* AT91SAM9260/9G20 */
>> + break;
>> + default:
>> + dev_warn(&idev->dev,
>> + "Unmanaged adc version, use minimal capabilities\n");
>> + break;
>> + };
>> +}
> Why don't you use different compatible names and derive your
> capabilities from which compatible is declared.
>
> It seems safer.
Ok, that make sense. I will use compatible names for the capabilities in
next version. Thanks.
>
> Maxime
>
Best Regards,
Josh Wu
WARNING: multiple messages have this Message-ID (diff)
From: josh.wu@atmel.com (Josh Wu)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/5] iio: at91: Use different prescal, startup mask in MR for different IP
Date: Tue, 16 Jul 2013 16:35:54 +0800 [thread overview]
Message-ID: <51E505EA.4060502@atmel.com> (raw)
In-Reply-To: <20130715125815.GC2962@lukather>
Hi, Maxime
On 7/15/2013 8:58 PM, Maxime Ripard wrote:
> Hi Josh,
>
> On Sun, Jul 14, 2013 at 04:04:26PM +0800, Josh Wu wrote:
>> For at91 boards, there are different IPs for adc. Different IPs has different
>> STARTUP & PRESCAL mask in ADC_MR.
>>
>> This patch can change the masks according to the different IP version.
>>
>> Signed-off-by: Josh Wu <josh.wu@atmel.com>
>> ---
>> arch/arm/mach-at91/include/mach/at91_adc.h | 9 ++++--
>> drivers/iio/adc/at91_adc.c | 48 ++++++++++++++++++++++++++--
>> 2 files changed, 53 insertions(+), 4 deletions(-)
>>
>> diff --git a/arch/arm/mach-at91/include/mach/at91_adc.h b/arch/arm/mach-at91/include/mach/at91_adc.h
>> index 8e7ed5c..ab273ee 100644
>> --- a/arch/arm/mach-at91/include/mach/at91_adc.h
>> +++ b/arch/arm/mach-at91/include/mach/at91_adc.h
>> @@ -28,9 +28,12 @@
>> #define AT91_ADC_TRGSEL_EXTERNAL (6 << 1)
>> #define AT91_ADC_LOWRES (1 << 4) /* Low Resolution */
>> #define AT91_ADC_SLEEP (1 << 5) /* Sleep Mode */
>> -#define AT91_ADC_PRESCAL (0x3f << 8) /* Prescalar Rate Selection */
>> +#define AT91_ADC_PRESCAL (0xff << 8) /* Prescalar Rate Selection */
>> +#define AT91_ADC_PRESCAL_9260 (0x3f << 8)
>> #define AT91_ADC_PRESCAL_(x) ((x) << 8)
>> -#define AT91_ADC_STARTUP (0x1f << 16) /* Startup Up Time */
>> +#define AT91_ADC_STARTUP (0xf << 16) /* Startup Up Time */
>> +#define AT91_ADC_STARTUP_9260 (0x1f << 16)
>> +#define AT91_ADC_STARTUP_9G45 (0x7f << 16)
>> #define AT91_ADC_STARTUP_(x) ((x) << 16)
>> #define AT91_ADC_SHTIM (0xf << 24) /* Sample & Hold Time */
>> #define AT91_ADC_SHTIM_(x) ((x) << 24)
>> @@ -58,4 +61,6 @@
>> #define AT91_ADC_CHR(n) (0x30 + ((n) * 4)) /* Channel Data Register N */
>> #define AT91_ADC_DATA (0x3ff)
>>
>> +#define AT91_ADC_VERSION 0xFC
>> +
>> #endif
>> diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c
>> index 18bd54f..14e99ba 100644
>> --- a/drivers/iio/adc/at91_adc.c
>> +++ b/drivers/iio/adc/at91_adc.c
>> @@ -39,6 +39,12 @@
>> #define at91_adc_writel(st, reg, val) \
>> (writel_relaxed(val, st->reg_base + reg))
>>
>> +struct at91_adc_caps {
>> + bool has_tsmr; /* only at91sam9x5, sama5d3 have TSMR reg */
>> + u32 mr_prescal_mask;
>> + u32 mr_startup_mask;
>> +};
>> +
>> struct at91_adc_state {
>> struct clk *adc_clk;
>> u16 *buffer;
>> @@ -62,6 +68,7 @@ struct at91_adc_state {
>> u32 res; /* resolution used for convertions */
>> bool low_res; /* the resolution corresponds to the lowest one */
>> wait_queue_head_t wq_data_avail;
>> + struct at91_adc_caps caps;
>> };
>>
>> static irqreturn_t at91_adc_trigger_handler(int irq, void *p)
>> @@ -580,6 +587,41 @@ static const struct iio_info at91_adc_info = {
>> .read_raw = &at91_adc_read_raw,
>> };
>>
>> +/*
>> + * Since atmel adc support different ip for touchscreen mode. Through the
>> + * IP check, we will know the touchscreen capbilities.
>> + */
>> +static void atmel_adc_get_cap(struct at91_adc_state *st)
>> +{
>> + unsigned int version;
>> + struct iio_dev *idev = iio_priv_to_dev(st);
>> +
>> + version = at91_adc_readl(st, AT91_ADC_VERSION);
>> + dev_dbg(&idev->dev, "version: 0x%x\n", version);
>> +
>> + st->caps.mr_prescal_mask = AT91_ADC_PRESCAL_9260;
>> + st->caps.mr_startup_mask = AT91_ADC_STARTUP_9260;
>> +
>> + /* keep only major version number */
>> + switch (version & 0xf00) {
>> + case 0x500: /* SAMA5D3 */
>> + case 0x400: /* AT91SAM9X5/9N12 */
>> + st->caps.has_tsmr = 1;
>> + st->caps.mr_startup_mask = AT91_ADC_STARTUP;
>> + case 0x200: /* AT91SAM9M10/9G45 */
>> + st->caps.mr_prescal_mask = AT91_ADC_PRESCAL;
>> +
>> + if ((version & 0xf00) == 0x200)
>> + st->caps.mr_startup_mask = AT91_ADC_STARTUP_9G45;
>> + case 0x100: /* AT91SAM9260/9G20 */
>> + break;
>> + default:
>> + dev_warn(&idev->dev,
>> + "Unmanaged adc version, use minimal capabilities\n");
>> + break;
>> + };
>> +}
> Why don't you use different compatible names and derive your
> capabilities from which compatible is declared.
>
> It seems safer.
Ok, that make sense. I will use compatible names for the capabilities in
next version. Thanks.
>
> Maxime
>
Best Regards,
Josh Wu
next prev parent reply other threads:[~2013-07-16 8:36 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-14 8:04 [PATCH 0/5] iio: at91: Add touch screen support in at91 adc Josh Wu
2013-07-14 8:04 ` Josh Wu
2013-07-14 8:04 ` [PATCH 1/5] iio: at91: use adc_clk_khz to make the calculation not easy to large than u32 Josh Wu
2013-07-14 8:04 ` Josh Wu
2013-07-15 12:52 ` Maxime Ripard
2013-07-15 12:52 ` Maxime Ripard
2013-07-16 7:54 ` Josh Wu
2013-07-16 7:54 ` Josh Wu
2013-07-14 8:04 ` [PATCH 2/5] iio: at91: Use different prescal, startup mask in MR for different IP Josh Wu
2013-07-14 8:04 ` Josh Wu
2013-07-15 12:58 ` Maxime Ripard
2013-07-15 12:58 ` Maxime Ripard
2013-07-16 8:35 ` Josh Wu [this message]
2013-07-16 8:35 ` Josh Wu
2013-07-16 8:46 ` Nicolas Ferre
2013-07-16 8:46 ` Nicolas Ferre
2013-07-16 11:20 ` Maxime Ripard
2013-07-16 11:20 ` Maxime Ripard
2013-07-16 11:30 ` Thomas Petazzoni
2013-07-16 11:30 ` Thomas Petazzoni
2013-07-16 11:30 ` Thomas Petazzoni
2013-07-16 19:03 ` Jonathan Cameron
2013-07-16 19:03 ` Jonathan Cameron
2013-07-16 19:03 ` Jonathan Cameron
2013-07-16 19:17 ` Thomas Petazzoni
2013-07-16 19:17 ` Thomas Petazzoni
2013-07-16 19:17 ` Thomas Petazzoni
2013-07-17 8:23 ` Nicolas Ferre
2013-07-17 8:23 ` Nicolas Ferre
2013-07-17 8:23 ` Nicolas Ferre
2013-07-17 8:12 ` Nicolas Ferre
2013-07-17 8:12 ` Nicolas Ferre
2013-07-17 9:07 ` Josh Wu
2013-07-17 9:07 ` Josh Wu
2013-07-17 15:40 ` Maxime Ripard
2013-07-17 15:40 ` Maxime Ripard
2013-07-17 7:58 ` Nicolas Ferre
2013-07-17 7:58 ` Nicolas Ferre
2013-07-17 10:09 ` Josh Wu
2013-07-17 10:09 ` Josh Wu
2013-07-20 9:35 ` Jonathan Cameron
2013-07-20 9:35 ` Jonathan Cameron
2013-07-14 8:04 ` [PATCH 3/5] iio: at91: ADC start-up time calculation changed since at91sam9x5 Josh Wu
2013-07-14 8:04 ` Josh Wu
2013-07-20 9:39 ` Jonathan Cameron
2013-07-20 9:39 ` Jonathan Cameron
2013-07-25 7:35 ` Josh Wu
2013-07-25 7:35 ` Josh Wu
2013-07-14 8:04 ` [PATCH 4/5] iio: at91: add an optional dt property for for adc clock hz Josh Wu
2013-07-14 8:04 ` Josh Wu
2013-07-15 13:06 ` Maxime Ripard
2013-07-15 13:06 ` Maxime Ripard
2013-07-16 7:55 ` Josh Wu
2013-07-16 7:55 ` Josh Wu
2013-07-16 10:30 ` Maxime Ripard
2013-07-16 10:30 ` Maxime Ripard
2013-07-16 11:16 ` Lars-Peter Clausen
2013-07-16 11:16 ` Lars-Peter Clausen
2013-07-25 7:29 ` Josh Wu
2013-07-25 7:29 ` Josh Wu
2013-07-25 12:01 ` boris brezillon
2013-07-25 12:01 ` boris brezillon
2013-07-25 12:11 ` boris brezillon
2013-07-25 12:11 ` boris brezillon
2013-07-14 8:04 ` [PATCH 5/5] iio: at91: introduce touch screen support in iio adc driver Josh Wu
2013-07-14 8:04 ` Josh Wu
2013-07-15 13:15 ` Maxime Ripard
2013-07-15 13:15 ` Maxime Ripard
2013-07-16 9:09 ` Josh Wu
2013-07-16 9:09 ` Josh Wu
2013-07-16 11:43 ` Maxime Ripard
2013-07-16 11:43 ` Maxime Ripard
[not found] ` <1373789069-11604-6-git-send-email-josh.wu-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
2013-07-20 9:57 ` Jonathan Cameron
2013-07-20 9:57 ` Jonathan Cameron
2013-07-20 9:57 ` Jonathan Cameron
2013-07-22 13:17 ` Mark Rutland
2013-07-22 13:17 ` Mark Rutland
2013-07-25 7:56 ` Josh Wu
2013-07-25 7:56 ` Josh Wu
2013-07-25 16:45 ` Mark Rutland
2013-07-25 16:45 ` Mark Rutland
2013-08-06 10:24 ` Josh Wu
2013-08-06 10:24 ` Josh Wu
2013-08-08 13:40 ` Mark Rutland
2013-08-08 13:40 ` Mark Rutland
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=51E505EA.4060502@atmel.com \
--to=josh.wu@atmel.com \
--cc=jic23@cam.ac.uk \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=maxime.ripard@free-electrons.com \
--cc=nicolas.ferre@atmel.com \
--cc=plagnioj@jcrosoft.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.