diff options
| author | Dmitry Torokhov <dtor_core@ameritech.net> | 2005-12-28 01:25:53 -0500 |
|---|---|---|
| committer | Dmitry Torokhov <dtor_core@ameritech.net> | 2005-12-28 01:25:53 -0500 |
| commit | 9d6c25029db6de7fc375b07da936c3341af0accf (patch) | |
| tree | 1fd40668b046339505896e72a889591d7e40c59f | |
| parent | 26421c7acc02847c724eb9f92797f84dbf9be007 (diff) | |
Input: maceps2 - convert to the new platform device interface
Do not use platform_device_register_simple() as it is going away,
implement ->probe() and ->remove() functions so manual binding and
unbinding will work with this driver.
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| -rw-r--r-- | drivers/input/serio/maceps2.c | 68 |
1 files changed, 52 insertions, 16 deletions
diff --git a/drivers/input/serio/maceps2.c b/drivers/input/serio/maceps2.c index d857f7081adb..f08a5d0cd5fa 100644 --- a/drivers/input/serio/maceps2.c +++ b/drivers/input/serio/maceps2.c | |||
| @@ -118,13 +118,12 @@ static void maceps2_close(struct serio *dev) | |||
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | 120 | ||
| 121 | static struct serio * __init maceps2_allocate_port(int idx) | 121 | static struct serio * __devinit maceps2_allocate_port(int idx) |
| 122 | { | 122 | { |
| 123 | struct serio *serio; | 123 | struct serio *serio; |
| 124 | 124 | ||
| 125 | serio = kmalloc(sizeof(struct serio), GFP_KERNEL); | 125 | serio = kzalloc(sizeof(struct serio), GFP_KERNEL); |
| 126 | if (serio) { | 126 | if (serio) { |
| 127 | memset(serio, 0, sizeof(struct serio)); | ||
| 128 | serio->id.type = SERIO_8042; | 127 | serio->id.type = SERIO_8042; |
| 129 | serio->write = maceps2_write; | 128 | serio->write = maceps2_write; |
| 130 | serio->open = maceps2_open; | 129 | serio->open = maceps2_open; |
| @@ -138,24 +137,13 @@ static struct serio * __init maceps2_allocate_port(int idx) | |||
| 138 | return serio; | 137 | return serio; |
| 139 | } | 138 | } |
| 140 | 139 | ||
| 141 | 140 | static int __devinit maceps2_probe(struct platform_device *dev) | |
| 142 | static int __init maceps2_init(void) | ||
| 143 | { | 141 | { |
| 144 | maceps2_device = platform_device_register_simple("maceps2", -1, NULL, 0); | ||
| 145 | if (IS_ERR(maceps2_device)) | ||
| 146 | return PTR_ERR(maceps2_device); | ||
| 147 | |||
| 148 | port_data[0].port = &mace->perif.ps2.keyb; | ||
| 149 | port_data[0].irq = MACEISA_KEYB_IRQ; | ||
| 150 | port_data[1].port = &mace->perif.ps2.mouse; | ||
| 151 | port_data[1].irq = MACEISA_MOUSE_IRQ; | ||
| 152 | |||
| 153 | maceps2_port[0] = maceps2_allocate_port(0); | 142 | maceps2_port[0] = maceps2_allocate_port(0); |
| 154 | maceps2_port[1] = maceps2_allocate_port(1); | 143 | maceps2_port[1] = maceps2_allocate_port(1); |
| 155 | if (!maceps2_port[0] || !maceps2_port[1]) { | 144 | if (!maceps2_port[0] || !maceps2_port[1]) { |
| 156 | kfree(maceps2_port[0]); | 145 | kfree(maceps2_port[0]); |
| 157 | kfree(maceps2_port[1]); | 146 | kfree(maceps2_port[1]); |
| 158 | platform_device_unregister(maceps2_device); | ||
| 159 | return -ENOMEM; | 147 | return -ENOMEM; |
| 160 | } | 148 | } |
| 161 | 149 | ||
| @@ -165,11 +153,59 @@ static int __init maceps2_init(void) | |||
| 165 | return 0; | 153 | return 0; |
| 166 | } | 154 | } |
| 167 | 155 | ||
| 168 | static void __exit maceps2_exit(void) | 156 | static int __devexit maceps2_remove(struct platform_device *dev) |
| 169 | { | 157 | { |
| 170 | serio_unregister_port(maceps2_port[0]); | 158 | serio_unregister_port(maceps2_port[0]); |
| 171 | serio_unregister_port(maceps2_port[1]); | 159 | serio_unregister_port(maceps2_port[1]); |
| 160 | |||
| 161 | return 0; | ||
| 162 | } | ||
| 163 | |||
| 164 | static struct platform_driver maceps2_driver = { | ||
| 165 | .driver = { | ||
| 166 | .name = "maceps2", | ||
| 167 | .owner = THIS_MODULE, | ||
| 168 | }, | ||
| 169 | .probe = maceps2_probe, | ||
| 170 | .remove = __devexit_p(maceps2_remove), | ||
| 171 | }; | ||
| 172 | |||
| 173 | static int __init maceps2_init(void) | ||
| 174 | { | ||
| 175 | int error; | ||
| 176 | |||
| 177 | error = platform_driver_register(&maceps2_driver); | ||
| 178 | if (error) | ||
| 179 | return error; | ||
| 180 | |||
| 181 | maceps2_device = platform_device_alloc("maceps2", -1); | ||
| 182 | if (!maceps2_device) { | ||
| 183 | error = -ENOMEM; | ||
| 184 | goto err_unregister_driver; | ||
| 185 | } | ||
| 186 | |||
| 187 | port_data[0].port = &mace->perif.ps2.keyb; | ||
| 188 | port_data[0].irq = MACEISA_KEYB_IRQ; | ||
| 189 | port_data[1].port = &mace->perif.ps2.mouse; | ||
| 190 | port_data[1].irq = MACEISA_MOUSE_IRQ; | ||
| 191 | |||
| 192 | error = platform_device_add(maceps2_device); | ||
| 193 | if (error) | ||
| 194 | goto err_free_device; | ||
| 195 | |||
| 196 | return 0; | ||
| 197 | |||
| 198 | err_free_device: | ||
| 199 | platform_device_put(maceps2_device); | ||
| 200 | err_unregister_driver: | ||
| 201 | platform_driver_unregister(&maceps2_driver); | ||
| 202 | return error; | ||
| 203 | } | ||
| 204 | |||
| 205 | static void __exit maceps2_exit(void) | ||
| 206 | { | ||
| 172 | platform_device_unregister(maceps2_device); | 207 | platform_device_unregister(maceps2_device); |
| 208 | platform_driver_unregister(&maceps2_driver); | ||
| 173 | } | 209 | } |
| 174 | 210 | ||
| 175 | module_init(maceps2_init); | 211 | module_init(maceps2_init); |
