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