devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
	Naveen Krishna Chatradhi
	<ch.naveen-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>,
	Doug Anderson <dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
	Tomasz Figa <tomasz.figa-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Grant Likely
	<grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>,
	Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
Subject: Re: [RFC 11/11] iio/adc: (max1363) Add basic OF bindings and external vref support
Date: Sat, 02 Feb 2013 10:33:12 +0000	[thread overview]
Message-ID: <510CEB68.5000205@kernel.org> (raw)
In-Reply-To: <1359668588-13678-12-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>

On 01/31/2013 09:43 PM, Guenter Roeck wrote:
> Signed-off-by: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
Mostly fine.  Comments below are on the fact I'd prefer
a reference voltage coming from a regulator than being
a bit of platform data.
> ---
>  Documentation/devicetree/bindings/iio/max1363.txt |   54 +++++++++++++++++++++
>  drivers/iio/adc/max1363.c                         |   54 ++++++++++++++++-----
>  2 files changed, 95 insertions(+), 13 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/iio/max1363.txt
> 
> diff --git a/Documentation/devicetree/bindings/iio/max1363.txt b/Documentation/devicetree/bindings/iio/max1363.txt
> new file mode 100644
> index 0000000..6d22861
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iio/max1363.txt
> @@ -0,0 +1,54 @@
> +Device Tree bindings for MAX1363 and compatible ADC controllers
> +
> +This binding uses the common IIO binding[1].
> +
> +[1] Documentation/devicetree/bindings/iio/iio-bindings.txt
> +
> +Required properties:
> +
> +- compatible, shall be one of the following:
> +	"maxim,max1361"
> +	"maxim,max1362"
> +	"maxim,max1363"
> +	"maxim,max1364"
> +	"maxim,max1036"
> +	"maxim,max1037"
> +	"maxim,max1038"
> +	"maxim,max1039"
> +	"maxim,max1136"
> +	"maxim,max1137"
> +	"maxim,max1138"
> +	"maxim,max1139"
> +	"maxim,max1236"
> +	"maxim,max1237"
> +	"maxim,max1238"
> +	"maxim,max1239"
> +	"maxim,max11600"
> +	"maxim,max11601"
> +	"maxim,max11602"
> +	"maxim,max11603"
> +	"maxim,max11604"
> +	"maxim,max11605"
> +	"maxim,max11606"
> +	"maxim,max11607"
> +	"maxim,max11608"
> +	"maxim,max11609"
> +	"maxim,max11610"
> +	"maxim,max11611"
> +	"maxim,max11612"
> +	"maxim,max11613"
> +	"maxim,max11614"
> +	"maxim,max11615"
> +	"maxim,max11616"
> +	"maxim,max11617"
> +
> +- reg: shall be the I2C device address
> +
> +Required properties for IIO bindings:
> +- #io-channel-cells: from common IIO bindings; shall be set to 1.
> +
> +Optional properties:
> +- vref: Reference voltage in mV. If the provided reference voltage matches
> +	the internal reference voltage, the internal reference voltage is used.
> +	Otherwise it is assumed that an external reference voltage is used,
> +	and the chip is programmed accordingly.

Why not use a regulator? It has a nice device tree map and if it's just a fixed
voltage, we have the fixed regulator driver for them.  This is pretty common
throughout IIO (unsuprisingly) and we've been generally getting with platform
data that does this in favour of regulators.  Back when we started out, the
regulators framework was new so providing an alternative was pretty much
required.  Now it's pretty universal.


