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