0001
0002
0003
0004
0005
0006
0007 #include <linux/module.h>
0008 #include <linux/of_address.h>
0009 #include <linux/io.h>
0010
0011 #include "hardware.h"
0012 #include "iim.h"
0013
0014 static int mx35_cpu_rev = -1;
0015
0016 static int mx35_read_cpu_rev(void)
0017 {
0018 void __iomem *iim_base;
0019 struct device_node *np;
0020 u32 rev;
0021
0022 np = of_find_compatible_node(NULL, NULL, "fsl,imx35-iim");
0023 iim_base = of_iomap(np, 0);
0024 BUG_ON(!iim_base);
0025
0026 rev = imx_readl(iim_base + MXC_IIMSREV);
0027 switch (rev) {
0028 case 0x00:
0029 return IMX_CHIP_REVISION_1_0;
0030 case 0x10:
0031 return IMX_CHIP_REVISION_2_0;
0032 case 0x11:
0033 return IMX_CHIP_REVISION_2_1;
0034 default:
0035 return IMX_CHIP_REVISION_UNKNOWN;
0036 }
0037 }
0038
0039 int mx35_revision(void)
0040 {
0041 if (mx35_cpu_rev == -1)
0042 mx35_cpu_rev = mx35_read_cpu_rev();
0043
0044 return mx35_cpu_rev;
0045 }
0046 EXPORT_SYMBOL(mx35_revision);