[PATCH] iio: frequency: Use SLEEP bit instead of RESET to disable output

Gabriel Shahrouzi posted 1 patch 8 months ago
drivers/staging/iio/frequency/ad9832.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] iio: frequency: Use SLEEP bit instead of RESET to disable output
Posted by Gabriel Shahrouzi 8 months ago
According to the AD9832 datasheet (Table 10, D12 description), setting
the RESET bit forces the phase accumulator to zero, which corresponds to
a full-scale DC output, rather than disabling the output signal.

The correct way to disable the output and enter a low-power state is to
set the AD9832_SLEEP bit (Table 10, D13 description), which powers down
the internal DAC current sources and disables internal clocks.

Fixes: ea707584bac1 ("Staging: IIO: DDS: AD9832 / AD9835 driver")
Cc: stable@vger.kernel.org
Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
---
 drivers/staging/iio/frequency/ad9832.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/iio/frequency/ad9832.c b/drivers/staging/iio/frequency/ad9832.c
index db42810c7664b..0872ff4ec4896 100644
--- a/drivers/staging/iio/frequency/ad9832.c
+++ b/drivers/staging/iio/frequency/ad9832.c
@@ -232,7 +232,7 @@ static ssize_t ad9832_write(struct device *dev, struct device_attribute *attr,
 			st->ctrl_src &= ~(AD9832_RESET | AD9832_SLEEP |
 					AD9832_CLR);
 		else
-			st->ctrl_src |= AD9832_RESET;
+			st->ctrl_src |= AD9832_SLEEP;
 
 		st->data = cpu_to_be16((AD9832_CMD_SLEEPRESCLR << CMD_SHIFT) |
 					st->ctrl_src);
-- 
2.43.0
Re: [PATCH] iio: frequency: Use SLEEP bit instead of RESET to disable output
Posted by Marcelo Schmitt 7 months, 4 weeks ago
On 04/17, Gabriel Shahrouzi wrote:
> According to the AD9832 datasheet (Table 10, D12 description), setting
> the RESET bit forces the phase accumulator to zero, which corresponds to
> a full-scale DC output, rather than disabling the output signal.
> 
> The correct way to disable the output and enter a low-power state is to
> set the AD9832_SLEEP bit (Table 10, D13 description), which powers down
> the internal DAC current sources and disables internal clocks.
> 
> Fixes: ea707584bac1 ("Staging: IIO: DDS: AD9832 / AD9835 driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
> ---
Looks okay.

Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>

Unrelated to this patch but, if anybody be looking to work on getting this out
of staging, I think maybe this driver could use out_altvoltage_powerdown ABI
instead of this custom out_altvoltageX_out_enable.
Crazy thing this driver doesn't declare a single IIO channel.
Seems to be somewhat ancient IIO driver.

Regards,
Marcelo
Re: [PATCH] iio: frequency: Use SLEEP bit instead of RESET to disable output
Posted by Gabriel Shahrouzi 7 months, 4 weeks ago
On Sat, Apr 19, 2025 at 5:45 PM Marcelo Schmitt
<marcelo.schmitt1@gmail.com> wrote:
>
> On 04/17, Gabriel Shahrouzi wrote:
> > According to the AD9832 datasheet (Table 10, D12 description), setting
> > the RESET bit forces the phase accumulator to zero, which corresponds to
> > a full-scale DC output, rather than disabling the output signal.
> >
> > The correct way to disable the output and enter a low-power state is to
> > set the AD9832_SLEEP bit (Table 10, D13 description), which powers down
> > the internal DAC current sources and disables internal clocks.
> >
> > Fixes: ea707584bac1 ("Staging: IIO: DDS: AD9832 / AD9835 driver")
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
> > ---
> Looks okay.
>
> Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
>
> Unrelated to this patch but, if anybody be looking to work on getting this out
> of staging, I think maybe this driver could use out_altvoltage_powerdown ABI
> instead of this custom out_altvoltageX_out_enable.
> Crazy thing this driver doesn't declare a single IIO channel.
> Seems to be somewhat ancient IIO driver.
I can start tackling this.
>
> Regards,
> Marcelo
Re: [PATCH] iio: frequency: Use SLEEP bit instead of RESET to disable output
Posted by Jonathan Cameron 7 months, 3 weeks ago
On Sat, 19 Apr 2025 21:41:50 -0400
Gabriel Shahrouzi <gshahrouzi@gmail.com> wrote:

> On Sat, Apr 19, 2025 at 5:45 PM Marcelo Schmitt
> <marcelo.schmitt1@gmail.com> wrote:
> >
> > On 04/17, Gabriel Shahrouzi wrote:  
> > > According to the AD9832 datasheet (Table 10, D12 description), setting
> > > the RESET bit forces the phase accumulator to zero, which corresponds to
> > > a full-scale DC output, rather than disabling the output signal.
> > >
> > > The correct way to disable the output and enter a low-power state is to
> > > set the AD9832_SLEEP bit (Table 10, D13 description), which powers down
> > > the internal DAC current sources and disables internal clocks.
> > >
> > > Fixes: ea707584bac1 ("Staging: IIO: DDS: AD9832 / AD9835 driver")
> > > Cc: stable@vger.kernel.org
> > > Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
> > > ---  
> > Looks okay.
> >
> > Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
> >
> > Unrelated to this patch but, if anybody be looking to work on getting this out
> > of staging, I think maybe this driver could use out_altvoltage_powerdown ABI
> > instead of this custom out_altvoltageX_out_enable.
> > Crazy thing this driver doesn't declare a single IIO channel.
> > Seems to be somewhat ancient IIO driver.  
> I can start tackling this.
This has crossed with a series from Siddarth.

Take a look at what is in:
https://web.git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git/commit/?h=testing&id=aa703203cbbca22ac46d42d4cd41232491827152

Please rebase this one on top of that as I think the bug is still there?

Given there is work going on for this driver and the bugs are ancient, I'll
not take any patches through the fixes tree for now. Instead I'll just queue
them up for the next merge window.

Thanks,

Jonathan

> >
> > Regards,
> > Marcelo  
> 
Re: [PATCH] iio: frequency: Use SLEEP bit instead of RESET to disable output
Posted by Gabriel Shahrouzi 7 months, 3 weeks ago
On Mon, Apr 21, 2025 at 7:07 AM Jonathan Cameron <jic23@kernel.org> wrote:
>
> On Sat, 19 Apr 2025 21:41:50 -0400
> Gabriel Shahrouzi <gshahrouzi@gmail.com> wrote:
>
> > On Sat, Apr 19, 2025 at 5:45 PM Marcelo Schmitt
> > <marcelo.schmitt1@gmail.com> wrote:
> > >
> > > On 04/17, Gabriel Shahrouzi wrote:
> > > > According to the AD9832 datasheet (Table 10, D12 description), setting
> > > > the RESET bit forces the phase accumulator to zero, which corresponds to
> > > > a full-scale DC output, rather than disabling the output signal.
> > > >
> > > > The correct way to disable the output and enter a low-power state is to
> > > > set the AD9832_SLEEP bit (Table 10, D13 description), which powers down
> > > > the internal DAC current sources and disables internal clocks.
> > > >
> > > > Fixes: ea707584bac1 ("Staging: IIO: DDS: AD9832 / AD9835 driver")
> > > > Cc: stable@vger.kernel.org
> > > > Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
> > > > ---
> > > Looks okay.
> > >
> > > Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
> > >
> > > Unrelated to this patch but, if anybody be looking to work on getting this out
> > > of staging, I think maybe this driver could use out_altvoltage_powerdown ABI
> > > instead of this custom out_altvoltageX_out_enable.
> > > Crazy thing this driver doesn't declare a single IIO channel.
> > > Seems to be somewhat ancient IIO driver.
> > I can start tackling this.
> This has crossed with a series from Siddarth.
>
> Take a look at what is in:
> https://web.git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git/commit/?h=testing&id=aa703203cbbca22ac46d42d4cd41232491827152
>
> Please rebase this one on top of that as I think the bug is still there?
Got it. Yes, I believe it is still there.
>
> Given there is work going on for this driver and the bugs are ancient, I'll
> not take any patches through the fixes tree for now. Instead I'll just queue
> them up for the next merge window.
Got it.
>
> Thanks,
>
> Jonathan
>
> > >
> > > Regards,
> > > Marcelo
> >
>
Re: [PATCH] iio: frequency: Use SLEEP bit instead of RESET to disable output
Posted by Jonathan Cameron 8 months ago
On Thu, 17 Apr 2025 09:54:34 -0400
Gabriel Shahrouzi <gshahrouzi@gmail.com> wrote:

> According to the AD9832 datasheet (Table 10, D12 description), setting
> the RESET bit forces the phase accumulator to zero, which corresponds to
> a full-scale DC output, rather than disabling the output signal.
> 
> The correct way to disable the output and enter a low-power state is to
> set the AD9832_SLEEP bit (Table 10, D13 description), which powers down
> the internal DAC current sources and disables internal clocks.
> 
> Fixes: ea707584bac1 ("Staging: IIO: DDS: AD9832 / AD9835 driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
> ---
Seems reasonable but I'd like some more review of this before picking it up.
So feel free to poke me if nothing happens in say 2 weeks from now.

>  drivers/staging/iio/frequency/ad9832.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/staging/iio/frequency/ad9832.c b/drivers/staging/iio/frequency/ad9832.c
> index db42810c7664b..0872ff4ec4896 100644
> --- a/drivers/staging/iio/frequency/ad9832.c
> +++ b/drivers/staging/iio/frequency/ad9832.c
> @@ -232,7 +232,7 @@ static ssize_t ad9832_write(struct device *dev, struct device_attribute *attr,
>  			st->ctrl_src &= ~(AD9832_RESET | AD9832_SLEEP |
>  					AD9832_CLR);
>  		else
> -			st->ctrl_src |= AD9832_RESET;
> +			st->ctrl_src |= AD9832_SLEEP;
>  
>  		st->data = cpu_to_be16((AD9832_CMD_SLEEPRESCLR << CMD_SHIFT) |
>  					st->ctrl_src);
Re: [PATCH] iio: frequency: Use SLEEP bit instead of RESET to disable output
Posted by Gabriel Shahrouzi 8 months ago
On Fri, Apr 18, 2025 at 11:40 AM Jonathan Cameron <jic23@kernel.org> wrote:
>
> On Thu, 17 Apr 2025 09:54:34 -0400
> Gabriel Shahrouzi <gshahrouzi@gmail.com> wrote:
>
> > According to the AD9832 datasheet (Table 10, D12 description), setting
> > the RESET bit forces the phase accumulator to zero, which corresponds to
> > a full-scale DC output, rather than disabling the output signal.
> >
> > The correct way to disable the output and enter a low-power state is to
> > set the AD9832_SLEEP bit (Table 10, D13 description), which powers down
> > the internal DAC current sources and disables internal clocks.
> >
> > Fixes: ea707584bac1 ("Staging: IIO: DDS: AD9832 / AD9835 driver")
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Gabriel Shahrouzi <gshahrouzi@gmail.com>
> > ---
> Seems reasonable but I'd like some more review of this before picking it up.
> So feel free to poke me if nothing happens in say 2 weeks from now.
Sounds good.
>
> >  drivers/staging/iio/frequency/ad9832.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/staging/iio/frequency/ad9832.c b/drivers/staging/iio/frequency/ad9832.c
> > index db42810c7664b..0872ff4ec4896 100644
> > --- a/drivers/staging/iio/frequency/ad9832.c
> > +++ b/drivers/staging/iio/frequency/ad9832.c
> > @@ -232,7 +232,7 @@ static ssize_t ad9832_write(struct device *dev, struct device_attribute *attr,
> >                       st->ctrl_src &= ~(AD9832_RESET | AD9832_SLEEP |
> >                                       AD9832_CLR);
> >               else
> > -                     st->ctrl_src |= AD9832_RESET;
> > +                     st->ctrl_src |= AD9832_SLEEP;
> >
> >               st->data = cpu_to_be16((AD9832_CMD_SLEEPRESCLR << CMD_SHIFT) |
> >                                       st->ctrl_src);
>