1*426736b6STroy Lin // SPDX-License-Identifier: GPL-2.0
2*426736b6STroy Lin /*
3*426736b6STroy Lin * Copyright (c) 2025 Rockchip Electronics Co., Ltd
4*426736b6STroy Lin */
5*426736b6STroy Lin
6*426736b6STroy Lin #include <keylad.h>
7*426736b6STroy Lin
keylad_get_device(void)8*426736b6STroy Lin struct udevice *keylad_get_device(void)
9*426736b6STroy Lin {
10*426736b6STroy Lin const struct dm_keylad_ops *ops;
11*426736b6STroy Lin struct udevice *dev;
12*426736b6STroy Lin struct uclass *uc;
13*426736b6STroy Lin int ret;
14*426736b6STroy Lin
15*426736b6STroy Lin ret = uclass_get(UCLASS_KEYLAD, &uc);
16*426736b6STroy Lin if (ret)
17*426736b6STroy Lin return NULL;
18*426736b6STroy Lin
19*426736b6STroy Lin for (uclass_first_device(UCLASS_KEYLAD, &dev);
20*426736b6STroy Lin dev;
21*426736b6STroy Lin uclass_next_device(&dev)) {
22*426736b6STroy Lin ops = device_get_ops(dev);
23*426736b6STroy Lin if (!ops || !ops->transfer_fwkey)
24*426736b6STroy Lin continue;
25*426736b6STroy Lin
26*426736b6STroy Lin return dev;
27*426736b6STroy Lin }
28*426736b6STroy Lin
29*426736b6STroy Lin return NULL;
30*426736b6STroy Lin }
31*426736b6STroy Lin
keylad_transfer_fwkey(struct udevice * dev,ulong dst,enum RK_FW_KEYID fw_keyid,u32 keylen)32*426736b6STroy Lin int keylad_transfer_fwkey(struct udevice *dev, ulong dst,
33*426736b6STroy Lin enum RK_FW_KEYID fw_keyid, u32 keylen)
34*426736b6STroy Lin {
35*426736b6STroy Lin const struct dm_keylad_ops *ops = device_get_ops(dev);
36*426736b6STroy Lin
37*426736b6STroy Lin if (!ops || !ops->transfer_fwkey)
38*426736b6STroy Lin return -ENOSYS;
39*426736b6STroy Lin
40*426736b6STroy Lin if (dst == 0)
41*426736b6STroy Lin return -EINVAL;
42*426736b6STroy Lin
43*426736b6STroy Lin return ops->transfer_fwkey(dev, dst, fw_keyid, keylen);
44*426736b6STroy Lin }
45*426736b6STroy Lin
46*426736b6STroy Lin UCLASS_DRIVER(keylad) = {
47*426736b6STroy Lin .id = UCLASS_KEYLAD,
48*426736b6STroy Lin .name = "keylad",
49*426736b6STroy Lin };
50