dm: core: Add a function to bind a driver for a device tree node
Some device tree nodes do not have compatible strings but do require drivers. This is pretty rare, and somewhat unfortunate. Add a function to permit creation of a driver for any device tree node. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
4c509343ab
commit
5b9000dd25
|
@ -73,6 +73,13 @@ int lists_bind_drivers(struct udevice *parent, bool pre_reloc_only)
|
||||||
|
|
||||||
int device_bind_driver(struct udevice *parent, const char *drv_name,
|
int device_bind_driver(struct udevice *parent, const char *drv_name,
|
||||||
const char *dev_name, struct udevice **devp)
|
const char *dev_name, struct udevice **devp)
|
||||||
|
{
|
||||||
|
return device_bind_driver_to_node(parent, drv_name, dev_name, -1, devp);
|
||||||
|
}
|
||||||
|
|
||||||
|
int device_bind_driver_to_node(struct udevice *parent, const char *drv_name,
|
||||||
|
const char *dev_name, int node,
|
||||||
|
struct udevice **devp)
|
||||||
{
|
{
|
||||||
struct driver *drv;
|
struct driver *drv;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -82,7 +89,7 @@ int device_bind_driver(struct udevice *parent, const char *drv_name,
|
||||||
printf("Cannot find driver '%s'\n", drv_name);
|
printf("Cannot find driver '%s'\n", drv_name);
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
ret = device_bind(parent, drv, dev_name, NULL, -1, devp);
|
ret = device_bind(parent, drv, dev_name, NULL, node, devp);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printf("Cannot create device named '%s' (err=%d)\n",
|
printf("Cannot create device named '%s' (err=%d)\n",
|
||||||
dev_name, ret);
|
dev_name, ret);
|
||||||
|
|
|
@ -73,4 +73,20 @@ int lists_bind_fdt(struct udevice *parent, const void *blob, int offset,
|
||||||
int device_bind_driver(struct udevice *parent, const char *drv_name,
|
int device_bind_driver(struct udevice *parent, const char *drv_name,
|
||||||
const char *dev_name, struct udevice **devp);
|
const char *dev_name, struct udevice **devp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* device_bind_driver_to_node() - bind a device to a driver for a node
|
||||||
|
*
|
||||||
|
* This binds a new device to a driver for a given device tree node. This
|
||||||
|
* should only be needed if the node lacks a compatible strings.
|
||||||
|
*
|
||||||
|
* @parent: Parent device
|
||||||
|
* @drv_name: Name of driver to attach to this parent
|
||||||
|
* @dev_name: Name of the new device thus created
|
||||||
|
* @node: Device tree node
|
||||||
|
* @devp: Returns the newly bound device
|
||||||
|
*/
|
||||||
|
int device_bind_driver_to_node(struct udevice *parent, const char *drv_name,
|
||||||
|
const char *dev_name, int node,
|
||||||
|
struct udevice **devp);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue