linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andi Shyti <andi.shyti@samsung.com>
To: Sean Young <sean@mess.org>
Cc: "David Härdeman" <david@hardeman.nu>,
	"Mauro Carvalho Chehab" <mchehab@osg.samsung.com>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Mark Rutland" <mark.rutland@arm.com>,
	linux-media@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, "Andi Shyti" <andi@etezian.org>
Subject: Re: [PATCH v2 5/7] [media] ir-lirc-codec: don't wait any transmitting time for tx only devices
Date: Tue, 01 Nov 2016 15:51:11 +0900	[thread overview]
Message-ID: <20161101065111.hofyxjps2iwmxpzj@gangnam.samsung> (raw)
In-Reply-To: <20161031170526.GA8183@gofer.mess.org>

Hi Sean,

> Andi, it would be good to know what the use-case for the original change is.

the use case is the ir-spi itself which doesn't need the lirc to
perform any waiting on its behalf.

To me it just doesn't look right to simulate a fake transmission
period and wait unnecessary time. Of course, the "over-wait" is not
a big deal and at the end we can decide to drop it.

Otherwise, an alternative could be to add the boolean
'tx_no_wait' in the rc_dev structure. It could be set by the
device driver during the initialization and the we can follow
your approach.

Something like this:

diff --git a/drivers/media/rc/ir-lirc-codec.c b/drivers/media/rc/ir-lirc-codec.c
index c327730..4553d04 100644
--- a/drivers/media/rc/ir-lirc-codec.c
+++ b/drivers/media/rc/ir-lirc-codec.c
@@ -161,15 +161,19 @@ static ssize_t ir_lirc_transmit_ir(struct file *file, const char __user *buf,
 
        ret *= sizeof(unsigned int);
 
-       /*
-        * The lircd gap calculation expects the write function to
-        * wait for the actual IR signal to be transmitted before
-        * returning.
-        */
-       towait = ktime_us_delta(ktime_add_us(start, duration), ktime_get());
-       if (towait > 0) {
-               set_current_state(TASK_INTERRUPTIBLE);
-               schedule_timeout(usecs_to_jiffies(towait));
+       if (!dev->tx_no_wait) {
+               /*
+                * The lircd gap calculation expects the write function to
+                * wait for the actual IR signal to be transmitted before
+                * returning.
+                */
+               towait = ktime_us_delta(ktime_add_us(start, duration),
+                                                               ktime_get());
+               if (towait > 0) {
+                       set_current_state(TASK_INTERRUPTIBLE);
+                       schedule_timeout(usecs_to_jiffies(towait));
+               }
+
        }
 
 out:
diff --git a/drivers/media/rc/ir-spi.c b/drivers/media/rc/ir-spi.c
index fcda1e4..e44abfa 100644
--- a/drivers/media/rc/ir-spi.c
+++ b/drivers/media/rc/ir-spi.c
@@ -149,6 +149,7 @@ static int ir_spi_probe(struct spi_device *spi)
        if (!idata->rc)
                return -ENOMEM;
 
+       idata->rc->tx_no_wait      = true;
        idata->rc->tx_ir           = ir_spi_tx;
        idata->rc->s_tx_carrier    = ir_spi_set_tx_carrier;
        idata->rc->s_tx_duty_cycle = ir_spi_set_duty_cycle;
diff --git a/include/media/rc-core.h b/include/media/rc-core.h
index fe0c9c4..c3ced9b 100644
--- a/include/media/rc-core.h
+++ b/include/media/rc-core.h
@@ -85,6 +85,9 @@ enum rc_filter_type {
  * @input_dev: the input child device used to communicate events to userspace
  * @driver_type: specifies if protocol decoding is done in hardware or software
  * @idle: used to keep track of RX state
+ * @tx_no_wait: decides whether to perform or not a sync write or not. The
+ *      device driver setting it to true must make sure to not break the ABI
+ *      which requires a sync transfer.
  * @allowed_protocols: bitmask with the supported RC_BIT_* protocols
  * @enabled_protocols: bitmask with the enabled RC_BIT_* protocols
  * @allowed_wakeup_protocols: bitmask with the supported RC_BIT_* wakeup protocols
@@ -147,6 +150,7 @@ struct rc_dev {
        struct input_dev                *input_dev;
        enum rc_driver_type             driver_type;
        bool                            idle;
+       bool                            tx_no_wait;
        u64                             allowed_protocols;
        u64                             enabled_protocols;
        u64                             allowed_wakeup_protocols;

Thanks,
Andi

  reply	other threads:[~2016-11-01  6:51 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-01 17:16 [PATCH v2 0/7] Add support for IR transmitters Andi Shyti
2016-09-01 17:16 ` [PATCH v2 1/7] [media] rc-main: assign driver type during allocation Andi Shyti
2016-09-01 21:23   ` Sean Young
2016-09-02  5:25     ` Andi Shyti
2016-09-01 17:16 ` [PATCH v2 2/7] [media] rc-main: split setup and unregister functions Andi Shyti
2016-09-01 17:16 ` [PATCH v2 3/7] [media] rc-core: add support for IR raw transmitters Andi Shyti
2016-09-01 21:31   ` Sean Young
2016-09-02  0:21   ` kbuild test robot
2016-09-01 17:16 ` [PATCH v2 4/7] [media] rc-ir-raw: do not generate any receiving thread for " Andi Shyti
2016-09-01 17:16 ` [PATCH v2 5/7] [media] ir-lirc-codec: don't wait any transmitting time for tx only devices Andi Shyti
2016-09-02  8:41   ` Sean Young
2016-10-27  7:44     ` Andi Shyti
2016-10-27 14:36       ` Sean Young
2016-10-31 14:31       ` David Härdeman
2016-10-31 17:05         ` Sean Young
2016-11-01  6:51           ` Andi Shyti [this message]
2016-11-01 10:34             ` Sean Young
2016-11-02  4:39               ` Andi Shyti
2016-09-01 17:16 ` [PATCH v2 6/7] Documentation: bindings: add documentation for ir-spi device driver Andi Shyti
2016-09-01 21:40   ` Rob Herring
2016-09-02  5:33     ` Andi Shyti
2016-09-12 13:27       ` Rob Herring
2016-09-01 17:16 ` [PATCH v2 7/7] [media] rc: add support for IR LEDs driven through SPI Andi Shyti
2016-09-01 21:12   ` Sean Young
2016-09-02  5:27     ` Andi Shyti
2016-09-02  8:43       ` Sean Young

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161101065111.hofyxjps2iwmxpzj@gangnam.samsung \
    --to=andi.shyti@samsung.com \
    --cc=andi@etezian.org \
    --cc=david@hardeman.nu \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mchehab@osg.samsung.com \
    --cc=robh+dt@kernel.org \
    --cc=sean@mess.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).