Skip to contentSkip to conversation

serio: allow registered drivers to get status flag

PATCH In review David Engraf 2 participants 5 messages Jan 18, 2011 – Jan 26, 2011

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 serio: allow registered drivers to get status flag

Parse the status byte information to the registered serio drivers as well as the character bytes.

drivers/input/serio/serport.c renamed from drivers/input/serio/serport.c.orig +3 -3
@@ -116,8 +116,8 @@ static void serport_ldisc_close(struct t
 
 /*
  * 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)
@@ -132,7 +132,7 @@ static void serport_ldisc_receive(struct
 		goto out;
 
 	for (i = 0; i < count; i++)
-		serio_interrupt(serport->serio, cp[i], 0);
+		serio_interrupt(serport->serio, cp[i], fp[i]);
 
 out:
 	spin_unlock_irqrestore(&serport->lock, flags);
maintainer
#1 lore raw
Quoted 20 lines · David Engraf

Parse the status byte information to the registered serio drivers as well as the character bytes.

drivers/input/serio/serport.c renamed from drivers/input/serio/serport.c.orig +2 -2
@@ -116,8 +116,8 @@ static void serport_ldisc_close(struct t
 
 /*
  * 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)

drivers/input/serio/serport.c static void serport_ldisc_receive(struct · line 136

Quoted 6 lines
drivers/input/serio/serport.c renamed from drivers/input/serio/serport.c.orig +1 -1
@@ -132,7 +132,7 @@ static void serport_ldisc_receive(struct
 		goto out;
 
 	for (i = 0; i < count; i++)
-		serio_interrupt(serport->serio, cp[i], 0);
+		serio_interrupt(serport->serio, cp[i], fp[i]);
 

Hi David,

The flags argument that serio_interrupt() accepts not the raw protocol data, but sanitized, protocol-independent SERIO_TIMEOUT, SERIO_PARITY and SERIO_FRAME bits.

Thanks.

Signature · 1 line
Dmitry
#2 lore raw

Am 18.01.2011 20:57, schrieb Dmitry Torokhov:

Quoted 30 lines · David Engraf
Quoted 20 lines

Parse the status byte information to the registered serio drivers as well as the character bytes.

drivers/input/serio/serport.c renamed from drivers/input/serio/serport.c.orig +2 -2
@@ -116,8 +116,8 @@ static void serport_ldisc_close(struct t
 
  /*
   * 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)

drivers/input/serio/serport.c static void serport_ldisc_receive(struct · line 136

Quoted 6 lines
drivers/input/serio/serport.c renamed from drivers/input/serio/serport.c.orig +1 -1
@@ -132,7 +132,7 @@ static void serport_ldisc_receive(struct
  		goto out;
 
  	for (i = 0; i<  count; i++)
-		serio_interrupt(serport->serio, cp[i], 0);
+		serio_interrupt(serport->serio, cp[i], fp[i]);
 

Hi David,

Quoted 6 lines

The flags argument that serio_interrupt() accepts not the raw protocol data, but sanitized, protocol-independent SERIO_TIMEOUT, SERIO_PARITY and SERIO_FRAME bits.

Thanks.

Hi Dmitry,

I've updated the patch so that the raw protocol is converted to the SERIO_ bits. The raw protocol can parse only one flag, so I don't need to store multiple SERIO_ bits in the character flag variable.

Thanks
- David

drivers/input/serio/serport.c renamed from drivers/input/serio/serport.c.orig +12 -4
@@ -116,14 +116,15 @@ static void serport_ldisc_close(struct t
 
 /*
  * 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);
@@ -131,8 +132,15 @@ static void serport_ldisc_receive(struct
 	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++) {
+		ch_flags = 0;
+		if (fp[i] == TTY_FRAME)
+			ch_flags = SERIO_FRAME;
+		else if (fp[i] == TTY_PARITY)
+			ch_flags = SERIO_PARITY;
+
+		serio_interrupt(serport->serio, cp[i], ch_flags);
+	}
 
 out:
 	spin_unlock_irqrestore(&serport->lock, flags);
#3 lore raw

Am 20.01.2011 10:05, schrieb David Engraf:

Quoted 50 lines

Am 18.01.2011 20:57, schrieb Dmitry Torokhov:

Quoted 36 lines · David Engraf
Quoted 26 lines

Parse the status byte information to the registered serio drivers as well as the character bytes.

--- linux-2.6.37/drivers/input/serio/serport.c.orig 2011-01-18 12:33:41.421709232 +0100
+++ linux-2.6.37/drivers/input/serio/serport.c 2011-01-18 13:33:24.521711214 +0100

(quoted diff) +0 -0
@@ -116,8 +116,8 @@ static void serport_ldisc_close(struct t
 
 /*
 * 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)

drivers/input/serio/serport.c static void serport_ldisc_receive(struct · line 136

Quoted 6 lines
drivers/input/serio/serport.c renamed from drivers/input/serio/serport.c.orig +1 -1
@@ -132,7 +132,7 @@ static void serport_ldisc_receive(struct
 goto out;
 
 for (i = 0; i< count; i++)
- serio_interrupt(serport->serio, cp[i], 0);
+ serio_interrupt(serport->serio, cp[i], fp[i]);
 

Hi David,

Quoted 6 lines

The flags argument that serio_interrupt() accepts not the raw protocol data, but sanitized, protocol-independent SERIO_TIMEOUT, SERIO_PARITY and SERIO_FRAME bits.

Thanks.

Hi Dmitry,

I've updated the patch so that the raw protocol is converted to the SERIO_ bits. The raw protocol can parse only one flag, so I don't need to store multiple SERIO_ bits in the character flag variable.

Quoted 6 lines

Thanks
- David

Hi Dmitry,

is my last patch okay for you? Just want to know if I can give you further help on this and if it is planned to integrate my patch.

Thanks
- David

maintainer
#4 lore raw
Quoted 55 lines · David Engraf

Am 20.01.2011 10:05, schrieb David Engraf:

Quoted 54 lines

Am 18.01.2011 20:57, schrieb Dmitry Torokhov:

Quoted 36 lines · David Engraf
Quoted 26 lines

Parse the status byte information to the registered serio drivers as well as the character bytes.

--- linux-2.6.37/drivers/input/serio/serport.c.orig 2011-01-18 12:33:41.421709232 +0100
+++ linux-2.6.37/drivers/input/serio/serport.c 2011-01-18 13:33:24.521711214 +0100

(quoted diff) +0 -0
@@ -116,8 +116,8 @@ static void serport_ldisc_close(struct t
 
 /*
 * 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)

drivers/input/serio/serport.c static void serport_ldisc_receive(struct · line 136

Quoted 6 lines
drivers/input/serio/serport.c renamed from drivers/input/serio/serport.c.orig +1 -1
@@ -132,7 +132,7 @@ static void serport_ldisc_receive(struct
 goto out;
 
 for (i = 0; i< count; i++)
- serio_interrupt(serport->serio, cp[i], 0);
+ serio_interrupt(serport->serio, cp[i], fp[i]);
 

Hi David,

Quoted 6 lines

The flags argument that serio_interrupt() accepts not the raw protocol data, but sanitized, protocol-independent SERIO_TIMEOUT, SERIO_PARITY and SERIO_FRAME bits.

Thanks.

Hi Dmitry,

I've updated the patch so that the raw protocol is converted to the SERIO_ bits. The raw protocol can parse only one flag, so I don't need to store multiple SERIO_ bits in the character flag variable.

Thanks
- David

Quoted 8 lines
Quoted 2 lines

Hi Dmitry,

is my last patch okay for you? Just want to know if I can give you further help on this and if it is planned to integrate my patch.

Hi David,

The patch should hit mainline real soon now, no action is needed on your part.

Thanks.

Signature · 1 line
Dmitry