Merge tag 'driver-core-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / arch / arm / mach-imx / mmdc.c
index a3dedc309bbc258377fcdd7039b9f18a3ea6ad10..a377f95033aecc6edaab43a7d012df3997b27017 100644 (file)
 #define BP_MMDC_MAPSR_PSD      0
 #define BP_MMDC_MAPSR_PSS      4
 
+#define MMDC_MDMISC            0x18
+#define BM_MMDC_MDMISC_DDR_TYPE        0x18
+#define BP_MMDC_MDMISC_DDR_TYPE        0x3
+
+static int ddr_type;
+
 static int imx_mmdc_probe(struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
@@ -31,6 +37,12 @@ static int imx_mmdc_probe(struct platform_device *pdev)
        mmdc_base = of_iomap(np, 0);
        WARN_ON(!mmdc_base);
 
+       reg = mmdc_base + MMDC_MDMISC;
+       /* Get ddr type */
+       val = readl_relaxed(reg);
+       ddr_type = (val & BM_MMDC_MDMISC_DDR_TYPE) >>
+                BP_MMDC_MDMISC_DDR_TYPE;
+
        reg = mmdc_base + MMDC_MAPSR;
 
        /* Enable automatic power saving */
@@ -51,6 +63,11 @@ static int imx_mmdc_probe(struct platform_device *pdev)
        return 0;
 }
 
+int imx_mmdc_get_ddr_type(void)
+{
+       return ddr_type;
+}
+
 static struct of_device_id imx_mmdc_dt_ids[] = {
        { .compatible = "fsl,imx6q-mmdc", },
        { /* sentinel */ }