From: antoine.tenart@free-electrons.com (Antoine Tenart)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/4] iio: adc: add support for Berlin
Date: Wed, 1 Apr 2015 15:06:08 +0200 [thread overview]
Message-ID: <20150401130608.GB10772@kwain> (raw)
In-Reply-To: <alpine.DEB.2.02.1503201819010.21628@pmeerw.net>
Peter,
On Fri, Mar 20, 2015 at 06:43:15PM +0100, Peter Meerwald wrote:
>
> probably these regmap_read() / _write() pairs could be MACRO()'d away
> somehow
Sure.
>
> the prefix SYSCTL prefix is unexpected, couldn't you use BERLIN_ or
> something?
I'll use BERLIN2_ instead of SYSCTL_
>
> > +#define SYSCTL_SM_CTRL 0x14
> > +#define SYSCTL_SM_CTRL_SM_SOC_INT BIT(1)
>
> whitespace issue?
I added a whitespace to put the bit definitions of a register together,
so that the reading is easier.
>
> > +#define SYSCTL_SM_CTRL_SOC_SM_INT BIT(2)
> > +#define SYSCTL_SM_CTRL_ADC_SEL(x) (BIT(x) << 5) /* 0-15 */
> > +#define SYSCTL_SM_CTRL_ADC_SEL_MASK (0xf << 5)
> > +#define SYSCTL_SM_CTRL_ADC_POWER BIT(9)
> > +#define SYSCTL_SM_CTRL_ADC_CLKSEL_DIV2 (0x0 << 10)
> > +#define SYSCTL_SM_CTRL_ADC_CLKSEL_DIV3 (0x1 << 10)
> > +#define SYSCTL_SM_CTRL_ADC_CLKSEL_DIV4 (0x2 << 10)
> > +#define SYSCTL_SM_CTRL_ADC_CLKSEL_DIV8 (0x3 << 10)
> > +#define SYSCTL_SM_CTRL_ADC_CLKSEL_MASK (0x3 << 10)
> > +#define SYSCTL_SM_CTRL_ADC_START BIT(12)
> > +#define SYSCTL_SM_CTRL_ADC_RESET BIT(13)
> > +#define SYSCTL_SM_CTRL_ADC_BANDGAP_RDY BIT(14)
> > +#define SYSCTL_SM_CTRL_ADC_CONT_SINGLE (0x0 << 15)
> > +#define SYSCTL_SM_CTRL_ADC_CONT_CONTINUOUS (0x1 << 15)
> > +#define SYSCTL_SM_CTRL_ADC_BUFFER_EN BIT(16)
> > +#define SYSCTL_SM_CTRL_ADC_VREF_EXT (0x0 << 17)
> > +#define SYSCTL_SM_CTRL_ADC_VREF_INT (0x1 << 17)
> > +#define SYSCTL_SM_CTRL_ADC_ROTATE BIT(19)
> > +#define SYSCTL_SM_CTRL_TSEN_EN BIT(20)
> > +#define SYSCTL_SM_CTRL_TSEN_CLK_SEL_125 (0x0 << 21) /* 1.25 MHz */
> > +#define SYSCTL_SM_CTRL_TSEN_CLK_SEL_250 (0x1 << 21) /* 2.5 MHz */
> > +#define SYSCTL_SM_CTRL_TSEN_MODE_0_125 (0x0 << 22) /* 0-125 C */
> > +#define SYSCTL_SM_CTRL_TSEN_MODE_10_50 (0x1 << 22) /* 10-50 C */
> > + { \
> > + .channel = n, \
> > + .datasheet_name = "channel"#n, \
> > + .type = t, \
> > + .indexed = 1, \
> > + .scan_index = n, \
> > + .scan_type = { \
> > + .sign = 'u', \
> > + .realbits = 64, \
> > + .storagebits = 64, \
> > + }, \
>
> the data read is not 64 bit I think
>
> the driver does not seem to support buffered reads, so scan_type and
> scan_index can be removed
OK.
> > + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
> > + }
> > +
> > +#define N_CHANNELS 8
>
> not prefixed; would be good if you could do with ARRAY_SIZE over
> _adc_channels instead
OK.
>
> > + BERLIN2_ADC_CHANNEL(0, IIO_VOLTAGE), /* external input */
> > + BERLIN2_ADC_CHANNEL(1, IIO_VOLTAGE), /* external input */
> > + BERLIN2_ADC_CHANNEL(2, IIO_VOLTAGE), /* external input */
> > + BERLIN2_ADC_CHANNEL(3, IIO_VOLTAGE), /* external input */
> > + BERLIN2_ADC_CHANNEL(4, IIO_VOLTAGE), /* reserved */
> > + BERLIN2_ADC_CHANNEL(5, IIO_VOLTAGE), /* reserved */
> > + BERLIN2_ADC_CHANNEL(6, IIO_TEMP), /* temperature sensor */
>
> the temperature channel is not indexed (there is only one)
I'll update.
>
> > + BERLIN2_ADC_CHANNEL(7, IIO_VOLTAGE), /* reserved */
> > + { /* timestamp */
>
>
> use IIO_CHAN_SOFT_TIMESTAMP(N_CHANNELS) here
Oh, nice! I'll update.
> > +
> > + switch (mask) {
> > + case IIO_CHAN_INFO_RAW:
> > + if (chan->type == IIO_VOLTAGE) {
> > + *val = berlin2_adc_read(idev, chan->channel);
> > + if (*val < 0)
> > + return *val;
>
> is this milli-Volts?
Good question. I think so, but I do not have much information about
the !tsen channels.
>
> > +
> > + return IIO_VAL_INT;
> > + } else if (chan->type == IIO_TEMP) {
> > + temp = berlin2_adc_tsen_read(idev);
> > + if (temp < 0)
> > + return temp;
> > +
> > + if (temp > 2047)
> > + temp = -(4096 - temp);
> > +
> > + /* Convert to Celsius */
> > + *val = (temp * 100) / 264 - 270;
>
> use SCALE and OFFSET IIO_CHAN_INFO_s to that the temperature can be
> interpreted as milli-Celsius (or use _PROCESSED, not _RAW)
I'll fix that.
> > +
> > +static int berlin2_adc_probe(struct platform_device *pdev)
> > +{
> > + struct iio_dev *idev;
>
> people prefer indio_dev instead of idev
OK.
>
> > + struct berlin2_adc_priv *priv;
> > + struct device_node *parent_np = of_get_parent(pdev->dev.of_node);
> > + int ret, val;
> > +
> > + idev = iio_device_alloc(sizeof(struct berlin2_adc_priv));
>
> devm_iio_device_alloc?
Yep, that's better.
> > +
> > + ret = iio_device_register(idev);
>
> devm_iio_device_register?
Ditto.
>
> > + if (ret) {
> > + dev_err(&pdev->dev, "Failed to register the IIO device: %d\n",
> > + ret);
>
> probably not the most useful error msg and about the only logging; drop
> it?
>
> and just do
> return devm_iio_device_register(idev);
OK.
Thanks for the review!
Antoine
--
Antoine T?nart, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
next prev parent reply other threads:[~2015-04-01 13:06 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-20 13:36 [PATCH 0/4] ARM: berlin: ADC support Antoine Tenart
2015-03-20 13:36 ` [PATCH 1/4] iio: adc: add support for Berlin Antoine Tenart
2015-03-20 17:43 ` Peter Meerwald
2015-03-20 18:45 ` Lars-Peter Clausen
2015-03-21 12:50 ` Jonathan Cameron
2015-04-01 13:06 ` Antoine Tenart [this message]
2015-03-21 12:05 ` Paul Bolle
2015-03-20 13:36 ` [PATCH 2/4] Documentation: bindings: document the Berlin ADC driver Antoine Tenart
2015-03-20 13:36 ` [PATCH 3/4] ARM: berlin: add an ADC node for the BG2Q Antoine Tenart
2015-03-20 13:36 ` [PATCH 4/4] ARM: berlin: enable the ADC on the BG2Q DMP Antoine Tenart
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=20150401130608.GB10772@kwain \
--to=antoine.tenart@free-electrons.com \
--cc=linux-arm-kernel@lists.infradead.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