13 May, 2016

14 commits


12 May, 2016

1 commit


11 May, 2016

1 commit


07 May, 2016

4 commits


03 May, 2016

2 commits


29 Apr, 2016

2 commits

  • The enable time for buck regulators was not configured but actually is
    essential: consumers, like usb3503, doing hard reset (regulator off/on)
    should wait for the regulator to settle.

    Configure the enable time according to datasheet.

    Signed-off-by: Krzysztof Kozlowski
    Signed-off-by: Mark Brown

    Krzysztof Kozlowski
     
  • The maximum supported voltage for ldo_io# is 3.3V, but on cold
    boot the selector comes up at 0x1f, which maps to 3.8V.

    This causes _regulator_get_voltage() to fail with -EINVAL which
    causes regulator registration to fail when constrains are used:

    [ 1.467788] vcc-touchscreen: failed to get the current voltage(-22)
    [ 1.474209] axp20x-regulator axp20x-regulator: Failed to register ldo_io1
    [ 1.483363] axp20x-regulator: probe of axp20x-regulator failed with error -22

    This commits makes the axp20x regulator driver accept the 0x1f register
    value, fixing this.

    The datasheet does not guarantee reliable operation above 3.3V, so on
    boards where this regulator is used the regulator-max-microvolt setting
    must be 3.3V or less.

    Signed-off-by: Hans de Goede
    Signed-off-by: Mark Brown

    Hans de Goede
     

28 Apr, 2016

1 commit


27 Apr, 2016

