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