mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-26 00:41:17 +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>
139 lines
4.0 KiB
Diff
139 lines
4.0 KiB
Diff
From 30d22baef255c99a12c4858ce4ab0d45f0d8c9ae Mon Sep 17 00:00:00 2001
|
|
From: Florian Fainelli <florian@openwrt.org>
|
|
Date: Mon, 28 Jan 2013 20:06:24 +0100
|
|
Subject: [PATCH 06/11] MIPS: BCM63XX: add support for the on-chip OHCI
|
|
controller
|
|
|
|
Broadcom BCM63XX SoCs include an on-chip OHCI controller which can be
|
|
driven by the ohci-platform generic driver by using specific power
|
|
on/off/suspend callback 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-ohci.c | 94 ++++++++++++++++++++
|
|
.../asm/mach-bcm63xx/bcm63xx_dev_usb_ohci.h | 6 ++
|
|
3 files changed, 101 insertions(+), 1 deletion(-)
|
|
create mode 100644 arch/mips/bcm63xx/dev-usb-ohci.c
|
|
create mode 100644 arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ohci.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-usbd.o usb-common.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-ohci.c
|
|
@@ -0,0 +1,94 @@
|
|
+/*
|
|
+ * 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/usb/ohci_pdriver.h>
|
|
+#include <linux/dma-mapping.h>
|
|
+#include <linux/clk.h>
|
|
+#include <linux/delay.h>
|
|
+
|
|
+#include <bcm63xx_cpu.h>
|
|
+#include <bcm63xx_regs.h>
|
|
+#include <bcm63xx_io.h>
|
|
+#include <bcm63xx_usb_priv.h>
|
|
+#include <bcm63xx_dev_usb_ohci.h>
|
|
+
|
|
+static struct resource ohci_resources[] = {
|
|
+ {
|
|
+ .start = -1, /* filled at runtime */
|
|
+ .end = -1, /* filled at runtime */
|
|
+ .flags = IORESOURCE_MEM,
|
|
+ },
|
|
+ {
|
|
+ .start = -1, /* filled at runtime */
|
|
+ .flags = IORESOURCE_IRQ,
|
|
+ },
|
|
+};
|
|
+
|
|
+static u64 ohci_dmamask = DMA_BIT_MASK(32);
|
|
+
|
|
+static struct clk *usb_host_clock;
|
|
+
|
|
+static int bcm63xx_ohci_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_ohci_cfg_set();
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static void bcm63xx_ohci_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_ohci_pdata bcm63xx_ohci_pdata = {
|
|
+ .big_endian_desc = 1,
|
|
+ .big_endian_mmio = 1,
|
|
+ .no_big_frame_no = 1,
|
|
+ .num_ports = 1,
|
|
+ .power_on = bcm63xx_ohci_power_on,
|
|
+ .power_off = bcm63xx_ohci_power_off,
|
|
+ .power_suspend = bcm63xx_ohci_power_off,
|
|
+};
|
|
+
|
|
+static struct platform_device bcm63xx_ohci_device = {
|
|
+ .name = "ohci-platform",
|
|
+ .id = -1,
|
|
+ .num_resources = ARRAY_SIZE(ohci_resources),
|
|
+ .resource = ohci_resources,
|
|
+ .dev = {
|
|
+ .platform_data = &bcm63xx_ohci_pdata,
|
|
+ .dma_mask = &ohci_dmamask,
|
|
+ .coherent_dma_mask = DMA_BIT_MASK(32),
|
|
+ },
|
|
+};
|
|
+
|
|
+int __init bcm63xx_ohci_register(void)
|
|
+{
|
|
+ if (BCMCPU_IS_6345() || BCMCPU_IS_6338())
|
|
+ return -ENODEV;
|
|
+
|
|
+ ohci_resources[0].start = bcm63xx_regset_address(RSET_OHCI0);
|
|
+ ohci_resources[0].end = ohci_resources[0].start;
|
|
+ ohci_resources[0].end += RSET_OHCI_SIZE - 1;
|
|
+ ohci_resources[1].start = bcm63xx_get_irq_number(IRQ_OHCI0);
|
|
+
|
|
+ return platform_device_register(&bcm63xx_ohci_device);
|
|
+}
|
|
--- /dev/null
|
|
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ohci.h
|
|
@@ -0,0 +1,6 @@
|
|
+#ifndef BCM63XX_DEV_USB_OHCI_H_
|
|
+#define BCM63XX_DEV_USB_OHCI_H_
|
|
+
|
|
+int bcm63xx_ohci_register(void);
|
|
+
|
|
+#endif /* BCM63XX_DEV_USB_OHCI_H_ */
|