#include <linux/platform_device.h>
#include <test/mock.h>

static inline struct platform_driver *platform_driver_find(const char *name)
{
	struct device_driver *driver;

	driver = driver_find(name, &platform_bus_type);
	if (!driver)
		return NULL;

	return to_platform_driver(driver);
}

/**
 * of_fake_node()
 * @test: the test to associate node with
 * @name: name of the node
 *
 * The &struct device_node returned is allocated as a root node with the given
 * name and otherwise behaves as a real &struct device_node.
 *
 * Returns: the faked &struct device_node
 */
struct device_node *of_fake_node(struct test *test, const char *name);

/**
 * of_fake_probe_platform()
 * @test: the test to associate the fake platform device with
 * @driver: driver to probe
 * @node_name: name of the device node created
 *
 * Creates a &struct platform_device and an associated &struct device_node,
 * probes the provided &struct platform_driver with the &struct platform_device.
 *
 * Returns: the &struct platform_device that was created
 */
struct platform_device *
of_fake_probe_platform(struct test *test,
		       const struct platform_driver *driver,
		       const char *node_name);

/**
 * of_fake_probe_platform_by_name()
 * @test: the test to associate the fake platform device with
 * @driver_name: name of the driver to probe
 * @node_name: name of the device node created
 *
 * Same as of_fake_probe_platform() but looks up the &struct platform_driver by
 * the provided name.
 *
 * Returns: the &struct platform_device that was created
 */
struct platform_device *of_fake_probe_platform_by_name(struct test *test,
						       const char *driver_name,
						       const char *node_name);