4 commits

  • The call to set_machine_constraints() in regulator_register(), will
    attempt to get the voltage for the regulator. If a regulator is in
    bypass will fail to get the voltage (ie. it's bypass voltage) and
    hence register the regulator, because the supply for the regulator has
    not been resolved yet.

    To fix this, add a call to regulator_resolve_supply() before we call
    set_machine_constraints(). If the call to regulator_resolve_supply()
    fails, rather than returning an error at this point, allow the
    registration of the regulator to continue because for some regulators
    resolving the supply at this point may not be necessary and it will be
    resolved later as more regulators are added. Furthermore, if the supply
    is still not resolved for a bypassed regulator, this will be detected
    when we attempt to get the voltage for the regulator and an error will
    be propagated at this point.

    If a bypassed regulator does not have a supply when we attempt to get
    the voltage, rather than returing -EINVAL, return -EPROBE_DEFER instead
    to allow the registration of the regulator to be deferred and tried
    again later.

    Please note that regulator_resolve_supply() will call
    regulator_dev_lookup() which may acquire the regulator_list_mutex. To
    avoid any deadlocks we cannot hold the regulator_list_mutex when calling
    regulator_resolve_supply(). Therefore, rather than holding the lock
    around a large portion of the registration code, just hold the lock when
    aquiring any GPIOs and setting up supplies because these sections may
    add entries to the regulator_map_list and regulator_ena_gpio_list,
    respectively.

    Signed-off-by: Jon Hunter
    Signed-off-by: Mark Brown

    Jon Hunter
     
  • …onie/regulator into regulator-supply

    Mark Brown
     
  • The minium voltage of 1800mV is a copy and paste error from the axp20x
    regulator info. The correct minimum voltage for the ldo_io regulators
    on the axp22x is 700mV.

    Fixes: 1b82b4e4f954 ("regulator: axp20x: Add support for AXP22X regulators")
    Signed-off-by: Hans de Goede
    Acked-by: Chen-Yu Tsai
    Signed-off-by: Mark Brown

    Hans de Goede
     
  • When commit b554e1450658 ("regulator: tps65917/palmas: Add bypass
    ops for LDOs with bypass capability") introduced bypass capability
    to palmas regulator, it went with the assumption that regulator
    regmap helpers just check val against the bypass_mask.

    Unfortunately, this ignored the explicit "on" and "off" values when
    the register value is masked with bypass_mask in commit ca5d1b3524b4
    ("regulator: helpers: Modify helpers enabling multi-bit control").

    With the recent commit dd1a571daee7 ("regulator: helpers: Ensure
    bypass register field matches ON value"), this issue gets highlighted
    and fails tps65917/palmas based platforms which need regulators/ldos
    that have bypass capability.

    Introduce the bypass_on value appropriately for tps65917/palmas
    regulator.

    Fixes: b554e1450658 ("regulator: tps65917/palmas: Add bypass ops for LDOs with bypass capability")
    Cc: Keerthy
    Cc: Mark Brown
    Signed-off-by: Nishanth Menon
    Signed-off-by: Mark Brown

    Nishanth Menon
     

26 Apr, 2016

4 commits

  • The current linear voltage range for the LDO4 regulator found in the APX20X
    PMICs assumes that the voltage is linear between 2.5 and 3.1V.

    However, the PMIC can output up to 3.3V on that regulator by skipping the
    2.6V and 2.9V steps.

    Fix the ranges to read and set the proper voltages.

    Fixes: 13d57e64352a ("regulator: axp20x: Use linear voltage ranges for AXP20X LDO4")
    Signed-off-by: Maxime Ripard
    Acked-by: Chen-Yu Tsai
    Signed-off-by: Mark Brown

    Maxime Ripard
     
  • After removing all uses of the range operations in a recent patch,
    we get a warning about the symbol not being referenced anywhere:

    drivers/regulator/rk808-regulator.c:306:29: 'rk808_reg_ops_ranges' defined but not used

    This removes the now-unused structure along with the
    rk808_set_suspend_voltage_range function that is only referenced from
    rk808_reg_ops_ranges.

    Fixes: afcd666d9db0 ("regulator: rk808: remove linear range definitions with a single range")
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Mark Brown

    Arnd Bergmann
     
  • To make the code more compat and centralized, this patch add a
    unified function - regulator_ops_is_valid. So we can add
    some extra checking code easily later.

    Signed-off-by: WEN Pingbo
    Signed-off-by: Mark Brown

    WEN Pingbo
     
  • The driver was using only linear ranges. Now we remove linear range
    definitions with a single range. So we have to add an ops struct for
    ranges and adjust all other ops functions accordingly.

    Signed-off-by: Wadim Egorov
    Signed-off-by: Mark Brown

    Wadim Egorov
     

22 Apr, 2016

7 commits

  • Maxim advertised the ramp rate of the rail with some recommended
    design specification like output capacitance of rail should be
    2.2uF. This make sure that current change in the rail is within
    maximum current limit and hence meet the advertised ramp rate.

    If there is variation in design which causes the rail current to
    change more that maximum current limit then device applies the
    current limit. In this case, ramp rate is different than advertised
    ramp rate.

    Add device specific settings for ramp rate which need to be configure
    on device register when measure ramp rate on platform is deviated from
    advertised ramp rate. In this case, all delay time calculation for
    voltage change is done with measured ramp rate and device ramp rate
    is used for configuring the device register.

    If measured ramp rate in the platform is same as advertised ramp rate
    then regulator-ramp-delay is used for the device register configuration
    and ramp time calculation for voltage change.

    Signed-off-by: Laxman Dewangan
    Signed-off-by: Mark Brown

    Laxman Dewangan
     
  • When checking bypass state for a regulator, we check to see if any bits
    in the bypass mask are set. For most cases this is fine because there is
    typically, only a single bit used to determine if the regulator is in
    bypass. However, for some regulators, such as LDO6 on AS3722, the bypass
    state is indicate by a value rather than a single bit. Therefore, when
    checking the bypass state, check that the bypass field matches the ON
    value.

    Signed-off-by: Jon Hunter
    Signed-off-by: Mark Brown

    Jon Hunter
     
  • The public functions to acquire a regulator, such as regulator_get(),
    internally look-up the regulator from the list of regulators that have
    been registered with the regulator device class. The registration of
    a new regulator with the regulator device class happens before the
    regulator has been completely setup. Therefore, it is possible that
    the regulator could be acquired before it has been setup successfully.
    To avoid this move the device registration of the regulator to the end
    of the regulator setup and update the error exit path accordingly.

    Signed-off-by: Jon Hunter
    Signed-off-by: Mark Brown

    Jon Hunter
     
  • …/broonie/regulator into regulator-supply

    Mark Brown
     
  • During the resolution of a regulator's supply, we may attempt to enable
    the supply if the regulator itself is already enabled. If enabling the
    supply fails, then we will call _regulator_put() for the supply.
    However, the pointer to the supply has not been cleared for the
    regulator and this will cause a crash if we then unregister the
    regulator and attempt to call regulator_put() a second time for the
    supply. Fix this by clearing the supply pointer if enabling the supply
    after fails when resolving the supply for a regulator.

    Signed-off-by: Jon Hunter
    Signed-off-by: Mark Brown

    Jon Hunter
     
  • The function regulator_register_resolve_supply() is called from the
    context of class_for_each_dev() (during the regulator registration) to
    resolve any supplies added. regulator_register_resolve_supply() will
    return an error if a regulator's supply cannot be resolved and this will
    terminate the loop in class_for_each_dev(). This means that we will not
    attempt to resolve any other supplies after one has failed. Hence, this
    may delay the resolution of other regulator supplies until the failing
    one itself can be resolved.

    Rather than terminating the loop early, don't return an error code and
    keep attempting to resolve any other supplies for regulators that have
    been registered.

    Signed-off-by: Jon Hunter
    Signed-off-by: Mark Brown

    Jon Hunter
     
  • There are debugfs entries for voltage and current, but not for
    the constraint flags. It's useful for debugging to be able to
    see what these flags are so this patch adds a new debugfs file.
    We can't use debugfs_create_bool for this because the flags are
    bitfields, so as this needs a special read callback they have been
    collected into a single file that lists all the flags.

    Signed-off-by: Richard Fitzgerald
    Signed-off-by: Mark Brown

    Richard Fitzgerald