> diff --git a/drivers/iio/adc/max1363.c b/drivers/iio/adc/max1363.c
> index 51165d6..cf49a20 100644
> --- a/drivers/iio/adc/max1363.c
> +++ b/drivers/iio/adc/max1363.c
> @@ -31,6 +31,7 @@
>  #include <linux/slab.h>
>  #include <linux/err.h>
>  #include <linux/module.h>
> +#include <linux/of.h>
>  
>  #include <linux/iio/iio.h>
>  #include <linux/iio/sysfs.h>
> @@ -162,6 +163,7 @@ struct max1363_chip_info {
>   * @mask_low:		bitmask for enabled low thresholds
>   * @thresh_high:	high threshold values
>   * @thresh_low:		low threshold values
> + * @vref_mv:		Actual (external or internal) reference voltage
>   */
>  struct max1363_state {
>  	struct i2c_client		*client;
> @@ -181,6 +183,7 @@ struct max1363_state {
>  	/* 4x unipolar first then the fours bipolar ones */
>  	s16				thresh_high[8];
>  	s16				thresh_low[8];
> +	u16				vref_mv;
>  };
>  
>  #define MAX1363_MODE_SINGLE(_num, _mask) {				\
> @@ -392,6 +395,8 @@ static int max1363_read_raw(struct iio_dev *indio_dev,
>  {
>  	struct max1363_state *st = iio_priv(indio_dev);
>  	int ret;
> +	unsigned long scale_uv;
> +
>  	switch (m) {
>  	case IIO_CHAN_INFO_RAW:
>  		ret = max1363_read_single_chan(indio_dev, chan, val, m);
> @@ -399,16 +404,10 @@ static int max1363_read_raw(struct iio_dev *indio_dev,
>  			return ret;
>  		return IIO_VAL_INT;
>  	case IIO_CHAN_INFO_SCALE:
> -		if ((1 << (st->chip_info->bits + 1)) >
> -		    st->chip_info->int_vref_mv) {
> -			*val = 0;
> -			*val2 = 500000;
> -			return IIO_VAL_INT_PLUS_MICRO;
> -		} else {
> -			*val = (st->chip_info->int_vref_mv)
> -				>> st->chip_info->bits;
> -			return IIO_VAL_INT;
> -		}
> +		scale_uv = (st->vref_mv * 1000) >> st->chip_info->bits;
> +		*val = scale_uv / 1000;
> +		*val2 = (scale_uv % 1000) * 1000;
> +		return IIO_VAL_INT_PLUS_MICRO;
>  	default:
>  		return -EINVAL;
>  	}
> @@ -1389,12 +1388,16 @@ static const struct max1363_chip_info max1363_chip_info_tbl[] = {
>  
>  static int max1363_initial_setup(struct max1363_state *st)
>  {
> -	st->setupbyte = MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD
> -		| MAX1363_SETUP_POWER_UP_INT_REF
> -		| MAX1363_SETUP_INT_CLOCK
> +	st->setupbyte = MAX1363_SETUP_INT_CLOCK
>  		| MAX1363_SETUP_UNIPOLAR
>  		| MAX1363_SETUP_NORESET;
>  
> +	if (st->vref_mv != st->chip_info->int_vref_mv)
> +		st->setupbyte |= MAX1363_SETUP_AIN3_IS_REF_EXT_TO_REF;
> +	else
> +		st->setupbyte |= MAX1363_SETUP_POWER_UP_INT_REF
> +		  | MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_INT;
> +
>  	/* Set scan mode writes the config anyway so wait until then*/
>  	st->setupbyte = MAX1363_SETUP_BYTE(st->setupbyte);
>  	st->current_mode = &max1363_mode_table[st->chip_info->default_mode];
> @@ -1526,6 +1529,26 @@ static void max1363_buffer_cleanup(struct iio_dev *indio_dev)
>  	iio_kfifo_free(indio_dev->buffer);
>  }
>  
> +#ifdef CONFIG_OF
> +static int max1363_parse_of(struct device *dev, struct max1363_state *st)
> +{
> +	struct device_node *np = dev->of_node;
> +	u32 vref_mv;
> +
> +	if (!of_property_read_u32(np, "vref", &vref_mv)) {
> +		if (vref_mv == 0 || vref_mv > USHRT_MAX)
> +			return -EINVAL;
> +		st->vref_mv = vref_mv;
> +	}
> +	return 0;
> +}
> +#else
> +static int max1363_parse_of(struct device *dev, struct max1363_state *st)
> +{
> +	return 0;
> +}
> +#endif
> +
>  static int max1363_probe(struct i2c_client *client,
>  			 const struct i2c_device_id *id)
>  {
> @@ -1562,6 +1585,11 @@ static int max1363_probe(struct i2c_client *client,
>  	st->chip_info = &max1363_chip_info_tbl[id->driver_data];
>  	st->client = client;
>  
> +	st->vref_mv = st->chip_info->int_vref_mv;
> +	ret = max1363_parse_of(&client->dev, st);
> +	if (ret)
> +		goto error_disable_reg;
> +
>  	ret = max1363_alloc_scan_masks(indio_dev);
>  	if (ret)
>  		goto error_disable_reg;
> 

  parent reply	other threads:[~2013-02-02 10:33 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-31 21:42 [RFC 00/11] staging/iio: Devicetree support Guenter Roeck
     [not found] ` <1359668588-13678-1-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-01-31 21:42   ` [PATCH 01/11] staging/iio: (iio_hwmon) Use devm_kzalloc Guenter Roeck
     [not found]     ` <1359668588-13678-2-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02  9:50       ` Jonathan Cameron
2013-01-31 21:42   ` [PATCH 02/11] staging/iio: (iio_hwmon) Add support for sysfs name attribute Guenter Roeck
     [not found]     ` <1359668588-13678-3-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02  9:52       ` Jonathan Cameron
2013-01-31 21:43   ` [PATCH 03/11] staging/iio: (iio_hwmon) Basic devicetree support Guenter Roeck
     [not found]     ` <1359668588-13678-4-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02  9:54       ` Jonathan Cameron
2013-01-31 21:43   ` [PATCH 04/11] iio/adc: (lp8788) Provide OF node information to iio device Guenter Roeck
     [not found]     ` <1359668588-13678-5-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02  9:55       ` Jonathan Cameron
2013-01-31 21:43   ` [PATCH 05/11] iio/adc: (max1363) " Guenter Roeck
     [not found]     ` <1359668588-13678-6-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02 10:06       ` Jonathan Cameron
2013-01-31 21:43   ` [PATCH 06/11] iio/adc: (max1363) Remove duplicate code Guenter Roeck
     [not found]     ` <1359668588-13678-7-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02 10:07       ` Jonathan Cameron
2013-01-31 21:43   ` [PATCH 07/11] iio/adc: (max1363) Fix data conversion problems Guenter Roeck
     [not found]     ` <1359668588-13678-8-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02 10:08       ` Jonathan Cameron
2013-01-31 21:43   ` [RFC 08/11] iio: Update iio_channel_get_all and iio_channel_get_all_cb API Guenter Roeck
     [not found]     ` <1359668588-13678-9-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02 10:14       ` Jonathan Cameron
2013-01-31 21:43   ` [RFC 09/11] iio: Simplify iio_map_array_unregister API Guenter Roeck
     [not found]     ` <1359668588-13678-10-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02 10:16       ` Jonathan Cameron
2013-01-31 21:43   ` [RFC 10/11] iio: Add OF support Guenter Roeck
     [not found]     ` <1359668588-13678-11-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-01 11:58       ` Lars-Peter Clausen
     [not found]         ` <510BADCA.1030407-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
2013-02-01 14:33           ` Guenter Roeck
     [not found]             ` <20130201143307.GB20767-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-01 14:59               ` Lars-Peter Clausen
     [not found]                 ` <510BD845.1010200-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
2013-02-01 19:42                   ` Guenter Roeck
     [not found]                     ` <20130201194213.GA17968-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02 14:37                       ` Lars-Peter Clausen
     [not found]                         ` <510D24BA.5000300-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
2013-02-02 16:14                           ` Guenter Roeck
2013-02-02 10:29       ` Jonathan Cameron
     [not found]         ` <510CEA6E.9010708-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-02-02 16:10           ` Guenter Roeck
     [not found]             ` <20130202161054.GA10386-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-03 11:39               ` Jonathan Cameron
     [not found]                 ` <510E4C85.9060507-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-02-03 11:47                   ` Lars-Peter Clausen
     [not found]                     ` <510E4E36.8090409-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
2013-02-03 11:52                       ` Lars-Peter Clausen
     [not found]                         ` <510E4F76.1030702-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
2013-02-03 11:57                           ` Jonathan Cameron
     [not found]                             ` <510E50C1.2010909-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-02-03 16:28                               ` Guenter Roeck
2013-01-31 21:43   ` [RFC 11/11] iio/adc: (max1363) Add basic OF bindings and external vref support Guenter Roeck
     [not found]     ` <1359668588-13678-12-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-02-02 10:33       ` Jonathan Cameron [this message]
     [not found]         ` <510CEB68.5000205-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-02-02 16:13           ` Guenter Roeck

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=510CEB68.5000205@kernel.org \
    --to=jic23-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=ch.naveen-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
    --cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
    --cc=dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
    --cc=grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org \
    --cc=lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org \
    --cc=linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org \
    --cc=linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
    --cc=tomasz.figa-Re5JQEeQqe8AvxtiuMwx3w@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 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).