Lines Matching +full:device +full:- +full:id

1 // SPDX-License-Identifier: GPL-2.0
6 #include <linux/device.h>
11 #include <linux/dma-mapping.h>
14 static struct device isa_bus = {
19 struct device dev;
20 struct device *next;
21 unsigned int id; member
26 static int isa_bus_match(struct device *dev, const struct device_driver *driver) in isa_bus_match()
30 if (dev->platform_data == isa_driver) { in isa_bus_match()
31 if (!isa_driver->match || in isa_bus_match()
32 isa_driver->match(dev, to_isa_dev(dev)->id)) in isa_bus_match()
34 dev->platform_data = NULL; in isa_bus_match()
39 static int isa_bus_probe(struct device *dev) in isa_bus_probe()
41 struct isa_driver *isa_driver = dev->platform_data; in isa_bus_probe()
43 if (isa_driver && isa_driver->probe) in isa_bus_probe()
44 return isa_driver->probe(dev, to_isa_dev(dev)->id); in isa_bus_probe()
49 static void isa_bus_remove(struct device *dev) in isa_bus_remove()
51 struct isa_driver *isa_driver = dev->platform_data; in isa_bus_remove()
53 if (isa_driver && isa_driver->remove) in isa_bus_remove()
54 isa_driver->remove(dev, to_isa_dev(dev)->id); in isa_bus_remove()
57 static void isa_bus_shutdown(struct device *dev) in isa_bus_shutdown()
59 struct isa_driver *isa_driver = dev->platform_data; in isa_bus_shutdown()
61 if (isa_driver && isa_driver->shutdown) in isa_bus_shutdown()
62 isa_driver->shutdown(dev, to_isa_dev(dev)->id); in isa_bus_shutdown()
65 static int isa_bus_suspend(struct device *dev, pm_message_t state) in isa_bus_suspend()
67 struct isa_driver *isa_driver = dev->platform_data; in isa_bus_suspend()
69 if (isa_driver && isa_driver->suspend) in isa_bus_suspend()
70 return isa_driver->suspend(dev, to_isa_dev(dev)->id, state); in isa_bus_suspend()
75 static int isa_bus_resume(struct device *dev) in isa_bus_resume()
77 struct isa_driver *isa_driver = dev->platform_data; in isa_bus_resume()
79 if (isa_driver && isa_driver->resume) in isa_bus_resume()
80 return isa_driver->resume(dev, to_isa_dev(dev)->id); in isa_bus_resume()
95 static void isa_dev_release(struct device *dev) in isa_dev_release()
102 struct device *dev = isa_driver->devices; in isa_unregister_driver()
105 struct device *tmp = to_isa_dev(dev)->next; in isa_unregister_driver()
109 driver_unregister(&isa_driver->driver); in isa_unregister_driver()
116 unsigned int id; in isa_register_driver() local
118 isa_driver->driver.bus = &isa_bus_type; in isa_register_driver()
119 isa_driver->devices = NULL; in isa_register_driver()
121 error = driver_register(&isa_driver->driver); in isa_register_driver()
125 for (id = 0; id < ndev; id++) { in isa_register_driver()
130 error = -ENOMEM; in isa_register_driver()
134 isa_dev->dev.parent = &isa_bus; in isa_register_driver()
135 isa_dev->dev.bus = &isa_bus_type; in isa_register_driver()
137 dev_set_name(&isa_dev->dev, "%s.%u", in isa_register_driver()
138 isa_driver->driver.name, id); in isa_register_driver()
139 isa_dev->dev.platform_data = isa_driver; in isa_register_driver()
140 isa_dev->dev.release = isa_dev_release; in isa_register_driver()
141 isa_dev->id = id; in isa_register_driver()
143 isa_dev->dev.coherent_dma_mask = DMA_BIT_MASK(24); in isa_register_driver()
144 isa_dev->dev.dma_mask = &isa_dev->dev.coherent_dma_mask; in isa_register_driver()
146 error = device_register(&isa_dev->dev); in isa_register_driver()
148 put_device(&isa_dev->dev); in isa_register_driver()
152 isa_dev->next = isa_driver->devices; in isa_register_driver()
153 isa_driver->devices = &isa_dev->dev; in isa_register_driver()
156 if (!error && !isa_driver->devices) in isa_register_driver()
157 error = -ENODEV; in isa_register_driver()