mirror of https://github.com/hak5/openwrt-owl.git
brcm47xx: update usb driver to the version send for mainline kernel integartion
SVN-Revision: 31089owl
parent
877c407ade
commit
6fd915ba37
|
@ -1,48 +0,0 @@
|
||||||
From d85bba4eb399a8273aabaef5c21c89820d7a0514 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
Date: Thu, 9 Feb 2012 23:14:57 +0100
|
|
||||||
Subject: [PATCH 180/186] USB: HCI: add struct for ehci and ohci platform
|
|
||||||
driver
|
|
||||||
|
|
||||||
|
|
||||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
---
|
|
||||||
include/linux/usb/hci_driver.h | 32 ++++++++++++++++++++++++++++++++
|
|
||||||
1 files changed, 32 insertions(+), 0 deletions(-)
|
|
||||||
create mode 100644 include/linux/usb/hci_driver.h
|
|
||||||
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/include/linux/usb/hci_driver.h
|
|
||||||
@@ -0,0 +1,32 @@
|
|
||||||
+/*
|
|
||||||
+ * Copyright (C) 2012 Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
+ *
|
|
||||||
+ * This program is free software; you can redistribute it and/or modify it
|
|
||||||
+ * under the terms of the GNU General Public License as published by the
|
|
||||||
+ * Free Software Foundation; either version 2 of the License, or (at your
|
|
||||||
+ * option) any later version.
|
|
||||||
+ *
|
|
||||||
+ * This program is distributed in the hope that it will be useful, but
|
|
||||||
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
+ * for more details.
|
|
||||||
+ *
|
|
||||||
+ * You should have received a copy of the GNU General Public License
|
|
||||||
+ * along with this program; if not, write to the Free Software Foundation,
|
|
||||||
+ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#ifndef __USB_CORE_HCI_PDRIVER_H
|
|
||||||
+#define __USB_CORE_HCI_PDRIVER_H
|
|
||||||
+
|
|
||||||
+#define USB_HCI_PDATA_PORT_POWER_SET (1 << 0)
|
|
||||||
+#define USB_HCI_PDATA_HAS_TT_SET (1 << 1)
|
|
||||||
+
|
|
||||||
+struct usb_hci_pdata {
|
|
||||||
+ int flags;
|
|
||||||
+ int caps_offset;
|
|
||||||
+ unsigned has_tt:1;
|
|
||||||
+ unsigned power_set_is_on:1;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#endif /* __USB_CORE_HCI_PDRIVER_H */
|
|
|
@ -1,21 +1,3 @@
|
||||||
From 2232a2ab6015496fecdfad68a9d6794312a9b2f2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
Date: Sat, 26 Nov 2011 21:20:54 +0100
|
|
||||||
Subject: [PATCH 181/186] USB: OHCI: Add a generic platform device driver
|
|
||||||
|
|
||||||
This adds a generic driver for platform devices. It works like the PCI
|
|
||||||
driver and is based on it. This is for devices which do not have an own
|
|
||||||
bus but their OHCI controller works like a PCI controller. It will be
|
|
||||||
used for the Broadcom bcma and ssb USB OHCI controller.
|
|
||||||
|
|
||||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
---
|
|
||||||
drivers/usb/host/Kconfig | 10 ++
|
|
||||||
drivers/usb/host/ohci-hcd.c | 5 +
|
|
||||||
drivers/usb/host/ohci-platform.c | 183 ++++++++++++++++++++++++++++++++++++++
|
|
||||||
3 files changed, 198 insertions(+), 0 deletions(-)
|
|
||||||
create mode 100644 drivers/usb/host/ohci-platform.c
|
|
||||||
|
|
||||||
--- a/drivers/usb/host/Kconfig
|
--- a/drivers/usb/host/Kconfig
|
||||||
+++ b/drivers/usb/host/Kconfig
|
+++ b/drivers/usb/host/Kconfig
|
||||||
@@ -378,6 +378,16 @@ config USB_CNS3XXX_OHCI
|
@@ -378,6 +378,16 @@ config USB_CNS3XXX_OHCI
|
||||||
|
@ -23,7 +5,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
It is needed for low-speed USB 1.0 device support.
|
It is needed for low-speed USB 1.0 device support.
|
||||||
|
|
||||||
+config USB_OHCI_HCD_PLATFORM
|
+config USB_OHCI_HCD_PLATFORM
|
||||||
+ bool "OHCI driver for a platform device"
|
+ bool "Generic OHCI driver for a platform device"
|
||||||
+ depends on USB_OHCI_HCD && EXPERIMENTAL
|
+ depends on USB_OHCI_HCD && EXPERIMENTAL
|
||||||
+ default n
|
+ default n
|
||||||
+ ---help---
|
+ ---help---
|
||||||
|
@ -51,7 +33,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
!defined(OMAP1_PLATFORM_DRIVER) && \
|
!defined(OMAP1_PLATFORM_DRIVER) && \
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/usb/host/ohci-platform.c
|
+++ b/drivers/usb/host/ohci-platform.c
|
||||||
@@ -0,0 +1,183 @@
|
@@ -0,0 +1,194 @@
|
||||||
+/*
|
+/*
|
||||||
+ * Generic platform ohci driver
|
+ * Generic platform ohci driver
|
||||||
+ *
|
+ *
|
||||||
|
@ -68,13 +50,22 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ * Licensed under the GNU/GPL. See COPYING for details.
|
+ * Licensed under the GNU/GPL. See COPYING for details.
|
||||||
+ */
|
+ */
|
||||||
+#include <linux/platform_device.h>
|
+#include <linux/platform_device.h>
|
||||||
+#include <linux/usb/hci_driver.h>
|
+#include <linux/usb/ohci_pdriver.h>
|
||||||
+
|
+
|
||||||
+static int ohci_platform_reset(struct usb_hcd *hcd)
|
+static int ohci_platform_reset(struct usb_hcd *hcd)
|
||||||
+{
|
+{
|
||||||
|
+ struct platform_device *pdev = to_platform_device(hcd->self.controller);
|
||||||
|
+ struct usb_ohci_pdata *pdata = pdev->dev.platform_data;
|
||||||
+ struct ohci_hcd *ohci = hcd_to_ohci(hcd);
|
+ struct ohci_hcd *ohci = hcd_to_ohci(hcd);
|
||||||
+ int err;
|
+ int err;
|
||||||
+
|
+
|
||||||
|
+ if (pdata->big_endian_desc)
|
||||||
|
+ ohci->flags |= OHCI_QUIRK_BE_DESC;
|
||||||
|
+ if (pdata->big_endian_mmio)
|
||||||
|
+ ohci->flags |= OHCI_QUIRK_BE_MMIO;
|
||||||
|
+ if (pdata->no_big_frame_no)
|
||||||
|
+ ohci->flags |= OHCI_QUIRK_FRAME_NO;
|
||||||
|
+
|
||||||
+ ohci_hcd_init(ohci);
|
+ ohci_hcd_init(ohci);
|
||||||
+ err = ohci_init(ohci);
|
+ err = ohci_init(ohci);
|
||||||
+
|
+
|
||||||
|
@ -131,6 +122,8 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ int irq;
|
+ int irq;
|
||||||
+ int err = -ENOMEM;
|
+ int err = -ENOMEM;
|
||||||
+
|
+
|
||||||
|
+ BUG_ON(!dev->dev.platform_data);
|
||||||
|
+
|
||||||
+ if (usb_disabled())
|
+ if (usb_disabled())
|
||||||
+ return -ENODEV;
|
+ return -ENODEV;
|
||||||
+
|
+
|
||||||
|
@ -235,3 +228,44 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ .pm = &ohci_platform_pm_ops,
|
+ .pm = &ohci_platform_pm_ops,
|
||||||
+ }
|
+ }
|
||||||
+};
|
+};
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/include/linux/usb/ohci_pdriver.h
|
||||||
|
@@ -0,0 +1,38 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2012 Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
|
+ *
|
||||||
|
+ * This program is free software; you can redistribute it and/or modify it
|
||||||
|
+ * under the terms of the GNU General Public License as published by the
|
||||||
|
+ * Free Software Foundation; either version 2 of the License, or (at your
|
||||||
|
+ * option) any later version.
|
||||||
|
+ *
|
||||||
|
+ * This program is distributed in the hope that it will be useful, but
|
||||||
|
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
+ * for more details.
|
||||||
|
+ *
|
||||||
|
+ * You should have received a copy of the GNU General Public License
|
||||||
|
+ * along with this program; if not, write to the Free Software Foundation,
|
||||||
|
+ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#ifndef __USB_CORE_OHCI_PDRIVER_H
|
||||||
|
+#define __USB_CORE_OHCI_PDRIVER_H
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * struct usb_ohci_pdata - platform_data for generic ohci driver
|
||||||
|
+ *
|
||||||
|
+ * @big_endian_desc: BE descriptors
|
||||||
|
+ * @big_endian_mmio: BE registers
|
||||||
|
+ * @no_big_frame_no: no big endian frame_no shift
|
||||||
|
+ *
|
||||||
|
+ * These are general configuration options for the OHCI controller. All of
|
||||||
|
+ * these options are activating more or less workarounds for some hardware.
|
||||||
|
+ */
|
||||||
|
+struct usb_ohci_pdata {
|
||||||
|
+ unsigned big_endian_desc:1;
|
||||||
|
+ unsigned big_endian_mmio:1;
|
||||||
|
+ unsigned no_big_frame_no:1;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+#endif /* __USB_CORE_OHCI_PDRIVER_H */
|
|
@ -1,21 +1,3 @@
|
||||||
From 1be00523336ac484c52681f838dfb8a76e8531cd Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
Date: Sat, 26 Nov 2011 21:28:56 +0100
|
|
||||||
Subject: [PATCH 182/186] USB: EHCI: Add a generic platform device driver
|
|
||||||
|
|
||||||
This adds a generic driver for platform devices. It works like the PCI
|
|
||||||
driver and is based on it. This is for devices which do not have an own
|
|
||||||
bus but their EHCI controller works like a PCI controller. It will be
|
|
||||||
used for the Broadcom bcma and ssb USB EHCI controller.
|
|
||||||
|
|
||||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
---
|
|
||||||
drivers/usb/host/Kconfig | 10 ++
|
|
||||||
drivers/usb/host/ehci-hcd.c | 5 +
|
|
||||||
drivers/usb/host/ehci-platform.c | 199 ++++++++++++++++++++++++++++++++++++++
|
|
||||||
3 files changed, 214 insertions(+), 0 deletions(-)
|
|
||||||
create mode 100644 drivers/usb/host/ehci-platform.c
|
|
||||||
|
|
||||||
--- a/drivers/usb/host/Kconfig
|
--- a/drivers/usb/host/Kconfig
|
||||||
+++ b/drivers/usb/host/Kconfig
|
+++ b/drivers/usb/host/Kconfig
|
||||||
@@ -388,6 +388,16 @@ config USB_OHCI_HCD_PLATFORM
|
@@ -388,6 +388,16 @@ config USB_OHCI_HCD_PLATFORM
|
||||||
|
@ -51,7 +33,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
!defined(XILINX_OF_PLATFORM_DRIVER)
|
!defined(XILINX_OF_PLATFORM_DRIVER)
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/usb/host/ehci-platform.c
|
+++ b/drivers/usb/host/ehci-platform.c
|
||||||
@@ -0,0 +1,199 @@
|
@@ -0,0 +1,198 @@
|
||||||
+/*
|
+/*
|
||||||
+ * Generic platform ehci driver
|
+ * Generic platform ehci driver
|
||||||
+ *
|
+ *
|
||||||
|
@ -73,32 +55,29 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ * Licensed under the GNU/GPL. See COPYING for details.
|
+ * Licensed under the GNU/GPL. See COPYING for details.
|
||||||
+ */
|
+ */
|
||||||
+#include <linux/platform_device.h>
|
+#include <linux/platform_device.h>
|
||||||
+#include <linux/usb/hci_driver.h>
|
+#include <linux/usb/ehci_pdriver.h>
|
||||||
+
|
+
|
||||||
+static int ehci_platform_reset(struct usb_hcd *hcd)
|
+static int ehci_platform_reset(struct usb_hcd *hcd)
|
||||||
+{
|
+{
|
||||||
+ struct platform_device *pdev = to_platform_device(hcd->self.controller);
|
+ struct platform_device *pdev = to_platform_device(hcd->self.controller);
|
||||||
+ struct usb_hci_pdata *pdata = pdev->dev.platform_data;
|
+ struct usb_ehci_pdata *pdata = pdev->dev.platform_data;
|
||||||
+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
|
+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
|
||||||
+ int caps_offset = 0;
|
|
||||||
+ int flags = 0;
|
|
||||||
+ int retval;
|
+ int retval;
|
||||||
+
|
+
|
||||||
+ if (pdata) {
|
+ hcd->has_tt = pdata->has_tt;
|
||||||
+ caps_offset = pdata->caps_offset;
|
+ ehci->has_synopsys_hc_bug = pdata->has_synopsys_hc_bug;
|
||||||
+ flags = pdata->flags;
|
+ ehci->big_endian_desc = pdata->big_endian_desc;
|
||||||
+ }
|
+ ehci->big_endian_mmio = pdata->big_endian_mmio;
|
||||||
+
|
+
|
||||||
+ if (flags & USB_HCI_PDATA_HAS_TT_SET)
|
+ ehci->caps = hcd->regs + pdata->caps_offset;
|
||||||
+ hcd->has_tt = pdata->has_tt;
|
|
||||||
+
|
|
||||||
+ ehci->caps = hcd->regs + caps_offset;
|
|
||||||
+ retval = ehci_setup(hcd);
|
+ retval = ehci_setup(hcd);
|
||||||
+ if (retval)
|
+ if (retval)
|
||||||
+ return retval;
|
+ return retval;
|
||||||
+
|
+
|
||||||
+ if (flags & USB_HCI_PDATA_PORT_POWER_SET)
|
+ if (pdata->port_power_on)
|
||||||
+ ehci_port_power(ehci, pdata->power_set_is_on);
|
+ ehci_port_power(ehci, 1);
|
||||||
|
+ if (pdata->port_power_off)
|
||||||
|
+ ehci_port_power(ehci, 0);
|
||||||
+
|
+
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
|
@ -144,6 +123,8 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ int irq;
|
+ int irq;
|
||||||
+ int err = -ENOMEM;
|
+ int err = -ENOMEM;
|
||||||
+
|
+
|
||||||
|
+ BUG_ON(!dev->dev.platform_data);
|
||||||
|
+
|
||||||
+ if (usb_disabled())
|
+ if (usb_disabled())
|
||||||
+ return -ENODEV;
|
+ return -ENODEV;
|
||||||
+
|
+
|
||||||
|
@ -251,3 +232,52 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ .pm = &ehci_platform_pm_ops,
|
+ .pm = &ehci_platform_pm_ops,
|
||||||
+ }
|
+ }
|
||||||
+};
|
+};
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/include/linux/usb/ehci_pdriver.h
|
||||||
|
@@ -0,0 +1,46 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2012 Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
|
+ *
|
||||||
|
+ * This program is free software; you can redistribute it and/or modify it
|
||||||
|
+ * under the terms of the GNU General Public License as published by the
|
||||||
|
+ * Free Software Foundation; either version 2 of the License, or (at your
|
||||||
|
+ * option) any later version.
|
||||||
|
+ *
|
||||||
|
+ * This program is distributed in the hope that it will be useful, but
|
||||||
|
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
+ * for more details.
|
||||||
|
+ *
|
||||||
|
+ * You should have received a copy of the GNU General Public License
|
||||||
|
+ * along with this program; if not, write to the Free Software Foundation,
|
||||||
|
+ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#ifndef __USB_CORE_EHCI_PDRIVER_H
|
||||||
|
+#define __USB_CORE_EHCI_PDRIVER_H
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * struct usb_ehci_pdata - platform_data for generic ehci driver
|
||||||
|
+ *
|
||||||
|
+ * @caps_offset: offset of the EHCI Capability Registers to the start of
|
||||||
|
+ * the io memory region provided to the driver.
|
||||||
|
+ * @has_tt: set to 1 if TT is integrated in root hub.
|
||||||
|
+ * @port_power_on: set to 1 if the controller needs a power up after
|
||||||
|
+ * initialization.
|
||||||
|
+ * @port_power_off: set to 1 if the controller needs to be powered down
|
||||||
|
+ * after initialization.
|
||||||
|
+ *
|
||||||
|
+ * These are general configuration options for the EHCI controller. All of
|
||||||
|
+ * these options are activating more or less workarounds for some hardware.
|
||||||
|
+ */
|
||||||
|
+struct usb_ehci_pdata {
|
||||||
|
+ int caps_offset;
|
||||||
|
+ unsigned has_tt:1;
|
||||||
|
+ unsigned has_synopsys_hc_bug:1;
|
||||||
|
+ unsigned big_endian_desc:1;
|
||||||
|
+ unsigned big_endian_mmio:1;
|
||||||
|
+ unsigned port_power_on:1;
|
||||||
|
+ unsigned port_power_off:1;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+#endif /* __USB_CORE_EHCI_PDRIVER_H */
|
|
@ -0,0 +1,45 @@
|
||||||
|
--- a/drivers/bcma/scan.c
|
||||||
|
+++ b/drivers/bcma/scan.c
|
||||||
|
@@ -297,6 +297,23 @@ static int bcma_get_next_core(struct bcm
|
||||||
|
return -EILSEQ;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* First Slave Address Descriptor should be port 0:
|
||||||
|
+ * the main register space for the core
|
||||||
|
+ */
|
||||||
|
+ tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0);
|
||||||
|
+ if (tmp <= 0) {
|
||||||
|
+ /* Try again to see if it is a bridge */
|
||||||
|
+ tmp = bcma_erom_get_addr_desc(bus, eromptr,
|
||||||
|
+ SCAN_ADDR_TYPE_BRIDGE, 0);
|
||||||
|
+ if (tmp <= 0) {
|
||||||
|
+ return -EILSEQ;
|
||||||
|
+ } else {
|
||||||
|
+ pr_info("Bridge found\n");
|
||||||
|
+ return -ENXIO;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ core->addr = tmp;
|
||||||
|
+
|
||||||
|
/* get & parse slave ports */
|
||||||
|
for (i = 0; i < ports[1]; i++) {
|
||||||
|
for (j = 0; ; j++) {
|
||||||
|
@@ -309,7 +326,7 @@ static int bcma_get_next_core(struct bcm
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
if (i == 0 && j == 0)
|
||||||
|
- core->addr = tmp;
|
||||||
|
+ core->addr1 = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--- a/include/linux/bcma/bcma.h
|
||||||
|
+++ b/include/linux/bcma/bcma.h
|
||||||
|
@@ -139,6 +139,7 @@ struct bcma_device {
|
||||||
|
u8 core_unit;
|
||||||
|
|
||||||
|
u32 addr;
|
||||||
|
+ u32 addr1;
|
||||||
|
u32 wrap;
|
||||||
|
|
||||||
|
void __iomem *io_addr;
|
|
@ -1,24 +1,3 @@
|
||||||
From 70fc4b2a6200ef7a1b99a6aa28234b919f23b43c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
Date: Sat, 26 Nov 2011 21:33:41 +0100
|
|
||||||
Subject: [PATCH 184/186] USB: Add driver for the bcma bus
|
|
||||||
|
|
||||||
This adds a USB driver using the generic platform device driver for the
|
|
||||||
USB controller found on the Broadcom bcma bus. The bcma bus just
|
|
||||||
exposes one device which serves the OHCI and the EHCI controller at the
|
|
||||||
same time. This driver probes for this USB controller and creates and
|
|
||||||
registers two new platform devices which will be probed by the new
|
|
||||||
generic platform device driver. This makes it possible to use the EHCI
|
|
||||||
and the OCHI controller on the bcma bus at the same time.
|
|
||||||
|
|
||||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
---
|
|
||||||
drivers/usb/host/Kconfig | 12 ++
|
|
||||||
drivers/usb/host/Makefile | 1 +
|
|
||||||
drivers/usb/host/bcma-hcd.c | 328 +++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
3 files changed, 341 insertions(+), 0 deletions(-)
|
|
||||||
create mode 100644 drivers/usb/host/bcma-hcd.c
|
|
||||||
|
|
||||||
--- a/drivers/usb/host/Kconfig
|
--- a/drivers/usb/host/Kconfig
|
||||||
+++ b/drivers/usb/host/Kconfig
|
+++ b/drivers/usb/host/Kconfig
|
||||||
@@ -618,3 +618,15 @@ config USB_PXA168_EHCI
|
@@ -618,3 +618,15 @@ config USB_PXA168_EHCI
|
||||||
|
@ -46,12 +25,12 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
|
+obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/usb/host/bcma-hcd.c
|
+++ b/drivers/usb/host/bcma-hcd.c
|
||||||
@@ -0,0 +1,328 @@
|
@@ -0,0 +1,334 @@
|
||||||
+/*
|
+/*
|
||||||
+ * Broadcom specific Advanced Microcontroller Bus
|
+ * Broadcom specific Advanced Microcontroller Bus
|
||||||
+ * Broadcom USB-core driver (BCMA bus glue)
|
+ * Broadcom USB-core driver (BCMA bus glue)
|
||||||
+ *
|
+ *
|
||||||
+ * Copyright 2011 Hauke Mehrtens <hauke@hauke-m.de>
|
+ * Copyright 2011-2012 Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ *
|
+ *
|
||||||
+ * Based on ssb-ohci driver
|
+ * Based on ssb-ohci driver
|
||||||
+ * Copyright 2007 Michael Buesch <m@bues.ch>
|
+ * Copyright 2007 Michael Buesch <m@bues.ch>
|
||||||
|
@ -71,7 +50,8 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+#include <linux/delay.h>
|
+#include <linux/delay.h>
|
||||||
+#include <linux/platform_device.h>
|
+#include <linux/platform_device.h>
|
||||||
+#include <linux/module.h>
|
+#include <linux/module.h>
|
||||||
+#include <linux/usb/hci_driver.h>
|
+#include <linux/usb/ehci_pdriver.h>
|
||||||
|
+#include <linux/usb/ohci_pdriver.h>
|
||||||
+
|
+
|
||||||
+MODULE_AUTHOR("Hauke Mehrtens");
|
+MODULE_AUTHOR("Hauke Mehrtens");
|
||||||
+MODULE_DESCRIPTION("Common USB driver for BCMA Bus");
|
+MODULE_DESCRIPTION("Common USB driver for BCMA Bus");
|
||||||
|
@ -206,13 +186,14 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static const struct usb_hci_pdata p_data = {
|
+static const struct usb_ehci_pdata ehci_pdata = {
|
||||||
+ .flags = USB_HCI_PDATA_PORT_POWER_SET,
|
+};
|
||||||
+ .power_set_is_on = 1,
|
+
|
||||||
|
+static const struct usb_ohci_pdata ohci_pdata = {
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+static struct platform_device * __devinit
|
+static struct platform_device * __devinit
|
||||||
+bcma_hcd_create_pdev(struct bcma_device *dev, char *name, u32 addr)
|
+bcma_hcd_create_pdev(struct bcma_device *dev, bool ohci, u32 addr)
|
||||||
+{
|
+{
|
||||||
+ struct platform_device *hci_dev;
|
+ struct platform_device *hci_dev;
|
||||||
+ struct resource hci_res[2];
|
+ struct resource hci_res[2];
|
||||||
|
@ -227,7 +208,8 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ hci_res[1].start = dev->irq;
|
+ hci_res[1].start = dev->irq;
|
||||||
+ hci_res[1].flags = IORESOURCE_IRQ;
|
+ hci_res[1].flags = IORESOURCE_IRQ;
|
||||||
+
|
+
|
||||||
+ hci_dev = platform_device_alloc(name, 0);
|
+ hci_dev = platform_device_alloc(ohci ? "ohci-platform" :
|
||||||
|
+ "ehci-platform" , 0);
|
||||||
+ if (!hci_dev)
|
+ if (!hci_dev)
|
||||||
+ return NULL;
|
+ return NULL;
|
||||||
+
|
+
|
||||||
|
@ -238,7 +220,12 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ ARRAY_SIZE(hci_res));
|
+ ARRAY_SIZE(hci_res));
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
+ goto err_alloc;
|
+ goto err_alloc;
|
||||||
+ ret = platform_device_add_data(hci_dev, &p_data, sizeof(p_data));
|
+ if (ohci)
|
||||||
|
+ ret = platform_device_add_data(hci_dev, &ohci_pdata,
|
||||||
|
+ sizeof(ohci_pdata));
|
||||||
|
+ else
|
||||||
|
+ ret = platform_device_add_data(hci_dev, &ehci_pdata,
|
||||||
|
+ sizeof(ehci_pdata));
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
+ goto err_alloc;
|
+ goto err_alloc;
|
||||||
+ ret = platform_device_add(hci_dev);
|
+ ret = platform_device_add(hci_dev);
|
||||||
|
@ -284,15 +271,13 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ && chipinfo->rev == 0)
|
+ && chipinfo->rev == 0)
|
||||||
+ ohci_addr = 0x18009000;
|
+ ohci_addr = 0x18009000;
|
||||||
+
|
+
|
||||||
+ usb_dev->ohci_dev = bcma_hcd_create_pdev(dev, "ohci-platform",
|
+ usb_dev->ohci_dev = bcma_hcd_create_pdev(dev, true, ohci_addr);
|
||||||
+ ohci_addr);
|
|
||||||
+ if (IS_ERR(usb_dev->ohci_dev)) {
|
+ if (IS_ERR(usb_dev->ohci_dev)) {
|
||||||
+ err = PTR_ERR(usb_dev->ohci_dev);
|
+ err = PTR_ERR(usb_dev->ohci_dev);
|
||||||
+ goto err_free_usb_dev;
|
+ goto err_free_usb_dev;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ usb_dev->ehci_dev = bcma_hcd_create_pdev(dev, "ehci-platform",
|
+ usb_dev->ehci_dev = bcma_hcd_create_pdev(dev, false, dev->addr);
|
||||||
+ dev->addr);
|
|
||||||
+ if (IS_ERR(usb_dev->ehci_dev)) {
|
+ if (IS_ERR(usb_dev->ehci_dev)) {
|
||||||
+ err = PTR_ERR(usb_dev->ehci_dev);
|
+ err = PTR_ERR(usb_dev->ehci_dev);
|
||||||
+ goto err_unregister_ohci_dev;
|
+ goto err_unregister_ohci_dev;
|
|
@ -1,61 +0,0 @@
|
||||||
From adebff2358c2b631fc04e31ba87eee48e546c655 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
Date: Sun, 20 Nov 2011 18:22:35 +0100
|
|
||||||
Subject: [PATCH 183/186] bcma: scan for extra address space
|
|
||||||
|
|
||||||
Some cores like the USB core have two address spaces. In the USB host
|
|
||||||
controller one address space is used for the OHCI and the other for the
|
|
||||||
EHCI controller interface. The USB controller is the only core I found
|
|
||||||
with two address spaces. This code is based on the AI scan function
|
|
||||||
ai_scan() in shared/aiutils.c i the Broadcom SDK.
|
|
||||||
|
|
||||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
---
|
|
||||||
drivers/bcma/scan.c | 18 +++++++++++++++++-
|
|
||||||
include/linux/bcma/bcma.h | 1 +
|
|
||||||
2 files changed, 18 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/bcma/scan.c
|
|
||||||
+++ b/drivers/bcma/scan.c
|
|
||||||
@@ -297,6 +297,22 @@ static int bcma_get_next_core(struct bcm
|
|
||||||
return -EILSEQ;
|
|
||||||
}
|
|
||||||
|
|
||||||
+
|
|
||||||
+ /* First Slave Address Descriptor should be port 0:
|
|
||||||
+ * the main register space for the core
|
|
||||||
+ */
|
|
||||||
+ tmp = bcma_erom_get_addr_desc(bus, eromptr, SCAN_ADDR_TYPE_SLAVE, 0);
|
|
||||||
+ if (tmp <= 0) {
|
|
||||||
+ /* Try again to see if it is a bridge */
|
|
||||||
+ tmp = bcma_erom_get_addr_desc(bus, eromptr,
|
|
||||||
+ SCAN_ADDR_TYPE_BRIDGE, 0);
|
|
||||||
+ if (tmp > 0) {
|
|
||||||
+ pr_info("found bridge");
|
|
||||||
+ return -ENXIO;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ core->addr = tmp;
|
|
||||||
+
|
|
||||||
/* get & parse slave ports */
|
|
||||||
for (i = 0; i < ports[1]; i++) {
|
|
||||||
for (j = 0; ; j++) {
|
|
||||||
@@ -309,7 +325,7 @@ static int bcma_get_next_core(struct bcm
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
if (i == 0 && j == 0)
|
|
||||||
- core->addr = tmp;
|
|
||||||
+ core->addr1 = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--- a/include/linux/bcma/bcma.h
|
|
||||||
+++ b/include/linux/bcma/bcma.h
|
|
||||||
@@ -139,6 +139,7 @@ struct bcma_device {
|
|
||||||
u8 core_unit;
|
|
||||||
|
|
||||||
u32 addr;
|
|
||||||
+ u32 addr1;
|
|
||||||
u32 wrap;
|
|
||||||
|
|
||||||
void __iomem *io_addr;
|
|
|
@ -1,27 +1,3 @@
|
||||||
From 1840ddf07a452e640549fbd82e2f570da28e377f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
Date: Sat, 26 Nov 2011 21:35:17 +0100
|
|
||||||
Subject: [PATCH 185/186] USB: Add driver for the ssb bus
|
|
||||||
|
|
||||||
This adds a USB driver using the generic platform device driver for the
|
|
||||||
USB controller found on the Broadcom ssb bus. The ssb bus just
|
|
||||||
exposes one device which serves the OHCI and the EHCI controller at the
|
|
||||||
same time. This driver probes for this USB controller and creates and
|
|
||||||
registers two new platform devices which will be probed by the new
|
|
||||||
generic platform device driver. This makes it possible to use the EHCI
|
|
||||||
and the OCHI controller on the ssb bus at the same time.
|
|
||||||
|
|
||||||
The old ssb OHCI USB driver will be removed in the next step as this
|
|
||||||
driver also provide an OHCI driver and an EHCI for the cores supporting
|
|
||||||
it.
|
|
||||||
|
|
||||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
---
|
|
||||||
drivers/usb/host/Kconfig | 12 ++
|
|
||||||
drivers/usb/host/Makefile | 1 +
|
|
||||||
drivers/usb/host/ssb-hcd.c | 273 ++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
3 files changed, 286 insertions(+), 0 deletions(-)
|
|
||||||
create mode 100644 drivers/usb/host/ssb-hcd.c
|
|
||||||
|
|
||||||
--- a/drivers/usb/host/Kconfig
|
--- a/drivers/usb/host/Kconfig
|
||||||
+++ b/drivers/usb/host/Kconfig
|
+++ b/drivers/usb/host/Kconfig
|
||||||
|
@ -50,12 +26,12 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+obj-$(CONFIG_USB_HCD_SSB) += ssb-hcd.o
|
+obj-$(CONFIG_USB_HCD_SSB) += ssb-hcd.o
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/usb/host/ssb-hcd.c
|
+++ b/drivers/usb/host/ssb-hcd.c
|
||||||
@@ -0,0 +1,273 @@
|
@@ -0,0 +1,279 @@
|
||||||
+/*
|
+/*
|
||||||
+ * Sonics Silicon Backplane
|
+ * Sonics Silicon Backplane
|
||||||
+ * Broadcom USB-core driver (SSB bus glue)
|
+ * Broadcom USB-core driver (SSB bus glue)
|
||||||
+ *
|
+ *
|
||||||
+ * Copyright 2011 Hauke Mehrtens <hauke@hauke-m.de>
|
+ * Copyright 2011-2012 Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ *
|
+ *
|
||||||
+ * Based on ssb-ohci driver
|
+ * Based on ssb-ohci driver
|
||||||
+ * Copyright 2007 Michael Buesch <m@bues.ch>
|
+ * Copyright 2007 Michael Buesch <m@bues.ch>
|
||||||
|
@ -75,7 +51,8 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+#include <linux/delay.h>
|
+#include <linux/delay.h>
|
||||||
+#include <linux/platform_device.h>
|
+#include <linux/platform_device.h>
|
||||||
+#include <linux/module.h>
|
+#include <linux/module.h>
|
||||||
+#include <linux/usb/hci_driver.h>
|
+#include <linux/usb/ehci_pdriver.h>
|
||||||
|
+#include <linux/usb/ohci_pdriver.h>
|
||||||
+
|
+
|
||||||
+MODULE_AUTHOR("Hauke Mehrtens");
|
+MODULE_AUTHOR("Hauke Mehrtens");
|
||||||
+MODULE_DESCRIPTION("Common USB driver for SSB Bus");
|
+MODULE_DESCRIPTION("Common USB driver for SSB Bus");
|
||||||
|
@ -146,13 +123,14 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ return flags;
|
+ return flags;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static const struct usb_hci_pdata p_data = {
|
+static const struct usb_ehci_pdata ehci_pdata = {
|
||||||
+ .flags = USB_HCI_PDATA_PORT_POWER_SET,
|
+};
|
||||||
+ .power_set_is_on = 1,
|
+
|
||||||
|
+static const struct usb_ohci_pdata ohci_pdata = {
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+static struct platform_device * __devinit
|
+static struct platform_device * __devinit
|
||||||
+ssb_hcd_create_pdev(struct ssb_device *dev, char *name, u32 addr, u32 len)
|
+ssb_hcd_create_pdev(struct ssb_device *dev, bool ohci, u32 addr, u32 len)
|
||||||
+{
|
+{
|
||||||
+ struct platform_device *hci_dev;
|
+ struct platform_device *hci_dev;
|
||||||
+ struct resource hci_res[2];
|
+ struct resource hci_res[2];
|
||||||
|
@ -167,7 +145,8 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ hci_res[1].start = dev->irq;
|
+ hci_res[1].start = dev->irq;
|
||||||
+ hci_res[1].flags = IORESOURCE_IRQ;
|
+ hci_res[1].flags = IORESOURCE_IRQ;
|
||||||
+
|
+
|
||||||
+ hci_dev = platform_device_alloc(name, 0);
|
+ hci_dev = platform_device_alloc(ohci ? "ohci-platform" :
|
||||||
|
+ "ehci-platform" , 0);
|
||||||
+ if (!hci_dev)
|
+ if (!hci_dev)
|
||||||
+ return NULL;
|
+ return NULL;
|
||||||
+
|
+
|
||||||
|
@ -178,7 +157,12 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ ARRAY_SIZE(hci_res));
|
+ ARRAY_SIZE(hci_res));
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
+ goto err_alloc;
|
+ goto err_alloc;
|
||||||
+ ret = platform_device_add_data(hci_dev, &p_data, sizeof(p_data));
|
+ if (ohci)
|
||||||
|
+ ret = platform_device_add_data(hci_dev, &ohci_pdata,
|
||||||
|
+ sizeof(ohci_pdata));
|
||||||
|
+ else
|
||||||
|
+ ret = platform_device_add_data(hci_dev, &ehci_pdata,
|
||||||
|
+ sizeof(ehci_pdata));
|
||||||
+ if (ret)
|
+ if (ret)
|
||||||
+ goto err_alloc;
|
+ goto err_alloc;
|
||||||
+ ret = platform_device_add(hci_dev);
|
+ ret = platform_device_add(hci_dev);
|
||||||
|
@ -226,8 +210,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+
|
+
|
||||||
+ start = ssb_admatch_base(tmp);
|
+ start = ssb_admatch_base(tmp);
|
||||||
+ len = (coreid == SSB_DEV_USB20_HOST) ? 0x800 : ssb_admatch_size(tmp);
|
+ len = (coreid == SSB_DEV_USB20_HOST) ? 0x800 : ssb_admatch_size(tmp);
|
||||||
+ usb_dev->ohci_dev = ssb_hcd_create_pdev(dev, "ohci-platform", start,
|
+ usb_dev->ohci_dev = ssb_hcd_create_pdev(dev, true, start, len);
|
||||||
+ len);
|
|
||||||
+ if (IS_ERR(usb_dev->ohci_dev)) {
|
+ if (IS_ERR(usb_dev->ohci_dev)) {
|
||||||
+ err = PTR_ERR(usb_dev->ohci_dev);
|
+ err = PTR_ERR(usb_dev->ohci_dev);
|
||||||
+ goto err_free_usb_dev;
|
+ goto err_free_usb_dev;
|
||||||
|
@ -235,8 +218,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+
|
+
|
||||||
+ if (coreid == SSB_DEV_USB20_HOST) {
|
+ if (coreid == SSB_DEV_USB20_HOST) {
|
||||||
+ start = ssb_admatch_base(tmp) + 0x800; /* ehci core offset */
|
+ start = ssb_admatch_base(tmp) + 0x800; /* ehci core offset */
|
||||||
+ usb_dev->ehci_dev = ssb_hcd_create_pdev(dev, "ehci-platform",
|
+ usb_dev->ehci_dev = ssb_hcd_create_pdev(dev, false, start, len);
|
||||||
+ start, len);
|
|
||||||
+ if (IS_ERR(usb_dev->ehci_dev)) {
|
+ if (IS_ERR(usb_dev->ehci_dev)) {
|
||||||
+ err = PTR_ERR(usb_dev->ehci_dev);
|
+ err = PTR_ERR(usb_dev->ehci_dev);
|
||||||
+ goto err_unregister_ohci_dev;
|
+ goto err_unregister_ohci_dev;
|
|
@ -1,41 +1,22 @@
|
||||||
From 57857d7df6c22eaf11e3c67042d55a9546415059 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
Date: Sat, 26 Nov 2011 21:36:50 +0100
|
|
||||||
Subject: [PATCH 186/186] USB: OHCI: remove old SSB OHCI driver
|
|
||||||
|
|
||||||
This is now replaced by the new ssb USB driver, which also supports
|
|
||||||
devices with an EHCI controller.
|
|
||||||
|
|
||||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
||||||
---
|
|
||||||
drivers/usb/host/Kconfig | 13 --
|
|
||||||
drivers/usb/host/ohci-hcd.c | 21 +----
|
|
||||||
drivers/usb/host/ohci-ssb.c | 260 -------------------------------------------
|
|
||||||
3 files changed, 1 insertions(+), 293 deletions(-)
|
|
||||||
delete mode 100644 drivers/usb/host/ohci-ssb.c
|
|
||||||
|
|
||||||
--- a/drivers/usb/host/Kconfig
|
--- a/drivers/usb/host/Kconfig
|
||||||
+++ b/drivers/usb/host/Kconfig
|
+++ b/drivers/usb/host/Kconfig
|
||||||
@@ -351,19 +351,6 @@ config USB_OHCI_HCD_PCI
|
@@ -352,10 +352,15 @@ config USB_OHCI_HCD_PCI
|
||||||
Enables support for PCI-bus plug-in USB controller cards.
|
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
-config USB_OHCI_HCD_SSB
|
config USB_OHCI_HCD_SSB
|
||||||
- bool "OHCI support for Broadcom SSB OHCI core"
|
- bool "OHCI support for Broadcom SSB OHCI core"
|
||||||
- depends on USB_OHCI_HCD && (SSB = y || SSB = USB_OHCI_HCD) && EXPERIMENTAL
|
+ bool "OHCI support for Broadcom SSB OHCI core (DEPRECATED)"
|
||||||
- default n
|
depends on USB_OHCI_HCD && (SSB = y || SSB = USB_OHCI_HCD) && EXPERIMENTAL
|
||||||
- ---help---
|
+ select USB_HCD_SSB
|
||||||
- Support for the Sonics Silicon Backplane (SSB) attached
|
+ select USB_OHCI_HCD_PLATFORM
|
||||||
- Broadcom USB OHCI core.
|
default n
|
||||||
-
|
---help---
|
||||||
- This device is present in some embedded devices with
|
+ This option is deprecated now and the driver was removed, use
|
||||||
- Broadcom based SSB bus.
|
+ USB_HCD_SSB and USB_OHCI_HCD_PLATFORM instead.
|
||||||
-
|
+
|
||||||
- If unsure, say N.
|
Support for the Sonics Silicon Backplane (SSB) attached
|
||||||
-
|
Broadcom USB OHCI core.
|
||||||
config USB_OHCI_SH
|
|
||||||
bool "OHCI support for SuperH USB controller"
|
|
||||||
depends on USB_OHCI_HCD && SUPERH
|
|
||||||
--- a/drivers/usb/host/ohci-hcd.c
|
--- a/drivers/usb/host/ohci-hcd.c
|
||||||
+++ b/drivers/usb/host/ohci-hcd.c
|
+++ b/drivers/usb/host/ohci-hcd.c
|
||||||
@@ -1076,11 +1076,6 @@ MODULE_LICENSE ("GPL");
|
@@ -1076,11 +1076,6 @@ MODULE_LICENSE ("GPL");
|
Loading…
Reference in New Issue