All of lore.kernel.org
 help / color / mirror / Atom feed
From: "David Härdeman" <david@hardeman.nu>
To: Sean Young <sean@mess.org>
Cc: Mauro Carvalho Chehab <mchehab@redhat.com>,
	Jarod Wilson <jarod@wilsonet.com>,
	linux-media@vger.kernel.org
Subject: Re: [PATCH] [media] rc: do not sleep when the driver blocks on IR completion
Date: Sat, 25 Aug 2012 00:05:18 +0200	[thread overview]
Message-ID: <20120824220518.GA19354@hardeman.nu> (raw)
In-Reply-To: <1345756715-17643-1-git-send-email-sean@mess.org>

On Thu, Aug 23, 2012 at 10:18:35PM +0100, Sean Young wrote:
>Some drivers wait for the IR device to complete sending before
>returning, so sleeping should not be done.

I'm not quite sure what the purpose is. Even if a driver waits for TX to
finish, the lirc imposed sleep isn't harmful in any way.

As far as I can tell, the iguanair driver waits for the usb packet to be
submitted, not for IR TX to finish.

As for winbond-cir, it would be simple enough to change it so that it
doesn't wait for TX to finish (which seems to be a better solution).

Having the TX methods as asynchronous as possible is probably a better
way to go...as I expect a future TX API to be asynchronous.

>
>Signed-off-by: Sean Young <sean@mess.org>
>---
> drivers/media/rc/iguanair.c      | 1 +
> drivers/media/rc/ir-lirc-codec.c | 5 +++++
> drivers/media/rc/winbond-cir.c   | 1 +
> include/media/rc-core.h          | 2 ++
> 4 files changed, 9 insertions(+)
>
>diff --git a/drivers/media/rc/iguanair.c b/drivers/media/rc/iguanair.c
>index 66ba237..7f1941d 100644
>--- a/drivers/media/rc/iguanair.c
>+++ b/drivers/media/rc/iguanair.c
>@@ -519,6 +519,7 @@ static int __devinit iguanair_probe(struct usb_interface *intf,
> 	rc->s_tx_mask = iguanair_set_tx_mask;
> 	rc->s_tx_carrier = iguanair_set_tx_carrier;
> 	rc->tx_ir = iguanair_tx;
>+	rc->tx_ir_drains = 1;
> 	rc->driver_name = DRIVER_NAME;
> 	rc->map_name = RC_MAP_RC6_MCE;
> 	rc->timeout = MS_TO_NS(100);
>diff --git a/drivers/media/rc/ir-lirc-codec.c b/drivers/media/rc/ir-lirc-codec.c
>index 569124b..dd21917 100644
>--- a/drivers/media/rc/ir-lirc-codec.c
>+++ b/drivers/media/rc/ir-lirc-codec.c
>@@ -144,6 +144,11 @@ static ssize_t ir_lirc_transmit_ir(struct file *file, const char __user *buf,
> 	if (ret < 0)
> 		goto out;
> 
>+	if (dev->tx_ir_drains) {
>+		ret *= sizeof(unsigned int);
>+		goto out;
>+	}
>+
> 	for (i = 0; i < ret; i++)
> 		duration += txbuf[i];
> 
>diff --git a/drivers/media/rc/winbond-cir.c b/drivers/media/rc/winbond-cir.c
>index 54ee348..b1b6d34 100644
>--- a/drivers/media/rc/winbond-cir.c
>+++ b/drivers/media/rc/winbond-cir.c
>@@ -1029,6 +1029,7 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
> 	data->dev->s_idle = wbcir_idle_rx;
> 	data->dev->s_tx_mask = wbcir_txmask;
> 	data->dev->s_tx_carrier = wbcir_txcarrier;
>+	data->dev->tx_ir_drains = 1;
> 	data->dev->tx_ir = wbcir_tx;
> 	data->dev->priv = data;
> 	data->dev->dev.parent = &device->dev;
>diff --git a/include/media/rc-core.h b/include/media/rc-core.h
>index b0c494a..fc2318c 100644
>--- a/include/media/rc-core.h
>+++ b/include/media/rc-core.h
>@@ -64,6 +64,7 @@ enum rc_driver_type {
>  * @last_keycode: keycode of last keypress
>  * @last_scancode: scancode of last keypress
>  * @last_toggle: toggle value of last command
>+ * @tx_ir_drains: tx_ir returns after IR has been sent
>  * @timeout: optional time after which device stops sending data
>  * @min_timeout: minimum timeout supported by device
>  * @max_timeout: maximum timeout supported by device
>@@ -108,6 +109,7 @@ struct rc_dev {
> 	u32				last_keycode;
> 	u32				last_scancode;
> 	u8				last_toggle;
>+	unsigned			tx_ir_drains:1;
> 	u32				timeout;
> 	u32				min_timeout;
> 	u32				max_timeout;
>-- 
>1.7.11.4
>

-- 
David Härdeman

  reply	other threads:[~2012-08-24 22:05 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-23 21:18 [PATCH] [media] rc: do not sleep when the driver blocks on IR completion Sean Young
2012-08-24 22:05 ` David Härdeman [this message]
2012-08-24 23:26   ` Sean Young
2012-08-25  9:25     ` David Härdeman
2012-08-25 10:13       ` 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=20120824220518.GA19354@hardeman.nu \
    --to=david@hardeman.nu \
    --cc=jarod@wilsonet.com \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@redhat.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.