Lines Matching +full:drv +full:- +full:id
6 * Copyright (C) 2004, 2005 Paul Mundt <lethal@linux-sh.org>
32 kfree(sdev->resource); in superhyway_device_release()
37 * superhyway_add_device - Add a SuperHyway module
46 * top-down of the memory map), and are assigned an ID based on the order that
47 * they are added. Any manual addition of a module will thus get the ID after
61 return -ENOMEM; in superhyway_add_device()
65 dev->bus = bus; in superhyway_add_device()
66 superhyway_read_vcr(dev, base, &dev->vcr); in superhyway_add_device()
68 if (!dev->resource) { in superhyway_add_device()
69 dev->resource = kzalloc(sizeof(struct resource), GFP_KERNEL); in superhyway_add_device()
70 if (!dev->resource) { in superhyway_add_device()
72 return -ENOMEM; in superhyway_add_device()
75 dev->resource->name = dev->name; in superhyway_add_device()
76 dev->resource->start = base; in superhyway_add_device()
77 dev->resource->end = dev->resource->start + 0x01000000; in superhyway_add_device()
80 dev->dev.parent = &superhyway_bus_device; in superhyway_add_device()
81 dev->dev.bus = &superhyway_bus_type; in superhyway_add_device()
82 dev->dev.release = superhyway_device_release; in superhyway_add_device()
83 dev->id.id = dev->vcr.mod_id; in superhyway_add_device()
85 sprintf(dev->name, "SuperHyway device %04x", dev->id.id); in superhyway_add_device()
86 dev_set_name(&dev->dev, "%02x", superhyway_devices); in superhyway_add_device()
90 return device_register(&dev->dev); in superhyway_add_device()
101 ret |= superhyway_add_device(dev->resource[0].start, dev, bus); in superhyway_add_devices()
116 for (bus = superhyway_channels; bus->ops; bus++) in superhyway_init()
127 while (ids->id) { in superhyway_match_id()
128 if (ids->id == dev->id.id) in superhyway_match_id()
140 struct superhyway_driver *shyway_drv = to_superhyway_driver(dev->driver); in superhyway_device_probe()
142 if (shyway_drv && shyway_drv->probe) { in superhyway_device_probe()
143 const struct superhyway_device_id *id; in superhyway_device_probe() local
145 id = superhyway_match_id(shyway_drv->id_table, shyway_dev); in superhyway_device_probe()
146 if (id) in superhyway_device_probe()
147 return shyway_drv->probe(shyway_dev, id); in superhyway_device_probe()
150 return -ENODEV; in superhyway_device_probe()
156 struct superhyway_driver *shyway_drv = to_superhyway_driver(dev->driver); in superhyway_device_remove()
158 if (shyway_drv && shyway_drv->remove) { in superhyway_device_remove()
159 shyway_drv->remove(shyway_dev); in superhyway_device_remove()
163 return -ENODEV; in superhyway_device_remove()
167 * superhyway_register_driver - Register a new SuperHyway driver
168 * @drv: SuperHyway driver to register.
170 * This registers the passed in @drv. Any devices matching the id table will
174 int superhyway_register_driver(struct superhyway_driver *drv) in superhyway_register_driver() argument
176 drv->drv.name = drv->name; in superhyway_register_driver()
177 drv->drv.bus = &superhyway_bus_type; in superhyway_register_driver()
179 return driver_register(&drv->drv); in superhyway_register_driver()
183 * superhyway_unregister_driver - Unregister a SuperHyway driver
184 * @drv: SuperHyway driver to unregister.
189 void superhyway_unregister_driver(struct superhyway_driver *drv) in superhyway_unregister_driver() argument
191 driver_unregister(&drv->drv); in superhyway_unregister_driver()
194 static int superhyway_bus_match(struct device *dev, struct device_driver *drv) in superhyway_bus_match() argument
197 struct superhyway_driver *shyway_drv = to_superhyway_driver(drv); in superhyway_bus_match()
198 const struct superhyway_device_id *ids = shyway_drv->id_table; in superhyway_bus_match()
201 return -EINVAL; in superhyway_bus_match()
205 return -ENODEV; in superhyway_bus_match()