// SPDX-License-Identifier: GPL-2.0 /* * Fake platform device API for unit testing platform drivers. * * Copyright (C) 2018, Google LLC. * Author: Brendan Higgins */ #include #include #include #include "base.h" struct device_node *of_fake_node(struct test *test, const char *name) { struct device_node *node; node = test_kzalloc(test, sizeof(*node), GFP_KERNEL); if (!node) return NULL; of_node_init(node); return node; } struct platform_device * of_fake_probe_platform(struct test *test, struct platform_driver *driver, const char *node_name) { struct platform_device *pdev; struct device_node *of_node; int ret; of_node = of_fake_node(test, node_name); if (!of_node) return ERR_PTR(-ENOMEM); test_info(test, "Creating device"); pdev = of_platform_device_create(of_node, node_name, NULL); if (!pdev) return ERR_PTR(-ENODEV); test_info(test, "Probing"); ret = driver->probe(pdev); if (ret) return ERR_PTR(ret); pdev->dev.driver = &driver->driver; klist_add_tail(&pdev->dev.p->knode_driver, &pdev->dev.driver->p->klist_devices); if (ret) return ERR_PTR(ret); return pdev; } struct platform_device *of_fake_probe_platform_by_name(struct test *test, const char *driver_name, const char *node_name) { const struct device_driver *driver; test_info(test, "Locating driver by name"); driver = driver_find(driver_name, &platform_bus_type); if (!driver) return ERR_PTR(-ENODEV); return of_fake_probe_platform(test, to_platform_driver(driver), node_name); }