diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/block/xsysace.c | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c index 3ede0b63da13..b10447611afd 100644 --- a/drivers/block/xsysace.c +++ b/drivers/block/xsysace.c | |||
@@ -1060,13 +1060,12 @@ static void __devexit ace_teardown(struct ace_device *ace) | |||
1060 | * Platform Bus Support | 1060 | * Platform Bus Support |
1061 | */ | 1061 | */ |
1062 | 1062 | ||
1063 | static int __devinit ace_probe(struct device *device) | 1063 | static int __devinit ace_probe(struct platform_device *dev) |
1064 | { | 1064 | { |
1065 | struct platform_device *dev = to_platform_device(device); | ||
1066 | struct ace_device *ace; | 1065 | struct ace_device *ace; |
1067 | int i; | 1066 | int i; |
1068 | 1067 | ||
1069 | dev_dbg(device, "ace_probe(%p)\n", device); | 1068 | dev_dbg(&dev->dev, "ace_probe(%p)\n", dev); |
1070 | 1069 | ||
1071 | /* | 1070 | /* |
1072 | * Allocate the ace device structure | 1071 | * Allocate the ace device structure |
@@ -1075,7 +1074,7 @@ static int __devinit ace_probe(struct device *device) | |||
1075 | if (!ace) | 1074 | if (!ace) |
1076 | goto err_alloc; | 1075 | goto err_alloc; |
1077 | 1076 | ||
1078 | ace->dev = device; | 1077 | ace->dev = &dev->dev; |
1079 | ace->id = dev->id; | 1078 | ace->id = dev->id; |
1080 | ace->irq = NO_IRQ; | 1079 | ace->irq = NO_IRQ; |
1081 | 1080 | ||
@@ -1089,7 +1088,7 @@ static int __devinit ace_probe(struct device *device) | |||
1089 | /* FIXME: Should get bus_width from the platform_device struct */ | 1088 | /* FIXME: Should get bus_width from the platform_device struct */ |
1090 | ace->bus_width = 1; | 1089 | ace->bus_width = 1; |
1091 | 1090 | ||
1092 | dev_set_drvdata(&dev->dev, ace); | 1091 | platform_set_drvdata(dev, ace); |
1093 | 1092 | ||
1094 | /* Call the bus-independant setup code */ | 1093 | /* Call the bus-independant setup code */ |
1095 | if (ace_setup(ace) != 0) | 1094 | if (ace_setup(ace) != 0) |
@@ -1098,7 +1097,7 @@ static int __devinit ace_probe(struct device *device) | |||
1098 | return 0; | 1097 | return 0; |
1099 | 1098 | ||
1100 | err_setup: | 1099 | err_setup: |
1101 | dev_set_drvdata(&dev->dev, NULL); | 1100 | platform_set_drvdata(dev, NULL); |
1102 | kfree(ace); | 1101 | kfree(ace); |
1103 | err_alloc: | 1102 | err_alloc: |
1104 | printk(KERN_ERR "xsysace: could not initialize device\n"); | 1103 | printk(KERN_ERR "xsysace: could not initialize device\n"); |
@@ -1108,25 +1107,27 @@ static int __devinit ace_probe(struct device *device) | |||
1108 | /* | 1107 | /* |
1109 | * Platform bus remove() method | 1108 | * Platform bus remove() method |
1110 | */ | 1109 | */ |
1111 | static int __devexit ace_remove(struct device *device) | 1110 | static int __devexit ace_remove(struct platform_device *dev) |
1112 | { | 1111 | { |
1113 | struct ace_device *ace = dev_get_drvdata(device); | 1112 | struct ace_device *ace = platform_get_drvdata(dev); |
1114 | 1113 | dev_dbg(&dev->dev, "ace_remove(%p)\n", dev); | |
1115 | dev_dbg(device, "ace_remove(%p)\n", device); | ||
1116 | 1114 | ||
1117 | if (ace) { | 1115 | if (ace) { |
1118 | ace_teardown(ace); | 1116 | ace_teardown(ace); |
1117 | platform_set_drvdata(dev, NULL); | ||
1119 | kfree(ace); | 1118 | kfree(ace); |
1120 | } | 1119 | } |
1121 | 1120 | ||
1122 | return 0; | 1121 | return 0; |
1123 | } | 1122 | } |
1124 | 1123 | ||
1125 | static struct device_driver ace_driver = { | 1124 | static struct platform_driver ace_platform_driver = { |
1126 | .name = "xsysace", | ||
1127 | .bus = &platform_bus_type, | ||
1128 | .probe = ace_probe, | 1125 | .probe = ace_probe, |
1129 | .remove = __devexit_p(ace_remove), | 1126 | .remove = __devexit_p(ace_remove), |
1127 | .driver = { | ||
1128 | .owner = THIS_MODULE, | ||
1129 | .name = "xsysace", | ||
1130 | }, | ||
1130 | }; | 1131 | }; |
1131 | 1132 | ||
1132 | /* --------------------------------------------------------------------- | 1133 | /* --------------------------------------------------------------------- |
@@ -1134,20 +1135,31 @@ static struct device_driver ace_driver = { | |||
1134 | */ | 1135 | */ |
1135 | static int __init ace_init(void) | 1136 | static int __init ace_init(void) |
1136 | { | 1137 | { |
1138 | int rc; | ||
1139 | |||
1137 | ace_major = register_blkdev(ace_major, "xsysace"); | 1140 | ace_major = register_blkdev(ace_major, "xsysace"); |
1138 | if (ace_major <= 0) { | 1141 | if (ace_major <= 0) { |
1139 | printk(KERN_WARNING "xsysace: register_blkdev() failed\n"); | 1142 | rc = -ENOMEM; |
1140 | return ace_major; | 1143 | goto err_blk; |
1141 | } | 1144 | } |
1142 | 1145 | ||
1143 | pr_debug("Registering Xilinx SystemACE driver, major=%i\n", ace_major); | 1146 | if ((rc = platform_driver_register(&ace_platform_driver)) != 0) |
1144 | return driver_register(&ace_driver); | 1147 | goto err_plat; |
1148 | |||
1149 | pr_info("Xilinx SystemACE device driver, major=%i\n", ace_major); | ||
1150 | return 0; | ||
1151 | |||
1152 | err_plat: | ||
1153 | unregister_blkdev(ace_major, "xsysace"); | ||
1154 | err_blk: | ||
1155 | printk(KERN_ERR "xsysace: registration failed; err=%i\n", rc); | ||
1156 | return rc; | ||
1145 | } | 1157 | } |
1146 | 1158 | ||
1147 | static void __exit ace_exit(void) | 1159 | static void __exit ace_exit(void) |
1148 | { | 1160 | { |
1149 | pr_debug("Unregistering Xilinx SystemACE driver\n"); | 1161 | pr_debug("Unregistering Xilinx SystemACE driver\n"); |
1150 | driver_unregister(&ace_driver); | 1162 | platform_driver_unregister(&ace_platform_driver); |
1151 | unregister_blkdev(ace_major, "xsysace"); | 1163 | unregister_blkdev(ace_major, "xsysace"); |
1152 | } | 1164 | } |
1153 | 1165 | ||