diff mbox

sh: add r8a66597 usb0 host to the se7724 board

Message ID 20090703094003.17570.77651.sendpatchset@rx1.opensource.se (mailing list archive)
State Accepted
Headers show

Commit Message

Magnus Damm July 3, 2009, 9:40 a.m. UTC
From: Magnus Damm <damm@igel.co.jp>

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: Magnus Damm <damm@igel.co.jp>
---

 arch/sh/boards/mach-se/7724/setup.c |   38 +++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Kuninori Morimoto July 6, 2009, 12:45 a.m. UTC | #1
Hi Magnus

> 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: Magnus Damm <damm@igel.co.jp>
> ---

ms7724se board only ?
I have planned to add USB host support to setup-sh7724.c.

Best regards
--
Kuninori Morimoto
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Magnus Damm July 6, 2009, 2:35 a.m. UTC | #2
On Mon, Jul 6, 2009 at 9:45 AM, Kuninori
Morimoto<morimoto.kuninori@renesas.com> wrote:
>> 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: Magnus Damm <damm@igel.co.jp>
>> ---
>
> ms7724se board only ?
> I have planned to add USB host support to setup-sh7724.c.

The USB block is of course cpu-specific, but the if/how the USB block
is used is board specific. The USB block may for instance be used as
USB function instead of host. We also have the ->port_power() platform
data callback that may need to be implemented on some boards. So
enabling the USB on per-board basis makes sense at this point in my
opinion.

Cheers,

/ magnus
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- 0001/arch/sh/boards/mach-se/7724/setup.c
+++ work/arch/sh/boards/mach-se/7724/setup.c	2009-07-03 16:34:34.000000000 +0900
@@ -19,6 +19,7 @@ 
 #include <linux/smc91x.h>
 #include <linux/gpio.h>
 #include <linux/input.h>
+#include <linux/usb/r8a66597.h>
 #include <video/sh_mobile_lcdc.h>
 #include <media/sh_mobile_ceu.h>
 #include <asm/io.h>
@@ -302,6 +303,34 @@  static struct platform_device sh_eth_dev
 	.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 = {
 	&heartbeat_device,
 	&smc91x_eth_device,
@@ -311,6 +340,7 @@  static struct platform_device *ms7724se_
 	&ceu1_device,
 	&keysc_device,
 	&sh_eth_device,
+	&sh7724_usb0_host_device,
 };
 
 #define EEPROM_OP   0xBA206000
@@ -364,6 +394,7 @@  static void __init sh_eth_init(void)
 #define SW4140    0xBA201000
 #define FPGA_OUT  0xBA200400
 #define PORT_HIZA 0xA4050158
+#define PORT_MSELCRB 0xA4050182
 
 #define SW41_A    0x0100
 #define SW41_B    0x0200
@@ -373,6 +404,7 @@  static void __init sh_eth_init(void)
 #define SW41_F    0x2000
 #define SW41_G    0x4000
 #define SW41_H    0x8000
+
 static int __init devices_setup(void)
 {
 	u16 sw = ctrl_inw(SW4140); /* select camera, monitor */
@@ -385,6 +417,12 @@  static int __init devices_setup(void)
 		    (1 << 14)), /* RMII */
 		  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 */
 	gpio_request(GPIO_FN_INTC_IRQ0, NULL);
 	gpio_request(GPIO_FN_INTC_IRQ1, NULL);