diff options
Diffstat (limited to 'drivers/spi/spi_butterfly.c')
-rw-r--r-- | drivers/spi/spi_butterfly.c | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/drivers/spi/spi_butterfly.c b/drivers/spi/spi_butterfly.c index 312987a03210..574d0fae4c59 100644 --- a/drivers/spi/spi_butterfly.c +++ b/drivers/spi/spi_butterfly.c | |||
@@ -20,7 +20,7 @@ | |||
20 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
23 | #include <linux/platform_device.h> | 23 | #include <linux/device.h> |
24 | #include <linux/parport.h> | 24 | #include <linux/parport.h> |
25 | 25 | ||
26 | #include <linux/sched.h> | 26 | #include <linux/sched.h> |
@@ -237,24 +237,16 @@ static void butterfly_attach(struct parport *p) | |||
237 | int status; | 237 | int status; |
238 | struct butterfly *pp; | 238 | struct butterfly *pp; |
239 | struct spi_master *master; | 239 | struct spi_master *master; |
240 | struct platform_device *pdev; | 240 | struct device *dev = p->physport->dev; |
241 | 241 | ||
242 | if (butterfly) | 242 | if (butterfly || !dev) |
243 | return; | 243 | return; |
244 | 244 | ||
245 | /* REVISIT: this just _assumes_ a butterfly is there ... no probe, | 245 | /* REVISIT: this just _assumes_ a butterfly is there ... no probe, |
246 | * and no way to be selective about what it binds to. | 246 | * and no way to be selective about what it binds to. |
247 | */ | 247 | */ |
248 | 248 | ||
249 | /* FIXME where should master->cdev.dev come from? | 249 | master = spi_alloc_master(dev, sizeof *pp); |
250 | * e.g. /sys/bus/pnp0/00:0b, some PCI thing, etc | ||
251 | * setting up a platform device like this is an ugly kluge... | ||
252 | */ | ||
253 | pdev = platform_device_register_simple("butterfly", -1, NULL, 0); | ||
254 | if (IS_ERR(pdev)) | ||
255 | return; | ||
256 | |||
257 | master = spi_alloc_master(&pdev->dev, sizeof *pp); | ||
258 | if (!master) { | 250 | if (!master) { |
259 | status = -ENOMEM; | 251 | status = -ENOMEM; |
260 | goto done; | 252 | goto done; |
@@ -366,14 +358,12 @@ clean1: | |||
366 | clean0: | 358 | clean0: |
367 | (void) spi_master_put(pp->bitbang.master); | 359 | (void) spi_master_put(pp->bitbang.master); |
368 | done: | 360 | done: |
369 | platform_device_unregister(pdev); | ||
370 | pr_debug("%s: butterfly probe, fail %d\n", p->name, status); | 361 | pr_debug("%s: butterfly probe, fail %d\n", p->name, status); |
371 | } | 362 | } |
372 | 363 | ||
373 | static void butterfly_detach(struct parport *p) | 364 | static void butterfly_detach(struct parport *p) |
374 | { | 365 | { |
375 | struct butterfly *pp; | 366 | struct butterfly *pp; |
376 | struct platform_device *pdev; | ||
377 | int status; | 367 | int status; |
378 | 368 | ||
379 | /* FIXME this global is ugly ... but, how to quickly get from | 369 | /* FIXME this global is ugly ... but, how to quickly get from |
@@ -386,7 +376,6 @@ static void butterfly_detach(struct parport *p) | |||
386 | butterfly = NULL; | 376 | butterfly = NULL; |
387 | 377 | ||
388 | /* stop() unregisters child devices too */ | 378 | /* stop() unregisters child devices too */ |
389 | pdev = to_platform_device(pp->bitbang.master->cdev.dev); | ||
390 | status = spi_bitbang_stop(&pp->bitbang); | 379 | status = spi_bitbang_stop(&pp->bitbang); |
391 | 380 | ||
392 | /* turn off VCC */ | 381 | /* turn off VCC */ |
@@ -397,8 +386,6 @@ static void butterfly_detach(struct parport *p) | |||
397 | parport_unregister_device(pp->pd); | 386 | parport_unregister_device(pp->pd); |
398 | 387 | ||
399 | (void) spi_master_put(pp->bitbang.master); | 388 | (void) spi_master_put(pp->bitbang.master); |
400 | |||
401 | platform_device_unregister(pdev); | ||
402 | } | 389 | } |
403 | 390 | ||
404 | static struct parport_driver butterfly_driver = { | 391 | static struct parport_driver butterfly_driver = { |