#include <linux/module.h>
 #include <linux/of_irq.h>
 #include <linux/platform_device.h>
+#include <linux/seq_file.h>
 
 #define PIC_CAUSE             0x0
 #define PIC_MASK              0x4
        void __iomem *base;
        u32 parent_irq;
        struct irq_domain *domain;
-       struct irq_chip irq_chip;
+       struct platform_device *pdev;
 };
 
 static void mvebu_pic_reset(struct mvebu_pic *pic)
        writel(reg, pic->base + PIC_MASK);
 }
 
+static void mvebu_pic_print_chip(struct irq_data *d, struct seq_file *p)
+{
+       struct mvebu_pic *pic = irq_data_get_irq_chip_data(d);
+
+       seq_printf(p, dev_name(&pic->pdev->dev));
+}
+
+static const struct irq_chip mvebu_pic_chip = {
+       .irq_mask       = mvebu_pic_mask_irq,
+       .irq_unmask     = mvebu_pic_unmask_irq,
+       .irq_eoi        = mvebu_pic_eoi_irq,
+       .irq_print_chip = mvebu_pic_print_chip,
+};
+
 static int mvebu_pic_irq_map(struct irq_domain *domain, unsigned int virq,
                             irq_hw_number_t hwirq)
 {
 
        irq_set_percpu_devid(virq);
        irq_set_chip_data(virq, pic);
-       irq_set_chip_and_handler(virq, &pic->irq_chip,
-                                handle_percpu_devid_irq);
+       irq_set_chip_and_handler(virq, &mvebu_pic_chip, handle_percpu_devid_irq);
        irq_set_status_flags(virq, IRQ_LEVEL);
        irq_set_probe(virq);
 
 {
        struct device_node *node = pdev->dev.of_node;
        struct mvebu_pic *pic;
-       struct irq_chip *irq_chip;
 
        pic = devm_kzalloc(&pdev->dev, sizeof(struct mvebu_pic), GFP_KERNEL);
        if (!pic)
                return -ENOMEM;
 
+       pic->pdev = pdev;
        pic->base = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(pic->base))
                return PTR_ERR(pic->base);
 
-       irq_chip = &pic->irq_chip;
-       irq_chip->name = dev_name(&pdev->dev);
-       irq_chip->irq_mask = mvebu_pic_mask_irq;
-       irq_chip->irq_unmask = mvebu_pic_unmask_irq;
-       irq_chip->irq_eoi = mvebu_pic_eoi_irq;
-
        pic->parent_irq = irq_of_parse_and_map(node, 0);
        if (pic->parent_irq <= 0) {
                dev_err(&pdev->dev, "Failed to parse parent interrupt\n");