]> rtime.felk.cvut.cz Git - linux-lin.git/blobdiff - sllin/sllin.c
Merge branch 'master' of ssh://rtime.felk.cvut.cz/lisovros/pcan_lin
[linux-lin.git] / sllin / sllin.c
index 011743ec5992d2714c6f1577f0424802487b38bb..bfa5dc515336d2ea9b1df1f18c576a27c5172fe4 100644 (file)
@@ -123,7 +123,6 @@ struct sllin {
 #define SLF_TXEVENT            3               /* Tx wake event             */
 #define SLF_MSGEVENT           4               /* CAN message to sent       */
 
-       unsigned char           leased;
        dev_t                   line;
        struct task_struct      *kwthread;
        wait_queue_head_t       kwt_wq;
@@ -148,9 +147,15 @@ static int sltty_change_speed(struct tty_struct *tty, unsigned speed)
        int cflag;
 
        mutex_lock(&tty->termios_mutex);
+
        old_termios = *(tty->termios);
        cflag = tty->termios->c_cflag;
+       cflag &= ~(CBAUD | CIBAUD);
+       cflag |= BOTHER;
+       tty->termios->c_cflag = cflag;
+
        tty_encode_baud_rate(tty, speed, speed);
+
        if (tty->ops->set_termios)
                tty->ops->set_termios(tty, &old_termios);
        //priv->io.speed = speed;
@@ -249,7 +254,7 @@ static void sll_encaps(struct sllin *sl, struct can_frame *cf)
                pr_debug("sllin: %s() RTR CAN frame\n", __FUNCTION__);
                lframe[2] = (u8)cf->can_id; /* Get one byte LIN ID */
 
-               sltty_change_speed(tty, sl->lin_baud / 2);
+               sltty_change_speed(tty, sl->lin_baud * 2 / 3);
                tty->ops->write(tty, &lframe[0], 1);
                sltty_change_speed(tty, sl->lin_baud);
                tty->ops->write(tty, &lframe[1], 1);
@@ -441,6 +446,8 @@ static void sllin_receive_buf(struct tty_struct *tty,
                if (fp && *fp++) {
                        if (!test_and_set_bit(SLF_ERROR, &sl->flags))
                                sl->dev->stats.rx_errors++;
+                       printk(KERN_INFO "sllin_receive_buf char 0x%02x ignored due marker 0x%02x, flags 0x%lx\n",
+                               *cp, *(fp-1), sl->flags);
                        cp++;
                        continue;
                }
@@ -652,7 +659,7 @@ static void sll_sync(void)
                        break;
 
                sl = netdev_priv(dev);
-               if (sl->tty || sl->leased)
+               if (sl->tty)
                        continue;
                if (dev->flags & IFF_UP)
                        dev_close(dev);
@@ -826,8 +833,6 @@ static void sllin_close(struct tty_struct *tty)
 
        tty->disc_data = NULL;
        sl->tty = NULL;
-       if (!sl->leased)
-               sl->line = 0;
 
        /* Flush network side */
        unregister_netdev(sl->dev);