static int vio_bus_match(struct device *dev, struct device_driver *drv) { const struct vio_dev *vio_dev = to_vio_dev(dev); struct vio_driver *vio_drv = to_vio_driver(drv); const struct vio_device_id *ids = vio_drv->id_table; return (ids != NULL) && (vio_match_device(ids, vio_dev) != NULL); }
static int vio_bus_match(struct device *dev, struct device_driver *drv) { struct vio_dev *vio_dev = to_vio_dev(dev); struct vio_driver *vio_drv = to_vio_driver(drv); const struct vio_device_id *matches = vio_drv->id_table; if (!matches) return 0; return vio_match_device(matches, vio_dev) != NULL; }
static int vio_device_probe(struct device *dev) { struct vio_dev *vdev = to_vio_dev(dev); struct vio_driver *drv = to_vio_driver(dev->driver); const struct vio_device_id *id; int error = -ENODEV; if (drv->probe) { id = vio_match_device(drv->id_table, vdev); if (id) error = drv->probe(vdev, id); } return error; }
/* * Convert from struct device to struct vio_dev and pass to driver. * dev->driver has already been set by generic code because vio_bus_match * succeeded. */ static int vio_bus_probe(struct device *dev) { struct vio_dev *viodev = to_vio_dev(dev); struct vio_driver *viodrv = to_vio_driver(dev->driver); const struct vio_device_id *id; int error = -ENODEV; if (!viodrv->probe) return error; id = vio_match_device(viodrv->id_table, viodev); if (id) error = viodrv->probe(viodev, id); return error; }