X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fpcmcia%2Fat91_cf.c;h=a4d50940ebebf0f652de3163077d312e30e39269;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=40569f40e90e8f44d54968413c3dc166de45d620;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/drivers/pcmcia/at91_cf.c b/drivers/pcmcia/at91_cf.c index 40569f40e..a4d50940e 100644 --- a/drivers/pcmcia/at91_cf.c +++ b/drivers/pcmcia/at91_cf.c @@ -214,10 +214,11 @@ static struct pccard_operations at91_cf_ops = { /*--------------------------------------------------------------------------*/ -static int __init at91_cf_probe(struct platform_device *pdev) +static int __init at91_cf_probe(struct device *dev) { struct at91_cf_socket *cf; - struct at91_cf_data *board = pdev->dev.platform_data; + struct at91_cf_data *board = dev->platform_data; + struct platform_device *pdev = to_platform_device(dev); struct resource *io; unsigned int csa; int status; @@ -235,7 +236,7 @@ static int __init at91_cf_probe(struct platform_device *pdev) cf->board = board; cf->pdev = pdev; - platform_set_drvdata(pdev, cf); + dev_set_drvdata(dev, cf); /* CF takes over CS4, CS5, CS6 */ csa = at91_sys_read(AT91_EBI_CSA); @@ -267,10 +268,9 @@ static int __init at91_cf_probe(struct platform_device *pdev) /* must be a GPIO; ergo must trigger on both edges */ status = request_irq(board->det_pin, at91_cf_irq, - IRQF_SAMPLE_RANDOM, driver_name, cf); + SA_SAMPLE_RANDOM, driver_name, cf); if (status < 0) goto fail0; - device_init_wakeup(&pdev->dev, 1); /* * The card driver will request this irq later as needed. @@ -280,7 +280,7 @@ static int __init at91_cf_probe(struct platform_device *pdev) */ if (board->irq_pin) { status = request_irq(board->irq_pin, at91_cf_irq, - IRQF_SHARED, driver_name, cf); + SA_SHIRQ, driver_name, cf); if (status < 0) goto fail0a; cf->socket.pci_irq = board->irq_pin; @@ -301,7 +301,7 @@ static int __init at91_cf_probe(struct platform_device *pdev) board->det_pin, board->irq_pin); cf->socket.owner = THIS_MODULE; - cf->socket.dev.dev = &pdev->dev; + cf->socket.dev.dev = dev; cf->socket.ops = &at91_cf_ops; cf->socket.resource_ops = &pccard_static_ops; cf->socket.features = SS_CAP_PCCARD | SS_CAP_STATIC_MAP @@ -323,25 +323,21 @@ fail1: free_irq(board->irq_pin, cf); fail0a: free_irq(board->det_pin, cf); - device_init_wakeup(&pdev->dev, 0); fail0: at91_sys_write(AT91_EBI_CSA, csa); kfree(cf); return status; } -static int __exit at91_cf_remove(struct platform_device *pdev) +static int __exit at91_cf_remove(struct device *dev) { - struct at91_cf_socket *cf = platform_get_drvdata(pdev); - struct at91_cf_data *board = cf->board; + struct at91_cf_socket *cf = dev_get_drvdata(dev); struct resource *io = cf->socket.io[0].res; unsigned int csa; pcmcia_unregister_socket(&cf->socket); - if (board->irq_pin) - free_irq(board->irq_pin, cf); - free_irq(board->det_pin, cf); - device_init_wakeup(&pdev->dev, 0); + free_irq(cf->board->irq_pin, cf); + free_irq(cf->board->det_pin, cf); iounmap((void __iomem *) cf->socket.io_offset); release_mem_region(io->start, io->end + 1 - io->start); @@ -352,65 +348,26 @@ static int __exit at91_cf_remove(struct platform_device *pdev) return 0; } -#ifdef CONFIG_PM - -static int at91_cf_suspend(struct platform_device *pdev, pm_message_t mesg) -{ - struct at91_cf_socket *cf = platform_get_drvdata(pdev); - struct at91_cf_data *board = cf->board; - - pcmcia_socket_dev_suspend(&pdev->dev, mesg); - if (device_may_wakeup(&pdev->dev)) - enable_irq_wake(board->det_pin); - else { - disable_irq_wake(board->det_pin); - disable_irq(board->det_pin); - } - if (board->irq_pin) - disable_irq(board->irq_pin); - return 0; -} - -static int at91_cf_resume(struct platform_device *pdev) -{ - struct at91_cf_socket *cf = platform_get_drvdata(pdev); - struct at91_cf_data *board = cf->board; - - if (board->irq_pin) - enable_irq(board->irq_pin); - if (!device_may_wakeup(&pdev->dev)) - enable_irq(board->det_pin); - pcmcia_socket_dev_resume(&pdev->dev); - return 0; -} - -#else -#define at91_cf_suspend NULL -#define at91_cf_resume NULL -#endif - -static struct platform_driver at91_cf_driver = { - .driver = { - .name = (char *) driver_name, - .owner = THIS_MODULE, - }, +static struct device_driver at91_cf_driver = { + .name = (char *) driver_name, + .bus = &platform_bus_type, .probe = at91_cf_probe, .remove = __exit_p(at91_cf_remove), - .suspend = at91_cf_suspend, - .resume = at91_cf_resume, + .suspend = pcmcia_socket_dev_suspend, + .resume = pcmcia_socket_dev_resume, }; /*--------------------------------------------------------------------------*/ static int __init at91_cf_init(void) { - return platform_driver_register(&at91_cf_driver); + return driver_register(&at91_cf_driver); } module_init(at91_cf_init); static void __exit at91_cf_exit(void) { - platform_driver_unregister(&at91_cf_driver); + driver_unregister(&at91_cf_driver); } module_exit(at91_cf_exit);