Thread (5 messages) 5 messages, 2 authors, 2016-01-28

[PATCH 2/2 V3] drivers/gpio: Switch gpio-mpc8xxx to use gpio-generic

From: Linus Walleij <hidden>
Date: 2016-01-28 09:40:13
Also in: linux-gpio

On Tue, Jan 12, 2016 at 1:10 PM, Liu Gang [off-list ref] wrote:
The new Layerscape platforms has the same ip block/controller
as GPIO on PowerPC platforms(MPC8XXX), but the GPIO registers
may be big or little endian. So the code needs to get the
endian property from DTB, then make additional functions to
fit all the PowerPC/Layerscape GPIO register read/write
operations.

gpio-generic.c provides an universal infrastructure for both
big and little endian register operations. So switch the
gpio-mpc8xxx to use gpio-generic can simplify the driver and
reduce a lot of code.

The IRQ and some workaround parts in gpio-mpc8xxx.c will be
updated with the new API interfaces but following the
original functionalities.

Signed-off-by: Liu Gang <redacted>
---
-V3: Switch gpio-mpc8xxx to use gpio-generic for both
     little, big endian kinds of GPIO register following
     Linus Walleij comments.
This is starting to look good :)

Just a few minor tweaks left.

First rebase onto linux v4.5-rc1 unless you've already done
this. Unfortunately you're hitting the window when I've been
refactoring generic GPIO...
 #include <linux/io.h>
 #include <linux/of.h>
 #include <linux/of_gpio.h>
+#include <linux/of_address.h>
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
 #include <linux/gpio.h>
 #include <linux/slab.h>
 #include <linux/irq.h>
+#include <linux/basic_mmio_gpio.h>
You should remove #include <linux/gpioh.h> and
#include <linux/basic_mmio_gpio.h> as I have moved
all of that into #include <linux/gpio/driver.h> so include
that instead.
 struct mpc8xxx_gpio_chip {
-       struct of_mm_gpio_chip mm_gc;
+       struct bgpio_chip       bgc;
Just use struct gpio_chip *gc

as I merged strict bgpio_chip into struct gpio_chip,
see commit 0f4630f3720e7e6e921bf525c8357fea7ef3dbab
"gpio: generic: factor into gpio_chip struct"

If you look at this commit, you will see what changes
are needed for your driver.
 static inline struct mpc8xxx_gpio_chip *
-to_mpc8xxx_gpio_chip(struct of_mm_gpio_chip *mm)
+to_mpc8xxx_gpio_chip(struct bgpio_chip *bg_c)
 {
-       return container_of(mm, struct mpc8xxx_gpio_chip, mm_gc);
-}
You should be able to use gpio_add_chip_data() and then
get the pointer to your struct mpc8xxx_gpio_chip *
from gpiochip_get_data() instead, like that:

struct mpc8xxx_gpio_chip *mpc = gpiochip_get_data(gc);

Just search and replace everywhere.

Yours,
Linus Walleij
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help