Skip to content

Commit

Permalink
Input: serio - allow registered drivers to get status flag
Browse files Browse the repository at this point in the history
Parse and pass the status byte information to the registered serio
drivers as well as the data bytes.

Signed-off-by: David Engraf<david.engraf@sysgo.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
  • Loading branch information
David Engraf authored and Dmitry Torokhov committed Jan 21, 2011
1 parent b0f05aa commit 48c2701
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions drivers/input/serio/serport.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,23 +116,39 @@ static void serport_ldisc_close(struct tty_struct *tty)

/*
* serport_ldisc_receive() is called by the low level tty driver when characters
* are ready for us. We forward the characters, one by one to the 'interrupt'
* routine.
* are ready for us. We forward the characters and flags, one by one to the
* 'interrupt' routine.
*/

static void serport_ldisc_receive(struct tty_struct *tty, const unsigned char *cp, char *fp, int count)
{
struct serport *serport = (struct serport*) tty->disc_data;
unsigned long flags;
unsigned int ch_flags;
int i;

spin_lock_irqsave(&serport->lock, flags);

if (!test_bit(SERPORT_ACTIVE, &serport->flags))
goto out;

for (i = 0; i < count; i++)
serio_interrupt(serport->serio, cp[i], 0);
for (i = 0; i < count; i++) {
switch (fp[i]) {
case TTY_FRAME:
ch_flags = SERIO_FRAME;
break;

case TTY_PARITY:
ch_flags = SERIO_PARITY;
break;

default:
ch_flags = 0;
break;
}

serio_interrupt(serport->serio, cp[i], ch_flags);
}

out:
spin_unlock_irqrestore(&serport->lock, flags);
Expand Down

0 comments on commit 48c2701

Please sign in to comment.