int div_okay = 1;
        int baud;
 
-       /*
-        * The logic involved in setting the baudrate can be cleanly split into
-        * 3 steps.
-        * 1. Standard baud rates are set in tty->termios->c_cflag
-        * 2. If these are not enough, you can set any speed using alt_speed as
-        * follows:
-        *    - set tty->termios->c_cflag speed to B38400
-        *    - set your real speed in tty->alt_speed; it gets ignored when
-        *      alt_speed==0, (or)
-        *    - call TIOCSSERIAL ioctl with (struct serial_struct) set as
-        *      follows:
-        *      flags & ASYNC_SPD_MASK == ASYNC_SPD_[HI, VHI, SHI, WARP],
-        *      this just sets alt_speed to (HI: 57600, VHI: 115200,
-        *      SHI: 230400, WARP: 460800)
-        * ** Steps 1, 2 are done courtesy of tty_get_baud_rate
-        * 3. You can also set baud rate by setting custom divisor as follows
-        *    - set tty->termios->c_cflag speed to B38400
-        *    - call TIOCSSERIAL ioctl with (struct serial_struct) set as
-        *      follows:
-        *      o flags & ASYNC_SPD_MASK == ASYNC_SPD_CUST
-        *      o custom_divisor set to baud_base / your_new_baudrate
-        * ** Step 3 is done courtesy of code borrowed from serial.c
-        *    I should really spend some time and separate + move this common
-        *    code to serial.c, it is replicated in nearly every serial driver
-        *    you see.
-        */
-
-       /* 1. Get the baud rate from the tty settings, this observes
-             alt_speed hack */
-
        baud = tty_get_baud_rate(tty);
        dev_dbg(dev, "%s - tty_get_baud_rate reports speed %d\n", __func__, baud);
 
-       /* 2. Observe async-compatible custom_divisor hack, update baudrate
-          if needed */
-
+       /*
+        * Observe deprecated async-compatible custom_divisor hack, update
+        * baudrate if needed.
+        */
        if (baud == 38400 &&
            ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) &&
             (priv->custom_divisor)) {
                        __func__, priv->custom_divisor, baud);
        }
 
-       /* 3. Convert baudrate to device-specific divisor */
-
        if (!baud)
                baud = 9600;
        switch (priv->chip_type) {
 check_and_exit:
        write_latency_timer(port);
 
-       if ((priv->flags ^ old_priv.flags) & ASYNC_SPD_MASK) {
-               if ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
-                       tty->alt_speed = 57600;
-               else if ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
-                       tty->alt_speed = 115200;
-               else if ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
-                       tty->alt_speed = 230400;
-               else if ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
-                       tty->alt_speed = 460800;
-               else
-                       tty->alt_speed = 0;
-       }
        if ((priv->flags ^ old_priv.flags) & ASYNC_SPD_MASK ||
                        ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST &&
                         priv->custom_divisor != old_priv.custom_divisor)) {
+
+               /* warn about deprecation unless clearing */
+               if (priv->flags & ASYNC_SPD_MASK)
+                       dev_warn_ratelimited(&port->dev, "use of SPD flags is deprecated\n");
+
                change_speed(tty, port);
                mutex_unlock(&priv->cfg_lock);
        }