From: Nicolas Ferre <nicolas.ferre@atmel.com> To: Roland Stigge <stigge@antcom.de>, <plagnioj@jcrosoft.com> Cc: <gregkh@linuxfoundation.org>, <grant.likely@secretlab.ca>, <linus.walleij@linaro.org>, <linux-kernel@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, <w.sang@pengutronix.de>, <jbe@pengutronix.de>, <highguy@gmail.com>, <broonie@opensource.wolfsonmicro.com>, <daniel-gl@gmx.net>, <rmallon@gmail.com>, <sr@denx.de>, <wg@grandegger.com>, <tru@work-microwave.de>, <mark.rutland@arm.com> Subject: Re: [PATCH RESEND 6/6 v13] gpio: Add block gpio to several gpio drivers Date: Tue, 15 Jan 2013 14:18:53 +0100 [thread overview] Message-ID: <50F5573D.4060007@atmel.com> (raw) In-Reply-To: <1358250716-21986-7-git-send-email-stigge@antcom.de> Hi, Le 15/01/2013 12:51, Roland Stigge a écrit : > This patch adds block GPIO support to several gpio drivers. > > This implements block GPIO only for some selected drivers since block GPIO is > an optional feature which may not be suitable for every GPIO hardware. (With > automatic fallback to the single GPIO functions if not available in a driver.) > > Signed-off-by: Roland Stigge <stigge@antcom.de> > > --- > drivers/gpio/Kconfig | 2 > drivers/gpio/gpio-em.c | 23 ++++++++++ > drivers/gpio/gpio-ge.c | 29 +++++++++++++ > drivers/gpio/gpio-generic.c | 56 +++++++++++++++++++++++++ > drivers/gpio/gpio-ks8695.c | 34 +++++++++++++++ > drivers/gpio/gpio-lpc32xx.c | 82 ++++++++++++++++++++++++++++++++++++++ > drivers/gpio/gpio-max730x.c | 61 ++++++++++++++++++++++++++++ > drivers/gpio/gpio-max732x.c | 59 +++++++++++++++++++++++++++ > drivers/gpio/gpio-mc33880.c | 16 +++++++ > drivers/gpio/gpio-ml-ioh.c | 27 ++++++++++++ > drivers/gpio/gpio-mm-lantiq.c | 22 ++++++++++ > drivers/gpio/gpio-mpc5200.c | 64 +++++++++++++++++++++++++++++ > drivers/gpio/gpio-mpc8xxx.c | 41 +++++++++++++++++++ > drivers/gpio/gpio-pca953x.c | 64 +++++++++++++++++++++++++++++ > drivers/gpio/gpio-pcf857x.c | 24 +++++++++++ > drivers/gpio/gpio-pch.c | 27 ++++++++++++ > drivers/gpio/gpio-pl061.c | 17 +++++++ > drivers/gpio/gpio-sa1100.c | 20 +++++++++ > drivers/gpio/gpio-samsung.c | 31 ++++++++++++++ > drivers/gpio/gpio-twl6040.c | 32 ++++++++++++++ > drivers/gpio/gpio-ucb1400.c | 23 ++++++++++ > drivers/gpio/gpio-vt8500.c | 24 +++++++++++ > drivers/gpio/gpio-xilinx.c | 44 ++++++++++++++++++++ > drivers/pinctrl/pinctrl-at91.c | 29 +++++++++++++ I do not want to delay the process of inclusion for this patch series. But I have a little question on AT91 driver modification... > drivers/pinctrl/pinctrl-nomadik.c | 36 ++++++++++++++++ > 25 files changed, 887 insertions(+) [..] > --- linux-2.6.orig/drivers/pinctrl/pinctrl-at91.c > +++ linux-2.6/drivers/pinctrl/pinctrl-at91.c > @@ -49,6 +49,7 @@ struct at91_gpio_chip { > struct clk *clock; /* associated clock */ > struct irq_domain *domain; /* associated irq domain */ > struct at91_pinctrl_mux_ops *ops; /* ops */ > + unsigned long mask_cache; /* cached mask for block gpio */ > }; > > #define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip) > @@ -1125,6 +1126,32 @@ static void at91_gpio_set(struct gpio_ch > writel_relaxed(mask, pio + (val ? PIO_SODR : PIO_CODR)); > } > > +static unsigned long at91_gpio_get_block(struct gpio_chip *chip, > + unsigned long mask) > +{ > + struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip); > + void __iomem *pio = at91_gpio->regbase; > + u32 pdsr; > + > + pdsr = __raw_readl(pio + PIO_PDSR); Maybe you should use readl_relaxed() here as it is used in the at91_gpio_[get|set]() functions. > + return pdsr & mask; > +} > + > +static void at91_gpio_set_block(struct gpio_chip *chip, unsigned long mask, > + unsigned long val) > +{ > + struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip); > + void __iomem *pio = at91_gpio->regbase; > + > + /* Do synchronous data output with a single write access */ > + if (mask != at91_gpio->mask_cache) { > + at91_gpio->mask_cache = mask; > + __raw_writel(~mask, pio + PIO_OWDR); > + __raw_writel(mask, pio + PIO_OWER); > + } > + __raw_writel(val, pio + PIO_ODSR); Ditto. > +} > + > static int at91_gpio_direction_output(struct gpio_chip *chip, unsigned offset, > int val) > { > @@ -1435,8 +1462,10 @@ static struct gpio_chip at91_gpio_templa > .free = at91_gpio_free, > .direction_input = at91_gpio_direction_input, > .get = at91_gpio_get, > + .get_block = at91_gpio_get_block, > .direction_output = at91_gpio_direction_output, > .set = at91_gpio_set, > + .set_block = at91_gpio_set_block, > .to_irq = at91_gpio_to_irq, > .dbg_show = at91_gpio_dbg_show, > .can_sleep = 0, > --- linux-2.6.orig/drivers/pinctrl/pinctrl-nomadik.c > +++ linux-2.6/drivers/pinctrl/pinctrl-nomadik.c [..] Otherwise, seems ok to me ; for AT91 part: Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> Best regards, -- Nicolas Ferre
WARNING: multiple messages have this Message-ID (diff)
From: nicolas.ferre@atmel.com (Nicolas Ferre) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH RESEND 6/6 v13] gpio: Add block gpio to several gpio drivers Date: Tue, 15 Jan 2013 14:18:53 +0100 [thread overview] Message-ID: <50F5573D.4060007@atmel.com> (raw) In-Reply-To: <1358250716-21986-7-git-send-email-stigge@antcom.de> Hi, Le 15/01/2013 12:51, Roland Stigge a ?crit : > This patch adds block GPIO support to several gpio drivers. > > This implements block GPIO only for some selected drivers since block GPIO is > an optional feature which may not be suitable for every GPIO hardware. (With > automatic fallback to the single GPIO functions if not available in a driver.) > > Signed-off-by: Roland Stigge <stigge@antcom.de> > > --- > drivers/gpio/Kconfig | 2 > drivers/gpio/gpio-em.c | 23 ++++++++++ > drivers/gpio/gpio-ge.c | 29 +++++++++++++ > drivers/gpio/gpio-generic.c | 56 +++++++++++++++++++++++++ > drivers/gpio/gpio-ks8695.c | 34 +++++++++++++++ > drivers/gpio/gpio-lpc32xx.c | 82 ++++++++++++++++++++++++++++++++++++++ > drivers/gpio/gpio-max730x.c | 61 ++++++++++++++++++++++++++++ > drivers/gpio/gpio-max732x.c | 59 +++++++++++++++++++++++++++ > drivers/gpio/gpio-mc33880.c | 16 +++++++ > drivers/gpio/gpio-ml-ioh.c | 27 ++++++++++++ > drivers/gpio/gpio-mm-lantiq.c | 22 ++++++++++ > drivers/gpio/gpio-mpc5200.c | 64 +++++++++++++++++++++++++++++ > drivers/gpio/gpio-mpc8xxx.c | 41 +++++++++++++++++++ > drivers/gpio/gpio-pca953x.c | 64 +++++++++++++++++++++++++++++ > drivers/gpio/gpio-pcf857x.c | 24 +++++++++++ > drivers/gpio/gpio-pch.c | 27 ++++++++++++ > drivers/gpio/gpio-pl061.c | 17 +++++++ > drivers/gpio/gpio-sa1100.c | 20 +++++++++ > drivers/gpio/gpio-samsung.c | 31 ++++++++++++++ > drivers/gpio/gpio-twl6040.c | 32 ++++++++++++++ > drivers/gpio/gpio-ucb1400.c | 23 ++++++++++ > drivers/gpio/gpio-vt8500.c | 24 +++++++++++ > drivers/gpio/gpio-xilinx.c | 44 ++++++++++++++++++++ > drivers/pinctrl/pinctrl-at91.c | 29 +++++++++++++ I do not want to delay the process of inclusion for this patch series. But I have a little question on AT91 driver modification... > drivers/pinctrl/pinctrl-nomadik.c | 36 ++++++++++++++++ > 25 files changed, 887 insertions(+) [..] > --- linux-2.6.orig/drivers/pinctrl/pinctrl-at91.c > +++ linux-2.6/drivers/pinctrl/pinctrl-at91.c > @@ -49,6 +49,7 @@ struct at91_gpio_chip { > struct clk *clock; /* associated clock */ > struct irq_domain *domain; /* associated irq domain */ > struct at91_pinctrl_mux_ops *ops; /* ops */ > + unsigned long mask_cache; /* cached mask for block gpio */ > }; > > #define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip) > @@ -1125,6 +1126,32 @@ static void at91_gpio_set(struct gpio_ch > writel_relaxed(mask, pio + (val ? PIO_SODR : PIO_CODR)); > } > > +static unsigned long at91_gpio_get_block(struct gpio_chip *chip, > + unsigned long mask) > +{ > + struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip); > + void __iomem *pio = at91_gpio->regbase; > + u32 pdsr; > + > + pdsr = __raw_readl(pio + PIO_PDSR); Maybe you should use readl_relaxed() here as it is used in the at91_gpio_[get|set]() functions. > + return pdsr & mask; > +} > + > +static void at91_gpio_set_block(struct gpio_chip *chip, unsigned long mask, > + unsigned long val) > +{ > + struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip); > + void __iomem *pio = at91_gpio->regbase; > + > + /* Do synchronous data output with a single write access */ > + if (mask != at91_gpio->mask_cache) { > + at91_gpio->mask_cache = mask; > + __raw_writel(~mask, pio + PIO_OWDR); > + __raw_writel(mask, pio + PIO_OWER); > + } > + __raw_writel(val, pio + PIO_ODSR); Ditto. > +} > + > static int at91_gpio_direction_output(struct gpio_chip *chip, unsigned offset, > int val) > { > @@ -1435,8 +1462,10 @@ static struct gpio_chip at91_gpio_templa > .free = at91_gpio_free, > .direction_input = at91_gpio_direction_input, > .get = at91_gpio_get, > + .get_block = at91_gpio_get_block, > .direction_output = at91_gpio_direction_output, > .set = at91_gpio_set, > + .set_block = at91_gpio_set_block, > .to_irq = at91_gpio_to_irq, > .dbg_show = at91_gpio_dbg_show, > .can_sleep = 0, > --- linux-2.6.orig/drivers/pinctrl/pinctrl-nomadik.c > +++ linux-2.6/drivers/pinctrl/pinctrl-nomadik.c [..] Otherwise, seems ok to me ; for AT91 part: Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> Best regards, -- Nicolas Ferre
next prev parent reply other threads:[~2013-01-15 13:19 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-01-15 11:51 [PATCH RESEND 0/6 v13] gpio: Add block GPIO Roland Stigge 2013-01-15 11:51 ` Roland Stigge 2013-01-15 11:51 ` [PATCH RESEND 1/6 v13] gpio: Add a block GPIO API to gpiolib Roland Stigge 2013-01-15 11:51 ` Roland Stigge 2013-01-18 12:13 ` Stijn Devriendt 2013-01-18 12:13 ` Stijn Devriendt 2013-01-18 13:18 ` Roland Stigge 2013-01-18 13:18 ` Roland Stigge 2013-02-15 13:16 ` Grant Likely 2013-02-15 13:16 ` Grant Likely 2013-02-15 14:47 ` Grant Likely 2013-02-15 14:47 ` Grant Likely 2013-02-15 16:34 ` Grant Likely 2013-02-15 16:34 ` Grant Likely 2013-01-15 11:51 ` [PATCH RESEND 2/6 v13] gpio: Add sysfs support to block GPIO API Roland Stigge 2013-01-15 11:51 ` Roland Stigge 2013-02-15 21:50 ` Grant Likely 2013-02-15 21:50 ` Grant Likely 2013-01-15 11:51 ` [PATCH RESEND 3/6 v13] gpio: Add userland device interface to block GPIO Roland Stigge 2013-01-15 11:51 ` Roland Stigge 2013-01-15 11:51 ` [PATCH RESEND 4/6 v13] gpiolib: Fix default attributes for class Roland Stigge 2013-01-15 11:51 ` Roland Stigge 2013-02-15 22:55 ` Grant Likely 2013-02-15 22:55 ` Grant Likely 2013-01-15 11:51 ` [PATCH RESEND 5/6 v13] gpio: Add device tree support to block GPIO API Roland Stigge 2013-01-15 11:51 ` Roland Stigge 2013-01-15 11:51 ` [PATCH RESEND 6/6 v13] gpio: Add block gpio to several gpio drivers Roland Stigge 2013-01-15 11:51 ` Roland Stigge 2013-01-15 13:18 ` Nicolas Ferre [this message] 2013-01-15 13:18 ` Nicolas Ferre 2013-01-15 13:30 ` Roland Stigge 2013-01-15 13:30 ` Roland Stigge
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=50F5573D.4060007@atmel.com \ --to=nicolas.ferre@atmel.com \ --cc=broonie@opensource.wolfsonmicro.com \ --cc=daniel-gl@gmx.net \ --cc=grant.likely@secretlab.ca \ --cc=gregkh@linuxfoundation.org \ --cc=highguy@gmail.com \ --cc=jbe@pengutronix.de \ --cc=linus.walleij@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=plagnioj@jcrosoft.com \ --cc=rmallon@gmail.com \ --cc=sr@denx.de \ --cc=stigge@antcom.de \ --cc=tru@work-microwave.de \ --cc=w.sang@pengutronix.de \ --cc=wg@grandegger.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.