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