26 Feb, 2019
4 commits
-
One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:struct foo {
int stuff;
struct boo entry[];
};size = sizeof(struct foo) + count * sizeof(struct boo);
instance = alloc(size, GFP_KERNEL)Instead of leaving these open-coded and prone to type mistakes, we can
now use the new struct_size() helper:instance = alloc(struct_size(instance, entry, count), GFP_KERNEL)
Notice that, in this case, variable size is not necessary, hence it is
removed.This code was detected with the help of Coccinelle.
Signed-off-by: Gustavo A. R. Silva
Acked-by: Steve Twiss
Signed-off-by: Mark Brown -
The module version is unlikely to be updated, use kernel version should be
enough.Signed-off-by: Axel Lin
Acked-by: Nicolas Ferre
Signed-off-by: Mark Brown -
Current code does not really avoid array access out of bounds,
fix it by add checking for pdata->slew_rate.
If pdata->slew_rate is too big, it's a bug in pdata that needs fix.Signed-off-by: Axel Lin
Signed-off-by: Mark Brown -
Setup .vsel_reg and .vsel_mask then we can use the standard
set/get_voltage_sel_regmap helpers to simplify the code.Signed-off-by: Axel Lin
Acked-by: Charles Keepax
Signed-off-by: Mark Brown
22 Feb, 2019
8 commits
-
One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:struct foo {
int stuff;
struct boo entry[];
};size = sizeof(struct foo) + count * sizeof(struct boo);
instance = alloc(size, GFP_KERNEL)Instead of leaving these open-coded and prone to type mistakes, we can
now use the new struct_size() helper:instance = alloc(struct_size(instance, entry, count), GFP_KERNEL)
Notice that, in this case, variable size is not necessary, hence it is
removed.This code was detected with the help of Coccinelle.
Signed-off-by: Gustavo A. R. Silva
Signed-off-by: Mark Brown -
Current code already set .min_uV and .uV_step fields and it actually can
use regulator_list_voltage_linear.
So remove buck_volt_range and use regulator_list_voltage_linear instead.Signed-off-by: Axel Lin
Signed-off-by: Mark Brown -
Current code always return error, fix it.
Signed-off-by: Axel Lin
Reviewed-by: Bartosz Golaszewski
Signed-off-by: Mark Brown -
Re-use the "tps65218_pmic_*_current_limit()" functions of LS3
and calculate the different required bit-shift by counting the
trailing 0s in "struct regulator_desc.csel_mask"Signed-off-by: Christian Hohnstaedt
Signed-off-by: Mark Brown -
Signed-off-by: Axel Lin
Reviewed-by: Krzysztof Kozlowski
Signed-off-by: Mark Brown -
The s5m8767_opmode_reg should never change, make it const.
Signed-off-by: Axel Lin
Reviewed-by: Krzysztof Kozlowski
Signed-off-by: Mark Brown -
When REGULATOR_CHANGE_DRMS is not set, drms_uA_update is a no-op.
It used to print a debug message, which was dropped in commit
8a34e979f684 ("regulator: refactor valid_ops_mask checking code")Let's bring the debug message back, because it helps find missing
regulator-allow-set-load properties.Signed-off-by: Marc Gonzalez
Signed-off-by: Mark Brown -
The lp873x_buck_ramp_delay should never change, make it const.
Signed-off-by: Axel Lin
Signed-off-by: Mark Brown
21 Feb, 2019
6 commits
-
Some contributions appears as Mathieu Othacehe and other as Mathieu
OTHACEHE.Signed-off-by: Mathieu Othacehe
Signed-off-by: Mark Brown -
The FAN53526 differs from the FAN53555 only in that the mode bit in
VSEL0/VSEL1 is moved to the CONTROL register, the voltage selector mask
is extended by 1 bit and the step is different.So extend the existing fan53555 driver to support FAN53526 as well.
Signed-off-by: Bjorn Andersson
Signed-off-by: Mark Brown -
Signed-off-by: Axel Lin
Signed-off-by: Mark Brown -
Use linear range to replace the twl6030ldo_list_voltage implementation.
With this change, the min_mV is not used and can be removed from
struct twlreg_info.Signed-off-by: Axel Lin
Signed-off-by: Mark Brown -
Add missing .owner field in regulator_desc, which is used for refcounting.
Signed-off-by: Axel Lin
Signed-off-by: Mark Brown -
Add missing .owner field in regulator_desc, which is used for refcounting.
Signed-off-by: Axel Lin
Signed-off-by: Mark Brown
19 Feb, 2019
17 commits
-
Currently rdev is dereferenced when assigning desc before rdev is null
checked, this is leading to static analysis warnings. However, rdev
can never be null, so the null check is redundant and can be removed.Detected by CoverityScan, CID#1476031 ("Dereference before null check")
Fixes: 77e3e3b165db ("regulator: axp20x: add software based soft_start for AXP209 LDO3")
Signed-off-by: Colin Ian King
Acked-by: Chen-Yu Tsai
Signed-off-by: Mark Brown -
Selecting the minimal value is only true for voltage regulators.
For current regulators the maximum in the given range should be
selected instead.Signed-off-by: Axel Lin
Acked-by: Steve Twiss
Signed-off-by: Mark Brown -
Selecting the minimal value is only true for voltage regulators.
For current regulators the maximum in the given range should be
selected instead.Signed-off-by: Axel Lin
Acked-by: Steve Twiss
Signed-off-by: Mark Brown -
Change buck1 voltage range to be conform with the data-sheet.
Signed-off-by: pascal paillet
Signed-off-by: Mark Brown -
Add support for active discharge for USB power switches.
Signed-off-by: pascal paillet
Signed-off-by: Mark Brown -
Add support for active discharge for USB power switches.
Signed-off-by: pascal paillet
Signed-off-by: Mark Brown -
Regulator high pull down are enabled by default so remove support in the
driver.Signed-off-by: pascal paillet
Signed-off-by: Mark Brown -
Regulator high pull down are enabled by default so remove support in the
driver.Signed-off-by: Pascal Paillet
Signed-off-by: Mark Brown -
Stop using a regulator_init callback. This leads to a more simple regulator
registration code. This also permits to spuress struct stpmic1_regulator.
Also rename stpmic1_regulators_matches to stpmic1_matches.Signed-off-by: pascal paillet
Signed-off-by: Mark Brown -
The interrupt parent description is not needed as the parent is a parent
node with 'interrupt-controller' property.Signed-off-by: pascal paillet
Signed-off-by: Mark Brown -
Get the regulator mode definition from the bindings header.
Signed-off-by: pascal paillet
Signed-off-by: Mark Brown -
commit e5e21f70bfd3 ("regulator: core: Take lock before applying system
load") took the regulator lock before calling drms_uA_update() in order
to silence a lockdep warning during regulator_register().However, we are not supposed to need locks at this point as the regulator
is in the process of being registered, so there should be no possibility
of concurrent access.Instead, remove the unnecessary locking and simply drop the lockdep
annotation, since it is no longer valid.Fixes: e5e21f70bfd3 ("regulator: core: Take lock before applying system load")
Signed-off-by: Niklas Cassel
Signed-off-by: Mark Brown -
At the context with *rdev available, regulator core provides
rdev_get_id()/rdev_get_regmap() APIs to get regulator id and *regmap.
So no need to store them in struct stpmic1_regulator.Signed-off-by: Axel Lin
Signed-off-by: Mark Brown -
There is no vsel_reg/vsel_mask settings for PV88060_ID_SWx, so don't use
pv88060_ldo_ops for PV88060_SW. The PV88060_ID_SWx is fixed voltage,
set .fixed_uV instead of .min_uV then regulator core will automatically
support get_voltage and list_voltage.Signed-off-by: Axel Lin
Signed-off-by: Mark Brown -
This is a remnant of commit 70a7fb80e85a ("regulator: core: Fix nested
locking of supplies").Signed-off-by: Masahiro Yamada
Signed-off-by: Mark Brown -
This fixes another set of errors from the refactoring of literals
to mask preproccesor definitions.Found by debugging a broken voltage setup on Orange Pi One Plus.
Fixes: db4a555f7c4cf ("regulator: axp20x: use defines for masks")
Signed-off-by: Ondrej Jirman
Acked-by: Chen-Yu Tsai
Signed-off-by: Mark Brown
16 Feb, 2019
3 commits
-
Take the regulator lock before applying system load.
Fixes the following lockdep splat:
[ 5.583581] WARNING: CPU: 1 PID: 16 at drivers/regulator/core.c:925 drms_uA_update+0x114/0x360
[ 5.588467] Modules linked in:
[ 5.596833] CPU: 1 PID: 16 Comm: kworker/1:0 Not tainted 5.0.0-rc6-next-20190213-00002-g0fce66ab480f #18
[ 5.599933] Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT)
[ 5.609544] Workqueue: events qcom_channel_state_worker
[ 5.616209] pstate: 60000005 (nZCv daif -PAN -UAO)
[ 5.621152] pc : drms_uA_update+0x114/0x360
[ 5.626006] lr : drms_uA_update+0x110/0x360
[ 5.630084] sp : ffff0000124b3490
[ 5.634242] x29: ffff0000124b3490 x28: ffff800005326e00
[ 5.637735] x27: ffff0000124b35f8 x26: 000000000032bc48
[ 5.643117] x25: ffff800004c7e800 x24: ffff800004c6d500
[ 5.648411] x23: ffff800004c38a80 x22: 00000000000000d1
[ 5.653706] x21: 00000000001ab3f0 x20: ffff800004c7e800
[ 5.659001] x19: ffff0000114c3000 x18: ffffffffffffffff
[ 5.664297] x17: 0000000000000000 x16: 0000000000000000
[ 5.669592] x15: ffff0000114c3808 x14: 0720072007200720
[ 5.674888] x13: 00000000199c9b28 x12: ffff80002bcccc40
[ 5.680183] x11: ffff000012286000 x10: ffff0000114c3808
[ 5.685477] x9 : 0720072007200720 x8 : ffff000010e9e808
[ 5.690772] x7 : ffff0000106da568 x6 : 0000000000000000
[ 5.696067] x5 : 0000000000000000 x4 : 0000000000000000
[ 5.701362] x3 : 0000000000000004 x2 : 0000000000000000
[ 5.706658] x1 : 0000000000000000 x0 : 0000000000000000
[ 5.711952] Call trace:
[ 5.717223] drms_uA_update+0x114/0x360
[ 5.719405] regulator_register+0xb30/0x1140
[ 5.723230] devm_regulator_register+0x4c/0xa8
[ 5.727745] rpm_reg_probe+0xfc/0x1b0
[ 5.731992] platform_drv_probe+0x50/0xa0
[ 5.735727] really_probe+0x20c/0x2b8
[ 5.739718] driver_probe_device+0x58/0x100
[ 5.743368] __device_attach_driver+0x90/0xd0
[ 5.747363] bus_for_each_drv+0x64/0xc8
[ 5.751870] __device_attach+0xd8/0x138
[ 5.755516] device_initial_probe+0x10/0x18
[ 5.759341] bus_probe_device+0x98/0xa0
[ 5.763502] device_add+0x3d0/0x640
[ 5.767319] of_device_add+0x48/0x58
[ 5.770793] of_platform_device_create_pdata+0xb0/0x128
[ 5.774629] of_platform_bus_create+0x174/0x370
[ 5.779569] of_platform_populate+0x78/0xe0
[ 5.784082] qcom_smd_rpm_probe+0x80/0xa0
[ 5.788245] rpmsg_dev_probe+0x114/0x1a0
[ 5.792411] really_probe+0x20c/0x2b8
[ 5.796401] driver_probe_device+0x58/0x100
[ 5.799964] __device_attach_driver+0x90/0xd0
[ 5.803960] bus_for_each_drv+0x64/0xc8
[ 5.808468] __device_attach+0xd8/0x138
[ 5.812115] device_initial_probe+0x10/0x18
[ 5.815936] bus_probe_device+0x98/0xa0
[ 5.820099] device_add+0x3d0/0x640
[ 5.823916] device_register+0x1c/0x28
[ 5.827391] rpmsg_register_device+0x4c/0x90
[ 5.831216] qcom_channel_state_worker+0x170/0x298
[ 5.835651] process_one_work+0x294/0x6e8
[ 5.840241] worker_thread+0x40/0x450
[ 5.844318] kthread+0x11c/0x120
[ 5.847961] ret_from_fork+0x10/0x18
[ 5.851260] irq event stamp: 9090
[ 5.854820] hardirqs last enabled at (9089): [] console_unlock+0x3e0/0x5b0
[ 5.858086] hardirqs last disabled at (9090): [] do_debug_exception+0x104/0x140
[ 5.866596] softirqs last enabled at (9086): [] __do_softirq+0x474/0x574
[ 5.875446] softirqs last disabled at (9079): [] irq_exit+0x13c/0x148
[ 5.883598] ---[ end trace 6984ef7f081afa21 ]---Fixes: fa94e48e13a1 ("regulator: core: Apply system load even if no consumer loads")
Signed-off-by: Niklas Cassel
Signed-off-by: Mark Brown -
This driver is for LTC3676 rather than LTC1376.
Signed-off-by: Axel Lin
Acked-by: Tim Harvey
Signed-off-by: Mark Brown -
Use case range for continuous range to make the code shorter.
The .readable_reg and .writable_reg implementation are exactly the same,
so use a common ltc3676_readable_writeable_reg function instead.Signed-off-by: Axel Lin
Acked-by: Tim Harvey
Signed-off-by: Mark Brown
14 Feb, 2019
2 commits
-
read ROHM BD71837 / BD71847 specific device tree bindings for
controlling the PMIC shutdown/reset states and voltages for
different HW states. The PMIC was designed to be used with NXP
i.MX8 SoC and it supports SNVS low power state which seems to
be typical for NXP i.MX SoCs. However, when SNVS is used we must
not allow SW to control enabling/disabling those regulators which
are crucial for system to boot as there is a HW limitation which
causes SW controlled regulators to be kept shut down after SNVS
reset.Allow setting the SNVS to be used as reset target state and allow
marking those regulators which are critical for boot.Signed-off-by: Matti Vaittinen
Tested-by: Angus Ainslie
Reviewed-by: Angus Ainslie
Signed-off-by: Mark Brown -
Add regulator_desc_list_voltage_linear_range which can be used
by drivers for getting the voltages before regulator is registered.
This may be useful for drivers which need to fetch the voltage
selectors at device-tree parsing callback.Signed-off-by: Matti Vaittinen
Acked-by: Mark Brown
Tested-by: Angus Ainslie
Reviewed-by: Angus Ainslie
Signed-off-by: Mark Brown