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