From: Grygorii Strashko <grygorii.strashko@ti.com>
To: Tomasz Figa <tfiga@chromium.org>
Cc: Bibby Hsieh <bibby.hsieh@mediatek.com>,
Wolfram Sang <wsa@the-dreams.de>,
Bartosz Golaszewski <bgolaszewski@baylibre.com>,
linux-i2c <linux-i2c@vger.kernel.org>,
Nicolas Boichat <drinkcat@chromium.org>,
srv_heupstream <srv_heupstream@mediatek.com>,
Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
linux-devicetree <devicetree@vger.kernel.org>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>
Subject: Re: [PATCH v15 2/2] i2c: core: support bus regulator controlling in adapter
Date: Tue, 26 May 2020 21:03:18 +0300 [thread overview]
Message-ID: <543950fa-83c0-9d3d-e64a-068be2368717@ti.com> (raw)
In-Reply-To: <CAAFQd5Bx=zgsUAg7fA2jfsV_yFyPmnotTWEBEr2V3Nn5HO8qQQ@mail.gmail.com>
On 25/05/2020 14:34, Tomasz Figa wrote:
> Hi Grygorii,
>
> On Fri, May 22, 2020 at 7:59 PM Grygorii Strashko
> <grygorii.strashko@ti.com> wrote:
>>
>>
>>
>> On 19/05/2020 10:27, Bibby Hsieh wrote:
>>> Although in the most platforms, the bus power of i2c
>>> are alway on, some platforms disable the i2c bus power
>>> in order to meet low power request.
>>>
>>> We get and enable bulk regulator in i2c adapter device.
>>>
>>> Signed-off-by: Bibby Hsieh <bibby.hsieh@mediatek.com>
>>> ---
>>> drivers/i2c/i2c-core-base.c | 84 +++++++++++++++++++++++++++++++++++++
>>> include/linux/i2c.h | 2 +
>>> 2 files changed, 86 insertions(+)
>>>
>>> diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
>>> index 5cc0b0ec5570..e1cc8d46bc51 100644
>>> --- a/drivers/i2c/i2c-core-base.c
>>> +++ b/drivers/i2c/i2c-core-base.c
>>> @@ -313,12 +313,14 @@ static int i2c_smbus_host_notify_to_irq(const struct i2c_client *client)
>>> static int i2c_device_probe(struct device *dev)
>>> {
>>> struct i2c_client *client = i2c_verify_client(dev);
>>> + struct i2c_adapter *adap;
>>> struct i2c_driver *driver;
>>> int status;
>>>
>>> if (!client)
>>> return 0;
>>>
>>> + adap = client->adapter;
>>> driver = to_i2c_driver(dev->driver);
>>>
>>> client->irq = client->init_irq;
>>> @@ -378,6 +380,12 @@ static int i2c_device_probe(struct device *dev)
>>>
>>> dev_dbg(dev, "probe\n");
>>>
>>> + status = regulator_enable(adap->bus_regulator);
>>> + if (status < 0) {
>>> + dev_err(&adap->dev, "Failed to enable power regulator\n");
>>> + goto err_clear_wakeup_irq;
>>> + }
>>> +
>>> status = of_clk_set_defaults(dev->of_node, false);
>>> if (status < 0)
>>> goto err_clear_wakeup_irq;
>>> @@ -414,12 +422,14 @@ static int i2c_device_probe(struct device *dev)
>>> static int i2c_device_remove(struct device *dev)
>>> {
>>> struct i2c_client *client = i2c_verify_client(dev);
>>> + struct i2c_adapter *adap;
>>> struct i2c_driver *driver;
>>> int status = 0;
>>>
>>> if (!client || !dev->driver)
>>> return 0;
>>>
>>> + adap = client->adapter;
>>> driver = to_i2c_driver(dev->driver);
>>> if (driver->remove) {
>>> dev_dbg(dev, "remove\n");
>>> @@ -427,6 +437,8 @@ static int i2c_device_remove(struct device *dev)
>>> }
>>>
>>> dev_pm_domain_detach(&client->dev, true);
>>> + if (!pm_runtime_status_suspended(&client->dev))
>>> + regulator_disable(adap->bus_regulator);
>>
>> Not sure this check is correct.
>>
>> i2c_device_probe()
>> - regulator_enable - 1
>>
>> pm_runtime_get()
>> - regulator_enable - 2
>>
>
> I believe regulator_enable() wouldn't be called again, because the
> device was already active in probe. However, I've been having
> difficulties keeping track of runtime PM semantics under various
> circumstances (e.g. ACPI vs DT), so can't tell for sure anymore.
True.
I've found pretty useful:
- CONFIG_PM_ADVANCED_DEBUG
- bind/unbind
for such testing.
for regulators - num_users\x02 can be checked.
>
>> i2c_device_remove()
>> - pm_runtime_status_suspended() flase
>> - regulator_disable() - 1 --> still active?
>>
>> Sorry, I probably missing smth.
>>
>>>
>>> dev_pm_clear_wake_irq(&client->dev);
>>> device_init_wakeup(&client->dev, false);
>>> @@ -438,6 +450,72 @@ static int i2c_device_remove(struct device *dev)
>>> return status;
>>> }
>>>
>>
>> [...]
>>
>> --
>> Best regards,
>> grygorii
--
Best regards,
grygorii
prev parent reply other threads:[~2020-05-26 18:03 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-19 7:27 [PATCH v15 0/2] add power control in i2c Bibby Hsieh
2020-05-19 7:27 ` [PATCH v15 1/2] dt-binding: i2c: add bus-supply property Bibby Hsieh
2020-05-19 8:48 ` Wolfram Sang
2020-05-22 14:59 ` Wolfram Sang
2020-05-19 7:27 ` [PATCH v15 2/2] i2c: core: support bus regulator controlling in adapter Bibby Hsieh
2020-05-19 8:48 ` Wolfram Sang
2020-05-22 15:00 ` Wolfram Sang
2020-05-25 11:40 ` Tomasz Figa
2020-05-25 12:00 ` Wolfram Sang
2020-05-22 17:59 ` Grygorii Strashko
2020-05-25 11:34 ` Tomasz Figa
2020-05-26 18:03 ` Grygorii Strashko [this message]
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=543950fa-83c0-9d3d-e64a-068be2368717@ti.com \
--to=grygorii.strashko@ti.com \
--cc=bgolaszewski@baylibre.com \
--cc=bibby.hsieh@mediatek.com \
--cc=devicetree@vger.kernel.org \
--cc=drinkcat@chromium.org \
--cc=linux-i2c@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=rafael.j.wysocki@intel.com \
--cc=robh+dt@kernel.org \
--cc=srv_heupstream@mediatek.com \
--cc=tfiga@chromium.org \
--cc=wsa@the-dreams.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).