<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/drivers/gpio/gpio-max732x.c, branch linux-4.3.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.</subtitle>
<id>https://universe.0xinfinity.dev/distro/kernel/atom?h=linux-4.3.y</id>
<link rel='self' href='https://universe.0xinfinity.dev/distro/kernel/atom?h=linux-4.3.y'/>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/'/>
<updated>2015-08-26T11:34:55Z</updated>
<entry>
<title>gpio: max732x: Fix error handling in probe()</title>
<updated>2015-08-26T11:34:55Z</updated>
<author>
<name>Nicholas Krause</name>
<email>xerofoify@gmail.com</email>
</author>
<published>2015-08-18T13:55:44Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=78de5d5220322456f2568de23bc2e97bba3957e3'/>
<id>urn:sha1:78de5d5220322456f2568de23bc2e97bba3957e3</id>
<content type='text'>
This fixes error handling in the function max732x_probe by checking
if the calls to the function max732x_readb fail by returning a error
code.

Signed-off-by: Nicholas Krause &lt;xerofoify@gmail.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>gpio: max732x: Add missing dev reference to gpiochip</title>
<updated>2015-07-16T11:42:46Z</updated>
<author>
<name>Marek Vasut</name>
<email>marex@denx.de</email>
</author>
<published>2015-06-30T18:04:18Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=34ab54edbef902f31842b428dce9530f3283847c'/>
<id>urn:sha1:34ab54edbef902f31842b428dce9530f3283847c</id>
<content type='text'>
In case the gpiochip doesn't have the .dev field set, as is the case
in here, it is not possible to reference this device in DT as a GPIO
controller. A good example of this problem is that gpio-leds can not
be used when connected to this chip, the gpio-leds driver bails out
with -EPROBE_DEFER.

Fix this problem by setting the .dev field of the gpio_chip to the
parent i2c device.

Signed-off-by: Marek Vasut &lt;marex@denx.de&gt;
Cc: Alexandre Courbot &lt;gnurou@gmail.com&gt;
Cc: Linus Walleij &lt;linus.walleij@linaro.org&gt;
Cc: Mans Rullgard &lt;mans@mansr.com&gt;
Cc: Olaf Mandel &lt;o.mandel@menlosystems.com&gt;
Cc: Semen Protsenko &lt;semen.protsenko@globallogic.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>gpio: max732x: Fix irq-events handler</title>
<updated>2015-05-06T13:08:54Z</updated>
<author>
<name>Semen Protsenko</name>
<email>semen.protsenko@globallogic.com</email>
</author>
<published>2015-04-22T13:20:41Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=606f13e9efa0892561e7c471242e4ad0bcaf6ecb'/>
<id>urn:sha1:606f13e9efa0892561e7c471242e4ad0bcaf6ecb</id>
<content type='text'>
MAX732X clears all pending interrupts on I2C read (when interrupts
register is being read). Driver doesn't need to send any ACKs when
interrupt was handled. So replace handle_edge_irq() with
handle_simple_irq().

Using handle_edge_irq() (w/o .irq_ack callback set) may lead to NULL
pointer dereference in some cases. E.g. this was observed on
hibernation process:

  Unable to handle kernel NULL pointer dereference at virtual address 0
  Backtrace:
  (handle_edge_irq) from (resend_irqs)
  (resend_irqs) from (tasklet_action)
  (tasklet_action) from (__do_softirq)
  (__do_softirq) from (run_ksoftirqd)
  (run_ksoftirqd) from (smpboot_thread_fn)
  (smpboot_thread_fn) from (kthread)
  (kthread) from (ret_from_fork)

Signed-off-by: Semen Protsenko &lt;semen.protsenko@globallogic.com&gt;
Reviewed-by: Grygorii Strashko &lt;grygorii.strashko@linaro.org&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>gpio: max732x: Add IRQF_SHARED to irq flags</title>
<updated>2015-05-06T13:05:54Z</updated>
<author>
<name>Semen Protsenko</name>
<email>semen.protsenko@globallogic.com</email>
</author>
<published>2015-04-21T13:19:04Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=68689dbf35e13fc20928ba3a0b959d28c6281e9e'/>
<id>urn:sha1:68689dbf35e13fc20928ba3a0b959d28c6281e9e</id>
<content type='text'>
It's possible that multiple MAX732X can be hooked up to the same
interrupt line with the processor. So add IRQF_SHARED in requesting irq.

Signed-off-by: Semen Protsenko &lt;semen.protsenko@globallogic.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>gpio: max732x: Propagate wake-up setting to parent irq controller</title>
<updated>2015-05-04T13:31:20Z</updated>
<author>
<name>Semen Protsenko</name>
<email>semen.protsenko@globallogic.com</email>
</author>
<published>2015-04-21T17:27:37Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=67ddd32bfc9f5746e6c293154f8287278e6744ba'/>
<id>urn:sha1:67ddd32bfc9f5746e6c293154f8287278e6744ba</id>
<content type='text'>
Set .irq_set_wake callback to prevent possible issues on wake-up.

This patch was inspired by this commit:
b80eef95beb04760629822fa130aeed54cdfafca

Signed-off-by: Semen Protsenko &lt;semen.protsenko@globallogic.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>gpio: max732x: convert to GPIOLIB_IRQCHIP</title>
<updated>2015-03-02T14:44:08Z</updated>
<author>
<name>Linus Walleij</name>
<email>linus.walleij@linaro.org</email>
</author>
<published>2015-01-30T10:32:01Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=984f66432e357701194abc7f753dcad89a1f9de3'/>
<id>urn:sha1:984f66432e357701194abc7f753dcad89a1f9de3</id>
<content type='text'>
Take a sweep to bring the irq support for the MAX732x expanders
into the gpiolib core to cut down on duplicated code.

