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: Alexander Aring <alex.aring@gmail.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
702d211c45
commit
c91799c50a
|
@ -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:
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue