1. 26 4月, 2013 1 次提交
    • P
      pinctrl: move subsystem mutex to pinctrl_dev struct · 42fed7ba
      Patrice Chotard 提交于
      This mutex avoids deadlock in case of use of multiple pin
      controllers. Before this modification, by using a global
      mutex, deadlock appeared when, for example, a call to
      pinctrl_pins_show() locked the pinctrl_mutex, called the
      ops->pin_dbg_show of a particular pin controller. If this
      pin controller needs I2C access to retrieve configuration
      information and I2C driver is using pinctrl to drive its
      pins, a call to pinctrl_select_state() try to lock again
      pinctrl_mutex which leads to a deadlock.
      
      Notice that the mutex grab from the two direction functions
      was moved into pinctrl_gpio_direction().
      
      For several cases, we can't replace pinctrl_mutex by
      pctldev->mutex, because at this stage, pctldev is
      not accessible :
      	- pinctrl_get()/pinctrl_put()
      	- pinctrl_register_maps()
      
      So add respectively pinctrl_list_mutex and
      pinctrl_maps_mutex in order to protect
      pinctrl_list and pinctrl_maps list instead.
      
      Reintroduce pinctrldev_list_mutex in
      find_pinctrl_by_of_node(),
      pinctrl_find_and_add_gpio_range()
      pinctrl_request_gpio(), pinctrl_free_gpio(),
      pinctrl_gpio_direction(), pinctrl_devices_show(),
      pinctrl_register() and pinctrl_unregister() to
      protect pinctrldev_list.
      
      Changes v2->v3:
      - Fix a missing EXPORT_SYMBOL_GPL() for pinctrl_select_state().
      
      Changes v1->v2:
      - pinctrl_select_state_locked() is removed, all lock mechanism
        is located inside pinctrl_select_state(). When parsing
        the state->setting list, take the per-pin-controller driver
        lock. (Patrice).
      - Introduce pinctrldev_list_mutex to protect pinctrldev_list
        in all functions which parse or modify pictrldev_list.
        (Patrice).
      - move find_pinctrl_by_of_node() from pinctrl/devicetree.c to
        pinctrl/core.c in order to protect pinctrldev_list.
        (Patrice).
      - Sink mutex:es into some functions and remove some _locked
        variants down to where the lists are actually accessed to
        make things simpler. (Linus)
      - Drop *all* mutexes completely from pinctrl_lookup_state()
        and pinctrl_select_state() - no relevant mutex was taken
        and it was unclear what this was protecting against. (Linus)
      
      Reported by : Seraphin Bonnaffe <seraphin.bonnaffe@stericsson.com>
      Signed-off-by: NPatrice Chotard <patrice.chotard@st.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      42fed7ba
  2. 28 3月, 2013 1 次提交
  3. 11 2月, 2013 1 次提交
    • L
      pinctrl/pinconfig: add debug interface · 6f9e41f4
      Laurent Meunier 提交于
      This update adds a debugfs interface to modify a pin configuration
      for a given state in the pinctrl map. This allows to modify the
      configuration for a non-active state, typically sleep state.
      This configuration is not applied right away, but only when the state
      will be entered.
      
      This solution is mandated for us by HW validation: in order
      to test and verify several pin configurations during sleep without
      recompiling the software.
      Signed-off-by: NLaurent Meunier <laurent.meunier@st.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      6f9e41f4
  4. 23 1月, 2013 1 次提交
    • L
      drivers/pinctrl: grab default handles from device core · ab78029e
      Linus Walleij 提交于
      This makes the device core auto-grab the pinctrl handle and set
      the "default" (PINCTRL_STATE_DEFAULT) state for every device
      that is present in the device model right before probe. This will
      account for the lion's share of embedded silicon devcies.
      
      A modification of the semantics for pinctrl_get() is also done:
      previously if the pinctrl handle for a certain device was already
      taken, the pinctrl core would return an error. Now, since the
      core may have already default-grabbed the handle and set its
      state to "default", if the handle was already taken, this will
      be disregarded and the located, previously instanitated handle
      will be returned to the caller.
      
      This way all code in drivers explicitly requesting their pinctrl
      handlers will still be functional, and drivers that want to
      explicitly retrieve and switch their handles can still do that.
      But if the desired functionality is just boilerplate of this
      type in the probe() function:
      
      struct pinctrl  *p;
      
      p = devm_pinctrl_get_select_default(&dev);
      if (IS_ERR(p)) {
         if (PTR_ERR(p) == -EPROBE_DEFER)
              return -EPROBE_DEFER;
              dev_warn(&dev, "no pinctrl handle\n");
      }
      
      The discussion began with the addition of such boilerplate
      to the omap4 keypad driver:
      http://marc.info/?l=linux-input&m=135091157719300&w=2
      
      A previous approach using notifiers was discussed:
      http://marc.info/?l=linux-kernel&m=135263661110528&w=2
      This failed because it could not handle deferred probes.
      
      This patch alone does not solve the entire dilemma faced:
      whether code should be distributed into the drivers or
      if it should be centralized to e.g. a PM domain. But it
      solves the immediate issue of the addition of boilerplate
      to a lot of drivers that just want to grab the default
      state. As mentioned, they can later explicitly retrieve
      the handle and set different states, and this could as
      well be done by e.g. PM domains as it is only related
      to a certain struct device * pointer.
      
      ChangeLog v4->v5 (Stephen):
      - Simplified the devicecore grab code.
      - Deleted a piece of documentation recommending that pins
        be mapped to a device rather than hogged.
      ChangeLog v3->v4 (Linus):
      - Drop overzealous NULL checks.
      - Move kref initialization to pinctrl_create().
      - Seeking Tested-by from Stephen Warren so we do not disturb
        the Tegra platform.
      - Seeking ACK on this from Greg (and others who like it) so I
        can merge it through the pinctrl subsystem.
      ChangeLog v2->v3 (Linus):
      - Abstain from using IS_ERR_OR_NULL() in the driver core,
        Russell recently sent a patch to remove it. Handle the
        NULL case explicitly even though it's a bogus case.
      - Make sure we handle probe deferral correctly in the device
        core file. devm_kfree() the container on error so we don't
        waste memory for devices without pinctrl handles.
      - Introduce reference counting into the pinctrl core using
        <linux/kref.h> so that we don't release pinctrl handles
        that have been obtained for two or more places.
      ChangeLog v1->v2 (Linus):
      - Only store a pointer in the device struct, and only allocate
        this if it's really used by the device.
      
      Cc: Felipe Balbi <balbi@ti.com>
      Cc: Benoit Cousson <b-cousson@ti.com>
      Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
      Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Cc: Mitch Bradley <wmb@firmworks.com>
      Cc: Ulf Hansson <ulf.hansson@linaro.org>
      Cc: Rafael J. Wysocki <rjw@sisk.pl>
      Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
      Cc: Rickard Andersson <rickard.andersson@stericsson.com>
      Cc: Russell King <linux@arm.linux.org.uk>
      Reviewed-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      [swarren: fixed and simplified error-handling in pinctrl_bind_pins(), to
      correctly handle deferred probe. Removed admonition from docs not to use
      pinctrl hogs for devices]
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      ab78029e
  5. 12 1月, 2013 1 次提交
  6. 12 11月, 2012 1 次提交
    • L
      pinctrl: reserve pins when states are activated · 1a78958d
      Linus Walleij 提交于
      This switches the way that pins are reserved for multiplexing:
      
      We used to do this when the map was parsed, at the creation of
      the settings inside the pinctrl handle, in pinmux_map_to_setting().
      
      However this does not work for us, because we want to use the
      same set of pins with different devices at different times: the
      current code assumes that the pin groups in a pinmux state will
      only be used with one single device, albeit different groups can
      be active at different times. For example if a single I2C driver
      block is used to drive two different busses located on two
      pin groups A and B, then the pins for all possible states of a
      function are reserved when fetching the pinctrl handle: the
      I2C bus can choose either set A or set B by a mux state at
      runtime, but all pins in both group A and B (the superset) are
      effectively reserved for that I2C function and mapped to the
      device. Another device can never get in and use the pins in
      group A, even if the device/function is using group B at the
      moment.
      
      Instead: let use reserve the pins when the state is activated
      and drop them when the state is disabled, i.e. when we move to
      another state. This way different devices/functions can use the
      same pins at different times.
      
      We know that this is an odd way of doing things, but we really
      need to switch e.g. an SD-card slot to become a tracing output
      sink at runtime: we plug in a special "tracing card" then mux
      the pins that used to be an SD slot around to the tracing
      unit and push out tracing data there instead of SD-card
      traffic.
      
      As a side effect pinmux_free_setting() is unused but the stubs
      are kept for future additions of code.
      
      Cc: Patrice Chotard <patrice.chotard@st.com>
      Cc: Loic Pallardy <loic.pallardy@st.com>
      Acked-by: NStephen Warren <swarren@nvidia.com>
      Tested-by: NJean Nicolas Graux <jean-nicolas.graux@stericsson.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      1a78958d
  7. 18 4月, 2012 2 次提交
  8. 13 3月, 2012 1 次提交
    • S
      pinctrl: allow concurrent gpio and mux function ownership of pins · 652162d4
      Stephen Warren 提交于
      Per recent updates to Documentation/gpio.txt, gpiolib drivers should
      inform pinctrl when a GPIO is requested. pinctrl then marks that pin as
      in-use for that GPIO function.
      
      When an SoC muxes pins in a group, it's quite possible for the group to
      contain e.g. 6 pins, but only 4 of them actually be needed by the HW
      module that's mux'd to them. In this case, the other 2 pins could be
      used as GPIOs. However, pinctrl marks all the pins within the group as
      in-use by the selected mux function. To allow the expected gpiolib
      interaction, separate the concepts of pin ownership into two parts: One
      for the mux function and one for GPIO usage. Finally, allow those two
      ownerships to exist in parallel.
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      652162d4
  9. 07 3月, 2012 1 次提交
  10. 05 3月, 2012 6 次提交
    • S
      pinctrl: Show selected function and group in pinmux-pins debugfs · ba110d90
      Stephen Warren 提交于
      Until recently, the pinctrl pinmux-pins debugfs file displayed the
      selected function for each owned pin. This feature was removed during
      restructing in support of recent API rework. This change restoreds this
      feature, and also displays the group that the function was selected on,
      in case a pin is a member of multiple groups.
      
      Based on work by: Linus Walleij <linus.walleij@linaro.org>
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      ba110d90
    • S
      pinctrl: enhance mapping table to support pin config operations · 1e2082b5
      Stephen Warren 提交于
      The pinctrl mapping table can now contain entries to:
      * Set the mux function of a pin group
      * Apply a set of pin config options to a pin or a group
      
      This allows pinctrl_select_state() to apply pin configs settings as well
      as mux settings.
      
      v3: Fix find_pinctrl() to iterate over the correct list.
         s/_MUX_CONFIGS_/_CONFIGS_/ in mapping table macros.
         Fix documentation to use correct mapping table macro.
      v2: Added numerous extra PIN_MAP_*() special-case macros.
         Fixed kerneldoc typo. Delete pinctrl_get_pin_id() and
         replace it with pin_get_from_name(). Various minor fixes.
         Updates due to rebase.
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Acked-by: NDong Aisheng <dong.aisheng@linaro.org>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      1e2082b5
    • S
      pinctrl: API changes to support multiple states per device · 6e5e959d
      Stephen Warren 提交于
      The API model is changed from:
      
      p = pinctrl_get(dev, "state1");
      pinctrl_enable(p);
      ...
      pinctrl_disable(p);
      pinctrl_put(p);
      p = pinctrl_get(dev, "state2");
      pinctrl_enable(p);
      ...
      pinctrl_disable(p);
      pinctrl_put(p);
      
      to this:
      
      p = pinctrl_get(dev);
      s1 = pinctrl_lookup_state(p, "state1");
      s2 = pinctrl_lookup_state(p, "state2");
      pinctrl_select_state(p, s1);
      ...
      pinctrl_select_state(p, s2);
      ...
      pinctrl_put(p);
      
      This allows devices to directly transition between states without
      disabling the pin controller programming and put()/get()ing the
      configuration data each time. This model will also better suit pinconf
      programming, which doesn't have a concept of "disable".
      
      The special-case hogging feature of pin controllers is re-written to use
      the regular APIs instead of special-case code. Hence, the pinmux-hogs
      debugfs file is removed; see the top-level pinctrl-handles files for
      equivalent data.
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Acked-by: NDong Aisheng <dong.aisheng@linaro.org>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      6e5e959d
    • S
      pinctrl: add usecount to pins for muxing · 0e3db173
      Stephen Warren 提交于
      Multiple mapping table entries could reference the same pin, and hence
      "own" it. This would be unusual now that pinctrl_get() represents a single
      state for a client device, but in the future when it represents all known
      states for a device, this is quite likely. Implement reference counting
      for pin ownership to handle this.
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Acked-by: NDong Aisheng <dong.aisheng@linaro.org>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      0e3db173
    • S
      pinctrl: refactor struct pinctrl handling in core.c vs pinmux.c · 7ecdb16f
      Stephen Warren 提交于
      This change separates two aspects of struct pinctrl:
      
      a) The data representation of the parsed mapping table, into:
      
         1) The top-level struct pinctrl object, a single entity returned
            by pinctrl_get().
      
         2) The parsed version of each mapping table entry, struct
            pinctrl_setting, of which there is one per mapping table entry.
      
      b) The code that handles this; the code for (1) above is in core.c, and
         the code to parse/execute each entry in (2) above is in pinmux.c, while
         the iteration over multiple settings is lifted to core.c.
      
      This will allow the following future changes:
      
      1) pinctrl_get() API rework, so that struct pinctrl represents all states
         for the device, and the device can select between them without calling
         put()/get() again.
      
      2) To support that, a struct pinctrl_state object will be inserted into
         the data model between the struct pinctrl and struct pinctrl_setting.
      
      3) The mapping table will be extended to allow specification of pin config
         settings too. To support this, struct pinctrl_setting will be enhanced
         to store either mux settings or config settings, and functions will be
         added to pinconf.c to parse/execute pin configuration settings.
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Acked-by: NLinus Walleij <linus.walleij@linaro.org>
      Acked-by: NDong Aisheng <dong.aisheng@linaro.org>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      7ecdb16f
    • S
      pinctrl: fix and simplify locking · 57b676f9
      Stephen Warren 提交于
      There are many problems with the current pinctrl locking:
      
      struct pinctrl_dev's gpio_ranges_lock isn't effective;
      pinctrl_match_gpio_range() only holds this lock while searching for a gpio
      range, but the found range is return and manipulated after releading the
      lock. This could allow pinctrl_remove_gpio_range() for that range while it
      is in use, and the caller may very well delete the range after removing it,
      causing pinctrl code to touch the now-free range object.
      
      Solving this requires the introduction of a higher-level lock, at least
      a lock per pin controller, which both gpio range registration and
      pinctrl_get()/put() will acquire.
      
      There is missing locking on HW programming; pin controllers may pack the
      configuration for different pins/groups/config options/... into one
      register, and hence have to read-modify-write the register. This needs to
      be protected, but currently isn't. Related, a future change will add a
      "complete" op to the pin controller drivers, the idea being that each
      state's programming will be programmed into the pinctrl driver followed
      by the "complete" call, which may e.g. flush a register cache to HW. For
      this to work, it must not be possible to interleave the pinctrl driver
      calls for different devices.
      
      As above, solving this requires the introduction of a higher-level lock,
      at least a lock per pin controller, which will be held for the duration
      of any pinctrl_enable()/disable() call.
      
      However, each pinctrl mapping table entry may affect a different pin
      controller if necessary. Hence, with a per-pin-controller lock, almost
      any pinctrl API may need to acquire multiple locks, one per controller.
      To avoid deadlock, these would need to be acquired in the same order in
      all cases. This is extremely difficult to implement in the case of
      pinctrl_get(), which doesn't know which pin controllers to lock until it
      has parsed the entire mapping table, since it contains somewhat arbitrary
      data.
      
      The simplest solution here is to introduce a single lock that covers all
      pin controllers at once. This will be acquired by all pinctrl APIs.
      
      This then makes struct pinctrl's mutex irrelevant, since that single lock
      will always be held whenever this mutex is currently held.
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      57b676f9
  11. 02 3月, 2012 3 次提交
  12. 24 2月, 2012 1 次提交
  13. 23 2月, 2012 2 次提交
  14. 11 2月, 2012 2 次提交
  15. 02 2月, 2012 1 次提交
  16. 25 1月, 2012 1 次提交
  17. 03 1月, 2012 5 次提交
    • L
      pinctrl: conjure names for unnamed pins · ca53c5f1
      Linus Walleij 提交于
      If pins with blank names are registered, we assign them names on-the-fly
      on the form "PINn" where n is the pin number for that pin on the specific
      controller.
      Acked-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      ca53c5f1
    • S
      pinctrl: don't create a device for each pin controller · 51cd24ee
      Stephen Warren 提交于
      Pin controllers should already be instantiated as a device, so there's
      no need for the pinctrl core to create a new struct device for each
      controller.
      
      This allows the controller's real name to be used in the mux mapping
      table, rather than e.g. "pinctrl.0", "pinctrl.1", etc.
      
      This necessitates removal of the PINMUX_MAP_PRIMARY*() macros, since
      their sole purpose was to hard-code the .ctrl_dev_name field to be
      "pinctrl.0".
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      51cd24ee
    • L
      pinctrl: add a pin config interface · ae6b4d85
      Linus Walleij 提交于
      This add per-pin and per-group pin config interfaces for biasing,
      driving and other such electronic properties. The details of passed
      configurations are passed in an opaque unsigned long which may be
      dereferences to integer types, structs or lists on either side
      of the configuration interface.
      
      ChangeLog v1->v2:
      - Clear split of terminology: we now have pin controllers, and
        those may support two interfaces using vtables: pin
        multiplexing and pin configuration.
      - Break out pin configuration to its own C file, controllers may
        implement only config without mux, and vice versa, so keep each
        sub-functionality of pin controllers separate. Introduce
        CONFIG_PINCONF in Kconfig.
      - Implement some core logic around pin configuration in the
        pinconf.c file.
      - Remove UNKNOWN config states, these were just surplus baggage.
      - Remove FLOAT config state - HIGH_IMPEDANCE should be enough for
        everyone.
      - PIN_CONFIG_POWER_SOURCE added to handle switching the power
        supply for the pin logic between different sources
      - Explicit DISABLE config enums to turn schmitt-trigger,
        wakeup etc OFF.
      - Update documentation to reflect all the recent reasoning.
      ChangeLog v2->v3:
      - Twist API around to pass around arrays of config tuples instead
        of (param, value) pairs everywhere.
      - Explicit drive strength semantics for push/pull and similar
        drive modes, this shall be the number of drive stages vs
        nominal load impedance, which should match the actual
        electronics used in push/pull CMOS or TTY totempoles.
      - Drop load capacitance configuration - I probably don't know
        what I'm doing here so leave it out.
      - Drop PIN_CONFIG_INPUT_SCHMITT_OFF, instead the argument zero to
        PIN_CONFIG_INPUT_SCHMITT turns schmitt trigger off.
      - Drop PIN_CONFIG_NORMAL_POWER_MODE and have a well defined
        argument to PIN_CONFIG_LOW_POWER_MODE to get out of it instead.
      - Drop PIN_CONFIG_WAKEUP_ENABLE/DISABLE and just use
        PIN_CONFIG_WAKEUP with defined value zero to turn wakeup off.
      - Add PIN_CONFIG_INPUT_DEBOUNCE for configuring debounce time
        on input lines.
      - Fix a bug when we tried to configure pins for pin controllers
        without pinconf support.
      - Initialized debugfs properly so it works.
      - Initialize the mutex properly and lock around config tampering
        sections.
      - Check the return value from get_initial_config() properly.
      ChangeLog v3->v4:
      - Export the pin_config_get(), pin_config_set() and
        pin_config_group() functions.
      - Drop the entire concept of just getting initial config and
        keeping track of pin states internally, instead ask the pins
        what state they are in. Previous idea was plain wrong, if the
        device cannot keep track of its state, the driver should do
        it.
      - Drop the generic configuration layout, it seems this impose
        too much restriction on some pin controllers, so let them do
        things the way they want and split off support for generic
        config as an optional add-on.
      ChangeLog v4->v5:
      - Introduce two symmetric driver calls for group configuration,
        .pin_config_group_[get|set] and corresponding external calls.
      - Remove generic semantic meanings of return values from config
        calls, these belong in the generic config patch. Just pass the
        return value through instead.
      - Add a debugfs entry "pinconf-groups" to read status from group
        configuration only, also slam in a per-group debug callback in
        the pinconf_ops so custom drivers can display something
        meaningful for their pins.
      - Fix some dangling newline.
      - Drop dangling #else clause.
      - Update documentation to match the above.
      ChangeLog v5->v6:
      - Change to using a pin name as parameter for the
        [get|set]_config() functions, as suggested by Stephen Warren.
        This is more natural as names will be what a developer has
        access to in written documentation etc.
      ChangeLog v6->v7:
      - Refactor out by-pin and by-name get/set functions, only expose
        the by-name functions externally, expose the by-pin functions
        internally.
      - Show supported pin control functionality in the debugfs
        pinctrl-devices file.
      Acked-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      ae6b4d85
    • M
      pinctrl: unify pin type from signed to unsigned · 33d58949
      Marek Belisko 提交于
      We want singned pins to mean "invalid" only on the outside
      of the subsystem.
      Signed-off-by: NMarek Belisko <marek.belisko@open-nandra.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      33d58949
    • L
      pinctrl: move group lookup to core · 7afde8ba
      Linus Walleij 提交于
      Now also the core needs to look up pin groups so move the lookup
      function there and expose it in the internal header.
      Acked-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      7afde8ba
  18. 20 10月, 2011 2 次提交
  19. 13 10月, 2011 1 次提交
    • L
      drivers: create a pin control subsystem · 2744e8af
      Linus Walleij 提交于
      This creates a subsystem for handling of pin control devices.
      These are devices that control different aspects of package
      pins.
      
      Currently it handles pinmuxing, i.e. assigning electronic
      functions to groups of pins on primarily PGA and BGA type of
      chip packages which are common in embedded systems.
      
      The plan is to also handle other I/O pin control aspects
      such as biasing, driving, input properties such as
      schmitt-triggering, load capacitance etc within this
      subsystem, to remove a lot of ARM arch code as well as
      feature-creepy GPIO drivers which are implementing the same
      thing over and over again.
      
      This is being done to depopulate the arch/arm/* directory
      of such custom drivers and try to abstract the infrastructure
      they all need. See the Documentation/pinctrl.txt file that is
      part of this patch for more details.
      
      ChangeLog v1->v2:
      
      - Various minor fixes from Joe's and Stephens review comments
      - Added a pinmux_config() that can invoke custom configuration
        with arbitrary data passed in or out to/from the pinmux driver
      
      ChangeLog v2->v3:
      
      - Renamed subsystem folder to "pinctrl" since we will likely
        want to keep other pin control such as biasing in this
        subsystem too, so let us keep to something generic even though
        we're mainly doing pinmux now.
      - As a consequence, register pins as an abstract entity separate
        from the pinmux. The muxing functions will claim pins out of the
        pin pool and make sure they do not collide. Pins can now be
        named by the pinctrl core.
      - Converted the pin lookup from a static array into a radix tree,
        I agreed with Grant Likely to try to avoid any static allocation
        (which is crap for device tree stuff) so I just rewrote this
        to be dynamic, just like irq number descriptors. The
        platform-wide definition of number of pins goes away - this is
        now just the sum total of the pins registered to the subsystem.
      - Make sure mappings with only a function name and no device
        works properly.
      
      ChangeLog v3->v4:
      
      - Define a number space per controller instead of globally,
        Stephen and Grant requested the same thing so now maps need to
        define target controller, and the radix tree of pin descriptors
        is a property on each pin controller device.
      - Add a compulsory pinctrl device entry to the pinctrl mapping
        table. This must match the pinctrl device, like "pinctrl.0"
      - Split the file core.c in two: core.c and pinmux.c where the
        latter carry all pinmux stuff, the core is for generic pin
        control, and use local headers to access functionality between
        files. It is now possible to implement a "blank" pin controller
        without pinmux capabilities. This split will make new additions
        like pindrive.c, pinbias.c etc possible for combined drivers
        and chunks of functionality which is a GoodThing(TM).
      - Rewrite the interaction with the GPIO subsystem - the pin
        controller descriptor now handles this by defining an offset
        into the GPIO numberspace for its handled pin range. This is
        used to look up the apropriate pin controller for a GPIO pin.
        Then that specific GPIO range is matched 1-1 for the target
        controller instance.
      - Fixed a number of review comments from Joe Perches.
      - Broke out a header file pinctrl.h for the core pin handling
        stuff that will be reused by other stuff than pinmux.
      - Fixed some erroneous EXPORT() stuff.
      - Remove mispatched U300 Kconfig and Makefile entries
      - Fixed a number of review comments from Stephen Warren, not all
        of them - still WIP. But I think the new mapping that will
        specify which function goes to which pin mux controller address
        50% of your concerns (else beat me up).
      
      ChangeLog v4->v5:
      
      - Defined a "position" for each function, so the pin controller now
        tracks a function in a certain position, and the pinmux maps define
        what position you want the function in. (Feedback from Stephen
        Warren and Sascha Hauer).
      - Since we now need to request a combined function+position from
        the machine mapping table that connect mux settings to drivers,
        it was extended with a position field and a name field. The
        name field is now used if you e.g. need to switch between two
        mux map settings at runtime.
      - Switched from a class device to using struct bus_type for this
        subsystem. Verified sysfs functionality: seems to work fine.
        (Feedback from Arnd Bergmann and Greg Kroah-Hartman)
      - Define a per pincontroller list of GPIO ranges from the GPIO
        pin space that can be handled by the pin controller. These can
        be added one by one at runtime. (Feedback from Barry Song)
      - Expanded documentation of regulator_[get|enable|disable|put]
        semantics.
      - Fixed a number of review comments from Barry Song. (Thanks!)
      
      ChangeLog v5->v6:
      
      - Create an abstract pin group concept that can sort pins into
        named and enumerated groups no matter what the use of these
        groups may be, one possible usecase is a group of pins being
        muxed in or so. The intention is however to also use these
        groups for other pin control activities.
      - Make it compulsory for pinmux functions to associate with
        at least one group, so the abstract pin group concept is used
        to define the groups of pins affected by a pinmux function.
        The pinmux driver interface has been altered so as to enforce
        a function to list applicable groups per function.
      - Provide an optional .group entry in the pinmux machine map
        so the map can select beteween different available groups
        to be used with a certain function.
      - Consequent changes all over the place so that e.g. debugfs
        present reasonable information about the world.
      - Drop the per-pin mux (*config) function in the pinmux_ops
        struct - I was afraid that this would start to be used for
        things totally unrelated to muxing, we can introduce that to
        the generic struct pinctrl_ops if needed. I want to keep
        muxing orthogonal to other pin control subjects and not mix
        these things up.
      
      ChangeLog v6->v7:
      
      - Make it possible to have several map entries matching the
        same device, pin controller and function, but using
        a different group, and alter the semantics so that
        pinmux_get() will pick all matching map entries, and
        store the associated groups in a list. The list will
        then be iterated over at pinmux_enable()/pinmux_disable()
        and corresponding driver functions called for each
        defined group. Notice that you're only allowed to map
        multiple *groups* to the same
        { device, pin controller, function } triplet, attempts
        to map the same device to multiple pin controllers will
        for example fail. This is hopefully the crucial feature
        requested by Stephen Warren.
      - Add a pinmux hogging field to the pinmux mapping entries,
        and enable the pinmux core to hog pinmux map entries.
        This currently only works for pinmuxes without assigned
        devices as it looks now, but with device trees we can
        look up the corresponding struct device * entries when
        we register the pinmux driver, and have it hog each
        pinmux map in turn, for a simple approach to
        non-dynamic pin muxing. This addresses an issue from
        Grant Likely that the machine should take care of as
        much of the pinmux setup as possible, not the devices.
        By supplying a list of hogs, it can now instruct the
        core to take care of any static mappings.
      - Switch pinmux group retrieveal function to grab an
        array of strings representing the groups rather than an
        array of unsigned and rewrite accordingly.
      - Alter debugfs to show the grouplist handled by each
        pinmux. Also add a list of hogs.
      - Dynamically allocate a struct pinmux at pinmux_get() and
        free it at pinmux_put(), then add these to the global
        list of pinmuxes active as we go along.
      - Go over the list of pinmux maps at pinmux_get() time
        and repeatedly apply matches.
      - Retrieve applicable groups per function from the driver
        as a string array rather than a unsigned array, then
        lookup the enumerators.
      - Make the device to pinmux map a singleton - only allow the
        mapping table to be registered once and even tag the
        registration function with __init so it surely won't be
        abused.
      - Create a separate debugfs file to view the pinmux map at
        runtime.
      - Introduce a spin lock to the pin descriptor struct, lock it
        when modifying pin status entries. Reported by Stijn Devriendt.
      - Fix up the documentation after review from Stephen Warren.
      - Let the GPIO ranges give names as const char * instead of some
        fixed-length string.
      - add a function to unregister GPIO ranges to mirror the
        registration function.
      - Privatized the struct pinctrl_device and removed it from the
        <linux/pinctrl/pinctrl.h> API, the drivers do not need to know
        the members of this struct. It is now in the local header
        "core.h".
      - Rename the concept of "anonymous" mux maps to "system" muxes
        and add convenience macros and documentation.
      
      ChangeLog v7->v8:
      
      - Delete the leftover pinmux_config() function from the
       <linux/pinctrl/pinmux.h> header.
      - Fix a race condition found by Stijn Devriendt in pin_request()
      
      ChangeLog v8->v9:
      
      - Drop the bus_type and the sysfs attributes and all, we're not on
        the clear about how this should be used for e.g. userspace
        interfaces so let us save this for the future.
      - Use the right name in MAINTAINERS, PIN CONTROL rather than
        PINMUX
      - Don't kfree() the device state holder, let the .remove() callback
        handle this.
      - Fix up numerous kerneldoc headers to have one line for the function
        description and more verbose documentation below the parameters
      
      ChangeLog v9->v10:
      - pinctrl: EXPORT_SYMBOL needs export.h, folded in a patch
        from Steven Rothwell
      - fix pinctrl_register error handling, folded in a patch from
        Axel Lin
      - Various fixes to documentation text so that it's consistent.
      - Removed pointless comment from drivers/Kconfig
      - Removed dependency on SYSFS since we removed the bus in
        v9.
      - Renamed hopelessly abbreviated pctldev_* functions to the
        more verbose pinctrl_dev_*
      - Drop mutex properly when looking up GPIO ranges
      - Return NULL instead of ERR_PTR() errors on registration of
        pin controllers, using cast pointers is fragile. We can
        live without the detailed error codes for sure.
      
      Cc: Stijn Devriendt <highguy@gmail.com>
      Cc: Joe Perches <joe@perches.com>
      Cc: Russell King <linux@arm.linux.org.uk>
      Acked-by: NGrant Likely <grant.likely@secretlab.ca>
      Acked-by: NStephen Warren <swarren@nvidia.com>
      Tested-by: NBarry Song <21cnbao@gmail.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      2744e8af