irblaster: add synchronous transmit [1/1]
authorWencai You <wencai.you@amlogic.com>
Tue, 20 Nov 2018 14:12:16 +0000 (22:12 +0800)
committerJianxin Pan <jianxin.pan@amlogic.com>
Thu, 22 Nov 2018 10:56:23 +0000 (02:56 -0800)
PD#SWPL-2170

Problem:
cts fail
android.hardware.consumerir.cts.ConsumerIrTest#test_timing

Solution:
add synchronous transmit
when it returns the pattern has been transmitted

Verify:
verify on franklin

Change-Id: I7e490236e5effc13f81e4fab3a1c7fc10c5dcfb3
Signed-off-by: Wencai You <wencai.you@amlogic.com>
drivers/amlogic/irblaster/meson-irblaster.c

index 0ec658e..f0c7e38 100644 (file)
@@ -118,7 +118,7 @@ static void send_all_data(struct aml_irblaster_dev *dev)
        }
        if (dev->count >= dev->buffer_size) {
                irblaster_dbg("The all datas finished!\n");
-               complete(&dev->blaster_completion);
+               //complete(&dev->blaster_completion);
        }
 }
 
@@ -127,6 +127,7 @@ static irqreturn_t meson_blaster_interrupt(int irq, void *dev_id)
        struct aml_irblaster_dev *dev = dev_id;
 
        irblaster_dbg("meson_blaster_interrupt !!\n");
+       complete(&dev->blaster_completion);
        /*clear pending bit*/
        writel(readl(dev->reg_base + AO_IR_BLASTER_ADDR3) &
                        (~BLASTER_FIFO_THD_PENDING),
@@ -400,6 +401,7 @@ static ssize_t store_send(struct device *dev,
                irblaster_dbg("%d\n", irblaster_dev->buffer[i]);
        irblaster_dbg("sum_time = %d\n", sum_time);
        irblaster_dev->count = 0;
+       init_completion(&irblaster_dev->blaster_completion);
        send_all_data(irblaster_dev);
        ret = wait_for_completion_interruptible_timeout(
                        &irblaster_dev->blaster_completion,