diff options
Diffstat (limited to 'arch/arm/mach-omap2/usb-tusb6010.c')
| -rw-r--r-- | arch/arm/mach-omap2/usb-tusb6010.c | 62 | 
1 files changed, 30 insertions, 32 deletions
diff --git a/arch/arm/mach-omap2/usb-tusb6010.c b/arch/arm/mach-omap2/usb-tusb6010.c index c5a3c6f9504..e832bc7b8e2 100644 --- a/arch/arm/mach-omap2/usb-tusb6010.c +++ b/arch/arm/mach-omap2/usb-tusb6010.c @@ -8,6 +8,7 @@   * published by the Free Software Foundation.   */ +#include <linux/err.h>  #include <linux/string.h>  #include <linux/types.h>  #include <linux/errno.h> @@ -26,6 +27,24 @@  static u8		async_cs, sync_cs;  static unsigned		refclk_psec; +static struct gpmc_settings tusb_async = { +	.wait_on_read	= true, +	.wait_on_write	= true, +	.device_width	= GPMC_DEVWIDTH_16BIT, +	.mux_add_data	= GPMC_MUX_AD, +}; + +static struct gpmc_settings tusb_sync = { +	.burst_read	= true, +	.burst_write	= true, +	.sync_read	= true, +	.sync_write	= true, +	.wait_on_read	= true, +	.wait_on_write	= true, +	.burst_len	= GPMC_BURST_16, +	.device_width	= GPMC_DEVWIDTH_16BIT, +	.mux_add_data	= GPMC_MUX_AD, +};  /* NOTE:  timings are from tusb 6010 datasheet Rev 1.8, 12-Sept 2006 */ @@ -37,8 +56,6 @@ static int tusb_set_async_mode(unsigned sysclk_ps)  	memset(&dev_t, 0, sizeof(dev_t)); -	dev_t.mux = true; -  	dev_t.t_ceasu = 8 * 1000;  	dev_t.t_avdasu = t_acsnh_advnh - 7000;  	dev_t.t_ce_avd = 1000; @@ -52,7 +69,7 @@ static int tusb_set_async_mode(unsigned sysclk_ps)  	dev_t.t_wpl = 300;  	dev_t.cyc_aavdh_we = 1; -	gpmc_calc_timings(&t, &dev_t); +	gpmc_calc_timings(&t, &tusb_async, &dev_t);  	return gpmc_cs_set_timings(async_cs, &t);  } @@ -65,10 +82,6 @@ static int tusb_set_sync_mode(unsigned sysclk_ps)  	memset(&dev_t, 0, sizeof(dev_t)); -	dev_t.mux = true; -	dev_t.sync_read = true; -	dev_t.sync_write = true; -  	dev_t.clk = 11100;  	dev_t.t_bacc = 1000;  	dev_t.t_ces = 1000; @@ -84,7 +97,7 @@ static int tusb_set_sync_mode(unsigned sysclk_ps)  	dev_t.cyc_wpl = 6;  	dev_t.t_ce_rdyz = 7000; -	gpmc_calc_timings(&t, &dev_t); +	gpmc_calc_timings(&t, &tusb_sync, &dev_t);  	return gpmc_cs_set_timings(sync_cs, &t);  } @@ -165,18 +178,12 @@ tusb6010_setup_interface(struct musb_hdrc_platform_data *data,  		return status;  	}  	tusb_resources[0].end = tusb_resources[0].start + 0x9ff; +	tusb_async.wait_pin = waitpin;  	async_cs = async; -	gpmc_cs_write_reg(async, GPMC_CS_CONFIG1, -			  GPMC_CONFIG1_PAGE_LEN(2) -			| GPMC_CONFIG1_WAIT_READ_MON -			| GPMC_CONFIG1_WAIT_WRITE_MON -			| GPMC_CONFIG1_WAIT_PIN_SEL(waitpin) -			| GPMC_CONFIG1_READTYPE_ASYNC -			| GPMC_CONFIG1_WRITETYPE_ASYNC -			| GPMC_CONFIG1_DEVICESIZE_16 -			| GPMC_CONFIG1_DEVICETYPE_NOR -			| GPMC_CONFIG1_MUXADDDATA); +	status = gpmc_cs_program_settings(async_cs, &tusb_async); +	if (status < 0) +		return status;  	/* SYNC region, primarily for DMA */  	status = gpmc_cs_request(sync, SZ_16M, (unsigned long *) @@ -186,21 +193,12 @@ tusb6010_setup_interface(struct musb_hdrc_platform_data *data,  		return status;  	}  	tusb_resources[1].end = tusb_resources[1].start + 0x9ff; +	tusb_sync.wait_pin = waitpin;  	sync_cs = sync; -	gpmc_cs_write_reg(sync, GPMC_CS_CONFIG1, -			  GPMC_CONFIG1_READMULTIPLE_SUPP -			| GPMC_CONFIG1_READTYPE_SYNC -			| GPMC_CONFIG1_WRITEMULTIPLE_SUPP -			| GPMC_CONFIG1_WRITETYPE_SYNC -			| GPMC_CONFIG1_PAGE_LEN(2) -			| GPMC_CONFIG1_WAIT_READ_MON -			| GPMC_CONFIG1_WAIT_WRITE_MON -			| GPMC_CONFIG1_WAIT_PIN_SEL(waitpin) -			| GPMC_CONFIG1_DEVICESIZE_16 -			| GPMC_CONFIG1_DEVICETYPE_NOR -			| GPMC_CONFIG1_MUXADDDATA -			/* fclk divider gets set later */ -			); + +	status = gpmc_cs_program_settings(sync_cs, &tusb_sync); +	if (status < 0) +		return status;  	/* IRQ */  	status = gpio_request_one(irq, GPIOF_IN, "TUSB6010 irq");  |