<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/drivers/pinctrl/pinconf.c, branch linux-3.5.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.5.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.5.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2012-05-15T07:43:18Z</updated>
<entry>
<title>pinctrl: a minor error checking improvement for pinconf</title>
<updated>2012-05-15T07:43:18Z</updated>
<author>
<name>Dong Aisheng</name>
</author>
<published>2012-05-14T11:06:36Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c95df2db2cb5a147b42374f391858232517c0576'/>
<id>urn:sha1:c95df2db2cb5a147b42374f391858232517c0576</id>
<content type='text'>
Also checking invalid num_configs when validate the pinconf map.

Acked-by: Stephen Warren &lt;swarren@wwwdotorg.org&gt;
Signed-off-by: Dong Aisheng &lt;dong.aisheng@linaro.org&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>pinctrl: enhance reporting of errors when loading from DT</title>
<updated>2012-04-26T21:11:04Z</updated>
<author>
<name>John Crispin</name>
</author>
<published>2012-04-26T14:47:11Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ad6e1107baa2e7fda55c2020c25127eab9c0122b'/>
<id>urn:sha1:ad6e1107baa2e7fda55c2020c25127eab9c0122b</id>
<content type='text'>
There are a few places in the api where the code simply returns -EINVAL when
it finds an error. An example is pinmux_map_to_setting() which now reports an
error if we try to match a group with a function that it does not support.

The reporting of errors in pinconf_check_ops and pinmux_check_ops now has the
same style and is located inside the according functions and not the calling
code.

When the map is found in the DT but the default state can not be selected we
get an error to know that the code at least tried.

The patch also removes a stray word from one comment and a "-&gt;" from another
for the sake of consistency.

Finally we replace a few pr_err/debug() calls with dev_err/dbg().

Thanks go to Stephen Warren for reviewing the patch and enhancing the reporting
inside pinmux_map_to_setting().

Signed-off-by: John Crispin &lt;blogic@openwrt.org&gt;
Acked-by: Stephen Warren &lt;swarren@wwwdotorg.org&gt;
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>pinctrl: a minor fix of pin config debug information</title>
<updated>2012-04-18T11:53:13Z</updated>
<author>
<name>Dong Aisheng</name>
</author>
<published>2012-04-16T14:07:24Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2aeefe0233174015aef19dc06aac02a1119a44be'/>
<id>urn:sha1:2aeefe0233174015aef19dc06aac02a1119a44be</id>
<content type='text'>
Signed-off-by: Dong Aisheng &lt;dong.aisheng@linaro.org&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>pinctrl: allow pctldevs to decode pin config in debugfs</title>
<updated>2012-04-18T11:53:12Z</updated>
<author>
<name>Stephen Warren</name>
</author>
<published>2012-04-13T16:49:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=6cb4158757a8629e14851e7802f3b6bfaa7d6f00'/>
<id>urn:sha1:6cb4158757a8629e14851e7802f3b6bfaa7d6f00</id>
<content type='text'>
Add a pinconf op so that pin controller drivers can decode their pin
config settings for debugfs.

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>pinctrl: add some error checking for user interfaces</title>
<updated>2012-04-18T11:53:11Z</updated>
<author>
<name>Dong Aisheng</name>
</author>
<published>2012-04-10T04:41:34Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ad8bb720c23a80233e45ed31d67458f5e5b7ab31'/>
<id>urn:sha1:ad8bb720c23a80233e45ed31d67458f5e5b7ab31</id>
<content type='text'>
This patch can avoid kernel oops in case the mux or config
function is not supported by driver.

Acked-by: Stephen Warren &lt;swarren@wwwdotorg.org&gt;
Signed-off-by: Dong Aisheng &lt;dong.aisheng@linaro.org&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>pinctrl: replace list_*() with get_*_count()</title>
<updated>2012-04-18T11:53:10Z</updated>
<author>
<name>Viresh Kumar</name>
</author>
<published>2012-03-30T05:55:40Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d1e90e9e7467dbfe521b25ba79f520bf676ebc36'/>
<id>urn:sha1:d1e90e9e7467dbfe521b25ba79f520bf676ebc36</id>
<content type='text'>
Most of the SoC drivers implement list_groups() and list_functions()
routines for pinctrl and pinmux. These routines continue returning
zero until the selector argument is greater than total count of
available groups or functions.

