lkml.org 
[lkml]   [2006]   [Oct]   [10]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateTue, 10 Oct 2006 07:48:07 +0200
FromRene Herman <>
SubjectRe: driver,platform,firmware,system, data data data ....
Benjamin Herrenschmidt wrote:

[ device->platform_data ]

> So except for the size of the patch and boredom of going through all
> of them fixing them, do you see any reason why this later one
> shouldn't be moved out to platform_driver ? (I haven't actually
> checked at all the occurences in the tree though).

You'll find it being used in drivers/base/isa.c for one. I only used it 
there because it was available and made for slightly nicer code though. 
If platform_data is going away (and assuming you wouldn't want similar 
abuse of your new system_data) it wouldn't be a problem to move the 
driver pointer to the private struct isa_dev as in the attached.

Rene.
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
\
 
 \ /
  Last update: 2006-10-10 07:51    [from the cache]
©2003-2008