<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/drivers/regulator/core.c, branch linux-4.6.y</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>regulator: Fix deadlock during regulator registration</title>
<updated>2016-06-08T01:23:43+00:00</updated>
<author>
<name>Jon Hunter</name>
<email>jonathanh@nvidia.com</email>
</author>
<published>2016-03-30T16:09:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=18055cbc5e852cda2b1dc7486f85e8af626d8a02'/>
<id>18055cbc5e852cda2b1dc7486f85e8af626d8a02</id>
<content type='text'>
commit a2151374230820a3a6e654f2998b2a44dbfae4e1 upstream.

Commit 5e3ca2b349b1 ("regulator: Try to resolve regulators supplies on
registration") added a call to regulator_resolve_supply() within
regulator_register() where the regulator_list_mutex is held. This causes
a deadlock to occur on the Tegra114 Dalmore board when the palmas PMIC
is registered because regulator_register_resolve_supply() calls
regulator_dev_lookup() which may try to acquire the regulator_list_mutex
again.

Fix this by releasing the mutex before calling
regulator_register_resolve_supply() and update the error exit path to
ensure the mutex is released on an error.

[Made commit message more legible -- broonie]

Signed-off-by: Jon Hunter &lt;jonathanh@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit a2151374230820a3a6e654f2998b2a44dbfae4e1 upstream.

Commit 5e3ca2b349b1 ("regulator: Try to resolve regulators supplies on
registration") added a call to regulator_resolve_supply() within
regulator_register() where the regulator_list_mutex is held. This causes
a deadlock to occur on the Tegra114 Dalmore board when the palmas PMIC
is registered because regulator_register_resolve_supply() calls
regulator_dev_lookup() which may try to acquire the regulator_list_mutex
again.

Fix this by releasing the mutex before calling
regulator_register_resolve_supply() and update the error exit path to
ensure the mutex is released on an error.

[Made commit message more legible -- broonie]

Signed-off-by: Jon Hunter &lt;jonathanh@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>regulator: Try to resolve regulators supplies on registration</title>
<updated>2016-06-08T01:23:37+00:00</updated>
<author>
<name>Javier Martinez Canillas</name>
<email>javier@osg.samsung.com</email>
</author>
<published>2016-03-23T23:59:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=4d8cd5e768d3f806d31364dc480b80272a4eb4d4'/>
<id>4d8cd5e768d3f806d31364dc480b80272a4eb4d4</id>
<content type='text'>
commit 5e3ca2b349b1e2c80b060b51bbf2af37448fad85 upstream.

Commit 6261b06de565 ("regulator: Defer lookup of supply to regulator_get")
moved the regulator supplies lookup logic from the regulators registration
to the regulators get time.

Unfortunately, that changed the behavior of the regulator core since now a
parent supply with a child regulator marked as always-on, won't be enabled
unless a client driver attempts to get the child regulator during boot.

This patch tries to resolve the parent supply for the already registered
regulators each time that a new regulator is registered. So the regulators
that have child regulators marked as always on will be enabled regardless
if a driver gets the child regulator or not.

That was the behavior before the mentioned commit, since parent supplies
were looked up at regulator registration time instead of during child get.

Since regulator_resolve_supply() checks for rdev-&gt;supply, most of the times
it will be a no-op. Errors aren't checked to keep the possible out of order
dependencies which was the motivation for the mentioned commit.

Also, the supply being available will be enforced on regulator get anyways
in case the resolve fails on regulators registration.

Fixes: 6261b06de565 ("regulator: Defer lookup of supply to regulator_get")
Suggested-by: Mark Brown &lt;broonie@kernel.org&gt;
Signed-off-by: Javier Martinez Canillas &lt;javier@osg.samsung.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 5e3ca2b349b1e2c80b060b51bbf2af37448fad85 upstream.

Commit 6261b06de565 ("regulator: Defer lookup of supply to regulator_get")
moved the regulator supplies lookup logic from the regulators registration
to the regulators get time.

Unfortunately, that changed the behavior of the regulator core since now a
parent supply with a child regulator marked as always-on, won't be enabled
unless a client driver attempts to get the child regulator during boot.

This patch tries to resolve the parent supply for the already registered
regulators each time that a new regulator is registered. So the regulators
that have child regulators marked as always on will be enabled regardless
if a driver gets the child regulator or not.

That was the behavior before the mentioned commit, since parent supplies
were looked up at regulator registration time instead of during child get.

Since regulator_resolve_supply() checks for rdev-&gt;supply, most of the times
it will be a no-op. Errors aren't checked to keep the possible out of order
dependencies which was the motivation for the mentioned commit.

Also, the supply being available will be enforced on regulator get anyways
in case the resolve fails on regulators registration.

Fixes: 6261b06de565 ("regulator: Defer lookup of supply to regulator_get")
Suggested-by: Mark Brown &lt;broonie@kernel.org&gt;
Signed-off-by: Javier Martinez Canillas &lt;javier@osg.samsung.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branches 'regulator/topic/ltc3589', 'regulator/topic/max77620', 'regulator/topic/max77686', 'regulator/topic/max77802' and 'regulator/topic/maxim' into regulator-next</title>
<updated>2016-03-13T08:19:47+00:00</updated>
<author>
<name>Mark Brown</name>
<email>broonie@kernel.org</email>
</author>
<published>2016-03-13T08:19:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=d6d50a8f174141846f7507cefbf369a7100a6788'/>
<id>d6d50a8f174141846f7507cefbf369a7100a6788</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branches 'regulator/topic/discharge', 'regulator/topic/fan53555', 'regulator/topic/gpio', 'regulator/topic/hi655x' and 'regulator/topic/lp872x' into regulator-next</title>
<updated>2016-03-13T08:19:35+00:00</updated>
<author>
<name>Mark Brown</name>
<email>broonie@kernel.org</email>
</author>
<published>2016-03-13T08:19:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=d1f83021d5ca993242105f7b41f924614501fce5'/>
<id>d1f83021d5ca993242105f7b41f924614501fce5</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>regulator: core: Add support for active-discharge configuration</title>
<updated>2016-03-02T14:31:45+00:00</updated>
<author>
<name>Laxman Dewangan</name>
<email>ldewangan@nvidia.com</email>
</author>
<published>2016-03-02T10:54:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=909f7ee0b5f30f735e16864a7ed18d2e6123e6d9'/>
<id>909f7ee0b5f30f735e16864a7ed18d2e6123e6d9</id>
<content type='text'>
Add support to enable/disable active discharge of regulator via
machine constraints. This configuration is done when setting
machine constraint during regulator register and if regulator
driver implemented the callback ops.

Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add support to enable/disable active discharge of regulator via
machine constraints. This configuration is done when setting
machine constraint during regulator register and if regulator
driver implemented the callback ops.

Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>regulator: core: Add support for active-discharge configuration</title>
<updated>2016-03-02T14:13:05+00:00</updated>
<author>
<name>Laxman Dewangan</name>
<email>ldewangan@nvidia.com</email>
</author>
<published>2016-03-02T10:54:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=670666b9e0aff40c65d8061a2f53e79eee238685'/>
<id>670666b9e0aff40c65d8061a2f53e79eee238685</id>
<content type='text'>
Add support to enable/disable active discharge of regulator via
machine constraints. This configuration is done when setting
machine constraint during regulator register and if regulator
driver implemented the callback ops.

Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add support to enable/disable active discharge of regulator via
machine constraints. This configuration is done when setting
machine constraint during regulator register and if regulator
driver implemented the callback ops.

Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>regulator: core: fix crash in error path of regulator_register</title>
<updated>2016-02-25T01:48:16+00:00</updated>
<author>
<name>Krzysztof Adamski</name>
<email>krzysztof.adamski@tieto.com</email>
</author>
<published>2016-02-24T10:52:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=32165230eb6e629d7f88e66e0bd90a201549de53'/>
<id>32165230eb6e629d7f88e66e0bd90a201549de53</id>
<content type='text'>
This problem was introduced by:
commit daad134d6649 ("regulator: core: Request GPIO before creating
sysfs entries")

The error path was not updated correctly after moving GPIO registration
code and in case regulator_ena_gpio_free failed, device_unregister() was
called even though device_register() was not yet called.

This problem breaks the boot at least on all Tegra 32-bit devices. It
will also crash each device that specifices GPIO that is unavaiable at
regulator_register call. Here's error log I've got when forced GPIO to
be invalid:

[    1.116612] usb-otg-vbus-reg: Failed to request enable GPIO10: -22
[    1.122794] Unable to handle kernel NULL pointer dereference at
virtual address 00000044
[    1.130894] pgd = c0004000
[    1.133598] [00000044] *pgd=00000000
[    1.137205] Internal error: Oops: 5 [#1] SMP ARM

and here's backtrace from KDB:

Exception stack(0xef11fbd0 to 0xef11fc18)
fbc0:                                     00000000 c0738a14 00000000 00000000
fbe0: c0b2a0b0 00000000 00000000 c0738a14 c0b5fdf8 00000001 ef7f6074 ef11fc4c
fc00: ef11fc50 ef11fc20 c02a8344 c02a7f1c 60000013 ffffffff
[&lt;c010cee0&gt;] (__dabt_svc) from [&lt;c02a7f1c&gt;] (kernfs_find_ns+0x18/0xf8)
[&lt;c02a7f1c&gt;] (kernfs_find_ns) from [&lt;c02a8344&gt;] (kernfs_find_and_get_ns+0x40/0x58)
[&lt;c02a8344&gt;] (kernfs_find_and_get_ns) from [&lt;c02ac4a4&gt;] (sysfs_unmerge_group+0x28/0x68)
[&lt;c02ac4a4&gt;] (sysfs_unmerge_group) from [&lt;c044389c&gt;] (dpm_sysfs_remove+0x30/0x5c)
[&lt;c044389c&gt;] (dpm_sysfs_remove) from [&lt;c0436ba8&gt;] (device_del+0x48/0x1f4)
[&lt;c0436ba8&gt;] (device_del) from [&lt;c0436d84&gt;] (device_unregister+0x30/0x6c)
[&lt;c0436d84&gt;] (device_unregister) from [&lt;c0403910&gt;] (regulator_register+0x6d0/0xdac)
[&lt;c0403910&gt;] (regulator_register) from [&lt;c04052d4&gt;] (devm_regulator_register+0x50/0x84)
[&lt;c04052d4&gt;] (devm_regulator_register) from [&lt;c0406298&gt;] (reg_fixed_voltage_probe+0x25c/0x3c0)
[&lt;c0406298&gt;] (reg_fixed_voltage_probe) from [&lt;c043d21c&gt;] (platform_drv_probe+0x60/0xb0)
[&lt;c043d21c&gt;] (platform_drv_probe) from [&lt;c043b078&gt;] (driver_probe_device+0x24c/0x440)
[&lt;c043b078&gt;] (driver_probe_device) from [&lt;c043b5e8&gt;] (__device_attach_driver+0xc0/0x120)
[&lt;c043b5e8&gt;] (__device_attach_driver) from [&lt;c043901c&gt;] (bus_for_each_drv+0x6c/0x98)
[&lt;c043901c&gt;] (bus_for_each_drv) from [&lt;c043ad20&gt;] (__device_attach+0xac/0x138)
[&lt;c043ad20&gt;] (__device_attach) from [&lt;c043b664&gt;] (device_initial_probe+0x1c/0x20)
[&lt;c043b664&gt;] (device_initial_probe) from [&lt;c043a074&gt;] (bus_probe_device+0x94/0x9c)
[&lt;c043a074&gt;] (bus_probe_device) from [&lt;c043a610&gt;] (deferred_probe_work_func+0x80/0xcc)
[&lt;c043a610&gt;] (deferred_probe_work_func) from [&lt;c01381d0&gt;] (process_one_work+0x158/0x454)
[&lt;c01381d0&gt;] (process_one_work) from [&lt;c013854c&gt;] (worker_thread+0x38/0x510)
[&lt;c013854c&gt;] (worker_thread) from [&lt;c013e154&gt;] (kthread+0xe8/0x104)
[&lt;c013e154&gt;] (kthread) from [&lt;c0108638&gt;] (ret_from_fork+0x14/0x3c)

Signed-off-by: Krzysztof Adamski &lt;krzysztof.adamski@tieto.com&gt;
Reported-by: Jon Hunter &lt;jonathanh@nvidia.com&gt;
Acked-by: Jon Hunter &lt;jonathanh@nvidia.com&gt;
Tested-by: Jon Hunter &lt;jonathanh@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This problem was introduced by:
commit daad134d6649 ("regulator: core: Request GPIO before creating
sysfs entries")

The error path was not updated correctly after moving GPIO registration
code and in case regulator_ena_gpio_free failed, device_unregister() was
called even though device_register() was not yet called.

This problem breaks the boot at least on all Tegra 32-bit devices. It
will also crash each device that specifices GPIO that is unavaiable at
regulator_register call. Here's error log I've got when forced GPIO to
be invalid:

[    1.116612] usb-otg-vbus-reg: Failed to request enable GPIO10: -22
[    1.122794] Unable to handle kernel NULL pointer dereference at
virtual address 00000044
[    1.130894] pgd = c0004000
[    1.133598] [00000044] *pgd=00000000
[    1.137205] Internal error: Oops: 5 [#1] SMP ARM

and here's backtrace from KDB:

Exception stack(0xef11fbd0 to 0xef11fc18)
fbc0:                                     00000000 c0738a14 00000000 00000000
fbe0: c0b2a0b0 00000000 00000000 c0738a14 c0b5fdf8 00000001 ef7f6074 ef11fc4c
fc00: ef11fc50 ef11fc20 c02a8344 c02a7f1c 60000013 ffffffff
[&lt;c010cee0&gt;] (__dabt_svc) from [&lt;c02a7f1c&gt;] (kernfs_find_ns+0x18/0xf8)
[&lt;c02a7f1c&gt;] (kernfs_find_ns) from [&lt;c02a8344&gt;] (kernfs_find_and_get_ns+0x40/0x58)
[&lt;c02a8344&gt;] (kernfs_find_and_get_ns) from [&lt;c02ac4a4&gt;] (sysfs_unmerge_group+0x28/0x68)
[&lt;c02ac4a4&gt;] (sysfs_unmerge_group) from [&lt;c044389c&gt;] (dpm_sysfs_remove+0x30/0x5c)
[&lt;c044389c&gt;] (dpm_sysfs_remove) from [&lt;c0436ba8&gt;] (device_del+0x48/0x1f4)
[&lt;c0436ba8&gt;] (device_del) from [&lt;c0436d84&gt;] (device_unregister+0x30/0x6c)
[&lt;c0436d84&gt;] (device_unregister) from [&lt;c0403910&gt;] (regulator_register+0x6d0/0xdac)
[&lt;c0403910&gt;] (regulator_register) from [&lt;c04052d4&gt;] (devm_regulator_register+0x50/0x84)
[&lt;c04052d4&gt;] (devm_regulator_register) from [&lt;c0406298&gt;] (reg_fixed_voltage_probe+0x25c/0x3c0)
[&lt;c0406298&gt;] (reg_fixed_voltage_probe) from [&lt;c043d21c&gt;] (platform_drv_probe+0x60/0xb0)
[&lt;c043d21c&gt;] (platform_drv_probe) from [&lt;c043b078&gt;] (driver_probe_device+0x24c/0x440)
[&lt;c043b078&gt;] (driver_probe_device) from [&lt;c043b5e8&gt;] (__device_attach_driver+0xc0/0x120)
[&lt;c043b5e8&gt;] (__device_attach_driver) from [&lt;c043901c&gt;] (bus_for_each_drv+0x6c/0x98)
[&lt;c043901c&gt;] (bus_for_each_drv) from [&lt;c043ad20&gt;] (__device_attach+0xac/0x138)
[&lt;c043ad20&gt;] (__device_attach) from [&lt;c043b664&gt;] (device_initial_probe+0x1c/0x20)
[&lt;c043b664&gt;] (device_initial_probe) from [&lt;c043a074&gt;] (bus_probe_device+0x94/0x9c)
[&lt;c043a074&gt;] (bus_probe_device) from [&lt;c043a610&gt;] (deferred_probe_work_func+0x80/0xcc)
[&lt;c043a610&gt;] (deferred_probe_work_func) from [&lt;c01381d0&gt;] (process_one_work+0x158/0x454)
[&lt;c01381d0&gt;] (process_one_work) from [&lt;c013854c&gt;] (worker_thread+0x38/0x510)
[&lt;c013854c&gt;] (worker_thread) from [&lt;c013e154&gt;] (kthread+0xe8/0x104)
[&lt;c013e154&gt;] (kthread) from [&lt;c0108638&gt;] (ret_from_fork+0x14/0x3c)

Signed-off-by: Krzysztof Adamski &lt;krzysztof.adamski@tieto.com&gt;
Reported-by: Jon Hunter &lt;jonathanh@nvidia.com&gt;
Acked-by: Jon Hunter &lt;jonathanh@nvidia.com&gt;
Tested-by: Jon Hunter &lt;jonathanh@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'fix/core' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator into regulator-core</title>
<updated>2016-02-25T01:48:11+00:00</updated>
<author>
<name>Mark Brown</name>
<email>broonie@kernel.org</email>
</author>
<published>2016-02-25T01:48:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=ece497ae37ecf080eecdc591504a73808aa058e0'/>
<id>ece497ae37ecf080eecdc591504a73808aa058e0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>regulator: core: Request GPIO before creating sysfs entries</title>
<updated>2016-02-22T10:51:05+00:00</updated>
<author>
<name>Krzysztof Adamski</name>
<email>krzysztof.adamski@tieto.com</email>
</author>
<published>2016-02-22T08:24:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=daad134d66492a9f641163c94510549770b39657'/>
<id>daad134d66492a9f641163c94510549770b39657</id>
<content type='text'>
regulator_attr_is_visible (which is a .is_visible callback of
regulator_dev_group attribute_grpup) checks rdev-&gt;ena_pin to decide if
"status" file should be present in sysfs. This field is set at the end
of regulator_ena_gpio_request so it has to be called before
device_register() otherwise this test will always fail, causing "status"
file to not be visible.

Since regulator_attr_is_visible also tests for is_enabled() op, this
problem is only visible for regulators that does not define this
callback, like regulator-fixed.c.

Signed-off-by: Krzysztof Adamski &lt;krzysztof.adamski@tieto.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
regulator_attr_is_visible (which is a .is_visible callback of
regulator_dev_group attribute_grpup) checks rdev-&gt;ena_pin to decide if
"status" file should be present in sysfs. This field is set at the end
of regulator_ena_gpio_request so it has to be called before
device_register() otherwise this test will always fail, causing "status"
file to not be visible.

Since regulator_attr_is_visible also tests for is_enabled() op, this
problem is only visible for regulators that does not define this
callback, like regulator-fixed.c.

Signed-off-by: Krzysztof Adamski &lt;krzysztof.adamski@tieto.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>regulator: core: Rely on regulator_dev_release to free constraints</title>
<updated>2016-01-27T14:41:42+00:00</updated>
<author>
<name>Charles Keepax</name>
<email>ckeepax@opensource.wolfsonmicro.com</email>
</author>
<published>2016-01-26T16:38:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=6333ef46bbe514a8ece6c432aab6bcf8637b2d7c'/>
<id>6333ef46bbe514a8ece6c432aab6bcf8637b2d7c</id>
<content type='text'>
As we now free the constraints in regulator_dev_release we will still
call free on the constraints pointer even if we went down an error
path in regulator_register, because it is only allocated after the
device_register. As such we no longer need to free rdev-&gt;constraints
on the error paths, so this patch removes said frees.

Fixes: 29f5f4860a8e ("regulator: core: Move more deallocation into class unregister")
Signed-off-by: Charles Keepax &lt;ckeepax@opensource.wolfsonmicro.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
As we now free the constraints in regulator_dev_release we will still
call free on the constraints pointer even if we went down an error
path in regulator_register, because it is only allocated after the
device_register. As such we no longer need to free rdev-&gt;constraints
on the error paths, so this patch removes said frees.

Fixes: 29f5f4860a8e ("regulator: core: Move more deallocation into class unregister")
Signed-off-by: Charles Keepax &lt;ckeepax@opensource.wolfsonmicro.com&gt;
Signed-off-by: Mark Brown &lt;broonie@kernel.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
