On 16/08/13 12:40, Sean Young wrote: > On Fri, Aug 16, 2013 at 11:53:48AM +0100, Srinivas KANDAGATLA wrote: >> Thanks Sean for the comments. >> On 16/08/13 09:38, Sean Young wrote: >>> On Wed, Aug 14, 2013 at 06:27:01PM +0100, Srinivas KANDAGATLA wrote: >> [...] >>>> + /* discard the entire collection in case of errors! */ >>>> + dev_info(dev->dev, "IR RX overrun\n"); >>>> + writel(IRB_RX_OVERRUN_INT, >>>> + dev->rx_base + IRB_RX_INT_CLEAR); >>>> + continue; >>>> + } >>>> + >>>> + symbol = readl(dev->rx_base + IRB_RX_SYS); >>>> + mark = readl(dev->rx_base + IRB_RX_ON); >>>> + >>>> + if (symbol == IRB_TIMEOUT) >>>> + last_symbol = 1; >>>> + >>>> + /* Ignore any noise */ >>>> + if ((mark > 2) && (symbol > 1)) { >>>> + symbol -= mark; >>>> + if (dev->overclocking) { /* adjustments to timings */ >>>> + symbol *= dev->sample_mult; >>>> + symbol /= dev->sample_div; >>>> + mark *= dev->sample_mult; >>>> + mark /= dev->sample_div; >>>> + } >>>> + >>>> + ev.duration = US_TO_NS(mark); >>>> + ev.pulse = true; >>>> + ir_raw_event_store(dev->rdev, &ev); >>>> + >>>> + if (!last_symbol) { >>>> + ev.duration = US_TO_NS(symbol); >>>> + ev.pulse = false; >>>> + ir_raw_event_store(dev->rdev, &ev); >>> >>> Make sure you call ir_raw_event_handle() once a while (maybe every time >>> the interrupt handler is called?) to prevent the ir kfifo from >>> overflowing in case of very long IR. ir_raw_event_store() just adds >>> new edges to the kfifo() but does not flush them to the decoders or >>> lirc. >> I agree, but Am not sure it will really help in this case because, we >> are going to stay in this interrupt handler till we get a >> last_symbol(full key press/release event).. So calling >> ir_raw_event_store mulitple times might not help because the >> ir_raw_event kthread(which is clearing kfifo) which is only scheduled >> after returning from this interrupt. > > If I read it correctly, then this is only true if the fifo contains an > IRB_TIMEOUT symbol. If not yet, then the interrupt handlers is not > waiting around for those symbols to arrive. Yes, as we are clearing the fifo and fifo size is 64 words its always highly possible that It will contain IRB_TIMEOUT for that interrupt. Thanks, srini > > Thanks > Sean > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html