1. 28 10月, 2014 4 次提交
    • L
      ASoC: dapm: Use more aggressive caching · 92a99ea4
      Lars-Peter Clausen 提交于
      Currently we cache the number of input and output paths going to/from a
      widget only within a power update sequence. But not in between power update
      sequences.
      
      But we know how changes to the DAPM graph affect the number of input (form a
      source) and output (to a sink) paths of a widget and only need to
      recalculate them if a operation has been performed that might have changed
      them.
      	* Adding/removing or connecting/disconnecting a path means that the for
      	  the source of the path the number of output paths can change and for
      	  the sink the number of input paths can change.
      	* Connecting/disconnecting a widget has the same effect has connecting/
      	  disconnecting all paths of the widget. So for the widget itself the
      	  number of inputs and outputs can change, for all sinks of the widget
      	  the number of inputs can change and for all sources of the widget the
      	  number of outputs can change.
      	* Activating/Deactivating a stream can either change the number of
      	  outputs on the sources of the widget associated with the stream or the
      	  number of inputs on the sinks.
      
      Instead of always invalidating all cached numbers of input and output paths
      for each power up or down sequence this patch restructures the code to only
      invalidate the cached numbers when a operation that might change them has
      been performed. This can greatly reduce the number of DAPM power checks for
      some very common operations.
      
      Since per DAPM operation typically only either change the number of inputs
      or outputs the number of path checks is reduced by at least 50%. The number
      of neighbor checks is also reduced about the same percentage, but since the
      number of neighbors encountered when walking from sink to source is not the
      same as when walking from source to sink the actual numbers will slightly
      vary from card to card (e.g. for a mixer we see 1 neighbor when walking from
      source to sink, but the number of inputs neighbors when walking from source
      to sink).
      
      Bigger improvements can be observed for widgets with multiple connected
      inputs and output (e.g. mixers probably being the most widespread form of
      this). Previously we had to re-calculate the number of inputs and outputs
      on all input and output paths. With this change we only have to re-calculate
      the number of outputs on the input path that got changed and the number of
      inputs on the output paths.
      
      E.g. imagine the following example:
      
      	A --> B ----.
      	            v
      	M --> N --> Z <-- S <-- R
      	            |
      	            v
      	            X
      
      Widget Z has multiple input paths, if any change was made that cause Z to be
      marked as dirty the power state of Z has to be re-computed. This requires to
      know the number of inputs and outputs of Z, which requires to know the
      number of inputs and outputs of all widgets on all paths from or to Z.
      Previously this meant re-computing all inputs and outputs of all the path
      going into or out of Z. With this patch in place only paths that actually
      have changed need to be re-computed.
      
      If the system is idle (or the part of the system affected by the changed
      path) the number of path checks drops to either 0 or 1, regardless of how
      large or complex the DAPM context is. 0 if there is no connected sink and no
      connected source. 1 if there is either a connected source or sink, but not
      both. The number of neighbor checks again will scale accordingly and will be
      a constant number that is the number of inputs or outputs of the widget for
      which we did the path check.
      
      When loading a state file or switching between different profiles typically
      multiple mixer and mux settings are changed, so we see the benefit of this
      patch multiplied for these kinds of operations.
      
      Testing with the ADAU1761 shows the following changes in DAPM stats for
      changing a single Mixer switch for a Mixer with 5 inputs while the DAPM
      context is idle.
      
               Power  Path  Neighbour
      Before:  2      12    30
      After:   2       1     2
      
      For the same switch, but with a active playback stream the stat changed are
      as follows.
      
               Power  Path  Neighbour
      Before:  10     20    54
      After:   10      7    21
      
      Cumulative numbers for switching the audio profile which changes 7 controls
      while the system is idle:
      
               Power  Path  Neighbour
      Before:  16      80   170
      After:   16       7    23
      
      Cumulative numbers for switching the audio profile which changes 7 controls
      while playback is active:
      
               Power  Path  Neighbour
      Before:  51     123   273
      After:   51      29   109
      
      Starting (or stopping) the playback stream:
      
               Power  Path  Neighbour
      Before:  34     34    117
      After:   34     17    69
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      92a99ea4
    • L
      ASoC: dapm: Mark endpoints instead of IO widgets dirty during suspend/resume · 8be4da29
      Lars-Peter Clausen 提交于
      The state of endpoint widgets is affected by that card's power state.
      Endpoint widgets that do no have the ignore_suspend flag set will be
      considered inactive during suspend. So they have to be re-checked and marked
      dirty after the card's power state changes. Currently the input and output
      widgets are marked dirty instead, this works most of the time since
      typically a path from one endpoint to another will go via a input or output
      widget. But marking the endpoints dirty is technically more correct and will
      also work for odd corner cases.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      8be4da29
    • L
      ASoC: dapm: Add a flag to mark paths connected to supply widgets · c1862c8b
      Lars-Peter Clausen 提交于
      Supply widgets do not count towards the input and output widgets of their
      neighbors and for supply widgets themselves we do not care for the number
      of input or output paths. This means that a path that connects to a supply
      widget effectively behaves the same as a path that as the weak property set.
      This patch adds a new path flag that gets set to true when the path is
      connected to at least one supply widget. If a path with the flag set is
      encountered in is_connected_{input,output}_ep() is is skipped in the same
      way that weak paths are skipped. This slightly brings down the number of
      path checks.
      
      Since both the weak and the supply flag are implemented as bitfields which
      are stored in the same word there is no runtime overhead due to checking
      both rather than just one and also the size of the path struct is not
      increased by this patch. Another advantage is that we do not have to handle
      supply widgets in is_connected_{input,output}_ep() anymore since it will
      never be called for supply widgets. The only exception is from
      dapm_widget_power_read_file() where a check is added to special case supply
      widgets.
      
      Testing with the ADAU1761, which has a handful of supply widgets, shows the
      following changes in the DAPM stats for a playback stream start.
      
               Power  Path  Neighbour
      Before:  34     78    117
      After:   34     48    117
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      c1862c8b
    • L
      ASoC: dapm: Introduce toplevel widget categories · 6dd98b0a
      Lars-Peter Clausen 提交于
      DAPM widgets can be classified into four categories:
      	* supply: Supply widgets do not affect the power state of their
      		non-supply widget neighbors and unlike other widgets a
      		supply widget is not powered up when it is on an active
      		path, but when at least on of its neighbors is powered up.
      	* source: A source is a widget that receives data from outside the
      		DAPM graph or generates data. This can for example be a
      		microphone, the playback DMA or a signal generator. A source
      		widget will be considered powered up if there is an active
      		path to a sink widget.
      	* sink: A sink is a widget that transmits data to somewhere outside
      		of the DAPM graph. This can e.g. be a speaker or the capture
      		DMA. A sink widget will be considered powered up if there is
      		an active path from a source widget.
      	* normal: Normal widgets are widgets not covered by the categories
      		above. A normal widget will be considered powered up if it
      		is on an active path between a source widget and a sink
      		widget.
      
      The way the number of input and output paths for a widget is calculated
      depends on its category. There are a bunch of factors which decide which
      category a widget is. Currently there is no formal classification of these
      categories and we calculate the category of the widget based on these
      factors whenever we want to know it. This is at least once for every widget
      during each power update sequence. The factors which determine the category
      of the widgets are mostly static though and if at all change rather seldom.
      This patch introduces three new per widget flags, one for each of non-normal
      widgets categories. Instead of re-computing the category each time we want
      to know them the flags will be checked. For the majority of widgets the
      category is solely determined by the widget id, which means it never changes
      and only has to be set once when the widget is created. The only widgets
      with dynamic categories are:
      
      	snd_soc_dapm_dai_out: Is considered a sink iff the capture stream is
      		active, otherwise normal.
      	snd_soc_dapm_dai_in: Is considered a source iff the playback stream
      		is active, otherwise normal.
      	snd_soc_dapm_input: Is considered a sink iff it has no outgoing
      		paths, otherwise normal.
      	snd_soc_dapm_output: Is considered a source iff it has no incoming
      		paths, otherwise normal.
      	snd_soc_dapm_line: Is considered a sink iff it has no outgoing paths
      		and is considered a source iff it has no incoming paths,
      		otherwise normal.
      
      For snd_soc_dapm_dai_out/snd_soc_dapm_dai_in widgets the category will be
      updated when a stream is started or stopped. For the other dynamic widgets
      the category will be updated when a path connecting to it is added or
      removed.
      
      Introducing those new widget categories allows to make
      is_connected_{output,input}_ep, which are among the hottest paths of the
      DAPM algorithm, more generic and significantly shorter.
      
      The before and after sizes for is_connected_{output,input}_ep are:
      
      On ARM (defconfig + CONFIG_SND_SOC):
      	function                                     old     new   delta
      	is_connected_output_ep                       480     340    -140
      	is_connected_input_ep                        456     352    -104
      
      On amd64 (defconfig + CONFIG_SND_SOC):
      	function                                     old     new   delta
      	is_connected_output_ep                       579     427    -152
      	is_connected_input_ep                        563     427    -136
      
      Which is about a 25%-30% decrease, other architectures are expected to have
      similar numbers. At the same time the size of the snd_soc_dapm_widget struct
      does not change since the new flags are stored in the same word as the
      existing flags.
      
      Note: that since the per widget 'ext' flag was only used to decide whether a
      snd_soc_dapm_input or snd_soc_dapm_output widget was a source or a sink it
      is now unused and can be removed.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      6dd98b0a
  2. 22 10月, 2014 1 次提交
    • L
      ASoC: dapm: Remove path 'walked' flag · 130897ac
      Lars-Peter Clausen 提交于
      The 'walked' flag was used to avoid walking paths that have already been
      walked. But since we started caching the number of inputs and outputs of a
      path we never actually get into a situation where we try to walk a path that
      has the 'walked' flag set.
      
      There are two cases in which we can end up walking a path multiple times
      within a single run of is_connected_output_ep() or is_connected_input_ep().
      
      1) If a path splits up and rejoins later:
      
      	     .--> C ---v
      	A -> B         E --> F
      	     '--> D ---^
      
      When walking from A to F we'll end up at E twice, once via C and once via D.
      But since we do a depth first search we'll fully discover the path and
      initialize the number of outputs/inputs of the widget the first time we get
      there. The second time we get there we'll use the cached value and not
      bother to check any of the paths again. So we'll never see a path where
      'walked' is set in this case.
      
      2) If there is a circle:
      
      	A --> B <-- C <-.--> F
      	      '--> D ---'
      
      When walking from A to F we'll end up twice at B. But since there is a
      circle the 'walking' flag will still be set on B once we get there the
      second time. This means we won't look at any of it's outgoing paths. So in
      this case we won't ever see a path where 'walked' is set either.
      
      So it is safe to remove the flag. This on one hand means we remove some
      always true checks from one of the hottest paths of the DAPM algorithm and
      on the other hand means we do not have to do the tedious clearing of the
      flag after checking the number inputs or outputs of a widget.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      130897ac
  3. 03 10月, 2014 1 次提交
  4. 30 9月, 2014 1 次提交
  5. 05 9月, 2014 1 次提交
    • L
      ASoC: Add support for automatically going to BIAS_OFF on suspend · 86dbf2ac
      Lars-Peter Clausen 提交于
      There is a substantial amount of drivers that in go to SND_SOC_BIAS_OFF on
      suspend and go back to SND_SOC_BIAS_SUSPEND on resume (Often this is even
      the only thing done in the suspend and resume handlers). This patch
      introduces a new suspend_bias_off flag, which when set by a driver will let
      the ASoC core automatically put the device's DAPM context at the
      SND_SOC_BIAS_OFF level during suspend. Once the device is resumed the DAPM
      context will go back to SND_SOC_BIAS_STANDBY (if the context is idle,
      otherwise to SND_SOC_BIAS_ON).
      
      This will allow us to remove a fair bit of duplicated code from the drivers.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      86dbf2ac
  6. 22 6月, 2014 4 次提交
    • L
      ASoC: dapm: Remove platform field from widget and dapm context struct · 88a8fe3d
      Lars-Peter Clausen 提交于
      The platform field in the snd_soc_dapm_widget and snd_soc_dapm_context structs
      is now unused can be removed. New code that wants to get the platform for a
      widget or dapm context should use snd_soc_dapm_to_platform(w->dapm) or
      snd_soc_dapm_to_platform(dapm).
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      88a8fe3d
    • L
      ASoC: Add DAPM support at the component level · ce0fc93a
      Lars-Peter Clausen 提交于
      This patch adds full DAPM support at the component level. Previously there was
      only full DAPM support for CODECs and partial DAPM support (e.g. no Mixers nor
      MUXs) for platforms. Having DAPM support at the component level will allow all
      types of components to use DAPM and also help in consolidating the DAPM support
      between CODECs and platforms.
      
      Since the DAPM context is directly embedded into the snd_soc_codec and
      snd_soc_platform struct and the 'dapm' field is directly referenced in a lot of
      drivers moving the field just right now is not possible without causing code
      churn. The approach this patch takes is to add two new fields to the component
      struct. One field which is the pointer to the actual DAPM context used by the
      component and one DAPM context that will be used as the default if no other
      context was specified. For CODECs and platforms the pointer is initialized to
      point to the CODEC or platform DAPM context. All generic code when referencing
      a component's DAPM struct will go via the pointer. This will make it possible to
      eventually seamlessly move the DAPM context from snd_soc_codec and
      snd_soc_platform struct over once all direct references have been eliminated.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      ce0fc93a
    • L
      ASoC: Add a set_bias_level() callback to the DAPM context struct · 68f831c2
      Lars-Peter Clausen 提交于
      Currently the DAPM code directly looks at the CODEC driver struct to get a
      handle to the set_bias_level() callback. This patch adds a new set_bias_level()
      callback to the DAPM context struct. The DAPM code will use this new callback
      instead of the CODEC callback. For CODECs the new callback is set up to call the
      CODEC specific set_bias_level callback(). Not looking directly at the CODEC
      driver struct will allow non CODEC DAPM contexts to implement a set_bias_level()
      callback.
      
      This is also similar to how the seq_notifier() and stream_event() callbacks are
      currently handled.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      68f831c2
    • L
      ASoC: Auto disconnect pins from all DAPM contexts · 7df37884
      Lars-Peter Clausen 提交于
      Currently only pins in CODEC DAPM contexts are automatically marked as
      non-connected if the card has the fully_routed flag set. This makes sense since
      widgets which qualify for auto-disconnection are only found in CODEC DAPM
      contexts. But with componentisation this is going to change, so consider all
      widgets for auto-disconnection.
      
      Also it is probably faster to walk the widgets list only once rather than once
      for each CODEC.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      7df37884
  7. 13 5月, 2014 1 次提交
  8. 22 4月, 2014 1 次提交
    • L
      ASoC: Move IO abstraction to the component level · e2c330b9
      Lars-Peter Clausen 提交于
      We currently have two very similar IO abstractions in ASoC, one for CODECs, the
      other for platforms. Moving this to the component level will allow us to unify
      those two. It will also enable us to move the standard kcontrol helpers as well
      as DAPM support to the component level.
      
      The new component level abstraction layer is primarily build around regmap.
      There is a per component pointer for the regmap instance for the underlying
      device. There are four new function snd_soc_component_read(),
      snd_soc_component_write(), snd_soc_component_update_bits() and
      snd_soc_component_update_bits_async(). They have the same signature as their
      regmap counter-part and will internally forward the call one-to-one to regmap.
      If the component it not using regmap it will fallback to using the custom IO
      callbacks. This is done to be able to support drivers that haven't been
      converted to regmap yet, but it is expected that this will eventually be removed
      in the future once all component drivers have been converted to regmap.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      e2c330b9
  9. 15 4月, 2014 1 次提交
  10. 10 3月, 2014 1 次提交
  11. 01 3月, 2014 2 次提交
    • L
      ASoC: dapm: Consolidate MUXs and virtual MUXs · 236aaa68
      Lars-Peter Clausen 提交于
      MUXs and virtual MUXs are almost identical, the only difference is that for
      virtual MUX there is no hardware backing register in which setting is stored.
      This patch adds code, which is similar to what we already do for DAPM mixer
      controls to support virtual mixer controls, to DAPM enum controls. The new code
      will check if the enum does a hardware backing register and skip over reading
      and writing to the register if it has not.  This allows us to use the same code
      path for both MUXs and virtual MUXs and a lot of nearly identical code can be
      removed.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      236aaa68
    • L
      ASoC: dapm: Consolidate MUXs and value MUXs · 3727b496
      Lars-Peter Clausen 提交于
      MUXs and value MUXs are almost identical, the only difference is that a value
      MUX uses a look-up table to map from the selected control item to a register
      value, while MUXs use a direct mapping. This patch uses
      snd_soc_enum_item_to_val() and snd_soc_enum_val_to_item(), which where earlier
      introduced during the consolidation of enum and value enum controls, to hide
      this difference. This allows us to use the same code path for both MUXs and
      value MUXs and a lot of nearly duplicated code can be removed.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      3727b496
  12. 20 2月, 2014 2 次提交
  13. 08 1月, 2014 1 次提交
  14. 24 11月, 2013 1 次提交
    • S
      ASoC: dapm: Use SND_SOC_DAPM_INIT_REG_VAL in SND_SOC_DAPM_MUX · faf6615b
      Stephen Warren 提交于
      SND_SOC_DAPM_MUX() doesn't currently initialize the .mask field. This
      results in the mux never affecting HW, since no bits are ever set or
      cleared. Fix SND_SOC_DAPM_MUX() to use SND_SOC_DAPM_INIT_REG_VAL() to
      set up the reg, shift, on_val, and off_val fields like almost all other
      SND_SOC_xxx() macros. It looks like this was a "typo" in the fixed
      commit linked below.
      
      This makes the speakers on the Toshiba AC100 (PAZ00) laptop work again.
      
      Fixes: de9ba98b ("ASoC: dapm: Make widget power register settings more flexible")
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      Cc: <stable@vger.kernel.org> # v3.12+
      faf6615b
  15. 07 10月, 2013 1 次提交
  16. 27 8月, 2013 1 次提交
  17. 05 8月, 2013 1 次提交
    • L
      ASoC: dapm: Implement mixer input auto-disable · 57295073
      Lars-Peter Clausen 提交于
      Some devices have the problem that if a internal audio signal source is disabled
      the output of the source becomes undefined or goes to a undesired state (E.g.
      DAC output goes to ground instead of VMID). In this case it is necessary, in
      order to avoid unwanted clicks and pops, to disable any mixer input the signal
      feeds into or to active a mute control along the path to the output. Often it is
      still desirable to expose the same mixer input control to userspace, so cerain
      paths can sill be disabled manually. This means we can not use conventional DAPM
      to manage the mixer input control. This patch implements a method for letting
      DAPM overwrite the state of a userspace visible control. I.e. DAPM will disable
      the control if the path on which the control sits becomes inactive. Userspace
      will then only see a cached copy of the controls state. Once DAPM powers the
      path up again it will sync the userspace setting with the hardware and give
      control back to userspace.
      
      To implement this a new widget type is introduced. One widget of this type will
      be created for each DAPM kcontrol which has the auto-disable feature enabled.
      For each path that is controlled by the kcontrol the widget will be connected to
      the source of that path. The new widget type behaves like a supply widget,
      which means it will power up if one of its sinks are powered up and will only
      power down if all of its sinks are powered down. In order to only have the mixer
      input enabled when the source signal is valid the new widget type will be
      disabled before all other widget types and only be enabled after all other
      widget types.
      
      E.g. consider the following simplified example. A DAC is connected to a mixer
      and the mixer has a control to enable or disable the signal from the DAC.
      
                           +-------+
        +-----+            |       |
        | DAC |-----[Ctrl]-| Mixer |
        +-----+       :    |       |
           |          :    +-------+
           |          :
          +-------------+
          | Ctrl widget |
          +-------------+
      
      If the control has the auto-disable feature enabled we'll create a widget for
      the control. This widget is connected to the DAC as it is the source for the
      mixer input. If the DAC powers up the control widget powers up and if the DAC
      powers down the control widget is powered down. As long as the control widget
      is powered down the hardware input control is kept disabled and if it is enabled
      userspace can freely change the control's state.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      57295073
  18. 30 7月, 2013 5 次提交
  19. 24 7月, 2013 2 次提交
    • L
      ASoC: dapm: Add a update parameter to snd_soc_dapm_{mux,mixer}_update_power · 6b3fc03b
      Lars-Peter Clausen 提交于
      In order to avoid race conditions the assignment of dapm->update should happen
      while card->dapm_mutex is being held. To allow CODEC drivers to run a register
      update when using snd_soc_dapm_mux_update_power() or
      snd_soc_dapm_mixer_update_power() add a update parameter to these two functions.
      The update parameter will be assigned to dapm->update while card->dapm_mutex is
      locked.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      6b3fc03b
    • L
      ASoC: dapm: Run widget updates for shared controls at the same time · ce6cfaf1
      Lars-Peter Clausen 提交于
      Currently when updating a control that is shared between multiple widgets the
      whole power-up/power-down sequence is being run once for each widget. The
      control register is updated during the first run, which means the CODEC internal
      routing is also updated for all widgets during this first run. The input and
      output paths for each widgets are only updated though during the respective run
      for that widget. This leads to a slight inconsistency between the CODEC's
      internal state and ASoC's state, which causes non optimal behavior in regard to
      click and pop avoidance.
      
      E.g. consider the following setup where two MUXs share the same control.
      
                +------+
       A1 ------|      |
                | MUX1 |----- C1
       B1 ------|      |
                +------+
                   |
        control ---+
                   |
                +------+
       A2 ------|      |
                | MUX2 |----- C2
       B2 ------|      |
                +------+
      
      If the control is updated to switch the MUXs from input A to input B with the
      current code the power-up/power-down sequence will look like this:
      
      Run soc_dapm_mux_update_power for MUX1
        Power-down A1
        Update MUXing
        Power-up B1
      
      Run soc_dapm_mux_update_power for MUX2
        Power-down A2
        (Update MUXing)
        Power-up B2
      
      Note that the second 'Update Muxing' is a no-op, since the register was already
      updated.
      
      While the preferred order for avoiding pops and clicks should be:
      
      Run soc_dapm_mux_update_power for control
        Power-down A1
        Power-down A2
        Update MUXing
        Power-up B1
        Power-up B2
      
      This patch changes the behavior to the later by running the updates for all
      widgets that the control is attached to at the same time.
      
      The new code is also a bit simpler since callers of
      soc_dapm_{mux,muxer}_update_power don't have to loop over each widget anymore
      and neither do we need to keep track for which of the kcontrol's widgets the
      current update is.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      ce6cfaf1
  20. 14 6月, 2013 1 次提交
  21. 07 6月, 2013 1 次提交
  22. 13 5月, 2013 1 次提交
  23. 08 3月, 2013 1 次提交
  24. 25 2月, 2013 1 次提交
    • M
      ASoC: dapm: Fix handling of loops · 8af294b4
      Mark Brown 提交于
      Currently if a path loops back on itself we correctly skip over it to
      avoid going into an infinite loop but this causes us to ignore the need
      to power up the path as we don't count the loop for the purposes of
      counting inputs and outputs. This means that internal loopbacks within a
      device that have powered devices on them won't be powered up.
      
      Fix this by treating any path that is currently in the process of being
      recursed as having a single input or output so that it is counted for
      the purposes of power decisions.
      Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
      Acked-by: NLiam Girdwood <liam.r.girdwood@linux.intel.com>
      8af294b4
  25. 26 9月, 2012 1 次提交
  26. 08 9月, 2012 1 次提交
  27. 06 9月, 2012 1 次提交