mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 01:11:14 +00:00
e7bfda2c24
This change makes the names of Broadcom targets consistent by using the common notation based on SoC/CPU ID (which is used internally anyway), bcmXXXX instead of brcmXXXX. This is even used for target TITLE in make menuconfig already, only the short target name used brcm so far. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
137 lines
4.0 KiB
Diff
137 lines
4.0 KiB
Diff
From e38f13bd6408769c0b565bb1079024f496eee121 Mon Sep 17 00:00:00 2001
|
|
From: Florian Fainelli <florian@openwrt.org>
|
|
Date: Mon, 28 Jan 2013 20:06:27 +0100
|
|
Subject: [PATCH 09/11] MIPS: BCM63XX: add support for the on-chip EHCI
|
|
controller
|
|
|
|
Broadcom BCM63XX SoCs include an on-chip EHCI controller which can be
|
|
driven by the generic ehci-platform driver by using specific power
|
|
on/off/suspend callbacks to manage clocks and hardware specific
|
|
configuration.
|
|
|
|
Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
|
|
Signed-off-by: Florian Fainelli <florian@openwrt.org>
|
|
---
|
|
arch/mips/bcm63xx/Makefile | 2 +-
|
|
arch/mips/bcm63xx/dev-usb-ehci.c | 92 ++++++++++++++++++++
|
|
.../asm/mach-bcm63xx/bcm63xx_dev_usb_ehci.h | 6 ++
|
|
3 files changed, 99 insertions(+), 1 deletion(-)
|
|
create mode 100644 arch/mips/bcm63xx/dev-usb-ehci.c
|
|
create mode 100644 arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ehci.h
|
|
|
|
--- a/arch/mips/bcm63xx/Makefile
|
|
+++ b/arch/mips/bcm63xx/Makefile
|
|
@@ -2,7 +2,7 @@
|
|
obj-y += clk.o cpu.o cs.o gpio.o irq.o nvram.o prom.o reset.o \
|
|
setup.o timer.o dev-enet.o dev-flash.o dev-pcmcia.o \
|
|
dev-rng.o dev-spi.o dev-hsspi.o dev-uart.o dev-wdt.o \
|
|
- dev-usb-ohci.o dev-usb-usbd.o usb-common.o
|
|
+ dev-usb-ehci.o dev-usb-ohci.o dev-usb-usbd.o usb-common.o
|
|
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
|
|
|
|
obj-y += boards/
|
|
--- /dev/null
|
|
+++ b/arch/mips/bcm63xx/dev-usb-ehci.c
|
|
@@ -0,0 +1,92 @@
|
|
+/*
|
|
+ * This file is subject to the terms and conditions of the GNU General Public
|
|
+ * License. See the file "COPYING" in the main directory of this archive
|
|
+ * for more details.
|
|
+ *
|
|
+ * Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr>
|
|
+ * Copyright (C) 2013 Florian Fainelli <florian@openwrt.org>
|
|
+ */
|
|
+
|
|
+#include <linux/init.h>
|
|
+#include <linux/kernel.h>
|
|
+#include <linux/platform_device.h>
|
|
+#include <linux/clk.h>
|
|
+#include <linux/delay.h>
|
|
+#include <linux/usb/ehci_pdriver.h>
|
|
+#include <linux/dma-mapping.h>
|
|
+
|
|
+#include <bcm63xx_cpu.h>
|
|
+#include <bcm63xx_regs.h>
|
|
+#include <bcm63xx_io.h>
|
|
+#include <bcm63xx_usb_priv.h>
|
|
+#include <bcm63xx_dev_usb_ehci.h>
|
|
+
|
|
+static struct resource ehci_resources[] = {
|
|
+ {
|
|
+ .start = -1, /* filled at runtime */
|
|
+ .end = -1, /* filled at runtime */
|
|
+ .flags = IORESOURCE_MEM,
|
|
+ },
|
|
+ {
|
|
+ .start = -1, /* filled at runtime */
|
|
+ .flags = IORESOURCE_IRQ,
|
|
+ },
|
|
+};
|
|
+
|
|
+static u64 ehci_dmamask = DMA_BIT_MASK(32);
|
|
+
|
|
+static struct clk *usb_host_clock;
|
|
+
|
|
+static int bcm63xx_ehci_power_on(struct platform_device *pdev)
|
|
+{
|
|
+ usb_host_clock = clk_get(&pdev->dev, "usbh");
|
|
+ if (IS_ERR_OR_NULL(usb_host_clock))
|
|
+ return -ENODEV;
|
|
+
|
|
+ clk_prepare_enable(usb_host_clock);
|
|
+
|
|
+ bcm63xx_usb_priv_ehci_cfg_set();
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static void bcm63xx_ehci_power_off(struct platform_device *pdev)
|
|
+{
|
|
+ if (!IS_ERR_OR_NULL(usb_host_clock)) {
|
|
+ clk_disable_unprepare(usb_host_clock);
|
|
+ clk_put(usb_host_clock);
|
|
+ }
|
|
+}
|
|
+
|
|
+static struct usb_ehci_pdata bcm63xx_ehci_pdata = {
|
|
+ .big_endian_desc = 1,
|
|
+ .big_endian_mmio = 1,
|
|
+ .power_on = bcm63xx_ehci_power_on,
|
|
+ .power_off = bcm63xx_ehci_power_off,
|
|
+ .power_suspend = bcm63xx_ehci_power_off,
|
|
+};
|
|
+
|
|
+static struct platform_device bcm63xx_ehci_device = {
|
|
+ .name = "ehci-platform",
|
|
+ .id = -1,
|
|
+ .num_resources = ARRAY_SIZE(ehci_resources),
|
|
+ .resource = ehci_resources,
|
|
+ .dev = {
|
|
+ .platform_data = &bcm63xx_ehci_pdata,
|
|
+ .dma_mask = &ehci_dmamask,
|
|
+ .coherent_dma_mask = DMA_BIT_MASK(32),
|
|
+ },
|
|
+};
|
|
+
|
|
+int __init bcm63xx_ehci_register(void)
|
|
+{
|
|
+ if (!BCMCPU_IS_6328() && !BCMCPU_IS_6358() && !BCMCPU_IS_6362() && !BCMCPU_IS_6368())
|
|
+ return 0;
|
|
+
|
|
+ ehci_resources[0].start = bcm63xx_regset_address(RSET_EHCI0);
|
|
+ ehci_resources[0].end = ehci_resources[0].start;
|
|
+ ehci_resources[0].end += RSET_EHCI_SIZE - 1;
|
|
+ ehci_resources[1].start = bcm63xx_get_irq_number(IRQ_EHCI0);
|
|
+
|
|
+ return platform_device_register(&bcm63xx_ehci_device);
|
|
+}
|
|
--- /dev/null
|
|
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ehci.h
|
|
@@ -0,0 +1,6 @@
|
|
+#ifndef BCM63XX_DEV_USB_EHCI_H_
|
|
+#define BCM63XX_DEV_USB_EHCI_H_
|
|
+
|
|
+int bcm63xx_ehci_register(void);
|
|
+
|
|
+#endif /* BCM63XX_DEV_USB_EHCI_H_ */
|