|
@@ -509,6 +509,7 @@ static int ds1wm_probe(struct platform_device *pdev)
|
|
struct ds1wm_driver_data *plat;
|
|
struct ds1wm_driver_data *plat;
|
|
struct resource *res;
|
|
struct resource *res;
|
|
int ret;
|
|
int ret;
|
|
|
|
+ u8 inten;
|
|
|
|
|
|
if (!pdev)
|
|
if (!pdev)
|
|
return -ENODEV;
|
|
return -ENODEV;
|
|
@@ -562,6 +563,11 @@ static int ds1wm_probe(struct platform_device *pdev)
|
|
ds1wm_data->int_en_reg_none = (plat->active_high ? DS1WM_INTEN_IAS : 0);
|
|
ds1wm_data->int_en_reg_none = (plat->active_high ? DS1WM_INTEN_IAS : 0);
|
|
ds1wm_data->reset_recover_delay = plat->reset_recover_delay;
|
|
ds1wm_data->reset_recover_delay = plat->reset_recover_delay;
|
|
|
|
|
|
|
|
+ /* Mask interrupts, set IAS before claiming interrupt */
|
|
|
|
+ inten = ds1wm_read_register(ds1wm_data, DS1WM_INT_EN);
|
|
|
|
+ ds1wm_write_register(ds1wm_data,
|
|
|
|
+ DS1WM_INT_EN, ds1wm_data->int_en_reg_none);
|
|
|
|
+
|
|
if (res->flags & IORESOURCE_IRQ_HIGHEDGE)
|
|
if (res->flags & IORESOURCE_IRQ_HIGHEDGE)
|
|
irq_set_irq_type(ds1wm_data->irq, IRQ_TYPE_EDGE_RISING);
|
|
irq_set_irq_type(ds1wm_data->irq, IRQ_TYPE_EDGE_RISING);
|
|
if (res->flags & IORESOURCE_IRQ_LOWEDGE)
|
|
if (res->flags & IORESOURCE_IRQ_LOWEDGE)
|