ARM: mach-shmobile: G4EVM USBHS support
PATCH 1/1 ARM: mach-shmobile: G4EVM USBHS support
Add G4EVM platform data and a magic setup sequence to initialize the r8a66597 block aka USBHS in sh7377.
Signed-off-by NISHIMOTO Hiroki <[email protected]>
--- arch/arm/mach-shmobile/board-g4evm.c | 59 ++++++++++++++++++++++++++++++++++ 1 files changed, 59 insertions(+), 0 deletions(-)
arch/arm/mach-shmobile/board-g4evm.c +59 -0
@@ -26,6 +26,7 @@#include <linux/mtd/mtd.h> #include <linux/mtd/partitions.h> #include <linux/mtd/physmap.h> +#include <linux/usb/r8a66597.h> #include <linux/io.h> #include <linux/gpio.h> #include <mach/sh7377.h>
@@ -86,9 +87,50 @@ static struct platform_device nor_flash_device = { .resource = nor_flash_resources, }; +/* USBHS */ +void usb_host_port_power (int port,int power) +{ +if (!power)/* only power-on supported for now */ +return ; + +/* set VBOUT/PWEN and EXTLP0 in DVSTCTR */ +__raw_writew (__raw_readw (0xe6890008 ) |0x600 ,0xe6890008 ); +} + +static struct r8a66597_platdata usb_host_data = { + .on_chip =1 , + .port_power = usb_host_port_power, +}; + +static struct resource usb_host_resources[] = { + [0 ] = { + .name ="USBHS" , + .start =0xe6890000 , + .end =0xe68900e5 , + .flags =IORESOURCE_MEM , + }, + [1 ] = { + .start =65 , + .end =65 , + .flags =IORESOURCE_IRQ , + }, +}; + +static struct platform_device usb_host_device = { + .name ="r8a66597_hcd" , + .id =0 , + .dev = { + .platform_data = &usb_host_data, + .dma_mask =NULL , + .coherent_dma_mask =0xffffffff , + }, + .num_resources =ARRAY_SIZE (usb_host_resources), + .resource = usb_host_resources, +};static struct platform_device *g4evm_devices[]__initdata = { &nor_flash_device, + &usb_host_device, };static struct map_desc g4evm_io_desc[]__initdata = {
@@ -137,6 +179,23 @@ static void __init g4evm_init(void)gpio_direction_output (GPIO_PORT113 ,1 );gpio_export (GPIO_PORT113 ,1 ); +/* USBHS */ +gpio_request (GPIO_FN_VBUS_0 ,NULL ); +gpio_request (GPIO_FN_PWEN ,NULL ); +gpio_request (GPIO_FN_OVCN ,NULL ); +gpio_request (GPIO_FN_OVCN2 ,NULL ); +gpio_request (GPIO_FN_EXTLP ,NULL ); +gpio_request (GPIO_FN_IDIN ,NULL ); + +/* enable clock in SMSTPCR3 */ +__raw_writel (__raw_readl (0xe615013c ) & ~(1 <<22 ),0xe615013c ); + +/* setup USB phy */ +__raw_writew (0x0200 ,0xe605810a );/* USBCR1 */ +__raw_writew (0x00e0 ,0xe60581c0 );/* CPFCH */ +__raw_writew (0x6010 ,0xe60581c6 );/* CGPOSR */ +__raw_writew (0x8a0a ,0xe605810c );/* USBCR2 */ +sh7377_add_standard_devices ();platform_add_devices (g4evm_devices,ARRAY_SIZE (g4evm_devices));
Signature · 1 line
1.6.3.3