diff for duplicates of <1494976072.2728.5.camel@baylibre.com> diff --git a/a/1.txt b/N1/1.txt index b5eadf4..f936da6 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -5,40 +5,40 @@ On Fri, 2017-05-12 at 21:14 +0200, Heiner Kallweit wrote: > Note that IRQ_TYPE_EDGE_BOTH interrupts reserve two parent IRQ's, > one for each edge. > -> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> +> Signed-off-by: Heiner Kallweit <hkallweit1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > --- > v2: > - make the GPIO IRQ controller a separate driver > - several smaller improvements > --- -> ?drivers/pinctrl/Kconfig???????????????????|???1 + -> ?drivers/pinctrl/meson/Makefile????????????|???2 +- -> ?drivers/pinctrl/meson/pinctrl-meson-irq.c | 367 +> drivers/pinctrl/Kconfig | 1 + +> drivers/pinctrl/meson/Makefile | 2 +- +> drivers/pinctrl/meson/pinctrl-meson-irq.c | 367 > ++++++++++++++++++++++++++++++ -> ?drivers/pinctrl/meson/pinctrl-meson.c?????|???8 +- -> ?drivers/pinctrl/meson/pinctrl-meson.h?????|???1 + -> ?5 files changed, 377 insertions(+), 2 deletions(-) -> ?create mode 100644 drivers/pinctrl/meson/pinctrl-meson-irq.c +> drivers/pinctrl/meson/pinctrl-meson.c | 8 +- +> drivers/pinctrl/meson/pinctrl-meson.h | 1 + +> 5 files changed, 377 insertions(+), 2 deletions(-) +> create mode 100644 drivers/pinctrl/meson/pinctrl-meson-irq.c > > diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig > index 37af5e30..f8f401a0 100644 > --- a/drivers/pinctrl/Kconfig > +++ b/drivers/pinctrl/Kconfig > @@ -153,6 +153,7 @@ config PINCTRL_MESON -> ? select PINCONF -> ? select GENERIC_PINCONF -> ? select GPIOLIB +> select PINCONF +> select GENERIC_PINCONF +> select GPIOLIB > + select GPIOLIB_IRQCHIP -> ? select OF_GPIO -> ? select REGMAP_MMIO -> ? +> select OF_GPIO +> select REGMAP_MMIO +> > diff --git a/drivers/pinctrl/meson/Makefile b/drivers/pinctrl/meson/Makefile > index 27c5b512..827e416d 100644 > --- a/drivers/pinctrl/meson/Makefile > +++ b/drivers/pinctrl/meson/Makefile > @@ -1,3 +1,3 @@ -> ?obj-y += pinctrl-meson8.o pinctrl-meson8b.o -> ?obj-y += pinctrl-meson-gxbb.o pinctrl-meson-gxl.o +> obj-y += pinctrl-meson8.o pinctrl-meson8b.o +> obj-y += pinctrl-meson-gxbb.o pinctrl-meson-gxl.o > -obj-y += pinctrl-meson.o > +obj-y += pinctrl-meson.o pinctrl-meson-irq.o > diff --git a/drivers/pinctrl/meson/pinctrl-meson-irq.c @@ -51,8 +51,8 @@ On Fri, 2017-05-12 at 21:14 +0200, Heiner Kallweit wrote: > +/* > + * Amlogic Meson GPIO IRQ driver > + * -> + * Copyright 2017 Heiner Kallweit <hkallweit1@gmail.com> -> + * Based on a first version by Jerome Brunet <jbrunet@baylibre.com> +> + * Copyright 2017 Heiner Kallweit <hkallweit1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> +> + * Based on a first version by Jerome Brunet <jbrunet-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as @@ -151,21 +151,21 @@ On Fri, 2017-05-12 at 21:14 +0200, Heiner Kallweit wrote: > + int hwirq = meson_gpio_data_to_hwirq(gpio_irqdata); > + > + /* -> + ?* For some strange reason spurious interrupts created by the chip +> + * For some strange reason spurious interrupts created by the chip > when -> + ?* the interrupt source registers are written cause a deadlock here. -> + ?* generic_handle_irq calls handle_simple_irq which tries to get -> + ?* spinlock desc->lock. This interrupt handler is called whilst -> + ?* __setup_irq holds desc->lock. -> + ?* The deadlock means that both are running on the same CPU what +> + * the interrupt source registers are written cause a deadlock here. +> + * generic_handle_irq calls handle_simple_irq which tries to get +> + * spinlock desc->lock. This interrupt handler is called whilst +> + * __setup_irq holds desc->lock. +> + * The deadlock means that both are running on the same CPU what > should -> + ?* not happen as __setup_irq called raw_spin_lock_irqsave thus +> + * not happen as __setup_irq called raw_spin_lock_irqsave thus > disabling -> + ?* interrupts on this CPU. -> + ?* Work around this by ignoring interrupts in code protected by -> + ?* chip_bus_lock (__setup_irq/__free_irq for the respective GPIO +> + * interrupts on this CPU. +> + * Work around this by ignoring interrupts in code protected by +> + * chip_bus_lock (__setup_irq/__free_irq for the respective GPIO > hwirq). -> + ?*/ +> + */ The explanation for this seems a bit weak. Even your comment say it does not make sense. I've never seen this 'spurious irq' during my test. @@ -181,7 +181,7 @@ It be nice to have the beginning of an explanation before introducing such hack. > +} > + > +static int meson_gpio_alloc_irq_slot(struct irq_data *data, int num_slots, -> + ?????int *slots) +> + int *slots) > +{ > + int i, cnt = 0; > + @@ -240,7 +240,7 @@ It be nice to have the beginning of an explanation before introducing such hack. > + int shift = 8 * (idx % 4); > + > + regmap_update_bits(meson_gpio_irq_regmap, reg, 0xff << shift, -> + ???hwirq << shift); +> + hwirq << shift); > +} > + > +static void meson_gpio_irq_set_hwirq(struct irq_data *data, int hwirq) @@ -295,17 +295,17 @@ It be nice to have the beginning of an explanation before introducing such hack. > + val |= REG_EDGE_POL_LOW(slots[0]); > + > + regmap_update_bits(meson_gpio_irq_regmap, REG_EDGE_POL, -> + ???REG_EDGE_POL_MASK(slots[0]), val); +> + REG_EDGE_POL_MASK(slots[0]), val); > + > + /* -> + ?* The chip can create an interrupt for either rising or falling edge -> + ?* only. Therefore use two interrupts in case of IRQ_TYPE_EDGE_BOTH, -> + ?* first for falling edge and second one for rising edge. -> + ?*/ +> + * The chip can create an interrupt for either rising or falling edge +> + * only. Therefore use two interrupts in case of IRQ_TYPE_EDGE_BOTH, +> + * first for falling edge and second one for rising edge. +> + */ > + if (num_slots > 1) { > + val = REG_EDGE_POL_EDGE(slots[1]); > + regmap_update_bits(meson_gpio_irq_regmap, REG_EDGE_POL, -> + ???REG_EDGE_POL_MASK(slots[1]), val); +> + REG_EDGE_POL_MASK(slots[1]), val); > + } > + > + if (type & IRQ_TYPE_EDGE_BOTH) @@ -319,7 +319,7 @@ It be nice to have the beginning of an explanation before introducing such hack. > + if (ret) > + break; > + ret = request_irq(irq, meson_gpio_irq_handler, 0, -> + ??"GPIO parent", data); +> + "GPIO parent", data); It seems weird to use request_irq here. With the eventual reuqeste_irq in the consumer driver, wouldn't you end with to virq allocated for what is only on irq line really ? @@ -380,9 +380,9 @@ Isn't it showing that you should use domains and mappings ? > +} > + > +static const struct regmap_config meson_gpio_regmap_config = { -> + .reg_bits???????= 32, -> + .reg_stride?????= 4, -> + .val_bits???????= 32, +> + .reg_bits = 32, +> + .reg_stride = 4, +> + .val_bits = 32, > + .max_register = REG_FILTER_SEL, > +}; > + @@ -438,36 +438,36 @@ Isn't it showing that you should use domains and mappings ? > --- a/drivers/pinctrl/meson/pinctrl-meson.c > +++ b/drivers/pinctrl/meson/pinctrl-meson.c > @@ -62,6 +62,8 @@ -> ?#include "../pinctrl-utils.h" -> ?#include "pinctrl-meson.h" -> ? +> #include "../pinctrl-utils.h" +> #include "pinctrl-meson.h" +> > +struct irq_chip *meson_pinctrl_irq_chip; > + -> ?/** -> ? * meson_pinctrl_get_bank() - find the bank containing a given pin -> ? * +> /** +> * meson_pinctrl_get_bank() - find the bank containing a given pin +> * > @@ -551,7 +553,8 @@ static int meson_gpiolib_register(struct meson_pinctrl > *pc) -> ? return ret; -> ? } -> ? +> return ret; +> } +> > - return 0; > + return gpiochip_irqchip_add(&pc->chip, meson_pinctrl_irq_chip, 0, -> + ????handle_simple_irq, IRQ_TYPE_NONE); -> ?} -> ? -> ?static struct regmap_config meson_regmap_config = { +> + handle_simple_irq, IRQ_TYPE_NONE); +> } +> +> static struct regmap_config meson_regmap_config = { > @@ -640,6 +643,9 @@ static int meson_pinctrl_probe(struct platform_device > *pdev) -> ? struct meson_pinctrl *pc; -> ? int ret; -> ? +> struct meson_pinctrl *pc; +> int ret; +> > + if (!meson_pinctrl_irq_chip) > + return -EPROBE_DEFER; > + -> ? pc = devm_kzalloc(dev, sizeof(struct meson_pinctrl), GFP_KERNEL); -> ? if (!pc) -> ? return -ENOMEM; +> pc = devm_kzalloc(dev, sizeof(struct meson_pinctrl), GFP_KERNEL); +> if (!pc) +> return -ENOMEM; > diff --git a/drivers/pinctrl/meson/pinctrl-meson.h > b/drivers/pinctrl/meson/pinctrl-meson.h > index 40b56aff..16aab328 100644 @@ -475,10 +475,14 @@ Isn't it showing that you should use domains and mappings ? > +++ b/drivers/pinctrl/meson/pinctrl-meson.h > @@ -176,6 +176,7 @@ extern struct meson_pinctrl_data > meson_gxbb_periphs_pinctrl_data; -> ?extern struct meson_pinctrl_data meson_gxbb_aobus_pinctrl_data; -> ?extern struct meson_pinctrl_data meson_gxl_periphs_pinctrl_data; -> ?extern struct meson_pinctrl_data meson_gxl_aobus_pinctrl_data; +> extern struct meson_pinctrl_data meson_gxbb_aobus_pinctrl_data; +> extern struct meson_pinctrl_data meson_gxl_periphs_pinctrl_data; +> extern struct meson_pinctrl_data meson_gxl_aobus_pinctrl_data; > +extern struct irq_chip *meson_pinctrl_irq_chip; -> ? -> ?struct meson_bank *meson_pinctrl_get_bank(const struct meson_pinctrl *pc, -> ? ??unsigned int pin); +> +> struct meson_bank *meson_pinctrl_get_bank(const struct meson_pinctrl *pc, +> unsigned int pin); +-- +To unsubscribe from this list: send the line "unsubscribe devicetree" in +the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org +More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/a/content_digest b/N1/content_digest index b4cdfa9..71d0556 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,9 +1,20 @@ "ref\036164ed8-aa59-2a77-b7fc-9adce03a2fc1@gmail.com\0" "ref\0dc23b800-fe69-8143-6367-d3cd801cd6db@gmail.com\0" - "From\0jbrunet@baylibre.com (Jerome Brunet)\0" - "Subject\0[PATCH v2 6/6] pintrl: meson: add support for GPIO interrupts\0" + "ref\0dc23b800-fe69-8143-6367-d3cd801cd6db-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org\0" + "From\0Jerome Brunet <jbrunet-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>\0" + "Subject\0Re: [PATCH v2 6/6] pintrl: meson: add support for GPIO interrupts\0" "Date\0Wed, 17 May 2017 01:07:52 +0200\0" - "To\0linus-amlogic@lists.infradead.org\0" + "To\0Heiner Kallweit <hkallweit1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>" + Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org> + Marc Zyngier <marc.zyngier-5wv7dgnIgG8@public.gmane.org> + Linus Walleij <linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> + Kevin Hilman <khilman-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> + " Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>\0" + "Cc\0devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" + linux-amlogic-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org + linux-gpio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org + thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> + " Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>\0" "\00:1\0" "b\0" "On Fri, 2017-05-12 at 21:14 +0200, Heiner Kallweit wrote:\n" @@ -13,40 +24,40 @@ "> Note that IRQ_TYPE_EDGE_BOTH interrupts reserve two parent IRQ's,\n" "> one for each edge.\n" "> \n" - "> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>\n" + "> Signed-off-by: Heiner Kallweit <hkallweit1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>\n" "> ---\n" "> v2:\n" "> - make the GPIO IRQ controller a separate driver\n" "> - several smaller improvements\n" "> ---\n" - "> ?drivers/pinctrl/Kconfig???????????????????|???1 +\n" - "> ?drivers/pinctrl/meson/Makefile????????????|???2 +-\n" - "> ?drivers/pinctrl/meson/pinctrl-meson-irq.c | 367\n" + "> \302\240drivers/pinctrl/Kconfig\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\240\302\2401 +\n" + "> \302\240drivers/pinctrl/meson/Makefile\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\240\302\2402 +-\n" + "> \302\240drivers/pinctrl/meson/pinctrl-meson-irq.c | 367\n" "> ++++++++++++++++++++++++++++++\n" - "> ?drivers/pinctrl/meson/pinctrl-meson.c?????|???8 +-\n" - "> ?drivers/pinctrl/meson/pinctrl-meson.h?????|???1 +\n" - "> ?5 files changed, 377 insertions(+), 2 deletions(-)\n" - "> ?create mode 100644 drivers/pinctrl/meson/pinctrl-meson-irq.c\n" + "> \302\240drivers/pinctrl/meson/pinctrl-meson.c\302\240\302\240\302\240\302\240\302\240|\302\240\302\240\302\2408 +-\n" + "> \302\240drivers/pinctrl/meson/pinctrl-meson.h\302\240\302\240\302\240\302\240\302\240|\302\240\302\240\302\2401 +\n" + "> \302\2405 files changed, 377 insertions(+), 2 deletions(-)\n" + "> \302\240create mode 100644 drivers/pinctrl/meson/pinctrl-meson-irq.c\n" "> \n" "> diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig\n" "> index 37af5e30..f8f401a0 100644\n" "> --- a/drivers/pinctrl/Kconfig\n" "> +++ b/drivers/pinctrl/Kconfig\n" "> @@ -153,6 +153,7 @@ config PINCTRL_MESON\n" - "> ?\tselect PINCONF\n" - "> ?\tselect GENERIC_PINCONF\n" - "> ?\tselect GPIOLIB\n" + "> \302\240\tselect PINCONF\n" + "> \302\240\tselect GENERIC_PINCONF\n" + "> \302\240\tselect GPIOLIB\n" "> +\tselect GPIOLIB_IRQCHIP\n" - "> ?\tselect OF_GPIO\n" - "> ?\tselect REGMAP_MMIO\n" - "> ?\n" + "> \302\240\tselect OF_GPIO\n" + "> \302\240\tselect REGMAP_MMIO\n" + "> \302\240\n" "> diff --git a/drivers/pinctrl/meson/Makefile b/drivers/pinctrl/meson/Makefile\n" "> index 27c5b512..827e416d 100644\n" "> --- a/drivers/pinctrl/meson/Makefile\n" "> +++ b/drivers/pinctrl/meson/Makefile\n" "> @@ -1,3 +1,3 @@\n" - "> ?obj-y\t+= pinctrl-meson8.o pinctrl-meson8b.o\n" - "> ?obj-y\t+= pinctrl-meson-gxbb.o pinctrl-meson-gxl.o\n" + "> \302\240obj-y\t+= pinctrl-meson8.o pinctrl-meson8b.o\n" + "> \302\240obj-y\t+= pinctrl-meson-gxbb.o pinctrl-meson-gxl.o\n" "> -obj-y\t+= pinctrl-meson.o\n" "> +obj-y\t+= pinctrl-meson.o pinctrl-meson-irq.o\n" "> diff --git a/drivers/pinctrl/meson/pinctrl-meson-irq.c\n" @@ -59,8 +70,8 @@ "> +/*\n" "> + * Amlogic Meson GPIO IRQ driver\n" "> + *\n" - "> + * Copyright 2017 Heiner Kallweit <hkallweit1@gmail.com>\n" - "> + * Based on a first version by Jerome Brunet <jbrunet@baylibre.com>\n" + "> + * Copyright 2017 Heiner Kallweit <hkallweit1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>\n" + "> + * Based on a first version by Jerome Brunet <jbrunet-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>\n" "> + *\n" "> + * This program is free software; you can redistribute it and/or\n" "> + * modify it under the terms of the GNU General Public License as\n" @@ -159,21 +170,21 @@ "> +\tint hwirq = meson_gpio_data_to_hwirq(gpio_irqdata);\n" "> +\n" "> +\t/*\n" - "> +\t?* For some strange reason spurious interrupts created by the chip\n" + "> +\t\302\240* For some strange reason spurious interrupts created by the chip\n" "> when\n" - "> +\t?* the interrupt source registers are written cause a deadlock here.\n" - "> +\t?* generic_handle_irq calls handle_simple_irq which tries to get\n" - "> +\t?* spinlock desc->lock. This interrupt handler is called whilst\n" - "> +\t?* __setup_irq holds desc->lock.\n" - "> +\t?* The deadlock means that both are running on the same CPU what\n" + "> +\t\302\240* the interrupt source registers are written cause a deadlock here.\n" + "> +\t\302\240* generic_handle_irq calls handle_simple_irq which tries to get\n" + "> +\t\302\240* spinlock desc->lock. This interrupt handler is called whilst\n" + "> +\t\302\240* __setup_irq holds desc->lock.\n" + "> +\t\302\240* The deadlock means that both are running on the same CPU what\n" "> should\n" - "> +\t?* not happen as __setup_irq called raw_spin_lock_irqsave thus\n" + "> +\t\302\240* not happen as __setup_irq called raw_spin_lock_irqsave thus\n" "> disabling\n" - "> +\t?* interrupts on this CPU.\n" - "> +\t?* Work around this by ignoring interrupts in code protected by\n" - "> +\t?* chip_bus_lock (__setup_irq/__free_irq for the respective GPIO\n" + "> +\t\302\240* interrupts on this CPU.\n" + "> +\t\302\240* Work around this by ignoring interrupts in code protected by\n" + "> +\t\302\240* chip_bus_lock (__setup_irq/__free_irq for the respective GPIO\n" "> hwirq).\n" - "> +\t?*/\n" + "> +\t\302\240*/\n" "\n" "The explanation for this seems a bit weak. Even your comment say it does not\n" "make sense. I've never seen this 'spurious irq' during my test.\n" @@ -189,7 +200,7 @@ "> +}\n" "> +\n" "> +static int meson_gpio_alloc_irq_slot(struct irq_data *data, int num_slots,\n" - "> +\t\t\t\t?????int *slots)\n" + "> +\t\t\t\t\302\240\302\240\302\240\302\240\302\240int *slots)\n" "> +{\n" "> +\tint i, cnt = 0;\n" "> +\n" @@ -248,7 +259,7 @@ "> +\tint shift = 8 * (idx % 4);\n" "> +\n" "> +\tregmap_update_bits(meson_gpio_irq_regmap, reg, 0xff << shift,\n" - "> +\t\t\t???hwirq << shift);\n" + "> +\t\t\t\302\240\302\240\302\240hwirq << shift);\n" "> +}\n" "> +\n" "> +static void meson_gpio_irq_set_hwirq(struct irq_data *data, int hwirq)\n" @@ -303,17 +314,17 @@ "> +\t\tval |= REG_EDGE_POL_LOW(slots[0]);\n" "> +\n" "> +\tregmap_update_bits(meson_gpio_irq_regmap, REG_EDGE_POL,\n" - "> +\t\t\t???REG_EDGE_POL_MASK(slots[0]), val);\n" + "> +\t\t\t\302\240\302\240\302\240REG_EDGE_POL_MASK(slots[0]), val);\n" "> +\n" "> +\t/*\n" - "> +\t?* The chip can create an interrupt for either rising or falling edge\n" - "> +\t?* only. Therefore use two interrupts in case of IRQ_TYPE_EDGE_BOTH,\n" - "> +\t?* first for falling edge and second one for rising edge.\n" - "> +\t?*/\n" + "> +\t\302\240* The chip can create an interrupt for either rising or falling edge\n" + "> +\t\302\240* only. Therefore use two interrupts in case of IRQ_TYPE_EDGE_BOTH,\n" + "> +\t\302\240* first for falling edge and second one for rising edge.\n" + "> +\t\302\240*/\n" "> +\tif (num_slots > 1) {\n" "> +\t\tval = REG_EDGE_POL_EDGE(slots[1]);\n" "> +\t\tregmap_update_bits(meson_gpio_irq_regmap, REG_EDGE_POL,\n" - "> +\t\t\t\t???REG_EDGE_POL_MASK(slots[1]), val);\n" + "> +\t\t\t\t\302\240\302\240\302\240REG_EDGE_POL_MASK(slots[1]), val);\n" "> +\t}\n" "> +\n" "> +\tif (type & IRQ_TYPE_EDGE_BOTH)\n" @@ -327,7 +338,7 @@ "> +\t\tif (ret)\n" "> +\t\t\tbreak;\n" "> +\t\tret = request_irq(irq, meson_gpio_irq_handler, 0,\n" - "> +\t\t\t\t??\"GPIO parent\", data);\n" + "> +\t\t\t\t\302\240\302\240\"GPIO parent\", data);\n" "It seems weird to use request_irq here. With the eventual reuqeste_irq in the\n" "consumer driver, wouldn't you end with to virq allocated for what is only on irq\n" "line really ?\n" @@ -388,9 +399,9 @@ "> +}\n" "> +\n" "> +static const struct regmap_config meson_gpio_regmap_config = {\n" - "> +\t.reg_bits???????= 32,\n" - "> +\t.reg_stride?????= 4,\n" - "> +\t.val_bits???????= 32,\n" + "> +\t.reg_bits\302\240\302\240\302\240\302\240\302\240\302\240\302\240= 32,\n" + "> +\t.reg_stride\302\240\302\240\302\240\302\240\302\240= 4,\n" + "> +\t.val_bits\302\240\302\240\302\240\302\240\302\240\302\240\302\240= 32,\n" "> +\t.max_register\t= REG_FILTER_SEL,\n" "> +};\n" "> +\n" @@ -446,36 +457,36 @@ "> --- a/drivers/pinctrl/meson/pinctrl-meson.c\n" "> +++ b/drivers/pinctrl/meson/pinctrl-meson.c\n" "> @@ -62,6 +62,8 @@\n" - "> ?#include \"../pinctrl-utils.h\"\n" - "> ?#include \"pinctrl-meson.h\"\n" - "> ?\n" + "> \302\240#include \"../pinctrl-utils.h\"\n" + "> \302\240#include \"pinctrl-meson.h\"\n" + "> \302\240\n" "> +struct irq_chip *meson_pinctrl_irq_chip;\n" "> +\n" - "> ?/**\n" - "> ? * meson_pinctrl_get_bank() - find the bank containing a given pin\n" - "> ? *\n" + "> \302\240/**\n" + "> \302\240 * meson_pinctrl_get_bank() - find the bank containing a given pin\n" + "> \302\240 *\n" "> @@ -551,7 +553,8 @@ static int meson_gpiolib_register(struct meson_pinctrl\n" "> *pc)\n" - "> ?\t\treturn ret;\n" - "> ?\t}\n" - "> ?\n" + "> \302\240\t\treturn ret;\n" + "> \302\240\t}\n" + "> \302\240\n" "> -\treturn 0;\n" "> +\treturn gpiochip_irqchip_add(&pc->chip, meson_pinctrl_irq_chip, 0,\n" - "> +\t\t\t\t????handle_simple_irq, IRQ_TYPE_NONE);\n" - "> ?}\n" - "> ?\n" - "> ?static struct regmap_config meson_regmap_config = {\n" + "> +\t\t\t\t\302\240\302\240\302\240\302\240handle_simple_irq, IRQ_TYPE_NONE);\n" + "> \302\240}\n" + "> \302\240\n" + "> \302\240static struct regmap_config meson_regmap_config = {\n" "> @@ -640,6 +643,9 @@ static int meson_pinctrl_probe(struct platform_device\n" "> *pdev)\n" - "> ?\tstruct meson_pinctrl *pc;\n" - "> ?\tint ret;\n" - "> ?\n" + "> \302\240\tstruct meson_pinctrl *pc;\n" + "> \302\240\tint ret;\n" + "> \302\240\n" "> +\tif (!meson_pinctrl_irq_chip)\n" "> +\t\treturn -EPROBE_DEFER;\n" "> +\n" - "> ?\tpc = devm_kzalloc(dev, sizeof(struct meson_pinctrl), GFP_KERNEL);\n" - "> ?\tif (!pc)\n" - "> ?\t\treturn -ENOMEM;\n" + "> \302\240\tpc = devm_kzalloc(dev, sizeof(struct meson_pinctrl), GFP_KERNEL);\n" + "> \302\240\tif (!pc)\n" + "> \302\240\t\treturn -ENOMEM;\n" "> diff --git a/drivers/pinctrl/meson/pinctrl-meson.h\n" "> b/drivers/pinctrl/meson/pinctrl-meson.h\n" "> index 40b56aff..16aab328 100644\n" @@ -483,12 +494,16 @@ "> +++ b/drivers/pinctrl/meson/pinctrl-meson.h\n" "> @@ -176,6 +176,7 @@ extern struct meson_pinctrl_data\n" "> meson_gxbb_periphs_pinctrl_data;\n" - "> ?extern struct meson_pinctrl_data meson_gxbb_aobus_pinctrl_data;\n" - "> ?extern struct meson_pinctrl_data meson_gxl_periphs_pinctrl_data;\n" - "> ?extern struct meson_pinctrl_data meson_gxl_aobus_pinctrl_data;\n" + "> \302\240extern struct meson_pinctrl_data meson_gxbb_aobus_pinctrl_data;\n" + "> \302\240extern struct meson_pinctrl_data meson_gxl_periphs_pinctrl_data;\n" + "> \302\240extern struct meson_pinctrl_data meson_gxl_aobus_pinctrl_data;\n" "> +extern struct irq_chip *meson_pinctrl_irq_chip;\n" - "> ?\n" - "> ?struct meson_bank *meson_pinctrl_get_bank(const struct meson_pinctrl *pc,\n" - "> ?\t\t\t\t\t??unsigned int pin);" + "> \302\240\n" + "> \302\240struct meson_bank *meson_pinctrl_get_bank(const struct meson_pinctrl *pc,\n" + "> \302\240\t\t\t\t\t\302\240\302\240unsigned int pin);\n" + "--\n" + "To unsubscribe from this list: send the line \"unsubscribe devicetree\" in\n" + "the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org\n" + More majordomo info at http://vger.kernel.org/majordomo-info.html -1645c3bcd58897ad460700caef2e04660cdc59cbf45a975831e46e1481f55578 +8822b1416477e61afb5e39c19029931bd2d97bd50bbd6a72b1b6bf801784c574
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.