linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / arm / mach-sa1100 / cpu-sa1110.c
index 6395977..04c94ab 100644 (file)
  *      SDRAM reads (rev A0, B0, B1)
  *
  * We ignore rev. A0 and B0 devices; I don't think they're worth supporting.
- *
- * The SDRAM type can be passed on the command line as cpu_sa1110.sdram=type
  */
-#include <linux/moduleparam.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
@@ -38,7 +35,6 @@
 static struct cpufreq_driver sa1110_driver;
 
 struct sdram_params {
-       const char name[16];
        u_char  rows;           /* bits                          */
        u_char  cas_latency;    /* cycles                        */
        u_char  tck;            /* clock cycle time (ns)         */
@@ -54,53 +50,54 @@ struct sdram_info {
        u_int   mdcas[3];
 };
 
-static struct sdram_params sdram_tbl[] __initdata = {
-       {       /* Toshiba TC59SM716 CL2 */
-               .name           = "TC59SM716-CL2",
-               .rows           = 12,
-               .tck            = 10,
-               .trcd           = 20,
-               .trp            = 20,
-               .twr            = 10,
-               .refresh        = 64000,
-               .cas_latency    = 2,
-       }, {    /* Toshiba TC59SM716 CL3 */
-               .name           = "TC59SM716-CL3",
-               .rows           = 12,
-               .tck            = 8,
-               .trcd           = 20,
-               .trp            = 20,
-               .twr            = 8,
-               .refresh        = 64000,
-               .cas_latency    = 3,
-       }, {    /* Samsung K4S641632D TC75 */
-               .name           = "K4S641632D",
-               .rows           = 14,
-               .tck            = 9,
-               .trcd           = 27,
-               .trp            = 20,
-               .twr            = 9,
-               .refresh        = 64000,
-               .cas_latency    = 3,
-       }, {    /* Samsung KM416S4030CT */
-               .name           = "KM416S4030CT",
-               .rows           = 13,
-               .tck            = 8,
-               .trcd           = 24,   /* 3 CLKs */
-               .trp            = 24,   /* 3 CLKs */
-               .twr            = 16,   /* Trdl: 2 CLKs */
-               .refresh        = 64000,
-               .cas_latency    = 3,
-       }, {    /* Winbond W982516AH75L CL3 */
-               .name           = "W982516AH75L",
-               .rows           = 16,
-               .tck            = 8,
-               .trcd           = 20,
-               .trp            = 20,
-               .twr            = 8,
-               .refresh        = 64000,
-               .cas_latency    = 3,
-       },
+static struct sdram_params tc59sm716_cl2_params __initdata = {
+       .rows                   = 12,
+       .tck                    = 10,
+       .trcd                   = 20,
+       .trp                    = 20,
+       .twr                    = 10,
+       .refresh                = 64000,
+       .cas_latency            = 2,
+};
+
+static struct sdram_params tc59sm716_cl3_params __initdata = {
+       .rows                   = 12,
+       .tck                    = 8,
+       .trcd                   = 20,
+       .trp                    = 20,
+       .twr                    = 8,
+       .refresh                = 64000,
+       .cas_latency            = 3,
+};
+
+static struct sdram_params samsung_k4s641632d_tc75 __initdata = {
+       .rows                   = 14,
+       .tck                    = 9,
+       .trcd                   = 27,
+       .trp                    = 20,
+       .twr                    = 9,
+       .refresh                = 64000,
+       .cas_latency            = 3,
+};
+
+static struct sdram_params samsung_km416s4030ct __initdata = {
+       .rows                   = 13,
+       .tck                    = 8,
+       .trcd                   = 24,   /* 3 CLKs */
+       .trp                    = 24,   /* 3 CLKs */
+       .twr                    = 16,   /* Trdl: 2 CLKs */
+       .refresh                = 64000,
+       .cas_latency            = 3,
+};
+
+static struct sdram_params wbond_w982516ah75l_cl3_params __initdata = {
+       .rows                   = 16,
+       .tck                    = 8,
+       .trcd                   = 20,
+       .trp                    = 20,
+       .twr                    = 8,
+       .refresh                = 64000,
+       .cas_latency            = 3,
 };
 
 static struct sdram_params sdram_params;
@@ -339,36 +336,19 @@ static struct cpufreq_driver sa1110_driver = {
        .name           = "sa1110",
 };
 
-static struct sdram_params *sa1110_find_sdram(const char *name)
-{
-       struct sdram_params *sdram;
-
-       for (sdram = sdram_tbl; sdram < sdram_tbl + ARRAY_SIZE(sdram_tbl); sdram++)
-               if (strcmp(name, sdram->name) == 0)
-                       return sdram;
-
-       return NULL;
-}
-
-static char sdram_name[16];
-
 static int __init sa1110_clk_init(void)
 {
-       struct sdram_params *sdram;
-       const char *name = sdram_name;
+       struct sdram_params *sdram = NULL;
 
-       if (!name[0]) {
-               if (machine_is_assabet())
-                       name = "TC59SM716-CL3";
+       if (machine_is_assabet())
+               sdram = &tc59sm716_cl3_params;
 
-               if (machine_is_pt_system3())
-                       name = "K4S641632D";
+       if (machine_is_pt_system3())
+               sdram = &samsung_k4s641632d_tc75;
 
-               if (machine_is_h3100())
-                       name = "KM416S4030CT";
-       }
+       if (machine_is_h3100())
+               sdram = &samsung_km416s4030ct;
 
-       sdram = sa1110_find_sdram(name);
        if (sdram) {
                printk(KERN_DEBUG "SDRAM: tck: %d trcd: %d trp: %d"
                        " twr: %d refresh: %d cas_latency: %d\n",
@@ -383,5 +363,4 @@ static int __init sa1110_clk_init(void)
        return 0;
 }
 
-module_param_string(sdram, sdram_name, sizeof(sdram_name), 0);
 arch_initcall(sa1110_clk_init);