Re: [PATCH v2 3/4] iio: accel: adxl345: Setup DATA_READY trigger

From: Rob Herring
Date: Mon May 01 2017 - 23:02:22 EST


On Sun, Apr 30, 2017 at 7:32 PM, Jonathan Cameron <jic23@xxxxxxxxxx> wrote:
> On 29/04/17 08:49, Eva Rachel Retuya wrote:
>> The ADXL345 provides a DATA_READY interrupt function to signal
>> availability of new data. This interrupt function is latched and can be
>> cleared by reading the data registers. The polarity is set to active
>> high by default.
>>
>> Support this functionality by setting it up as an IIO trigger.
>>
>> In addition, two output pins INT1 and INT2 are available for driving
>> interrupts. Allow mapping to either pins by specifying the
>> interrupt-names property in device tree.
>>
>> Signed-off-by: Eva Rachel Retuya <eraretuya@xxxxxxxxx>
> Coming together nicely, but a few more bits and pieces inline...
>
> One slight worry is that the irq names stuff is to restrictive
> as we want to direct different interrupts to different pins if
> both are supported!

[...]

>> @@ -199,6 +253,22 @@ int adxl345_core_probe(struct device *dev, struct regmap *regmap,
>> dev_err(dev, "Failed to set data range: %d\n", ret);
>> return ret;
>> }
>> + /*
>> + * Any bits set to 0 send their respective interrupts to the INT1 pin,
>> + * whereas bits set to 1 send their respective interrupts to the INT2
>> + * pin. Map all interrupts to the specified pin.
> This is an interesting comment. The usual reason for dual interrupt
> pins is precisely to not map all functions to the same one. That allows
> for a saving in querying which interrupt it is by having just the data ready
> on one pin and just the events on the other...
>
> Perhaps the current approach won't support that mode of operation?
> Clearly we can't merge a binding that enforces them all being the same
> and then change it later as it'll be incompatible.
>
> I'm not quite sure how one should do this sort of stuff in DT though.
>
> Rob?

DT should just describe what is connected which I gather here could be
either one or both IRQs. We generally distinguish the IRQs with the
interrupt-names property and then retrieve it as below.

>> + */
>> + of_irq = of_irq_get_byname(dev->of_node, "INT2");
>> + if (of_irq == irq)
>> + regval = 0xFF;
>> + else
>> + regval = 0x00;