rk30:add rk30_mux_api_get function for iomux
authorlw <lw@rock-chips.com>
Sat, 24 Mar 2012 02:02:27 +0000 (10:02 +0800)
committerlw <lw@rock-chips.com>
Sat, 24 Mar 2012 02:02:27 +0000 (10:02 +0800)
arch/arm/mach-rk30/include/mach/iomux.h
arch/arm/mach-rk30/iomux.c

index f6dc3c81cd1d64998cfa1775cb4a294a4c7fa4e2..6a0c68ebe8e3044cdd1c49b16ca43dd4fc59aafd 100755 (executable)
@@ -829,5 +829,6 @@ struct mux_config {
 
 extern int __init rk30_iomux_init(void);
 extern void rk30_mux_api_set(char *name, unsigned int mode);
+extern int rk30_mux_api_get(char *name);
 
 #endif
index 2c546fd7ebd40a52f062de316d3358979378e85d..3eb8be6c10b2a41973b5bd9d09c089e8c57d2794 100755 (executable)
@@ -240,8 +240,7 @@ void rk30_mux_set(struct mux_config *cfg)
        int regValue = 0;
        int mask;
        
-       mask = ((1<<(cfg->interleave))-1)<<cfg->offset << 16;
-       //regValue = readl(cfg->mux_reg);
+       mask = (((1<<(cfg->interleave))-1)<<cfg->offset) << 16;
        regValue |= mask;
        regValue |=(cfg->mode<<cfg->offset);
 #ifdef IOMUX_DBG
@@ -373,3 +372,24 @@ void rk30_mux_api_set(char *name, unsigned int mode)
 }
 EXPORT_SYMBOL(rk30_mux_api_set);
 
+
+int rk30_mux_api_get(char *name)
+{
+       int i,ret=0;
+       if (!name) {
+               return -1;
+       }
+       for(i=0;i<ARRAY_SIZE(rk30_muxs);i++)
+       {
+               if (!strcmp(rk30_muxs[i].name, name))
+               {
+                       ret = readl(rk30_muxs[i].mux_reg);
+                       ret = (ret >> rk30_muxs[i].offset) &((1<<(rk30_muxs[i].interleave))-1);
+                       return ret;
+               }
+       }
+
+       return -1;
+}
+EXPORT_SYMBOL(rk30_mux_api_get);
+