/*--------------------------------------------------------------------------*/
-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;
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);
/* 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.
*/
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;
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
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);
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);