nand flash cs占用iomux的修改
authorroot <root@dxj.(none)>
Wed, 28 Jul 2010 02:36:29 +0000 (10:36 +0800)
committerroot <root@dxj.(none)>
Wed, 28 Jul 2010 02:36:29 +0000 (10:36 +0800)
arch/arm/mach-rk2818/include/mach/iomux.h
arch/arm/mach-rk2818/iomux.c
drivers/mtd/nand/rk2818_nand.c

index f37c9e1a67931895c3bf2a8397e37906e633f9cc..281f037f2727a9702a89c340d4c8a622e7d8f170 100644 (file)
@@ -221,5 +221,7 @@ struct mux_config {
 
 extern int rk2818_iomux_init(void);
 extern void rk2818_mux_api_set(char *name, unsigned int mode);
+extern unsigned int rk2818_mux_api_get(char *name);
+
 #endif
 
index bcd062ebcb7f089c74650a8b73579e944bc76ec8..954a5e983182426b89181c2087fd359325462b29 100644 (file)
@@ -127,3 +127,19 @@ void rk2818_mux_api_set(char *name, unsigned int mode)
        }
 }
 EXPORT_SYMBOL(rk2818_mux_api_set);
+
+unsigned int rk2818_mux_api_get(char *name)
+{
+    int i; 
+       for(i=0;i<ARRAY_SIZE(rk2818_muxs);i++)
+       {
+               //if(rockchip_muxs[i].name == cfg->name)
+               if (!strcmp(rk2818_muxs[i].name, name))
+               {
+                       return rk2818_muxs[i].mode;
+               }
+       }
+       return 0xff;
+}
+EXPORT_SYMBOL(rk2818_mux_api_get);
+
index 9e317192f12cb510aabc578921767a7445e7417e..6e0cba2c46c81dcaad662d96fb8f61c249d0dc74 100644 (file)
@@ -788,7 +788,9 @@ static int rk2818_nand_probe(struct platform_device *pdev)
        int err = 0;
        pNANDC pRK28NC;
        u_char  maf_id,dev_id,ext_id3,ext_id4;
-
+       u32 iomux_mode0,iomux_mode1,iomux_mode2,iomux_mode3,iomux_mode4;
+    struct nand_chip *chip;
+    
 #ifdef CONFIG_MTD_PARTITIONS
        struct mtd_partition *partitions = NULL;
        int num_partitions = 0;
@@ -882,7 +884,12 @@ static int rk2818_nand_probe(struct platform_device *pdev)
                this->options |= NAND_BUSWIDTH_16;
                this->ecc.layout = &nand_hw_eccoob_16;
        }
-
+      //±£³ÖIO MUXԭʼֵ
+      iomux_mode0=rk2818_mux_api_get(GPIOA5_FLASHCS1_SEL_NAME);
+      iomux_mode1=rk2818_mux_api_get(GPIOA6_FLASHCS2_SEL_NAME);
+      iomux_mode2=rk2818_mux_api_get(GPIOA7_FLASHCS3_SEL_NAME);
+      iomux_mode3=rk2818_mux_api_get(GPIOE_SPI1_FLASH_SEL1_NAME);
+      iomux_mode4=rk2818_mux_api_get(GPIOE_SPI1_FLASH_SEL_NAME);
       // iomux flash  cs1~cs7
       rk2818_mux_api_set(GPIOA5_FLASHCS1_SEL_NAME, IOMUXB_FLASH_CS1);
       rk2818_mux_api_set(GPIOA6_FLASHCS2_SEL_NAME, IOMUXB_FLASH_CS2);
@@ -899,6 +906,27 @@ static int rk2818_nand_probe(struct platform_device *pdev)
                goto outscan;
        }
 
+       //¸ù¾ÝƬѡÇé¿ö»Ö¸´IO MUXԭʼֵ
+    chip = mtd->priv;
+    switch(chip->numchips)
+    {
+        case 1:
+            rk2818_mux_api_set(GPIOA5_FLASHCS1_SEL_NAME, iomux_mode0);
+        case 2:
+            rk2818_mux_api_set(GPIOA6_FLASHCS2_SEL_NAME, iomux_mode1);
+        case 3:
+            rk2818_mux_api_set(GPIOA7_FLASHCS3_SEL_NAME, iomux_mode2);
+        case 4:
+            rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL1_NAME, iomux_mode3);  
+        case 5:
+        case 6:
+            rk2818_mux_api_set(GPIOE_SPI1_FLASH_SEL_NAME, iomux_mode4); 
+        case 7:
+        case 8:
+            break;
+        default:
+            DEBUG(MTD_DEBUG_LEVEL0, "RK2818 NAND: numchips error!!!\n");
+    }
 #if 0
       // rk281x dma mode bch must  (1k data + 32 oob) bytes align , so cheat system writesize =1024,oobsize=32
        mtd->writesize = 1024;