mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-13 23:34:05 +08:00
ARM: mmp: add usb host support for PXA168
The ehci-mv can support PXA168, PXA910 and PXA920, use this driver to support pxa168 SPH usb. Signed-off-by: Neil Zhang <zhangwm@marvell.com> Signed-off-by: Haojian Zhuang <haojian.zhuang@gmail.com>
This commit is contained in:
parent
673eef9814
commit
161105bcb8
@ -114,7 +114,7 @@ static void u2o_write(void __iomem *base, unsigned int offset,
|
|||||||
|
|
||||||
#if defined(CONFIG_USB_MV_UDC) || defined(CONFIG_USB_EHCI_MV)
|
#if defined(CONFIG_USB_MV_UDC) || defined(CONFIG_USB_EHCI_MV)
|
||||||
|
|
||||||
#if defined(CONFIG_CPU_PXA910)
|
#if defined(CONFIG_CPU_PXA910) || defined(CONFIG_CPU_PXA168)
|
||||||
|
|
||||||
static DEFINE_MUTEX(phy_lock);
|
static DEFINE_MUTEX(phy_lock);
|
||||||
static int phy_init_cnt;
|
static int phy_init_cnt;
|
||||||
|
@ -16,6 +16,7 @@ extern void pxa168_clear_keypad_wakeup(void);
|
|||||||
#include <plat/pxa27x_keypad.h>
|
#include <plat/pxa27x_keypad.h>
|
||||||
#include <mach/cputype.h>
|
#include <mach/cputype.h>
|
||||||
#include <linux/pxa168_eth.h>
|
#include <linux/pxa168_eth.h>
|
||||||
|
#include <linux/platform_data/mv_usb.h>
|
||||||
|
|
||||||
extern struct pxa_device_desc pxa168_device_uart1;
|
extern struct pxa_device_desc pxa168_device_uart1;
|
||||||
extern struct pxa_device_desc pxa168_device_uart2;
|
extern struct pxa_device_desc pxa168_device_uart2;
|
||||||
@ -36,12 +37,9 @@ extern struct pxa_device_desc pxa168_device_fb;
|
|||||||
extern struct pxa_device_desc pxa168_device_keypad;
|
extern struct pxa_device_desc pxa168_device_keypad;
|
||||||
extern struct pxa_device_desc pxa168_device_eth;
|
extern struct pxa_device_desc pxa168_device_eth;
|
||||||
|
|
||||||
struct pxa168_usb_pdata {
|
|
||||||
/* If NULL, default phy init routine for PXA168 would be called */
|
|
||||||
int (*phy_init)(void __iomem *usb_phy_reg_base);
|
|
||||||
};
|
|
||||||
/* pdata can be NULL */
|
/* pdata can be NULL */
|
||||||
int __init pxa168_add_usb_host(struct pxa168_usb_pdata *pdata);
|
extern int __init pxa168_add_usb_host(struct mv_usb_platform_data *pdata);
|
||||||
|
|
||||||
|
|
||||||
extern struct platform_device pxa168_device_gpio;
|
extern struct platform_device pxa168_device_gpio;
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/platform_data/mv_usb.h>
|
||||||
|
|
||||||
#include <asm/mach/time.h>
|
#include <asm/mach/time.h>
|
||||||
#include <asm/system_misc.h>
|
#include <asm/system_misc.h>
|
||||||
@ -27,6 +28,7 @@
|
|||||||
#include <mach/mfp.h>
|
#include <mach/mfp.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <mach/pxa168.h>
|
#include <mach/pxa168.h>
|
||||||
|
#include <mach/regs-usb.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
@ -93,7 +95,7 @@ static struct clk_lookup pxa168_clkregs[] = {
|
|||||||
INIT_CLKREG(&clk_gpio, "pxa-gpio", NULL),
|
INIT_CLKREG(&clk_gpio, "pxa-gpio", NULL),
|
||||||
INIT_CLKREG(&clk_keypad, "pxa27x-keypad", NULL),
|
INIT_CLKREG(&clk_keypad, "pxa27x-keypad", NULL),
|
||||||
INIT_CLKREG(&clk_eth, "pxa168-eth", "MFUCLK"),
|
INIT_CLKREG(&clk_eth, "pxa168-eth", "MFUCLK"),
|
||||||
INIT_CLKREG(&clk_usb, "pxa168-ehci", "PXA168-USBCLK"),
|
INIT_CLKREG(&clk_usb, NULL, "PXA168-USBCLK"),
|
||||||
INIT_CLKREG(&clk_rtc, "sa1100-rtc", NULL),
|
INIT_CLKREG(&clk_rtc, "sa1100-rtc", NULL),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -184,17 +186,17 @@ struct platform_device pxa168_device_gpio = {
|
|||||||
struct resource pxa168_usb_host_resources[] = {
|
struct resource pxa168_usb_host_resources[] = {
|
||||||
/* USB Host conroller register base */
|
/* USB Host conroller register base */
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = 0xd4209000,
|
.start = PXA168_U2H_REGBASE + U2x_CAPREGS_OFFSET,
|
||||||
.end = 0xd4209000 + 0x200,
|
.end = PXA168_U2H_REGBASE + USB_REG_RANGE,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
.name = "pxa168-usb-host",
|
.name = "capregs",
|
||||||
},
|
},
|
||||||
/* USB PHY register base */
|
/* USB PHY register base */
|
||||||
[1] = {
|
[1] = {
|
||||||
.start = 0xd4206000,
|
.start = PXA168_U2H_PHYBASE,
|
||||||
.end = 0xd4206000 + 0xff,
|
.end = PXA168_U2H_PHYBASE + USB_PHY_RANGE,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
.name = "pxa168-usb-phy",
|
.name = "phyregs",
|
||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
.start = IRQ_PXA168_USB2,
|
.start = IRQ_PXA168_USB2,
|
||||||
@ -205,7 +207,7 @@ struct resource pxa168_usb_host_resources[] = {
|
|||||||
|
|
||||||
static u64 pxa168_usb_host_dmamask = DMA_BIT_MASK(32);
|
static u64 pxa168_usb_host_dmamask = DMA_BIT_MASK(32);
|
||||||
struct platform_device pxa168_device_usb_host = {
|
struct platform_device pxa168_device_usb_host = {
|
||||||
.name = "pxa168-ehci",
|
.name = "pxa-sph",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &pxa168_usb_host_dmamask,
|
.dma_mask = &pxa168_usb_host_dmamask,
|
||||||
@ -216,7 +218,7 @@ struct platform_device pxa168_device_usb_host = {
|
|||||||
.resource = pxa168_usb_host_resources,
|
.resource = pxa168_usb_host_resources,
|
||||||
};
|
};
|
||||||
|
|
||||||
int __init pxa168_add_usb_host(struct pxa168_usb_pdata *pdata)
|
int __init pxa168_add_usb_host(struct mv_usb_platform_data *pdata)
|
||||||
{
|
{
|
||||||
pxa168_device_usb_host.dev.platform_data = pdata;
|
pxa168_device_usb_host.dev.platform_data = pdata;
|
||||||
return platform_device_register(&pxa168_device_usb_host);
|
return platform_device_register(&pxa168_device_usb_host);
|
||||||
|
Loading…
Reference in New Issue
Block a user