Index: local/drivers/base/isa.c =================================================================== --- local.orig/drivers/base/isa.c 2006-09-16 20:43:03.000000000 +0200 +++ local/drivers/base/isa.c 2006-10-10 07:03:54.000000000 +0200 @@ -16,6 +16,7 @@ struct isa_dev { struct device dev; struct device *next; + struct isa_driver *isa_driver; unsigned int id; }; @@ -23,61 +24,66 @@ static int isa_bus_match(struct device *dev, struct device_driver *driver) { - struct isa_driver *isa_driver = to_isa_driver(driver); + struct isa_dev *isa_dev = to_isa_dev(dev); + struct isa_driver *isa_driver = isa_dev->isa_driver; - if (dev->platform_data == isa_driver) { - if (!isa_driver->match || - isa_driver->match(dev, to_isa_dev(dev)->id)) + if (isa_driver == to_isa_driver(driver)) { + if (!isa_driver->match || isa_driver->match(dev, isa_dev->id)) return 1; - dev->platform_data = NULL; + isa_dev->isa_driver = NULL; } return 0; } static int isa_bus_probe(struct device *dev) { - struct isa_driver *isa_driver = dev->platform_data; + struct isa_dev *isa_dev = to_isa_dev(dev); + struct isa_driver *isa_driver = isa_dev->isa_driver; if (isa_driver->probe) - return isa_driver->probe(dev, to_isa_dev(dev)->id); + return isa_driver->probe(dev, isa_dev->id); return 0; } static int isa_bus_remove(struct device *dev) { - struct isa_driver *isa_driver = dev->platform_data; + struct isa_dev *isa_dev = to_isa_dev(dev); + struct isa_driver *isa_driver = isa_dev->isa_driver; if (isa_driver->remove) - return isa_driver->remove(dev, to_isa_dev(dev)->id); + return isa_driver->remove(dev, isa_dev->id); return 0; } static void isa_bus_shutdown(struct device *dev) { - struct isa_driver *isa_driver = dev->platform_data; + struct isa_dev *isa_dev = to_isa_dev(dev); + struct isa_driver *isa_driver = isa_dev->isa_driver; if (isa_driver->shutdown) - isa_driver->shutdown(dev, to_isa_dev(dev)->id); + isa_driver->shutdown(dev, isa_dev->id); } static int isa_bus_suspend(struct device *dev, pm_message_t state) { - struct isa_driver *isa_driver = dev->platform_data; + struct isa_dev *isa_dev = to_isa_dev(dev); + struct isa_driver *isa_driver = isa_dev->isa_driver; if (isa_driver->suspend) - return isa_driver->suspend(dev, to_isa_dev(dev)->id, state); + return isa_driver->suspend(dev, isa_dev->id, state); return 0; } static int isa_bus_resume(struct device *dev) { - struct isa_driver *isa_driver = dev->platform_data; + struct isa_dev *isa_dev = to_isa_dev(dev); + struct isa_driver *isa_driver = isa_dev->isa_driver; if (isa_driver->resume) - return isa_driver->resume(dev, to_isa_dev(dev)->id); + return isa_driver->resume(dev, isa_dev->id); return 0; } @@ -137,9 +143,9 @@ snprintf(isa_dev->dev.bus_id, BUS_ID_SIZE, "%s.%u", isa_driver->driver.name, id); - isa_dev->dev.platform_data = isa_driver; - isa_dev->dev.release = isa_dev_release; - isa_dev->id = id; + isa_dev->dev.release = isa_dev_release; + isa_dev->isa_driver = isa_driver; + isa_dev->id = id; error = device_register(&isa_dev->dev); if (error) { @@ -147,7 +153,7 @@ break; } - if (isa_dev->dev.platform_data) { + if (isa_dev->isa_driver) { isa_dev->next = isa_driver->devices; isa_driver->devices = &isa_dev->dev; } else