From: Jonathan Cameron <jic23@kernel.org>
To: Peter Meerwald <pmeerw@pmeerw.net>
Cc: linux-iio@vger.kernel.org
Subject: Re: [PATCH 2/4] iio: add powerdown to mcp4725 dac drive
Date: Sat, 29 Jun 2013 13:23:12 +0100 [thread overview]
Message-ID: <51CED1B0.9000503@kernel.org> (raw)
In-Reply-To: <1372023020-18742-2-git-send-email-pmeerw@pmeerw.net>
On 06/23/2013 10:30 PM, Peter Meerwald wrote:
> Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
Applied to the togreg branch iio.git
> ---
> drivers/iio/dac/mcp4725.c | 87 +++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 85 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/iio/dac/mcp4725.c b/drivers/iio/dac/mcp4725.c
> index cb9db90..f569738 100644
> --- a/drivers/iio/dac/mcp4725.c
> +++ b/drivers/iio/dac/mcp4725.c
> @@ -31,15 +31,19 @@ struct mcp4725_data {
> struct i2c_client *client;
> u16 vref_mv;
> u16 dac_value;
> + bool powerdown;
> + unsigned powerdown_mode;
> };
>
> -#ifdef CONFIG_PM_SLEEP
> static int mcp4725_suspend(struct device *dev)
> {
> + struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> + struct mcp4725_data *data = iio_priv(indio_dev);
> u8 outbuf[2];
>
> - outbuf[0] = 0x3 << 4; /* power-down bits, 500 kOhm resistor */
> + outbuf[0] = (data->powerdown_mode + 1) << 4;
> outbuf[1] = 0;
> + data->powerdown = true;
>
> return i2c_master_send(to_i2c_client(dev), outbuf, 2);
> }
> @@ -53,10 +57,12 @@ static int mcp4725_resume(struct device *dev)
> /* restore previous DAC value */
> outbuf[0] = (data->dac_value >> 8) & 0xf;
> outbuf[1] = data->dac_value & 0xff;
> + data->powerdown = false;
>
> return i2c_master_send(to_i2c_client(dev), outbuf, 2);
> }
>
> +#ifdef CONFIG_PM_SLEEP
> static SIMPLE_DEV_PM_OPS(mcp4725_pm_ops, mcp4725_suspend, mcp4725_resume);
> #define MCP4725_PM_OPS (&mcp4725_pm_ops)
> #else
> @@ -123,6 +129,78 @@ static const struct attribute_group mcp4725_attribute_group = {
> .attrs = mcp4725_attributes,
> };
>
> +static const char * const mcp4725_powerdown_modes[] = {
> + "1kohm_to_gnd",
> + "100kohm_to_gnd",
> + "500kohm_to_gnd"
> +};
> +
> +static int mcp4725_get_powerdown_mode(struct iio_dev *indio_dev,
> + const struct iio_chan_spec *chan)
> +{
> + struct mcp4725_data *data = iio_priv(indio_dev);
> +
> + return data->powerdown_mode;
> +}
> +
> +static int mcp4725_set_powerdown_mode(struct iio_dev *indio_dev,
> + const struct iio_chan_spec *chan, unsigned mode)
> +{
> + struct mcp4725_data *data = iio_priv(indio_dev);
> +
> + data->powerdown_mode = mode;
> +
> + return 0;
> +}
> +
> +static ssize_t mcp4725_read_powerdown(struct iio_dev *indio_dev,
> + uintptr_t private, const struct iio_chan_spec *chan, char *buf)
> +{
> + struct mcp4725_data *data = iio_priv(indio_dev);
> +
> + return sprintf(buf, "%d\n", data->powerdown);
> +}
> +
> +static ssize_t mcp4725_write_powerdown(struct iio_dev *indio_dev,
> + uintptr_t private, const struct iio_chan_spec *chan,
> + const char *buf, size_t len)
> +{
> + struct mcp4725_data *data = iio_priv(indio_dev);
> + bool state;
> + int ret;
> +
> + ret = strtobool(buf, &state);
> + if (ret)
> + return ret;
> +
> + if (state)
> + ret = mcp4725_suspend(&data->client->dev);
> + else
> + ret = mcp4725_resume(&data->client->dev);
> + if (ret < 0)
> + return ret;
> +
> + return len;
> +}
> +
> +static const struct iio_enum mcp4725_powerdown_mode_enum = {
> + .items = mcp4725_powerdown_modes,
> + .num_items = ARRAY_SIZE(mcp4725_powerdown_modes),
> + .get = mcp4725_get_powerdown_mode,
> + .set = mcp4725_set_powerdown_mode,
> +};
> +
> +static const struct iio_chan_spec_ext_info mcp4725_ext_info[] = {
> + {
> + .name = "powerdown",
> + .read = mcp4725_read_powerdown,
> + .write = mcp4725_write_powerdown,
> + },
> + IIO_ENUM("powerdown_mode", false, &mcp4725_powerdown_mode_enum),
> + IIO_ENUM_AVAILABLE("powerdown_mode", &mcp4725_powerdown_mode_enum),
> + { },
> +};
> +
> static const struct iio_chan_spec mcp4725_channel = {
> .type = IIO_VOLTAGE,
> .indexed = 1,
> @@ -131,6 +209,7 @@ static const struct iio_chan_spec mcp4725_channel = {
> .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
> .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
> .scan_type = IIO_ST('u', 12, 16, 0),
> + .ext_info = mcp4725_ext_info,
> };
>
> static int mcp4725_set_value(struct iio_dev *indio_dev, int val)
> @@ -208,6 +287,7 @@ static int mcp4725_probe(struct i2c_client *client,
> struct iio_dev *indio_dev;
> struct mcp4725_platform_data *platform_data = client->dev.platform_data;
> u8 inbuf[3];
> + u8 pd;
> int err;
>
> if (!platform_data || !platform_data->vref_mv) {
> @@ -239,6 +319,9 @@ static int mcp4725_probe(struct i2c_client *client,
> dev_err(&client->dev, "failed to read DAC value");
> goto exit_free_device;
> }
> + pd = (inbuf[0] >> 1) & 0x3;
> + data->powerdown = pd > 0 ? true : false;
> + data->powerdown_mode = pd ? pd-1 : 2; /* 500kohm_to_gnd */
> data->dac_value = (inbuf[1] << 4) | (inbuf[2] >> 4);
>
> err = iio_device_register(indio_dev);
>
next prev parent reply other threads:[~2013-06-29 12:23 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-23 21:30 [PATCH 1/4] iio: add store_eeprom to mcp4725 dac driver Peter Meerwald
2013-06-23 21:30 ` [PATCH 2/4] iio: add powerdown to mcp4725 dac drive Peter Meerwald
2013-06-29 12:23 ` Jonathan Cameron [this message]
2013-06-23 21:30 ` [PATCH 3/4] iio: add DAC 500kohm_to_gnd to possible powerdown_modes Peter Meerwald
2013-06-29 12:23 ` Jonathan Cameron
2013-06-29 13:32 ` Lars-Peter Clausen
2013-06-29 15:13 ` Jonathan Cameron
2013-06-23 21:30 ` [PATCH 4/4] iio: move ABI specification for store_eeprom; is used by ad9523, mcp4725 and ds1077 devices Peter Meerwald
2013-06-29 12:23 ` Jonathan Cameron
2013-06-24 16:05 ` [PATCH 1/4] iio: add store_eeprom to mcp4725 dac driver Jonathan Cameron
2013-06-24 16:10 ` Peter Meerwald
2013-06-24 16:14 ` Jonathan Cameron
2013-06-29 12:22 ` Jonathan Cameron
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=51CED1B0.9000503@kernel.org \
--to=jic23@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=pmeerw@pmeerw.net \
/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.