1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0+
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Marvell Armada AP and CP110 helper
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Copyright (C) 2018 Marvell
6*4882a593Smuzhiyun *
7*4882a593Smuzhiyun * Gregory Clement <gregory.clement@bootlin.com>
8*4882a593Smuzhiyun *
9*4882a593Smuzhiyun */
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun #include "armada_ap_cp_helper.h"
12*4882a593Smuzhiyun #include <linux/device.h>
13*4882a593Smuzhiyun #include <linux/of.h>
14*4882a593Smuzhiyun #include <linux/of_address.h>
15*4882a593Smuzhiyun
ap_cp_unique_name(struct device * dev,struct device_node * np,const char * name)16*4882a593Smuzhiyun char *ap_cp_unique_name(struct device *dev, struct device_node *np,
17*4882a593Smuzhiyun const char *name)
18*4882a593Smuzhiyun {
19*4882a593Smuzhiyun const __be32 *reg;
20*4882a593Smuzhiyun u64 addr;
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun /* Do not create a name if there is no clock */
23*4882a593Smuzhiyun if (!name)
24*4882a593Smuzhiyun return NULL;
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun reg = of_get_property(np, "reg", NULL);
27*4882a593Smuzhiyun addr = of_translate_address(np, reg);
28*4882a593Smuzhiyun return devm_kasprintf(dev, GFP_KERNEL, "%llx-%s",
29*4882a593Smuzhiyun (unsigned long long)addr, name);
30*4882a593Smuzhiyun }
31