Пример #1
0
static void __exit parport_sunbpp_exit(void)
{
	while (!list_empty(&port_list)) {
		Node *node = list_entry(port_list.next, Node, list);
		struct parport *p = node->port;
		struct parport_operations *ops = p->ops;
		parport_remove_port(p);

		if (p->irq != PARPORT_IRQ_NONE) {
			parport_sunbpp_disable_irq(p);
			free_irq(p->irq, p);
		}
		sbus_iounmap((void __iomem *)p->base, p->size);
		parport_put_port(p);
		kfree (ops);
		list_del(&node->list);
		kfree (node);
	}
}
Пример #2
0
static int __devexit bpp_remove(struct of_device *op)
{
	struct parport *p = dev_get_drvdata(&op->dev);
	struct parport_operations *ops = p->ops;

	parport_remove_port(p);

	if (p->irq != PARPORT_IRQ_NONE) {
		parport_sunbpp_disable_irq(p);
		free_irq(p->irq, p);
	}

	of_iounmap(&op->resource[0], (void __iomem *) p->base, p->size);
	parport_put_port(p);
	kfree(ops);

	dev_set_drvdata(&op->dev, NULL);

	return 0;
}
void
cleanup_module(void)
{
	struct parport *p = parport_enumerate();

	while (p) {
		struct parport *next = p->next;

		if (1/*p->modes & PARPORT_MODE_PCSPP*/) { 
			struct parport_operations *ops = p->ops;

			if (p->irq != PARPORT_IRQ_NONE) {
				parport_sunbpp_disable_irq(p);
				free_irq(p->irq, p);
			}
			sbus_iounmap(p->base, p->size);
			parport_proc_unregister(p);
			parport_unregister_port(p);
			kfree (ops);
		}
		p = next;
	}
}