This patch replaces these list_*() routines with get_*_count()
routines, which returns the number of available selection for SoC
driver. pinctrl layer will use this value to check the range it can
choose.

This patch fixes all user drivers for this change. There are other
routines in user drivers, which have checks to check validity of
selector passed to them. It is also no more required and hence
removed.

Documentation updated as well.

Acked-by: Stephen Warren &lt;swarren@wwwdotorg.org&gt;
Signed-off-by: Viresh Kumar &lt;viresh.kumar@st.com&gt;
[Folded in fix and fixed a minor merge artifact manually]
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>pinctrl: introduce generic pin config</title>
<updated>2012-03-12T21:49:02Z</updated>
<author>
<name>Linus Walleij</name>
</author>
<published>2011-11-24T17:27:15Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=394349f7789fdfcdc74b61afcac84046535c40b7'/>
<id>urn:sha1:394349f7789fdfcdc74b61afcac84046535c40b7</id>
<content type='text'>
This is a split-off from the earlier patch set which adds generic
pin configuration for the pin controllers that want it. Since
we may have a system with mixed generic and custom pin controllers,
we pass a boolean in the pin controller ops vtable to indicate
if it is generic.

ChangeLog v1-&gt;v5:
- Follow parent patch versioning number system.
- Document the semantic meaning of return values from pin config
  get functions, so we can iterate over pins and check their
  properties from debugfs as part of the generic config code.
- Use proper cast functions in the generic debugfs pin config
  file.
- Expand generic config to optionally cover groups too.
ChangeLog v5-&gt;v6:
- Update to match underlying changes.
ChangeLog v6-&gt;v7:
- Drop DRIVE_OFF parameter, use bias high impedance for this
- Delete argument for drive modes push-pull, od and os. These
  are now just state transitions.
- Delete slew rate rising/falling due to discussions on on
  proper semantics
- Drop config wakeup, struct irq_chip does this for now, add
  back if need be.
- Set PIN_CONFIG_END to 0x7fff making room for custom config
  parameters from 0x8000 and up.
- Prefix accessor functions with pinconf_
</content>
</entry>
<entry>
<title>pinctrl: fix error path in pinconf_map_to_setting()</title>
<updated>2012-03-12T21:48:43Z</updated>
<author>
<name>Linus Walleij</name>
</author>
<published>2012-03-12T20:38:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=70b36378d44d7f5e62458a830b1a9bb1c570f28a'/>
<id>urn:sha1:70b36378d44d7f5e62458a830b1a9bb1c570f28a</id>
<content type='text'>
The code was using the union member
setting-&gt;data.configs.group_or_pin to store a potential
error code, but since that member is unsigned the
&lt; 0 comparison was not true, letting errors pass through,
ending up as mapped to pin "-22". Fix this up and print
the error.

Acked-by: Stephen Warren &lt;swarren@wwwdotorg.org&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>pinctrl: enhance mapping table to support pin config operations</title>
<updated>2012-03-05T10:25:11Z</updated>
<author>
<name>Stephen Warren</name>
</author>
<published>2012-03-02T20:05:48Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=1e2082b520721734c358f776d34a069867214c8e'/>
<id>urn:sha1:1e2082b520721734c358f776d34a069867214c8e</id>
<content type='text'>
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: Stephen Warren &lt;swarren@nvidia.com&gt;
Acked-by: Dong Aisheng &lt;dong.aisheng@linaro.org&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>pinctrl: fix and simplify locking</title>
<updated>2012-03-05T10:19:49Z</updated>
<author>
<name>Stephen Warren</name>
</author>
<published>2012-03-02T20:05:44Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=57b676f9c1b7cd84397fe5a86c9bd2788ac4bd32'/>
<id>urn:sha1:57b676f9c1b7cd84397fe5a86c9bd2788ac4bd32</id>
<content type='text'>
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: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
</feed>
