linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lars-Peter Clausen <lars@metafoo.de>
To: "Jean-François Dagenais" <jeff.dagenais@gmail.com>
Cc: device-drivers-devel@blackfin.uclinux.org,
	"Jean-François Dagenais" <dagenaisj@sonatest.com>,
	"linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>
Subject: Re: [Device-drivers-devel] [PATCH] iio: dac - split ad5440 into common, i2c and spi modules
Date: Thu, 10 Nov 2011 17:56:48 +0100	[thread overview]
Message-ID: <4EBC0250.3040101@metafoo.de> (raw)
In-Reply-To: <1320941253-17857-1-git-send-email-dagenaisj@sonatest.com>

On 11/10/2011 05:07 PM, Jean-Fran=E7ois Dagenais wrote:
> v1: first proposal, works with i2c AD5622
>=20

Hi,

Thanks for your patch. I've recently send a patch which converts the ad=
5446
to channel_spec, it would be good if you could rebase v2 of this patch =
ontop
of it. Unfortunately the patch isn't in GregKH tree yet, but you can gr=
ab it
from the mailing list archives:
http://marc.info/?l=3Dlinux-iio&m=3D131914551420107&q=3Draw

Some further comments inline.

> The patch also contains some cleanup of defines that were not
> used.

Cleanups should go in a separate patch. Makes it easier to review them.

> ---
>  drivers/staging/iio/dac/Kconfig      |   27 +++-
>  drivers/staging/iio/dac/Makefile     |    2 +
>  drivers/staging/iio/dac/ad5446-i2c.c |  135 ++++++++++++++++++
>  drivers/staging/iio/dac/ad5446-spi.c |  259 ++++++++++++++++++++++++=
++++++++++
>  drivers/staging/iio/dac/ad5446.c     |  258 +++++++-----------------=
----------
>  drivers/staging/iio/dac/ad5446.h     |   93 +++++-------
>  6 files changed, 510 insertions(+), 264 deletions(-)
>  create mode 100644 drivers/staging/iio/dac/ad5446-i2c.c
>  create mode 100644 drivers/staging/iio/dac/ad5446-spi.c
>=20
> diff --git a/drivers/staging/iio/dac/Kconfig b/drivers/staging/iio/da=
c/Kconfig
> index 7ddae35..bb960b5 100644
> --- a/drivers/staging/iio/dac/Kconfig
> +++ b/drivers/staging/iio/dac/Kconfig
> @@ -11,16 +11,37 @@ config AD5624R_SPI
>  	  AD5664R convertors (DAC). This driver uses the common SPI interfa=
ce.
> =20
>  config AD5446
> -	tristate "Analog Devices AD5444/6, AD5620/40/60 and AD5542A/12A DAC=
 SPI driver"
> -	depends on SPI
> +	tristate "Analog Devices AD5444/6, AD5620/40/60/02/12/22 and AD5542=
A/12A DAC SPI/I2C driver"
>  	help
>  	  Say yes here to build support for Analog Devices AD5444, AD5446,
>  	  AD5512A, AD5542A, AD5543, AD5553, AD5601, AD5611, AD5620, AD5621,
> -	  AD5640, AD5660 DACs.
> +	  AD5640, AD5660, AD5601, AD5612, AD5622 DACs.
> =20
>  	  To compile this driver as a module, choose M here: the
>  	  module will be called ad5446.
> =20
> +config AD5446_SPI
> +	tristate "support SPI bus connection"
> +	depends on AD5446 && SPI
> +	default y
> +	help
> +	  Say Y here if you have AD5444/6, AD5620/40/60 and AD5542A/12A
> +	  DAC connected to a SPI bus.
> +
> +	  To compile this driver as a module, choose M here: the
> +	  module will be called ad5446-spi.
> +
> +config AD5446_I2C
> +	tristate "support I2C bus connection"
> +	depends on AD5446 && I2C
> +	default y
> +	help
> +	  Say Y here if you have AD5602/12/22 DAC connected to an I2C bus.
> +
> +	  To compile this driver as a module, choose M here: the
> +	  module will be called ad5446-i2c.
> +
> +

I don't think we need to split this into two separate modules. Having o=
ne
handling both should be fine. The I2C and SPI specific sections should =
be
rather small and can be put in a #ifdef CONFIG_... block.

