2 * Copyright (C) 2015 Google, Inc
3 * Written by Simon Glass <sjg@chromium.org>
5 * SPDX-License-Identifier: GPL-2.0+
13 #include <dm/device-internal.h>
16 #include <linux/err.h>
18 struct regmap *syscon_get_regmap(struct udevice *dev)
20 struct syscon_uc_info *priv;
22 if (device_get_uclass_id(dev) != UCLASS_SYSCON)
23 return ERR_PTR(-ENOEXEC);
24 priv = dev_get_uclass_priv(dev);
28 static int syscon_pre_probe(struct udevice *dev)
30 struct syscon_uc_info *priv = dev_get_uclass_priv(dev);
32 return regmap_init_mem(dev, &priv->regmap);
35 struct regmap *syscon_get_regmap_by_driver_data(ulong driver_data)
41 ret = uclass_get(UCLASS_SYSCON, &uc);
44 uclass_foreach_dev(dev, uc) {
45 if (dev->driver_data == driver_data) {
46 struct syscon_uc_info *priv;
49 ret = device_probe(dev);
52 priv = dev_get_uclass_priv(dev);
58 return ERR_PTR(-ENODEV);
61 void *syscon_get_first_range(ulong driver_data)
65 map = syscon_get_regmap_by_driver_data(driver_data);
68 return regmap_get_range(map, 0);
71 UCLASS_DRIVER(syscon) = {
74 .per_device_auto_alloc_size = sizeof(struct syscon_uc_info),
75 .pre_probe = syscon_pre_probe,