xref: /rk3399_rockchip-uboot/drivers/misc/misc_otp.c (revision 6a8fa29e04ab3f8082d56d7e5ad1169310ec9d9b)
1*6a8fa29eSJason Zhu // SPDX-License-Identifier:     GPL-2.0+
2*6a8fa29eSJason Zhu /*
3*6a8fa29eSJason Zhu  * Copyright (C) 2020 Rockchip Electronics Co., Ltd
4*6a8fa29eSJason Zhu  */
5*6a8fa29eSJason Zhu 
6*6a8fa29eSJason Zhu #include <common.h>
7*6a8fa29eSJason Zhu #include <dm.h>
8*6a8fa29eSJason Zhu #include <dm/uclass.h>
9*6a8fa29eSJason Zhu #include <misc.h>
10*6a8fa29eSJason Zhu 
11*6a8fa29eSJason Zhu struct udevice *misc_otp_get_device(u32 capability)
12*6a8fa29eSJason Zhu {
13*6a8fa29eSJason Zhu 	const struct misc_ops *ops;
14*6a8fa29eSJason Zhu 	struct udevice *dev;
15*6a8fa29eSJason Zhu 	struct uclass *uc;
16*6a8fa29eSJason Zhu 	int ret;
17*6a8fa29eSJason Zhu 	u32 cap;
18*6a8fa29eSJason Zhu 
19*6a8fa29eSJason Zhu 	ret = uclass_get(UCLASS_MISC, &uc);
20*6a8fa29eSJason Zhu 	if (ret)
21*6a8fa29eSJason Zhu 		return NULL;
22*6a8fa29eSJason Zhu 
23*6a8fa29eSJason Zhu 	for (uclass_first_device(UCLASS_MISC, &dev);
24*6a8fa29eSJason Zhu 	     dev;
25*6a8fa29eSJason Zhu 	     uclass_next_device(&dev)) {
26*6a8fa29eSJason Zhu 		ops = device_get_ops(dev);
27*6a8fa29eSJason Zhu 		if (!ops || !ops->ioctl)
28*6a8fa29eSJason Zhu 			continue;
29*6a8fa29eSJason Zhu 
30*6a8fa29eSJason Zhu 		cap = ops->ioctl(dev, IOCTL_REQ_CAPABILITY, NULL);
31*6a8fa29eSJason Zhu 		if ((cap & capability) == capability)
32*6a8fa29eSJason Zhu 			return dev;
33*6a8fa29eSJason Zhu 	}
34*6a8fa29eSJason Zhu 
35*6a8fa29eSJason Zhu 	return NULL;
36*6a8fa29eSJason Zhu }
37*6a8fa29eSJason Zhu 
38*6a8fa29eSJason Zhu int misc_otp_read(struct udevice *dev, int offset, void *buf, int size)
39*6a8fa29eSJason Zhu {
40*6a8fa29eSJason Zhu 	return misc_read(dev, offset, buf, size);
41*6a8fa29eSJason Zhu }
42*6a8fa29eSJason Zhu 
43*6a8fa29eSJason Zhu int misc_otp_write(struct udevice *dev, int offset, const void *buf, int size)
44*6a8fa29eSJason Zhu {
45*6a8fa29eSJason Zhu 	return misc_write(dev, offset, (void *)buf, size);
46*6a8fa29eSJason Zhu }
47