diff options
author | Johannes Poehlmann <johannes.poehlmann@izt-labs.de> | 2017-07-25 07:27:14 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-08-28 11:20:01 -0400 |
commit | 1d925f45d8301f6bf6a66d31fcd30b9580479c93 (patch) | |
tree | 78a3bc0d7e76dc3298804fee472daf20066fe56e | |
parent | c3248f0ee0615f7f43d3ad0f27006854b2bd325f (diff) |
w1: ds1wm: silence interrupts on HW before claiming the interrupt
w1: ds1wm: silence interrupts on HW before claiming the interrupt.
This way avoid possible invalid interrupts in the initialization phase.
Signed-off-by: Johannes Poehlmann <johannes.poehlmann@izt-labs.de>
Acked-by: Evgeniy Polyakov <zbr@ioremap.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/w1/masters/ds1wm.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/w1/masters/ds1wm.c b/drivers/w1/masters/ds1wm.c index f8a3ba004c09..53143797d71a 100644 --- a/drivers/w1/masters/ds1wm.c +++ b/drivers/w1/masters/ds1wm.c | |||
@@ -509,6 +509,7 @@ static int ds1wm_probe(struct platform_device *pdev) | |||
509 | struct ds1wm_driver_data *plat; | 509 | struct ds1wm_driver_data *plat; |
510 | struct resource *res; | 510 | struct resource *res; |
511 | int ret; | 511 | int ret; |
512 | u8 inten; | ||
512 | 513 | ||
513 | if (!pdev) | 514 | if (!pdev) |
514 | return -ENODEV; | 515 | return -ENODEV; |
@@ -562,6 +563,11 @@ static int ds1wm_probe(struct platform_device *pdev) | |||
562 | ds1wm_data->int_en_reg_none = (plat->active_high ? DS1WM_INTEN_IAS : 0); | 563 | ds1wm_data->int_en_reg_none = (plat->active_high ? DS1WM_INTEN_IAS : 0); |
563 | ds1wm_data->reset_recover_delay = plat->reset_recover_delay; | 564 | ds1wm_data->reset_recover_delay = plat->reset_recover_delay; |
564 | 565 | ||
566 | /* Mask interrupts, set IAS before claiming interrupt */ | ||
567 | inten = ds1wm_read_register(ds1wm_data, DS1WM_INT_EN); | ||
568 | ds1wm_write_register(ds1wm_data, | ||
569 | DS1WM_INT_EN, ds1wm_data->int_en_reg_none); | ||
570 | |||
565 | if (res->flags & IORESOURCE_IRQ_HIGHEDGE) | 571 | if (res->flags & IORESOURCE_IRQ_HIGHEDGE) |
566 | irq_set_irq_type(ds1wm_data->irq, IRQ_TYPE_EDGE_RISING); | 572 | irq_set_irq_type(ds1wm_data->irq, IRQ_TYPE_EDGE_RISING); |
567 | if (res->flags & IORESOURCE_IRQ_LOWEDGE) | 573 | if (res->flags & IORESOURCE_IRQ_LOWEDGE) |