提交 c91799c5 编写于 作者: A Alexander Aring 提交者: Marcel Holtmann

at86rf230: add warning if edge-triggered irq

While testing I experience a deadlock while using the at86rf233 on a
raspberry pi. The reason was an edge triggered gpio irq because the irq
triggered while irq was disabled. This issue doesn't happend on a level
triggered irq because the irq will hit after calling enable_irq.

This patch adds a warning that it's not recommended to use a edge-triggered
irq type. Also change the examples to high-level irqtype.
Signed-off-by: NAlexander Aring <alex.aring@gmail.com>
Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
上级 702d211c
...@@ -6,7 +6,8 @@ Required properties: ...@@ -6,7 +6,8 @@ Required properties:
- spi-max-frequency: maximal bus speed, should be set to 7500000 depends - spi-max-frequency: maximal bus speed, should be set to 7500000 depends
sync or async operation mode sync or async operation mode
- reg: the chipselect index - reg: the chipselect index
- interrupts: the interrupt generated by the device - interrupts: the interrupt generated by the device. Non high-level
can occur deadlocks while handling isr.
Optional properties: Optional properties:
- reset-gpio: GPIO spec for the rstn pin - reset-gpio: GPIO spec for the rstn pin
...@@ -20,7 +21,7 @@ Example: ...@@ -20,7 +21,7 @@ Example:
compatible = "atmel,at86rf231"; compatible = "atmel,at86rf231";
spi-max-frequency = <7500000>; spi-max-frequency = <7500000>;
reg = <0>; reg = <0>;
interrupts = <19 1>; interrupts = <19 4>;
interrupt-parent = <&gpio3>; interrupt-parent = <&gpio3>;
xtal-trim = /bits/ 8 <0x06>; xtal-trim = /bits/ 8 <0x06>;
}; };
...@@ -1321,6 +1321,10 @@ static int at86rf230_hw_init(struct at86rf230_local *lp, u8 xtal_trim) ...@@ -1321,6 +1321,10 @@ static int at86rf230_hw_init(struct at86rf230_local *lp, u8 xtal_trim)
return rc; return rc;
irq_type = irq_get_trigger_type(lp->spi->irq); irq_type = irq_get_trigger_type(lp->spi->irq);
if (irq_type == IRQ_TYPE_EDGE_RISING ||
irq_type == IRQ_TYPE_EDGE_FALLING)
dev_warn(&lp->spi->dev,
"Using edge triggered irq's are not recommended!\n");
if (irq_type == IRQ_TYPE_EDGE_FALLING || if (irq_type == IRQ_TYPE_EDGE_FALLING ||
irq_type == IRQ_TYPE_LEVEL_LOW) irq_type == IRQ_TYPE_LEVEL_LOW)
irq_pol = IRQ_ACTIVE_LOW; irq_pol = IRQ_ACTIVE_LOW;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册