From: Linus Walleij <linus.walleij@linaro.org>
To: Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
linux-usb <linux-usb@vger.kernel.org>
Cc: linux-pci <linux-pci@vger.kernel.org>,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
<devicetree@vger.kernel.org>,
"open list:GPIO SUBSYSTEM" <linux-gpio@vger.kernel.org>,
Rob Herring <robh+dt@kernel.org>,
Bartosz Golaszewski <bgolaszewski@baylibre.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Bjorn Helgaas <bhelgaas@google.com>
Subject: Re: [RFC PATCH 3/3] gpio: ej1x8: Add GPIO driver for Etron Tech Inc. EJ168/EJ188/EJ198
Date: Wed, 7 Oct 2020 11:29:10 +0200 [thread overview]
Message-ID: <CACRpkdZo-U_cAhbKb4E+d+p+5FenXkGYW0RXxyk4M5uyEPCpzw@mail.gmail.com> (raw)
In-Reply-To: <20201004162908.3216898-4-martin.blumenstingl@googlemail.com>
Hi Martin,
thanks for your patch!
As noted on the earlier patches I think this should be folded into the
existing XHCI USB driver in drivers/usb/host/xhci-pci.c or, if that
gets messy, as a separate bolt-on, something like
xhci-pci-gpio.[c|h] in the drivers/usb/host/* directory.
You can use a Kconfig symbol for the GPIO portions or not.
On Sun, Oct 4, 2020 at 8:00 PM Martin Blumenstingl
<martin.blumenstingl@googlemail.com> wrote:
> EJ168/EJ188/EJ198 are USB xHCI controllers. They also contain four GPIO
> lines which are used on some systems to toggle an LED based on whether a
> USB device is connected.
>
> There is no public datasheet available for this hardware. All
> information in this driver is taken from the
> "F9K1115v2.03.97-GPL-10.2.85-20140313" GPL code dump of the Belkin
> F9K1115v2. This board comes with an EJ168 USB xHCI controller and the
> USB 3.0 LED is connected to one of the GPIOs. Inside the GPL source
> archive the related code can be found in:
> linux/kernels/mips-linux-2.6.31/drivers/usb/host/etxhci-pci.c
>
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
(...)
> +config GPIO_EJ1X8
> + tristate "Etron Tech Inc. EJ168/EJ188/EJ198 GPIO driver"
> + depends on OF_GPIO && PCI
It is fine to just select GPIOLIB if you want this to always be
compiled-in (if the USB maintainers agree).
> + help
> + Selecting this option will enable the GPIO pins present on
> + the Etron Tech Inc. EJ168/EJ188/EJ198 USB xHCI controllers.
> +
> + If unsure, say N.
(...)
> +#define EJ1X8_GPIO_INIT 0x44
> +#define EJ1X8_GPIO_WRITE 0x68
> +#define EJ1X8_GPIO_READ 0x6c
> +
> +#define EJ1X8_GPIO_CTRL 0x18005020
> +#define EJ1X8_GPIO_CTRL_READ_ALL_MASK GENMASK(7, 0)
> +#define EJ1X8_GPIO_CTRL_WRITE_ALL_MASK GENMASK(23, 16)
> +#define EJ1X8_GPIO_CTRL_OUT_LOW 0x0
> +#define EJ1X8_GPIO_CTRL_OUT_HIGH 0x1
> +#define EJ1X8_GPIO_CTRL_IN 0x2
> +#define EJ1X8_GPIO_CTRL_MASK 0x3
> +
> +#define EJ1X8_GPIO_MODE 0x18005022
> +#define EJ1X8_GPIO_MODE_READ_WRITE_ALL_MASK GENMASK(23, 16)
> +#define EJ1X8_GPIO_MODE_DISABLE 0x0
> +#define EJ1X8_GPIO_MODE_ENABLE 0x1
> +#define EJ1X8_GPIO_MODE_MASK 0x3
Nice that you got all of this out of reverse-engineering!
> +static LIST_HEAD(ej1x8_gpios);
This should not be necessary. Tie the GPIO state into the PCI device
driver state, possibly using some #ifdefs.
> +static u8 ej1x8_gpio_shift(unsigned int gpio, u8 mask)
> +{
> + return (gpio * fls(mask));
> +}
> +
> +static u8 ej1x8_gpio_mask(unsigned int gpio, u8 mask)
> +{
> + return mask << ej1x8_gpio_shift(gpio, mask);
> +}
This looks a bit like regmap but trying to use regmap for this
would probably be overengineering.
Looking at the code I get annoyed that it uses the config space to
manipulate the GPIOs, else you could have used GPIO_GENERIC
but now you can't, how typical.
Other than that the code looks nice, but fold it into the USB
host driver somehow unless there is a compelling argument
as to why not.
Yours,
Linus Walleij
next prev parent reply other threads:[~2020-10-07 9:29 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-04 16:29 [RFC PATCH 0/3] GPIO support on the Etron EJ168/EJ188/EJ198 xHCI controllers Martin Blumenstingl
2020-10-04 16:29 ` [RFC PATCH 1/3] PCI: Add the IDs for Etron EJ168 and EJ188 Martin Blumenstingl
2020-10-07 9:14 ` Linus Walleij
2020-10-07 19:45 ` Martin Blumenstingl
2020-11-03 22:32 ` Bjorn Helgaas
2020-10-04 16:29 ` [RFC PATCH 2/3] dt-bindings: gpio: Add binding documentation for Etron EJ168/EJ188/EJ198 Martin Blumenstingl
2020-10-06 21:25 ` Rob Herring
2020-10-07 19:57 ` Martin Blumenstingl
2020-10-07 9:19 ` Linus Walleij
2020-10-07 19:57 ` Martin Blumenstingl
2020-10-13 13:27 ` Linus Walleij
2020-10-14 12:43 ` Rob Herring
2020-10-16 20:52 ` Martin Blumenstingl
2020-10-29 17:11 ` Linus Walleij
2020-10-04 16:29 ` [RFC PATCH 3/3] gpio: ej1x8: Add GPIO driver for Etron Tech Inc. EJ168/EJ188/EJ198 Martin Blumenstingl
2020-10-07 9:29 ` Linus Walleij [this message]
2020-10-07 19:44 ` Martin Blumenstingl
2020-12-21 15:28 ` Martin Blumenstingl
2020-12-31 0:15 ` Martin Blumenstingl
2021-01-05 22:23 ` Linus Walleij
2021-01-06 15:17 ` Martin Blumenstingl
2021-01-07 10:36 ` Linus Walleij
2020-10-07 9:17 ` [RFC PATCH 0/3] GPIO support on the Etron EJ168/EJ188/EJ198 xHCI controllers Linus Walleij
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=CACRpkdZo-U_cAhbKb4E+d+p+5FenXkGYW0RXxyk4M5uyEPCpzw@mail.gmail.com \
--to=linus.walleij@linaro.org \
--cc=bgolaszewski@baylibre.com \
--cc=bhelgaas@google.com \
--cc=devicetree@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=martin.blumenstingl@googlemail.com \
--cc=robh+dt@kernel.org \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).