xref: /openbmc/u-boot/drivers/misc/tegra_car.c (revision 8502f9f6)
1 /*
2  * Copyright (c) 2016, NVIDIA CORPORATION.
3  *
4  * SPDX-License-Identifier: GPL-2.0
5  */
6 
7 #include <common.h>
8 #include <dm.h>
9 #include <dm/lists.h>
10 #include <dm/root.h>
11 
12 /**
13  * The CAR exposes multiple different services. We create a sub-device for
14  * each separate type of service, since each device must be of the appropriate
15  * UCLASS.
16  */
17 static int tegra_car_bpmp_bind(struct udevice *dev)
18 {
19 	int ret;
20 	struct udevice *child;
21 
22 	debug("%s(dev=%p)\n", __func__, dev);
23 
24 	ret = device_bind_driver_to_node(dev, "tegra_car_clk", "tegra_car_clk",
25 					 dev_ofnode(dev), &child);
26 	if (ret)
27 		return ret;
28 
29 	ret = device_bind_driver_to_node(dev, "tegra_car_reset",
30 					 "tegra_car_reset", dev_ofnode(dev),
31 					 &child);
32 	if (ret)
33 		return ret;
34 
35 	return 0;
36 }
37 
38 static int tegra_car_bpmp_probe(struct udevice *dev)
39 {
40 	debug("%s(dev=%p)\n", __func__, dev);
41 
42 	return 0;
43 }
44 
45 static int tegra_car_bpmp_remove(struct udevice *dev)
46 {
47 	debug("%s(dev=%p)\n", __func__, dev);
48 
49 	return 0;
50 }
51 
52 static const struct udevice_id tegra_car_bpmp_ids[] = {
53 	{ .compatible = "nvidia,tegra20-car" },
54 	{ .compatible = "nvidia,tegra30-car" },
55 	{ .compatible = "nvidia,tegra114-car" },
56 	{ .compatible = "nvidia,tegra124-car" },
57 	{ .compatible = "nvidia,tegra210-car" },
58 	{ }
59 };
60 
61 U_BOOT_DRIVER(tegra_car_bpmp) = {
62 	.name		= "tegra_car",
63 	.id		= UCLASS_MISC,
64 	.of_match	= tegra_car_bpmp_ids,
65 	.bind		= tegra_car_bpmp_bind,
66 	.probe		= tegra_car_bpmp_probe,
67 	.remove		= tegra_car_bpmp_remove,
68 };
69