Commit 9731f4a2 authored by Magnus Damm's avatar Magnus Damm Committed by Paul Mundt

sh: add r8a66597 usb0 host to the se7724 board

Add USB host support for port CN27 on the Solution Engine 7724
board. The r8a66597-hcd driver is hooked up as a platform device
and some registers are configured to enable the USB host function.
The hardware driving the USB port is the on-chip USB0 block in
the sh7724 processor configured as USB host controller.
Signed-off-by: default avatarMagnus Damm <damm@igel.co.jp>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 64614e66
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/smc91x.h> #include <linux/smc91x.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/usb/r8a66597.h>
#include <video/sh_mobile_lcdc.h> #include <video/sh_mobile_lcdc.h>
#include <media/sh_mobile_ceu.h> #include <media/sh_mobile_ceu.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -302,6 +303,34 @@ static struct platform_device sh_eth_device = { ...@@ -302,6 +303,34 @@ static struct platform_device sh_eth_device = {
.resource = sh_eth_resources, .resource = sh_eth_resources,
}; };
static struct r8a66597_platdata sh7724_usb0_host_data = {
};
static struct resource sh7724_usb0_host_resources[] = {
[0] = {
.start = 0xa4d80000,
.end = 0xa4d800ff,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = 65,
.end = 65,
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_LOW,
},
};
static struct platform_device sh7724_usb0_host_device = {
.name = "r8a66597_hcd",
.id = 0,
.dev = {
.dma_mask = NULL, /* not use dma */
.coherent_dma_mask = 0xffffffff,
.platform_data = &sh7724_usb0_host_data,
},
.num_resources = ARRAY_SIZE(sh7724_usb0_host_resources),
.resource = sh7724_usb0_host_resources,
};
static struct platform_device *ms7724se_devices[] __initdata = { static struct platform_device *ms7724se_devices[] __initdata = {
&heartbeat_device, &heartbeat_device,
&smc91x_eth_device, &smc91x_eth_device,
...@@ -311,6 +340,7 @@ static struct platform_device *ms7724se_devices[] __initdata = { ...@@ -311,6 +340,7 @@ static struct platform_device *ms7724se_devices[] __initdata = {
&ceu1_device, &ceu1_device,
&keysc_device, &keysc_device,
&sh_eth_device, &sh_eth_device,
&sh7724_usb0_host_device,
}; };
#define EEPROM_OP 0xBA206000 #define EEPROM_OP 0xBA206000
...@@ -364,6 +394,7 @@ static void __init sh_eth_init(void) ...@@ -364,6 +394,7 @@ static void __init sh_eth_init(void)
#define SW4140 0xBA201000 #define SW4140 0xBA201000
#define FPGA_OUT 0xBA200400 #define FPGA_OUT 0xBA200400
#define PORT_HIZA 0xA4050158 #define PORT_HIZA 0xA4050158
#define PORT_MSELCRB 0xA4050182
#define SW41_A 0x0100 #define SW41_A 0x0100
#define SW41_B 0x0200 #define SW41_B 0x0200
...@@ -373,6 +404,7 @@ static void __init sh_eth_init(void) ...@@ -373,6 +404,7 @@ static void __init sh_eth_init(void)
#define SW41_F 0x2000 #define SW41_F 0x2000
#define SW41_G 0x4000 #define SW41_G 0x4000
#define SW41_H 0x8000 #define SW41_H 0x8000
static int __init devices_setup(void) static int __init devices_setup(void)
{ {
u16 sw = ctrl_inw(SW4140); /* select camera, monitor */ u16 sw = ctrl_inw(SW4140); /* select camera, monitor */
...@@ -385,6 +417,12 @@ static int __init devices_setup(void) ...@@ -385,6 +417,12 @@ static int __init devices_setup(void)
(1 << 14)), /* RMII */ (1 << 14)), /* RMII */
FPGA_OUT); FPGA_OUT);
/* turn on USB clocks, use external clock */
ctrl_outw((ctrl_inw(PORT_MSELCRB) & ~0xc000) | 0x8000, PORT_MSELCRB);
/* enable USB0 port */
ctrl_outw(0x0600, 0xa40501d4);
/* enable IRQ 0,1,2 */ /* enable IRQ 0,1,2 */
gpio_request(GPIO_FN_INTC_IRQ0, NULL); gpio_request(GPIO_FN_INTC_IRQ0, NULL);
gpio_request(GPIO_FN_INTC_IRQ1, NULL); gpio_request(GPIO_FN_INTC_IRQ1, NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment