1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Copyright (c) 2013 Google, Inc 4 * 5 * (C) Copyright 2012 6 * Pavel Herrmann <morpheus.ibis@gmail.com> 7 */ 8 9#ifndef _DM_LISTS_H_ 10#define _DM_LISTS_H_ 11 12#include <dm/ofnode.h> 13#include <dm/uclass-id.h> 14 15/** 16 * lists_driver_lookup_name() - Return u_boot_driver corresponding to name 17 * 18 * This function returns a pointer to a driver given its name. This is used 19 * for binding a driver given its name and plat. 20 * 21 * @name: Name of driver to look up 22 * Return: pointer to driver, or NULL if not found 23 */ 24struct driver *lists_driver_lookup_name(const char *name); 25 26/** 27 * lists_uclass_lookup() - Return uclass_driver based on ID of the class 28 * 29 * @id: ID of the class 30 * 31 * This function returns the pointer to uclass_driver, which is the class's 32 * base structure based on the ID of the class. Returns NULL on error. 33 */ 34struct uclass_driver *lists_uclass_lookup(enum uclass_id id); 35 36/** 37 * lists_bind_drivers() - search for and bind all drivers to parent 38 * 39 * This searches the U_BOOT_DRVINFO() structures and creates new devices for 40 * each one. The devices will have @parent as their parent. 41 * 42 * @parent: parent device (root) 43 * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC flag. 44 * If false bind all drivers. 45 */ 46int lists_bind_drivers(struct udevice *parent, bool pre_reloc_only); 47 48/** 49 * lists_bind_fdt() - bind a device tree node 50 * 51 * This creates a new device bound to the given device tree node, with 52 * @parent as its parent. 53 * 54 * @parent: parent device (root) 55 * @node: device tree node to bind 56 * @devp: if non-NULL, returns a pointer to the bound device 57 * @drv: if non-NULL, force this driver to be bound 58 * @pre_reloc_only: If true, bind only nodes with special devicetree properties, 59 * or drivers with the DM_FLAG_PRE_RELOC flag. If false bind all drivers. 60 * 61 * Return: 0 if device was bound, -EINVAL if the device tree is invalid, 62 * other -ve value on error 63 */ 64int lists_bind_fdt(struct udevice *parent, ofnode node, struct udevice **devp, 65 struct driver *drv, bool pre_reloc_only); 66 67/** 68 * device_bind_driver() - bind a device to a driver 69 * 70 * This binds a new device to a driver. 71 * 72 * @parent: Parent device 73 * @drv_name: Name of driver to attach to this parent 74 * @dev_name: Name of the new device thus created 75 * @devp: If non-NULL, returns the newly bound device 76 * Return: 0 if OK, -ve on error 77 */ 78int device_bind_driver(struct udevice *parent, const char *drv_name, 79 const char *dev_name, struct udevice **devp); 80 81/** 82 * device_bind_driver_to_node() - bind a device to a driver for a node 83 * 84 * This binds a new device to a driver for a given device tree node. This 85 * should only be needed if the node lacks a compatible strings. 86 * 87 * @parent: Parent device 88 * @drv_name: Name of driver to attach to this parent 89 * @dev_name: Name of the new device thus created 90 * @node: Device tree node 91 * @devp: If non-NULL, returns the newly bound device 92 * Return: 0 if OK, -ve on error 93 */ 94int device_bind_driver_to_node(struct udevice *parent, const char *drv_name, 95 const char *dev_name, ofnode node, 96 struct udevice **devp); 97 98#endif 99