/*
 * Copyright (c) 2016, NVIDIA CORPORATION.
 *
 * SPDX-License-Identifier: GPL-2.0
 */

#include <common.h>
#include <dm.h>
#include <dm/lists.h>
#include <dm/root.h>

/**
 * The CAR exposes multiple different services. We create a sub-device for
 * each separate type of service, since each device must be of the appropriate
 * UCLASS.
 */
static int tegra_car_bpmp_bind(struct udevice *dev)
{
	int ret;
	struct udevice *child;

	debug("%s(dev=%p)\n", __func__, dev);

	ret = device_bind_driver_to_node(dev, "tegra_car_clk", "tegra_car_clk",
					 dev_ofnode(dev), &child);
	if (ret)
		return ret;

	ret = device_bind_driver_to_node(dev, "tegra_car_reset",
					 "tegra_car_reset", dev_ofnode(dev),
					 &child);
	if (ret)
		return ret;

	return 0;
}

static int tegra_car_bpmp_probe(struct udevice *dev)
{
	debug("%s(dev=%p)\n", __func__, dev);

	return 0;
}

static int tegra_car_bpmp_remove(struct udevice *dev)
{
	debug("%s(dev=%p)\n", __func__, dev);

	return 0;
}

static const struct udevice_id tegra_car_bpmp_ids[] = {
	{ .compatible = "nvidia,tegra20-car" },
	{ .compatible = "nvidia,tegra30-car" },
	{ .compatible = "nvidia,tegra114-car" },
	{ .compatible = "nvidia,tegra124-car" },
	{ .compatible = "nvidia,tegra210-car" },
	{ }
};

U_BOOT_DRIVER(tegra_car_bpmp) = {
	.name		= "tegra_car",
	.id		= UCLASS_MISC,
	.of_match	= tegra_car_bpmp_ids,
	.bind		= tegra_car_bpmp_bind,
	.probe		= tegra_car_bpmp_probe,
	.remove		= tegra_car_bpmp_remove,
};