Only compile tested! I need some feedback from people using this
expander with interrupts to tell me if things go right or
wrong when I do this.

Cc: Semen Protsenko &lt;semen.protsenko@globallogic.com&gt;
Cc: Mans Rullgard &lt;mans@mansr.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>gpio: max732x: use an inline function for container cast</title>
<updated>2015-02-03T12:35:57Z</updated>
<author>
<name>Linus Walleij</name>
<email>linus.walleij@linaro.org</email>
</author>
<published>2015-01-30T09:56:05Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=37fc8a92daf5e775a18790ccd935240ef72ddd83'/>
<id>urn:sha1:37fc8a92daf5e775a18790ccd935240ef72ddd83</id>
<content type='text'>
Cast the struct gpio_chip into a max732x_chip using an inline
macro and move the assignment to the variable declaration
to save lines and simplify things.

Cc: Semen Protsenko &lt;semen.protsenko@globallogic.com&gt;
Acked-by: Mans Rullgard &lt;mans@mansr.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>gpio: max732x: add set_multiple function</title>
<updated>2015-01-30T09:45:56Z</updated>
<author>
<name>Mans Rullgard</name>
<email>mans@mansr.com</email>
</author>
<published>2015-01-21T17:17:49Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=161af6cd899508506ac5df101af7e569f28aa0e6'/>
<id>urn:sha1:161af6cd899508506ac5df101af7e569f28aa0e6</id>
<content type='text'>
This adds a set_multiple function to the MAX732x GPIO driver,
allowing for performance gains when using gpiod_set_array().

Signed-off-by: Mans Rullgard &lt;mans@mansr.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>gpio: max732x: Fix possible deadlock</title>
<updated>2015-01-15T17:03:49Z</updated>
<author>
<name>Semen Protsenko</name>
<email>semen.protsenko@globallogic.com</email>
</author>
<published>2015-01-13T13:41:44Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=09afa276d52ea5a7ff8fcd2ad9dfe204bfb18372'/>
<id>urn:sha1:09afa276d52ea5a7ff8fcd2ad9dfe204bfb18372</id>
<content type='text'>
This patch was derived from next one:
"gpio: fix pca953x set_type 'scheduling while atomic' bug".

After adding entry that consumes max732x GPIO as interrupt line to dts
file, deadlock appears somewhere in max732x probe function.

Deadlock caught by lockdep (from kernel log):
&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; cut here &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;
[    0.473419] ======================================================
[    0.473419] [ INFO: HARDIRQ-safe -&gt; HARDIRQ-unsafe lock order detected ]
[    0.473449] 3.x.xx-xxxxx-xxxxxxxx-dirty #2 Tainted: G        W
[    0.473449] ------------------------------------------------------
[    0.473449] swapper/0/1 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire:
[    0.473449]  (&amp;lock-&gt;wait_lock){+.+...}, at: [&lt;c072e350&gt;] rt_mutex_trylock+0xc/0x74
[    0.473480]
[    0.473480] and this task is already holding:
[    0.473510]  (&amp;chip-&gt;lock){......}, at: [&lt;c0314514&gt;] max732x_gpio_set_value+0x2c/0xa4
[    0.473541] which would create a new lock dependency:
[    0.473541]  (&amp;chip-&gt;lock){......} -&gt; (&amp;lock-&gt;wait_lock){+.+...}

...

[    0.474273]  *** DEADLOCK ***
[    0.474273]
[    0.474273] 5 locks held by swapper/0/1:
[    0.474273]  #0:  (&amp;__lockdep_no_validate__){......}, at: [&lt;c03b2328&gt;] __driver_attach+0x48/0x98
[    0.474304]  #1:  (&amp;__lockdep_no_validate__){......}, at: [&lt;c03b2338&gt;] __driver_attach+0x58/0x98
[    0.474334]  #2:  (&amp;chip-&gt;irq_lock){+.+...}, at: [&lt;c0313e3c&gt;] max732x_irq_bus_lock+0x14/0x20
[    0.474365]  #3:  (&amp;irq_desc_lock_class){-.....}, at: [&lt;c00a65a4&gt;] __irq_get_desc_lock+0x48/0x88
[    0.474365]  #4:  (&amp;chip-&gt;lock){......}, at: [&lt;c0314514&gt;] max732x_gpio
&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; cut here &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;

Signed-off-by: Semen Protsenko &lt;semen.protsenko@globallogic.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
<entry>
<title>gpio: max732x: Rewrite IRQ code to use irq_domain API</title>
<updated>2015-01-15T16:53:56Z</updated>
<author>
<name>Semen Protsenko</name>
<email>semen.protsenko@globallogic.com</email>
</author>
<published>2015-01-13T13:41:43Z</published>
<link rel='alternate' type='text/html' href='https://universe.0xinfinity.dev/distro/kernel/commit/?id=479f8a5744d8141e95ef40ab364ae2d3648848ef'/>
<id>urn:sha1:479f8a5744d8141e95ef40ab364ae2d3648848ef</id>
<content type='text'>
Signed-off-by: Semen Protsenko &lt;semen.protsenko@globallogic.com&gt;
Signed-off-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
</content>
</entry>
</feed>
