1. 14 6月, 2017 1 次提交
  2. 15 4月, 2017 2 次提交
  3. 06 4月, 2017 1 次提交
  4. 29 3月, 2017 2 次提交
  5. 25 3月, 2017 1 次提交
  6. 17 3月, 2017 1 次提交
  7. 07 3月, 2017 1 次提交
  8. 17 2月, 2017 1 次提交
    • J
      regulator: core: Resolve supplies before disabling unused regulators · 3827b64d
      Javier Martinez Canillas 提交于
      After commit 66d228a2 ("regulator: core: Don't use regulators as
      supplies until the parent is bound"), input supplies aren't resolved
      if the input supplies parent device has not been bound. This prevent
      regulators to hold an invalid reference if its supply parent device
      driver probe is deferred.
      
      But this causes issues on some boards where a PMIC's regulator use as
      input supply a regulator from another PMIC whose driver is registered
      after the driver for the former.
      
      In this case the regulators for the first PMIC will fail to resolve
      input supplies on regulators registration (since the other PMIC wasn't
      probed yet). And when the core attempts to resolve again latter when
      the other PMIC registers its own regulators, it will fail again since
      the parent device isn't bound yet.
      
      This will cause some parent supplies to never be resolved and wrongly
      be disabled on boot due taking them as unused.
      
      To solve this problem, also attempt to resolve the pending regulators
      input supplies before disabling the unused regulators.
      Signed-off-by: NJavier Martinez Canillas <javier@osg.samsung.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      3827b64d
  9. 16 2月, 2017 1 次提交
  10. 09 2月, 2017 1 次提交
    • D
      regulator: core: simplify _regulator_get() · a4d7641f
      Dmitry Torokhov 提交于
      The code in _regulator_get() got a bit confusing over time, with control
      flow jumping to a label from couple of places. Let's untangle it a bit by
      doing the following:
      
      1. Make handling of missing supplies and substituting them with dummy
      regulators more explicit:
      
      - check if we not have full constraints and refuse considering dummy
        regulators with appropriate message;
      
      - use "switch (get_type)" to handle different types of request explicitly
        as well. "Normal" requests will get dummies, exclusive will not and
        will notify user about that; optional will fail silently.
      
      2. Stop jumping to a label in the middle of the function but instead have
      proper conditional flow. I believe jumps should be reserved for error
      handling, breaking from inner loop, or restarting a loop, but not for
      implementing normal conditional flow.
      Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      a4d7641f
  11. 06 2月, 2017 1 次提交
  12. 04 2月, 2017 4 次提交
  13. 13 1月, 2017 1 次提交
    • J
      regulator: core: Don't use regulators as supplies until the parent is bound · 66d228a2
      Jon Hunter 提交于
      When regulators are successfully registered, we check to see if the
      regulator is a supply for any other registered regulator and if so
      add the new regulator as the supply for the existing regulator(s).
      
      Some devices, such as Power Management ICs, may register a series of
      regulators when probed and there are cases where one of the regulators
      may fail to register and defer the probing of the parent device. In this
      case any successfully registered regulators would be unregistered so
      that they can be re-registered at some time later when the probe is
      attempted again. However, if one of the regulators that was registered
      was added as a supply to another registered regulator (that did not
      belong to the same parent device), then this supply regulator was
      unregister again because the parent device is probe deferred, then a
      regulator could be holding an invalid reference to a supply regulator
      that has been unregistered. This will lead to a system crash if that
      regulator is then used.
      
      Although it would be possible to check when unregistering a regulator
      if any other regulator in the system is using it as a supply, it still
      may not be possible to remove it as a supply if this other regulator is
      in use. Therefore, fix this by preventing any regulator from adding
      another regulator as a supply if the parent device for the supply
      regulator has not been bound and if the parent device for the supply
      and the regulator are different. This will allow a parent device that is
      registering regulators to be probe deferred and ensure that none of the
      regulators it has registered are used as supplies for any other
      regulator from another device.
      Signed-off-by: NJon Hunter <jonathanh@nvidia.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      66d228a2
  14. 05 12月, 2016 1 次提交
  15. 01 12月, 2016 1 次提交
  16. 05 11月, 2016 1 次提交
  17. 29 10月, 2016 1 次提交
    • H
      regulator: core: silence warning: "VDD1: ramp_delay not set" · ba14fa1a
      H. Nikolaus Schaller 提交于
      commit 73e705bf ("regulator: core: Add set_voltage_time op")
      
      introduced a new rdev_warn() if the ramp_delay is 0.
      
      Apparently, on omap3/twl4030 platforms with dynamic voltage
      management this results in non-ending spurious messages like
      
      [  511.143066] VDD1: ramp_delay not set
      [  511.662322] VDD1: ramp_delay not set
      [  513.903625] VDD1: ramp_delay not set
      [  514.222198] VDD1: ramp_delay not set
      [  517.062835] VDD1: ramp_delay not set
      [  517.382568] VDD1: ramp_delay not set
      [  520.142791] VDD1: ramp_delay not set
      [  520.502593] VDD1: ramp_delay not set
      [  523.062896] VDD1: ramp_delay not set
      [  523.362701] VDD1: ramp_delay not set
      [  526.143035] VDD1: ramp_delay not set
      
      I have observed this on GTA04 while it is reported to occur on
      N900 as well: https://bugzilla.kernel.org/show_bug.cgi?id=178371
      
      This patch makes the warning appear only in debugging mode.
      Signed-off-by: NH. Nikolaus Schaller <hns@goldelico.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      ba14fa1a
  18. 25 9月, 2016 1 次提交
    • J
      regulator: core: don't return error with inadequate reason · 57776617
      Joonwoo Park 提交于
      drms_uA_update() always returns failure when it cannot find regulator's
      input voltage.  But if hardware supports load configuration with
      ops->set_load() and the input regulator isn't specified with valid reason
      such as the input regulator is battery, not finding input voltage is
      normal so such case should not return with an error.
      
      Avoid such inadequate error return by checking input/output voltages
      only when drms_uA_update() is about to configure load with enum based
      ops->set_mode().
      
      Cc: Liam Girdwood <lgirdwood@gmail.com>
      Cc: Mark Brown <broonie@kernel.org>
      Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
      Cc: linux-kernel@vger.kernel.org
      Signed-off-by: NJoonwoo Park <joonwoop@codeaurora.org>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      57776617
  19. 17 9月, 2016 3 次提交
  20. 15 9月, 2016 1 次提交
  21. 17 8月, 2016 1 次提交
  22. 09 6月, 2016 1 次提交
    • M
      regulator: Remove regulator_can_change_voltage() · fc1e1c4a
      Mark Brown 提交于
      There is little obvious use case for a regualtor driver to know if it is
      possible to vary voltages at all by itself.  If a consumer needs to
      limit what voltages it tries to set based on the system configuration
      then it will need to enumerate the possible voltages, and without that
      even if it is possible to change voltages that doesn't mean that
      constraints or other consumers will allow whatever change the driver is
      trying to do at a given time.  It doesn't even indicate if _set_voltage()
      calls will work as noop _set_voltage() calls return success.
      
      There were no users of this API that weren't abusing it and now they're
      all gone so remove the API.
      Signed-off-by: NMark Brown <broonie@kernel.org>
      fc1e1c4a
  23. 27 4月, 2016 1 次提交
    • J
      regulator: core: Add early supply resolution for regulators · 45389c47
      Jon Hunter 提交于
      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: NJon Hunter <jonathanh@nvidia.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      45389c47
  24. 26 4月, 2016 1 次提交
  25. 22 4月, 2016 4 次提交
    • J
      regulator: core: Move registration of regulator device · c438b9d0
      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: NJon Hunter <jonathanh@nvidia.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      c438b9d0
    • J
      regulator: core: Clear the supply pointer if enabling fails · 8e5356a7
      Jon Hunter 提交于
      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: NJon Hunter <jonathanh@nvidia.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      8e5356a7
    • J
      regulator: core: Don't terminate supply resolution early · 7ddede6a
      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: NJon Hunter <jonathanh@nvidia.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      7ddede6a
    • R
      regulator: core: Add debugfs to show constraint flags · 2d80a91b
      Richard Fitzgerald 提交于
      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: NRichard Fitzgerald <rf@opensource.wolfsonmicro.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      2d80a91b
  26. 19 4月, 2016 1 次提交
  27. 13 4月, 2016 2 次提交
  28. 12 4月, 2016 1 次提交
  29. 31 3月, 2016 1 次提交
    • J
      regulator: Fix deadlock during regulator registration · a2151374
      Jon Hunter 提交于
      Commit 5e3ca2b3 ("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: NJon Hunter <jonathanh@nvidia.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      a2151374