]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/arm/mach-omap2/usb-tusb6010.c
Merge tag 'acpi-fixes-3.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[karo-tx-linux.git] / arch / arm / mach-omap2 / usb-tusb6010.c
index c5a3c6f9504e79c8085e12e0aac10904a5177ab3..e832bc7b8e2dd77042ef323d68185d8f9a7dd135 100644 (file)
@@ -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>
 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");