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 int syscon_get_by_driver_data(ulong driver_data, struct udevice **devp)
41 ret = uclass_get(UCLASS_SYSCON, &uc);
44 uclass_foreach_dev(dev, uc) {
45 if (dev->driver_data == driver_data) {
47 return device_probe(dev);
54 struct regmap *syscon_get_regmap_by_driver_data(ulong driver_data)
56 struct syscon_uc_info *priv;
60 ret = syscon_get_by_driver_data(driver_data, &dev);
63 priv = dev_get_uclass_priv(dev);
68 void *syscon_get_first_range(ulong driver_data)
72 map = syscon_get_regmap_by_driver_data(driver_data);
75 return regmap_get_range(map, 0);
78 UCLASS_DRIVER(syscon) = {
81 .per_device_auto_alloc_size = sizeof(struct syscon_uc_info),
82 .pre_probe = syscon_pre_probe,