/**
 * driver_probe_device - attempt to bind device & driver together
 * @drv: driver to bind a device to
 * @dev: device to try to bind to the driver
 *
 * This function returns -ENODEV if the device is not registered,
 * 1 if the device is bound successfully and 0 otherwise.
 *
 * This function must be called with @dev lock held.  When called for a
 * USB interface, @dev->parent lock must be held as well.
 *
 * If the device has a parent, runtime-resume the parent before driver probing.
 */
int driver_probe_device(struct device_driver *drv, struct device *dev)
{
 int ret = 0;
 
 if (!device_is_registered(dev))
  return -ENODEV;
 pr_debug("bus: '%s': %s: matched device %s with driver %s\n",
   drv->bus->name, __func__, dev_name(dev), drv->name);
 if (dev->parent)
  pm_runtime_get_sync(dev->parent);
 pm_runtime_barrier(dev);
 ret = really_probe(dev, drv);
 pm_request_idle(dev);
 if (dev->parent)
  pm_runtime_put(dev->parent);
 return ret;
}