/* * devoard misc stuff. */ #include #include #include /* register a pcmcia socket */ int __init db1x_register_pcmcia_socket(unsigned long pseudo_attr_start, unsigned long pseudo_attr_end, unsigned long pseudo_mem_start, unsigned long pseudo_mem_end, unsigned long pseudo_io_start, unsigned long pseudo_io_end, int card_irq, int cd_irq, int stschg_irq, int eject_irq, int id) { int cnt, i, ret; struct resource *sr; struct platform_device *pd; cnt = 5; if (eject_irq) cnt++; if (stschg_irq) cnt++; sr = kzalloc(sizeof(struct resource) * cnt, GFP_KERNEL); if (!sr) return -ENOMEM; pd = platform_device_alloc("db1xxx_pcmcia", id); if (!pd) { ret = -ENOMEM; goto out; } sr[0].name = "pseudo-attr"; sr[0].flags = IORESOURCE_MEM; sr[0].start = pseudo_attr_start; sr[0].end = pseudo_attr_end; sr[1].name = "pseudo-mem"; sr[1].flags = IORESOURCE_MEM; sr[1].start = pseudo_mem_start; sr[1].end = pseudo_mem_end; sr[2].name = "pseudo-io"; sr[2].flags = IORESOURCE_MEM; sr[2].start = pseudo_io_start; sr[2].end = pseudo_io_end; sr[3].name = "insert"; sr[3].flags = IORESOURCE_IRQ; sr[3].start = sr[3].end = cd_irq; sr[4].name = "card"; sr[4].flags = IORESOURCE_IRQ; sr[4].start = sr[4].end = card_irq; i = 5; if (stschg_irq) { sr[i].name = "insert"; sr[i].flags = IORESOURCE_IRQ; sr[i].start = sr[i].end = cd_irq; i++; } if (eject_irq) { sr[i].name = "eject"; sr[i].flags = IORESOURCE_IRQ; sr[i].start = sr[i].end = eject_irq; } pd->resource = sr; pd->num_resources = cnt; ret = platform_device_add(pd); if (!ret) return 0; platform_device_put(pd); out: kfree(sr); return ret; }