return ret;
 }
 
+static int sa1111_remove_one(struct device *dev, void *data)
+{
+       device_unregister(dev);
+       return 0;
+}
+
 static void __sa1111_remove(struct sa1111 *sachip)
 {
-       struct list_head *l, *n;
        void __iomem *irqbase = sachip->base + SA1111_INTC;
 
-       list_for_each_safe(l, n, &sachip->dev->children) {
-               struct device *d = list_to_dev(l);
-
-               device_unregister(d);
-       }
+       device_for_each_child(sachip->dev, NULL, sa1111_remove_one);
 
        /* disable all IRQs */
        sa1111_writel(0, irqbase + SA1111_INTEN0);