usb: host: xhci-plat: add support for the R-Car H2 and M2 xHCI controllers
Subsystems (4)
PATCH v5 1/1 usb: host: xhci-plat: add support for the R-Car H2 and M2 xHCI controllers
The R-Car H2 and M2 SoCs come with an xHCI controller that requires some specific initializations related to the firmware downloading and some specific registers. This patch adds the support for this special configuration as an xHCI quirk executed during probe and start.
Signed-off-by Yoshihiro Shimoda <[email protected]>
--- drivers/usb/host/Kconfig | 8 +++ drivers/usb/host/Makefile | 3 + drivers/usb/host/xhci-plat.c | 19 ++++++ drivers/usb/host/xhci-rcar.c | 148 ++++++++++++++++++++++++++++++++++++++++++ drivers/usb/host/xhci-rcar.h | 27 ++++++++ 5 files changed, 205 insertions(+) create mode 100644 drivers/usb/host/xhci-rcar.c create mode 100644 drivers/usb/host/xhci-rcar.h
drivers/usb/host/Kconfig +8 -0
@@ -37,6 +37,14 @@ config USB_XHCI_MVEBU Say 'Y' to enable the support for the xHCI host controller found in Marvell Armada 375/38x ARM SOCs. +config USB_XHCI_RCAR + tristate "xHCI support for Renesas R-Car SoCs" + select USB_XHCI_PLATFORM + depends on ARCH_SHMOBILE || COMPILE_TEST + ---help--- + Say 'Y' to enable the support for the xHCI host controller + found in Renesas R-Car ARM SoCs. + endif # USB_XHCI_HCD config USB_EHCI_HCD
drivers/usb/host/Makefile +3 -0
@@ -22,6 +22,9 @@ ifneq ($(CONFIG_USB_XHCI_PLATFORM), ) ifneq ($(CONFIG_USB_XHCI_MVEBU), ) xhci-hcd-y += xhci-mvebu.o endif +ifneq ($(CONFIG_USB_XHCI_RCAR), ) + xhci-hcd-y += xhci-rcar.o +endif endif obj-$(CONFIG_USB_WHCI_HCD) += whci/
drivers/usb/host/xhci-plat.c +19 -0
@@ -20,6 +20,7 @@#include "xhci.h" #include "xhci-mvebu.h" +#include "xhci-rcar.h" static void xhci_plat_quirks (struct device *dev,struct xhci_hcd *xhci) {
@@ -34,11 +35,27 @@ static void xhci_plat_quirks(struct device *dev, struct xhci_hcd *xhci)/* called during probe() after chip reset completes */ static int xhci_plat_setup (struct usb_hcd *hcd) { +struct device_node *of_node = hcd->self.controller->of_node; +int ret; + +if (of_device_is_compatible (of_node,"renesas,xhci-r8a7790" ) || +of_device_is_compatible (of_node,"renesas,xhci-r8a7791" )) { + ret =xhci_rcar_init_quirk (hcd); +if (ret) +return ret; + } +return xhci_gen_setup (hcd, xhci_plat_quirks); }static int xhci_plat_start (struct usb_hcd *hcd) { +struct device_node *of_node = hcd->self.controller->of_node; + +if (of_device_is_compatible (of_node,"renesas,xhci-r8a7790" ) || +of_device_is_compatible (of_node,"renesas,xhci-r8a7791" )) +xhci_rcar_start (hcd); +return xhci_run (hcd); }
@@ -270,6 +287,8 @@ static const struct of_device_id usb_xhci_of_match[] = { { .compatible = "xhci-platform" }, { .compatible = "marvell,armada-375-xhci"}, { .compatible = "marvell,armada-380-xhci"}, + { .compatible = "renesas,xhci-r8a7790"}, + { .compatible = "renesas,xhci-r8a7791"}, { }, };MODULE_DEVICE_TABLE (of, usb_xhci_of_match);
drivers/usb/host/xhci-rcar.c new file +148 -0
148 lines not on this page · raw message
drivers/usb/host/xhci-rcar.h new file +27 -0
@@ -0,0 +1,27 @@ +/* +* drivers/usb/host/xhci-rcar.h +* +* Copyright (C) 2014 Renesas Electronics Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* version 2 as published by the Free Software Foundation. +*/ + +#ifndef _XHCI_RCAR_H +#define _XHCI_RCAR_H + +#if IS_ENABLED (CONFIG_USB_XHCI_RCAR ) +void xhci_rcar_start (struct usb_hcd *hcd); +int xhci_rcar_init_quirk (struct usb_hcd *hcd); +#else +static inline void xhci_rcar_start (struct usb_hcd *hcd) +{ +} + +static inline int xhci_rcar_init_quirk (struct usb_hcd *hcd) +{ +return 0 ; +} +#endif +#endif /* _XHCI_RCAR_H */
Signature · 1 line
1.7.9.5