goto err1;
        }
        ds1wm_data->irq = res->start;
-       ds1wm_data->active_high = (res->flags & IORESOURCE_IRQ_HIGHEDGE) ?
-               1 : 0;
+       ds1wm_data->active_high = plat->active_high;
 
-       set_irq_type(ds1wm_data->irq, ds1wm_data->active_high ?
-                       IRQ_TYPE_EDGE_RISING : IRQ_TYPE_EDGE_FALLING);
+       if (res->flags & IORESOURCE_IRQ_HIGHEDGE)
+               set_irq_type(ds1wm_data->irq, IRQ_TYPE_EDGE_RISING);
+       if (res->flags & IORESOURCE_IRQ_LOWEDGE)
+               set_irq_type(ds1wm_data->irq, IRQ_TYPE_EDGE_FALLING);
 
        ret = request_irq(ds1wm_data->irq, ds1wm_isr, IRQF_DISABLED,
                          "ds1wm", ds1wm_data);
 
                             * e.g. on h5xxx and h2200 this is 2
                             * (registers aligned to 4-byte boundaries),
                             * while on hx4700 this is 1 */
+       int active_high;
        void (*enable)(struct platform_device *pdev);
        void (*disable)(struct platform_device *pdev);
 };