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

    Gustavo A. R. Silva
     
  • 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

    Axel Lin
     
  • 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

    Axel Lin
     
  • 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

    Axel Lin
     

22 Feb, 2019

8 commits


21 Feb, 2019

6 commits


19 Feb, 2019

17 commits


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

    Niklas Cassel
     
  • This driver is for LTC3676 rather than LTC1376.

    Signed-off-by: Axel Lin
    Acked-by: Tim Harvey
    Signed-off-by: Mark Brown

    Axel Lin
     
  • 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

    Axel Lin
     

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

    Matti Vaittinen
     
  • 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

    Matti Vaittinen