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_ */
next parent 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 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.