xref: /rk3399_rockchip-uboot/drivers/keylad/keylad-uclass.c (revision 426736b6bf990212cf6db1013ac375975d9bc803)
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