-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Gabor Juhos
authored and
Ralf Baechle
committed
Dec 7, 2011
1 parent
015f321
commit 5469833
Showing
8 changed files
with
237 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: d2b4ac1e5d34648cc56785f6bd11bfa020ad4f02 | ||
refs/heads/master: 7e98aa4639cba9ef5c99b1484bc86ddb04f67b80 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
/* | ||
* Atheros AR7XXX/AR9XXX USB Host Controller device | ||
* | ||
* Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> | ||
* Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
* | ||
* Parts of this file are based on Atheros' 2.6.15 BSP | ||
* | ||
* 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. | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/init.h> | ||
#include <linux/delay.h> | ||
#include <linux/irq.h> | ||
#include <linux/dma-mapping.h> | ||
#include <linux/platform_device.h> | ||
|
||
#include <asm/mach-ath79/ath79.h> | ||
#include <asm/mach-ath79/ar71xx_regs.h> | ||
#include "common.h" | ||
#include "dev-usb.h" | ||
|
||
static struct resource ath79_ohci_resources[] = { | ||
[0] = { | ||
/* .start and .end fields are filled dynamically */ | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
[1] = { | ||
.start = ATH79_MISC_IRQ_OHCI, | ||
.end = ATH79_MISC_IRQ_OHCI, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
}; | ||
|
||
static u64 ath79_ohci_dmamask = DMA_BIT_MASK(32); | ||
static struct platform_device ath79_ohci_device = { | ||
.name = "ath79-ohci", | ||
.id = -1, | ||
.resource = ath79_ohci_resources, | ||
.num_resources = ARRAY_SIZE(ath79_ohci_resources), | ||
.dev = { | ||
.dma_mask = &ath79_ohci_dmamask, | ||
.coherent_dma_mask = DMA_BIT_MASK(32), | ||
}, | ||
}; | ||
|
||
static struct resource ath79_ehci_resources[] = { | ||
[0] = { | ||
/* .start and .end fields are filled dynamically */ | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
[1] = { | ||
.start = ATH79_CPU_IRQ_USB, | ||
.end = ATH79_CPU_IRQ_USB, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
}; | ||
|
||
static u64 ath79_ehci_dmamask = DMA_BIT_MASK(32); | ||
static struct platform_device ath79_ehci_device = { | ||
.name = "ath79-ehci", | ||
.id = -1, | ||
.resource = ath79_ehci_resources, | ||
.num_resources = ARRAY_SIZE(ath79_ehci_resources), | ||
.dev = { | ||
.dma_mask = &ath79_ehci_dmamask, | ||
.coherent_dma_mask = DMA_BIT_MASK(32), | ||
}, | ||
}; | ||
|
||
#define AR71XX_USB_RESET_MASK (AR71XX_RESET_USB_HOST | \ | ||
AR71XX_RESET_USB_PHY | \ | ||
AR71XX_RESET_USB_OHCI_DLL) | ||
|
||
static void __init ath79_usb_setup(void) | ||
{ | ||
void __iomem *usb_ctrl_base; | ||
|
||
ath79_device_reset_set(AR71XX_USB_RESET_MASK); | ||
mdelay(1000); | ||
ath79_device_reset_clear(AR71XX_USB_RESET_MASK); | ||
|
||
usb_ctrl_base = ioremap(AR71XX_USB_CTRL_BASE, AR71XX_USB_CTRL_SIZE); | ||
|
||
/* Turning on the Buff and Desc swap bits */ | ||
__raw_writel(0xf0000, usb_ctrl_base + AR71XX_USB_CTRL_REG_CONFIG); | ||
|
||
/* WAR for HW bug. Here it adjusts the duration between two SOFS */ | ||
__raw_writel(0x20c00, usb_ctrl_base + AR71XX_USB_CTRL_REG_FLADJ); | ||
|
||
iounmap(usb_ctrl_base); | ||
|
||
mdelay(900); | ||
|
||
ath79_ohci_resources[0].start = AR71XX_OHCI_BASE; | ||
ath79_ohci_resources[0].end = AR71XX_OHCI_BASE + AR71XX_OHCI_SIZE - 1; | ||
platform_device_register(&ath79_ohci_device); | ||
|
||
ath79_ehci_resources[0].start = AR71XX_EHCI_BASE; | ||
ath79_ehci_resources[0].end = AR71XX_EHCI_BASE + AR71XX_EHCI_SIZE - 1; | ||
ath79_ehci_device.name = "ar71xx-ehci"; | ||
platform_device_register(&ath79_ehci_device); | ||
} | ||
|
||
static void __init ar7240_usb_setup(void) | ||
{ | ||
void __iomem *usb_ctrl_base; | ||
|
||
ath79_device_reset_clear(AR7240_RESET_OHCI_DLL); | ||
ath79_device_reset_set(AR7240_RESET_USB_HOST); | ||
|
||
mdelay(1000); | ||
|
||
ath79_device_reset_set(AR7240_RESET_OHCI_DLL); | ||
ath79_device_reset_clear(AR7240_RESET_USB_HOST); | ||
|
||
usb_ctrl_base = ioremap(AR7240_USB_CTRL_BASE, AR7240_USB_CTRL_SIZE); | ||
|
||
/* WAR for HW bug. Here it adjusts the duration between two SOFS */ | ||
__raw_writel(0x3, usb_ctrl_base + AR71XX_USB_CTRL_REG_FLADJ); | ||
|
||
iounmap(usb_ctrl_base); | ||
|
||
ath79_ohci_resources[0].start = AR7240_OHCI_BASE; | ||
ath79_ohci_resources[0].end = AR7240_OHCI_BASE + AR7240_OHCI_SIZE - 1; | ||
platform_device_register(&ath79_ohci_device); | ||
} | ||
|
||
static void __init ar724x_usb_setup(void) | ||
{ | ||
ath79_device_reset_set(AR724X_RESET_USBSUS_OVERRIDE); | ||
mdelay(10); | ||
|
||
ath79_device_reset_clear(AR724X_RESET_USB_HOST); | ||
mdelay(10); | ||
|
||
ath79_device_reset_clear(AR724X_RESET_USB_PHY); | ||
mdelay(10); | ||
|
||
ath79_ehci_resources[0].start = AR724X_EHCI_BASE; | ||
ath79_ehci_resources[0].end = AR724X_EHCI_BASE + AR724X_EHCI_SIZE - 1; | ||
ath79_ehci_device.name = "ar724x-ehci"; | ||
platform_device_register(&ath79_ehci_device); | ||
} | ||
|
||
static void __init ar913x_usb_setup(void) | ||
{ | ||
ath79_device_reset_set(AR913X_RESET_USBSUS_OVERRIDE); | ||
mdelay(10); | ||
|
||
ath79_device_reset_clear(AR913X_RESET_USB_HOST); | ||
mdelay(10); | ||
|
||
ath79_device_reset_clear(AR913X_RESET_USB_PHY); | ||
mdelay(10); | ||
|
||
ath79_ehci_resources[0].start = AR913X_EHCI_BASE; | ||
ath79_ehci_resources[0].end = AR913X_EHCI_BASE + AR913X_EHCI_SIZE - 1; | ||
ath79_ehci_device.name = "ar913x-ehci"; | ||
platform_device_register(&ath79_ehci_device); | ||
} | ||
|
||
void __init ath79_register_usb(void) | ||
{ | ||
if (soc_is_ar71xx()) | ||
ath79_usb_setup(); | ||
else if (soc_is_ar7240()) | ||
ar7240_usb_setup(); | ||
else if (soc_is_ar7241() || soc_is_ar7242()) | ||
ar724x_usb_setup(); | ||
else if (soc_is_ar913x()) | ||
ar913x_usb_setup(); | ||
else | ||
BUG(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
/* | ||
* Atheros AR71XX/AR724X/AR913X USB Host Controller support | ||
* | ||
* Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> | ||
* Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
* | ||
* 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 _ATH79_DEV_USB_H | ||
#define _ATH79_DEV_USB_H | ||
|
||
void ath79_register_usb(void); | ||
|
||
#endif /* _ATH79_DEV_USB_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters