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. 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