summaryrefslogtreecommitdiff
path: root/drivers/soc/samsung/exynos-chipid.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/soc/samsung/exynos-chipid.c')
-rw-r--r--drivers/soc/samsung/exynos-chipid.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/drivers/soc/samsung/exynos-chipid.c b/drivers/soc/samsung/exynos-chipid.c
index bcf691f2b650..006a95feb618 100644
--- a/drivers/soc/samsung/exynos-chipid.c
+++ b/drivers/soc/samsung/exynos-chipid.c
@@ -9,16 +9,13 @@
*/
#include <linux/io.h>
+#include <linux/mfd/syscon.h>
#include <linux/of.h>
-#include <linux/of_address.h>
+#include <linux/regmap.h>
#include <linux/slab.h>
+#include <linux/soc/samsung/exynos-chipid.h>
#include <linux/sys_soc.h>
-#define EXYNOS_SUBREV_MASK (0xF << 4)
-#define EXYNOS_MAINREV_MASK (0xF << 0)
-#define EXYNOS_REV_MASK (EXYNOS_SUBREV_MASK | EXYNOS_MAINREV_MASK)
-#define EXYNOS_MASK 0xFFFFF000
-
static const struct exynos_soc_id {
const char *name;
unsigned int id;
@@ -51,29 +48,24 @@ static const char * __init product_id_to_soc_id(unsigned int product_id)
int __init exynos_chipid_early_init(void)
{
struct soc_device_attribute *soc_dev_attr;
- void __iomem *exynos_chipid_base;
struct soc_device *soc_dev;
struct device_node *root;
- struct device_node *np;
+ struct regmap *regmap;
u32 product_id;
u32 revision;
+ int ret;
- /* look up for chipid node */
- np = of_find_compatible_node(NULL, NULL, "samsung,exynos4210-chipid");
- if (!np)
- return -ENODEV;
-
- exynos_chipid_base = of_iomap(np, 0);
- of_node_put(np);
-
- if (!exynos_chipid_base) {
- pr_err("Failed to map SoC chipid\n");
- return -ENXIO;
+ regmap = syscon_regmap_lookup_by_compatible("samsung,exynos4210-chipid");
+ if (IS_ERR(regmap)) {
+ pr_err("Failed to get CHIPID regmap\n");
+ return PTR_ERR(regmap);
}
- product_id = readl_relaxed(exynos_chipid_base);
+ ret = regmap_read(regmap, EXYNOS_CHIPID_REG_PRO_ID, &product_id);
+ if (ret < 0)
+ return ret;
+
revision = product_id & EXYNOS_REV_MASK;
- iounmap(exynos_chipid_base);
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
if (!soc_dev_attr)