Re: [PATCH] iio: dac: mcp4725: add missing powerdown bits in store eeprom

Jonathan Cameron
2019-03-09T18:28:00Z

+Cc Peter.
On Wed, 6 Mar 2019 15:56:06 -0500
Jean-Francois Dagenais <jeff.dagenais@gmail.com> wrote:

> When issuing the write DAC register and write eeprom command, the two
> powerdown bits (PD0 and PD1) are assumed by the chip to be present in
> the bytes sent. Leaving them at 0 implies "powerdown disabled" which is
> a different state that the current one. By adding the current state of
> the powerdown in the i2c write, the chip will correctly power-on exactly
> like as it is at the moment of store_eeprom call.
>
> This is documented in MCP4725's datasheet, FIGURE 6-2: "Write Commands
> for DAC Input Register and EEPROM" and MCP4726's datasheet, FIGURE 6-3:
> "Write All Memory Command".
>
> Signed-off-by: Jean-Francois Dagenais <jeff.dagenais@gmail.com>
sounds fine to me, but I'd like to give Peter a chance to comment.
Give me a poke if it turns out Peter is busy and doesn't get back
to us in a week or two.

Thanks,

Jonathan

> ---
> drivers/iio/dac/mcp4725.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/iio/dac/mcp4725.c b/drivers/iio/dac/mcp4725.c
> index 6ab1f23e5a79..97bb350d1e77 100644
> --- a/drivers/iio/dac/mcp4725.c
> +++ b/drivers/iio/dac/mcp4725.c
> @@ -98,6 +98,7 @@ static ssize_t mcp4725_store_eeprom(struct device *dev,
>
> inoutbuf[0] = 0x60; /* write EEPROM */
> inoutbuf[0] |= data->ref_mode << 3;
> + inoutbuf[0] |= data->powerdown ? ((data->powerdown_mode+1) << 1) : 0;
> inoutbuf[1] = data->dac_value >> 4;
> inoutbuf[2] = (data->dac_value & 0xf) << 4;
>