From: Eugen Hristev <eugen.hristev@microchip.com>
To: <jic23@kernel.org>, <linux-iio@vger.kernel.org>,
<devicetree@vger.kernel.org>, <nicolas.ferre@microchip.com>
Cc: <linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <robh+dt@kernel.org>,
<ludovic.desroches@microchip.com>,
Eugen Hristev <eugen.hristev@microchip.com>
Subject: [PATCH v3 06/10] iio: adc: at91-sama5d2_adc: add helper for COR register
Date: Wed, 1 Sep 2021 15:30:09 +0300 [thread overview]
Message-ID: <20210901123013.329792-7-eugen.hristev@microchip.com> (raw)
In-Reply-To: <20210901123013.329792-1-eugen.hristev@microchip.com>
Add helper for the COR register. This helper allows to modify the COR
register, removes duplicate code and improves readability.
The COR offset is now part of the register layout. This will allow
different platform with a different offset to use the same helper.
Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
---
Changes in v3:
- fixed nitpick:
> + cor = (BIT(chan->channel) | BIT(chan->channel2));
Excessive brackets.
drivers/iio/adc/at91-sama5d2_adc.c | 40 +++++++++++++++---------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
index c227a0865a31..7d8e80335ba8 100644
--- a/drivers/iio/adc/at91-sama5d2_adc.c
+++ b/drivers/iio/adc/at91-sama5d2_adc.c
@@ -151,8 +151,8 @@ struct at91_adc_reg_layout {
u16 CGR;
/* Channel Offset Register */
u16 COR;
-#define AT91_SAMA5D2_COR_DIFF_OFFSET 16
-
+/* Channel Offset Register differential offset - constant, not a register */
+ u16 COR_diff_offset;
/* Analog Control Register */
u16 ACR;
/* Analog Control Register - Pen detect sensitivity mask */
@@ -246,6 +246,7 @@ static const struct at91_adc_reg_layout sama5d2_layout = {
.CWR = 0x44,
.CGR = 0x48,
.COR = 0x4c,
+ .COR_diff_offset = 16,
.ACR = 0x94,
.TSMR = 0xb0,
.XPOSR = 0xb4,
@@ -594,6 +595,21 @@ static unsigned int at91_adc_active_scan_mask_to_reg(struct iio_dev *indio_dev)
return mask & GENMASK(st->soc_info.platform->nr_channels, 0);
}
+static void at91_adc_cor(struct at91_adc_state *st,
+ struct iio_chan_spec const *chan)
+{
+ u32 cor, cur_cor;
+
+ cor = BIT(chan->channel) | BIT(chan->channel2);
+
+ cur_cor = at91_adc_readl(st, COR);
+ cor <<= st->soc_info.platform->layout->COR_diff_offset;
+ if (chan->differential)
+ at91_adc_writel(st, COR, cur_cor | cor);
+ else
+ at91_adc_writel(st, COR, cur_cor & ~cor);
+}
+
static void at91_adc_irq_status(struct at91_adc_state *st, u32 *status,
u32 *eoc)
{
@@ -1038,8 +1054,6 @@ static int at91_adc_buffer_prepare(struct iio_dev *indio_dev)
indio_dev->num_channels) {
struct iio_chan_spec const *chan =
at91_adc_chan_get(indio_dev, bit);
- u32 cor;
-
if (!chan)
continue;
/* these channel types cannot be handled by this trigger */
@@ -1047,16 +1061,7 @@ static int at91_adc_buffer_prepare(struct iio_dev *indio_dev)
chan->type == IIO_PRESSURE)
continue;
- cor = at91_adc_readl(st, COR);
-
- if (chan->differential)
- cor |= (BIT(chan->channel) | BIT(chan->channel2)) <<
- AT91_SAMA5D2_COR_DIFF_OFFSET;
- else
- cor &= ~(BIT(chan->channel) <<
- AT91_SAMA5D2_COR_DIFF_OFFSET);
-
- at91_adc_writel(st, COR, cor);
+ at91_adc_cor(st, chan);
at91_adc_writel(st, CHER, BIT(chan->channel));
}
@@ -1444,7 +1449,6 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int *val)
{
struct at91_adc_state *st = iio_priv(indio_dev);
- u32 cor = 0;
u16 tmp_val;
int ret;
@@ -1490,11 +1494,7 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
st->chan = chan;
- if (chan->differential)
- cor = (BIT(chan->channel) | BIT(chan->channel2)) <<
- AT91_SAMA5D2_COR_DIFF_OFFSET;
-
- at91_adc_writel(st, COR, cor);
+ at91_adc_cor(st, chan);
at91_adc_writel(st, CHER, BIT(chan->channel));
at91_adc_eoc_ena(st, chan->channel);
at91_adc_writel(st, CR, AT91_SAMA5D2_CR_START);
--
2.25.1
next prev parent reply other threads:[~2021-09-01 12:32 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-01 12:30 [PATCH v3 00/10] iio: adc: at91-sama5d2_adc: add support for sama7g5 Eugen Hristev
2021-09-01 12:30 ` [PATCH v3 01/10] dt-bindings: iio: adc: at91-sama5d2: add compatible for sama7g5-adc Eugen Hristev
2021-09-01 12:30 ` [PATCH v3 02/10] iio: adc: at91-sama5d2_adc: initialize hardware after clock is started Eugen Hristev
2021-09-01 12:30 ` [PATCH v3 03/10] iio: adc: at91-sama5d2_adc: remove unused definition Eugen Hristev
2021-09-01 12:30 ` [PATCH v3 04/10] iio: adc: at91-sama5d2_adc: convert to platform specific data structures Eugen Hristev
2021-09-01 14:31 ` Eugen.Hristev
2021-09-05 10:24 ` Jonathan Cameron
2021-09-01 12:30 ` [PATCH v3 05/10] iio: adc: at91-sama5d2_adc: add support for separate end of conversion registers Eugen Hristev
2021-09-01 12:30 ` Eugen Hristev [this message]
2021-09-01 12:30 ` [PATCH v3 07/10] iio: adc: at91-sama5d2_adc: add support for sama7g5 device Eugen Hristev
2021-09-01 12:30 ` [PATCH v3 08/10] iio: adc: at91-sama5d2_adc: update copyright and authors information Eugen Hristev
2021-09-01 12:30 ` [PATCH v3 09/10] ARM: dts: at91: sama7g5: add node for the ADC Eugen Hristev
2021-09-15 9:16 ` Nicolas Ferre
2021-09-01 12:30 ` [PATCH v3 10/10] ARM: dts: at91: sama7g5ek: enable ADC on the board Eugen Hristev
2021-09-15 9:17 ` Nicolas Ferre
2021-09-05 10:28 ` [PATCH v3 00/10] iio: adc: at91-sama5d2_adc: add support for sama7g5 Jonathan Cameron
2021-09-15 9:16 ` Nicolas Ferre
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=20210901123013.329792-7-eugen.hristev@microchip.com \
--to=eugen.hristev@microchip.com \
--cc=devicetree@vger.kernel.org \
--cc=jic23@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ludovic.desroches@microchip.com \
--cc=nicolas.ferre@microchip.com \
--cc=robh+dt@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).