Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dde7edff authored by Sean Young's avatar Sean Young Committed by Mauro Carvalho Chehab
Browse files

media: lirc: when transmitting scancodes, block until transmit is done



The semantics for lirc IR transmit with raw IR is that the write call
should block until the IR is transmitted. Some drivers have no idea
when this actually is (e.g. mceusb), so there is a wait.

This is useful for userspace, as it might want to send a IR button press,
a gap of a predefined number of milliseconds, and then send a repeat
message.

It turns out that for transmitting scancodes this feature is even more
useful, as user space has no idea how long the IR is. So, maintain
the existing semantics for IR scancode transmit.

Signed-off-by: default avatarSean Young <sean@mess.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent fb7ccc61
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -60,8 +60,8 @@ When in :ref:`LIRC_MODE_SCANCODE <lirc-mode-scancode>` mode, one
and the protocol in the :c:type:`rc_proto`: member. All other members must be
set to 0, else ``EINVAL`` is returned. If there is no protocol encoder
for the protocol or the scancode is not valid for the specified protocol,
``EINVAL`` is returned. The write function may not wait until the scancode
is transmitted.
``EINVAL`` is returned. The write function blocks until the scancode
is transmitted by the hardware.


Return Value
+11 −11
Original line number Diff line number Diff line
@@ -354,6 +354,7 @@ static ssize_t ir_lirc_transmit_ir(struct file *file, const char __user *buf,
			duration += txbuf[i];

		ret *= sizeof(unsigned int);
	}

	/*
	 * The lircd gap calculation expects the write function to
@@ -366,7 +367,6 @@ static ssize_t ir_lirc_transmit_ir(struct file *file, const char __user *buf,
		set_current_state(TASK_INTERRUPTIBLE);
		schedule_timeout(usecs_to_jiffies(towait));
	}
	}

out:
	mutex_unlock(&dev->lock);