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 = dev_get_uclass_priv(dev);
25 static int syscon_pre_probe(struct udevice *dev)
27 struct syscon_uc_info *priv = dev_get_uclass_priv(dev);
29 return regmap_init_mem(dev, &priv->regmap);
32 struct regmap *syscon_get_regmap_by_driver_data(ulong driver_data)
38 ret = uclass_get(UCLASS_SYSCON, &uc);
41 uclass_foreach_dev(dev, uc) {
42 if (dev->driver_data == driver_data) {
43 struct syscon_uc_info *priv;
46 ret = device_probe(dev);
49 priv = dev_get_uclass_priv(dev);
55 return ERR_PTR(-ENOENT);
58 void *syscon_get_first_range(ulong driver_data)
62 map = syscon_get_regmap_by_driver_data(driver_data);
65 return regmap_get_range(map, 0);
68 UCLASS_DRIVER(syscon) = {
71 .per_device_auto_alloc_size = sizeof(struct syscon_uc_info),
72 .pre_probe = syscon_pre_probe,