Hi,
On 05/19/2014 10:26 PM, David Härdeman wrote:
> On Thu, May 15, 2014 at 03:56:41AM +0600, Alexander Bersenev wrote:
>> This patch adds driver for sunxi IR controller.
>> It is based on Alexsey Shestacov's work based on the original driver
>> supplied by Allwinner.
>>
>
> ...
>
>> +static irqreturn_t sunxi_ir_irq(int irqno, void *dev_id)
>> +{
>> + unsigned long status;
>> + unsigned char dt;
>> + unsigned int cnt, rc;
>> + struct sunxi_ir *ir = dev_id;
>> + DEFINE_IR_RAW_EVENT(rawir);
>> +
>> + spin_lock(&ir->ir_lock);
>> +
>> + status = readl(ir->base + SUNXI_IR_RXSTA_REG);
>> +
>> + /* clean all pending statuses */
>> + writel(status | REG_RXSTA_CLEARALL, ir->base + SUNXI_IR_RXSTA_REG);
>> +
>> + if (status & REG_RXINT_RAI_EN) {
>> + /* How many messages in fifo */
>> + rc = (status >> REG_RXSTA_RAC__SHIFT) & REG_RXSTA_RAC__MASK;
>> + /* Sanity check */
>> + rc = rc > SUNXI_IR_FIFO_SIZE ? SUNXI_IR_FIFO_SIZE : rc;
>> + /* If we have data */
>> + for (cnt = 0; cnt < rc; cnt++) {
>> + /* for each bit in fifo */
>> + dt = readb(ir->base + SUNXI_IR_RXFIFO_REG);
>> + rawir.pulse = (dt & 0x80) != 0;
>> + rawir.duration = (dt & 0x7f) * SUNXI_IR_SAMPLE;
>
> Can the hardware actually return a zero duration or should that be dt &
> 0x7f + 1?
>
> (Not familiar with this particular hardware but I know I've seen that
> behaviour before).
Good point, I've just checked and the datasheet says the reported pulse
duration can be up to 128, so that would make the range 1-128 not 0-127,
so I believe we indeed need to add 1 to this.
Regards,
Hans
--
You received this message because you are subscribed to the Google Groups
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.