diff options
Diffstat (limited to 'drivers/pcmcia/electra_cf.c')
| -rw-r--r-- | drivers/pcmcia/electra_cf.c | 45 |
1 files changed, 21 insertions, 24 deletions
diff --git a/drivers/pcmcia/electra_cf.c b/drivers/pcmcia/electra_cf.c index 0a6cea1316b..5ea64d0f61a 100644 --- a/drivers/pcmcia/electra_cf.c +++ b/drivers/pcmcia/electra_cf.c @@ -28,10 +28,14 @@ #include <linux/init.h> #include <linux/delay.h> #include <linux/interrupt.h> +#include <linux/mm.h> #include <linux/vmalloc.h> +#include <linux/of_address.h> +#include <linux/of_irq.h> +#include <linux/of_platform.h> +#include <linux/slab.h> #include <pcmcia/ss.h> -#include <asm/of_platform.h> static const char driver_name[] = "electra-cf"; @@ -42,7 +46,7 @@ struct electra_cf_socket { unsigned present:1; unsigned active:1; - struct of_device *ofdev; + struct platform_device *ofdev; unsigned long mem_phys; void __iomem * mem_base; unsigned long mem_size; @@ -179,11 +183,10 @@ static struct pccard_operations electra_cf_ops = { .set_mem_map = electra_cf_set_mem_map, }; -static int __devinit electra_cf_probe(struct of_device *ofdev, - const struct of_device_id *match) +static int electra_cf_probe(struct platform_device *ofdev) { struct device *device = &ofdev->dev; - struct device_node *np = ofdev->node; + struct device_node *np = ofdev->dev.of_node; struct electra_cf_socket *cf; struct resource mem, io; int status; @@ -208,9 +211,9 @@ static int __devinit electra_cf_probe(struct of_device *ofdev, cf->ofdev = ofdev; cf->mem_phys = mem.start; - cf->mem_size = PAGE_ALIGN(mem.end - mem.start); + cf->mem_size = PAGE_ALIGN(resource_size(&mem)); cf->mem_base = ioremap(cf->mem_phys, cf->mem_size); - cf->io_size = PAGE_ALIGN(io.end - io.start); + cf->io_size = PAGE_ALIGN(resource_size(&io)); area = __get_vm_area(cf->io_size, 0, PHB_IO_BASE, PHB_IO_END); if (area == NULL) @@ -296,7 +299,7 @@ static int __devinit electra_cf_probe(struct of_device *ofdev, goto fail3; } - dev_info(device, "at mem 0x%lx io 0x%lx irq %d\n", + dev_info(device, "at mem 0x%lx io 0x%llx irq %d\n", cf->mem_phys, io.start, cf->irq); cf->active = 1; @@ -323,7 +326,7 @@ fail1: } -static int __devexit electra_cf_remove(struct of_device *ofdev) +static int electra_cf_remove(struct platform_device *ofdev) { struct device *device = &ofdev->dev; struct electra_cf_socket *cf; @@ -346,31 +349,25 @@ static int __devexit electra_cf_remove(struct of_device *ofdev) return 0; } -static struct of_device_id electra_cf_match[] = { +static const struct of_device_id electra_cf_match[] = { { .compatible = "electra-cf", }, {}, }; +MODULE_DEVICE_TABLE(of, electra_cf_match); -static struct of_platform_driver electra_cf_driver = { - .name = (char *)driver_name, - .match_table = electra_cf_match, +static struct platform_driver electra_cf_driver = { + .driver = { + .name = driver_name, + .owner = THIS_MODULE, + .of_match_table = electra_cf_match, + }, .probe = electra_cf_probe, .remove = electra_cf_remove, }; -static int __init electra_cf_init(void) -{ - return of_register_platform_driver(&electra_cf_driver); -} -module_init(electra_cf_init); - -static void __exit electra_cf_exit(void) -{ - of_unregister_platform_driver(&electra_cf_driver); -} -module_exit(electra_cf_exit); +module_platform_driver(electra_cf_driver); MODULE_LICENSE("GPL"); MODULE_AUTHOR ("Olof Johansson <olof@lixom.net>"); |
