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
,