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