All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Mike Looijmans <mike.looijmans@topic.nl>
Cc: devicetree@vger.kernel.org, linux-iio@vger.kernel.org,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Caleb Connolly <caleb.connolly@linaro.org>,
	ChiYuan Huang <cy_huang@richtek.com>,
	ChiaEn Wu <chiaen_wu@richtek.com>,
	Cosmin Tanislav <demonsingur@gmail.com>,
	Ibrahim Tilki <Ibrahim.Tilki@analog.com>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Ramona Bolboaca <ramona.bolboaca@analog.com>,
	William Breathitt Gray <william.gray@linaro.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 2/2] iio: adc: Add TI ADS1100 and ADS1000
Date: Sun, 12 Mar 2023 14:53:04 +0000	[thread overview]
Message-ID: <20230312145304.3c9b9123@jic23-huawei> (raw)
In-Reply-To: <f91d6d0a-e197-a66b-61b7-f2ea668429f7@topic.nl>

On Mon, 6 Mar 2023 12:21:44 +0100
Mike Looijmans <mike.looijmans@topic.nl> wrote:

> Met vriendelijke groet / kind regards,
> 
> Mike Looijmans
> System Expert
> 
> 
> TOPIC Embedded Products B.V.
> Materiaalweg 4, 5681 RJ Best
> The Netherlands
> 
> T: +31 (0) 499 33 69 69
> E: mike.looijmans@topicproducts.com
> W: www.topic.nl
> 
> Please consider the environment before printing this e-mail
> On 04-03-2023 18:57, Jonathan Cameron wrote:
> > On Tue, 28 Feb 2023 07:31:51 +0100
> > Mike Looijmans <mike.looijmans@topic.nl> wrote:
> >  
> >> The ADS1100 is a 16-bit ADC (at 8 samples per second).
> >> The ADS1000 is similar, but has a fixed data rate.
> >>
> >> Signed-off-by: Mike Looijmans <mike.looijmans@topic.nl>  
> > Hi Mike,
> >
> > A few minor things + one request for a test as trying to chase a possible
> > ref count overflow around the runtime_pm was giving me a enough of a headache
> > that it's easier to ask you just to poke it and see.  If it doesn't fail as
> > I expect I'll take a closer look!
> >
> > Jonathan
> >
> > ...  
> >> +	data->client = client;
> >> +	mutex_init(&data->lock);
> >> +
> >> +	indio_dev->name = "ads1100";
> >> +	indio_dev->modes = INDIO_DIRECT_MODE;
> >> +	indio_dev->channels = &ads1100_channel;
> >> +	indio_dev->num_channels = 1;
> >> +	indio_dev->info = &ads1100_info;
> >> +
> >> +	data->reg_vdd = devm_regulator_get(dev, "vdd");
> >> +	if (IS_ERR(data->reg_vdd))
> >> +		return dev_err_probe(dev, PTR_ERR(data->reg_vdd),
> >> +				     "Failed to get vdd regulator\n");
> >> +
> >> +	ret = regulator_enable(data->reg_vdd);
> >> +	if (ret < 0)
> >> +		return dev_err_probe(dev, PTR_ERR(data->reg_vdd),
> >> +				     "Failed to enable vdd regulator\n");
> >> +
> >> +	ret = devm_add_action_or_reset(dev, ads1100_reg_disable, data->reg_vdd);
> >> +	if (ret)
> >> +		return ret;  
> > Please could you check a subtle interaction of runtime pm and this devm managed
> > flow.
> >
> > I think we can hit the following flow.
> > 1) In runtime suspend (wait long enough for this to happen).
> > 2) Unbind the driver (rmmod will do)
> > 3) During the unbind we exit suspend then enter it again before we call remove
> >     (that's just part of the normal remove flow).
> > 4) We then end up calling regulator disable when it's already disabled.
> >
> > We've traditionally avoided that by having the remove explicitly call
> > pm_runtime_get_sync() before we then disable runtime pm.  I don't
> > think that happens with devm_pm_runtime_enable() but I could be missing
> > a path where it does.
> >
> > If the sequence goes wrong you should get a warning about an unbalanced regulator
> > disable.  The fix would be an extra devm_add_action_or_reset() before the
> > devm_iio_device_register() below that just calls pm_runtime_get_sync()
> > to force the state to on.
> >
> > Gah. These subtle paths always give me a headache.
> > We don't normally have too much problem with this because many
> > runtime_resume / suspend functions don't change reference counts.  
> 
> Just did this test, waited a few seconds, checked 
> /sys/kernel/debug/regulator... that the regulator had been disabled.
> 
> Then executed:
> echo -n 3-004a > /sys/bus/i2c/drivers/ads1100/unbind
> 
> to unload the driver, and no messages were added to the kernel log.
> 
> I could see the driver going away and removing itself from iio and 
> regulators.
> 
> Tried this a couple of times (using bind/unbind), and no problem reported.
> 
> Hopes this helps with your headaches...

Thanks!

> 


  reply	other threads:[~2023-03-12 14:53 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-28  6:31 [PATCH v3 1/2] dt-bindings: iio: adc: Add TI ADS1100 and ADS1000 Mike Looijmans
2023-02-28  6:31 ` [PATCH v3 2/2] " Mike Looijmans
2023-03-01 15:30   ` Andy Shevchenko
2023-03-02  7:49     ` Mike Looijmans
2023-03-02 13:16       ` Lars-Peter Clausen
2023-03-02 13:20         ` Lars-Peter Clausen
2023-03-02 14:24           ` Andy Shevchenko
2023-03-04 17:19           ` Jonathan Cameron
2023-03-02 14:23       ` Andy Shevchenko
2023-03-04 17:26         ` Jonathan Cameron
2023-03-06 12:09           ` Andy Shevchenko
2023-03-04 17:57   ` Jonathan Cameron
2023-03-06  6:31     ` Mike Looijmans
2023-03-06 11:21     ` Mike Looijmans
2023-03-12 14:53       ` Jonathan Cameron [this message]
2023-03-06 12:11     ` Andy Shevchenko
2023-03-06 12:16       ` Andy Shevchenko
2023-03-06 12:20         ` Andy Shevchenko
2023-03-06 12:56       ` Mike Looijmans
2023-03-06 13:19         ` Andy Shevchenko
2023-02-28 10:34 ` [PATCH v3 1/2] dt-bindings: " Krzysztof Kozlowski

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=20230312145304.3c9b9123@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=Ibrahim.Tilki@analog.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=caleb.connolly@linaro.org \
    --cc=chiaen_wu@richtek.com \
    --cc=cy_huang@richtek.com \
    --cc=demonsingur@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mike.looijmans@topic.nl \
    --cc=ramona.bolboaca@analog.com \
    --cc=william.gray@linaro.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.