>  config AD5504
>  	tristate "Analog Devices AD5504/AD5501 DAC SPI driver"
>  	depends on SPI
> diff --git a/drivers/staging/iio/dac/Makefile b/drivers/staging/iio/d=
ac/Makefile
> index 7f4f2ed..481a1e9 100644
> --- a/drivers/staging/iio/dac/Makefile
> +++ b/drivers/staging/iio/dac/Makefile
> @@ -5,6 +5,8 @@
>  obj-$(CONFIG_AD5624R_SPI) +=3D ad5624r_spi.o
>  obj-$(CONFIG_AD5504) +=3D ad5504.o
>  obj-$(CONFIG_AD5446) +=3D ad5446.o
> +obj-$(CONFIG_AD5446_I2C) +=3D ad5446-i2c.o
> +obj-$(CONFIG_AD5446_SPI) +=3D ad5446-spi.o
>  obj-$(CONFIG_AD5791) +=3D ad5791.o
>  obj-$(CONFIG_AD5686) +=3D ad5686.o
>  obj-$(CONFIG_MAX517) +=3D max517.o
> diff --git a/drivers/staging/iio/dac/ad5446-i2c.c b/drivers/staging/i=
io/dac/ad5446-i2c.c
> new file mode 100644
> index 0000000..cee606e
> --- /dev/null
> +++ b/drivers/staging/iio/dac/ad5446-i2c.c
> @@ -0,0 +1,135 @@
> +/*
> + * AD5446 DAC driver SPI specific
> + *
> + * Copyright 2010 Analog Devices Inc.
> + *
> + * Licensed under the GPL-2 or later.
> + */
> +
> +#include <linux/device.h>
> +#include <linux/i2c.h>
> +
> +#include "../iio.h"
> +
> +#include "ad5446.h"
> +
> +static int ad5446_i2c_sync_to_chip(struct ad5446_state *st)
> +{
> +	struct i2c_client *client =3D to_i2c_client(st->dev);
> +	int error =3D i2c_transfer(client->adapter, &st->proto.i2c.msg, 1);
> +	if (unlikely(error < 0)) {
> +		dev_err(st->dev, "I2C write error: %d\n", error);
> +		return error;
> +	}

Just use i2c_master_send.

> +
> +	return 0;
> +}
> +

[...]

> @@ -52,8 +37,19 @@ struct ad5446_state {
>  	unsigned			cached_val;
>  	unsigned			pwr_down_mode;
>  	unsigned			pwr_down;
> -	struct spi_transfer		xfer;
> -	struct spi_message		msg;
> +	union {
> +#ifdef __enabled_CONFIG_AD5446_SPI

Uhm, I think the __enabled_ defines were not intended to be used direct=
ly.
You should rather use the IS_ENABLED macro instead.

> +		struct {
> +			struct spi_transfer		xfer;
> +			struct spi_message		msg;
> +		} spi;
> +#endif
> +#ifdef __enabled_CONFIG_AD5446_I2C
> +		struct {
> +			struct i2c_msg msg;
> +		} i2c;
> +#endif
> +	} proto;
>  	union {
>  		unsigned short		d16;
>  		unsigned char		d24[3];
> @@ -65,7 +61,7 @@ struct ad5446_state {
>   * @bits:		accuracy of the DAC in bits
>   * @storagebits:	number of bits written to the DAC
>   * @left_shift:		number of bits the datum must be shifted
> - * @int_vref_mv:	AD5620/40/60: the internal reference voltage
> + * @int_vref_mv:	AD5620/40/60: the internal reference voltage, 0 mea=
ns vcc ref
>   * @store_sample:	chip specific helper function to store the datum
>   * @store_sample:	chip specific helper function to store the powerpo=
wn cmd
>   */
> @@ -77,33 +73,22 @@ struct ad5446_chip_info {
>  	u16			int_vref_mv;
>  	void (*store_sample)	(struct ad5446_state *st, unsigned val);
>  	void (*store_pwr_down)	(struct ad5446_state *st, unsigned mode);
> +	int  (*sync_to_chip) (struct ad5446_state *st);

I would put the sync callback into the ad5446_state struct and initiali=
ze it
in the I2C and SPI probe function. No need to store this information on=
 a
per chip basis. And maybe call it "write" or something instead.

[...]

>  #endif /* IIO_DAC_AD5446_H_ */


       reply	other threads:[~2011-11-10 16:56 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1320941253-17857-1-git-send-email-dagenaisj@sonatest.com>
2011-11-10 16:56 ` Lars-Peter Clausen [this message]
     [not found]   ` <0974CF3F-FFAB-4AEC-9051-F4C9D0437DAA@gmail.com>
2011-11-10 18:29     ` [Device-drivers-devel] [PATCH] iio: dac - split ad5440 into common, i2c and spi modules Lars-Peter Clausen

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=4EBC0250.3040101@metafoo.de \
    --to=lars@metafoo.de \
    --cc=dagenaisj@sonatest.com \
    --cc=device-drivers-devel@blackfin.uclinux.org \
    --cc=jeff.dagenais@gmail.com \
    --cc=linux-iio@vger.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).