Merge branch 'linus' into core/generic-dma-coherent
[pandora-kernel.git] / arch / powerpc / sysdev / ipic.c
index 7274750..caba1c0 100644 (file)
@@ -48,6 +48,13 @@ static struct ipic_info ipic_info[] = {
                .bit    = 17,
                .prio_mask = 1,
        },
+       [3] = {
+               .mask   = IPIC_SIMSR_H,
+               .prio   = IPIC_SIPRR_C,
+               .force  = IPIC_SIFCR_H,
+               .bit    = 18,
+               .prio_mask = 2,
+       },
        [4] = {
                .mask   = IPIC_SIMSR_H,
                .prio   = IPIC_SIPRR_C,
@@ -55,6 +62,34 @@ static struct ipic_info ipic_info[] = {
                .bit    = 19,
                .prio_mask = 3,
        },
+       [5] = {
+               .mask   = IPIC_SIMSR_H,
+               .prio   = IPIC_SIPRR_C,
+               .force  = IPIC_SIFCR_H,
+               .bit    = 20,
+               .prio_mask = 4,
+       },
+       [6] = {
+               .mask   = IPIC_SIMSR_H,
+               .prio   = IPIC_SIPRR_C,
+               .force  = IPIC_SIFCR_H,
+               .bit    = 21,
+               .prio_mask = 5,
+       },
+       [7] = {
+               .mask   = IPIC_SIMSR_H,
+               .prio   = IPIC_SIPRR_C,
+               .force  = IPIC_SIFCR_H,
+               .bit    = 22,
+               .prio_mask = 6,
+       },
+       [8] = {
+               .mask   = IPIC_SIMSR_H,
+               .prio   = IPIC_SIPRR_C,
+               .force  = IPIC_SIFCR_H,
+               .bit    = 23,
+               .prio_mask = 7,
+       },
        [9] = {
                .mask   = IPIC_SIMSR_H,
                .prio   = IPIC_SIPRR_D,
@@ -223,6 +258,20 @@ static struct ipic_info ipic_info[] = {
                .bit    = 7,
                .prio_mask = 7,
        },
+       [40] = {
+               .mask   = IPIC_SIMSR_H,
+               .prio   = IPIC_SIPRR_B,
+               .force  = IPIC_SIFCR_H,
+               .bit    = 8,
+               .prio_mask = 0,
+       },
+       [41] = {
+               .mask   = IPIC_SIMSR_H,
+               .prio   = IPIC_SIPRR_B,
+               .force  = IPIC_SIFCR_H,
+               .bit    = 9,
+               .prio_mask = 1,
+       },
        [42] = {
                .mask   = IPIC_SIMSR_H,
                .prio   = IPIC_SIPRR_B,
@@ -230,6 +279,13 @@ static struct ipic_info ipic_info[] = {
                .bit    = 10,
                .prio_mask = 2,
        },
+       [43] = {
+               .mask   = IPIC_SIMSR_H,
+               .prio   = IPIC_SIPRR_B,
+               .force  = IPIC_SIFCR_H,
+               .bit    = 11,
+               .prio_mask = 3,
+       },
        [44] = {
                .mask   = IPIC_SIMSR_H,
                .prio   = IPIC_SIPRR_B,
@@ -387,6 +443,12 @@ static struct ipic_info ipic_info[] = {
                .force  = IPIC_SIFCR_L,
                .bit    = 18,
        },
+       [83] = {
+               .mask   = IPIC_SIMSR_L,
+               .prio   = 0,
+               .force  = IPIC_SIFCR_L,
+               .bit    = 19,
+       },
        [84] = {
                .mask   = IPIC_SIMSR_L,
                .prio   = 0,
@@ -435,6 +497,12 @@ static struct ipic_info ipic_info[] = {
                .force  = IPIC_SIFCR_L,
                .bit    = 27,
        },
+       [94] = {
+               .mask   = IPIC_SIMSR_L,
+               .prio   = 0,
+               .force  = IPIC_SIFCR_L,
+               .bit    = 30,
+       },
 };
 
 static inline u32 ipic_read(volatile u32 __iomem *base, unsigned int reg)
@@ -657,25 +725,21 @@ struct ipic * __init ipic_init(struct device_node *node, unsigned int flags)
        struct resource res;
        u32 temp = 0, ret;
 
+       ret = of_address_to_resource(node, 0, &res);
+       if (ret)
+               return NULL;
+
        ipic = alloc_bootmem(sizeof(struct ipic));
        if (ipic == NULL)
                return NULL;
 
        memset(ipic, 0, sizeof(struct ipic));
 
-       ipic->irqhost = irq_alloc_host(of_node_get(node), IRQ_HOST_MAP_LINEAR,
+       ipic->irqhost = irq_alloc_host(node, IRQ_HOST_MAP_LINEAR,
                                       NR_IPIC_INTS,
                                       &ipic_host_ops, 0);
-       if (ipic->irqhost == NULL) {
-               of_node_put(node);
-               return NULL;
-       }
-
-       ret = of_address_to_resource(node, 0, &res);
-       if (ret) {
-               of_node_put(node);
+       if (ipic->irqhost == NULL)
                return NULL;
-       }
 
        ipic->regs = ioremap(res.start, res.end - res.start + 1);
 
@@ -826,7 +890,7 @@ unsigned int ipic_get_irq(void)
 }
 
 static struct sysdev_class ipic_sysclass = {
-       set_kset_name("ipic"),
+       .name = "ipic",
 };
 
 static struct sys_device device_ipic = {
@@ -838,7 +902,7 @@ static int __init init_ipic_sysfs(void)
 {
        int rc;
 
-       if (!primary_ipic->regs)
+       if (!primary_ipic || !primary_ipic->regs)
                return -ENODEV;
        printk(KERN_DEBUG "Registering ipic with sysfs...\n");