iobuff_t                rx_buff;
 };
 
+static int sa1100_irda_set_speed(struct sa1100_irda *, int);
+
 #define IS_FIR(si)             ((si)->speed >= 4000000)
 
 #define HPSIR_MAX_RXLEN                2047
        Ser2HSCR0 = si->hscr0 | HSCR0_HSSP | HSCR0_RXE;
 }
 
+static void sa1100_irda_check_speed(struct sa1100_irda *si)
+{
+       if (si->newspeed) {
+               sa1100_irda_set_speed(si, si->newspeed);
+               si->newspeed = 0;
+       }
+}
+
 /*
  * Set the IrDA communications speed.
  */
                        Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
                        Ser2UTCR3 = UTCR3_RIE | UTCR3_RXE | UTCR3_TXE;
 
-                       if (si->newspeed) {
-                               sa1100_irda_set_speed(si, si->newspeed);
-                               si->newspeed = 0;
-                       }
+                       sa1100_irda_check_speed(si);
 
                        /* I'm hungry! */
                        netif_wake_queue(dev);
         * here - we don't free the old dma_rx.skb.  We don't need
         * to allocate a buffer either.
         */
-       if (si->newspeed) {
-               sa1100_irda_set_speed(si, si->newspeed);
-               si->newspeed = 0;
-       }
+       sa1100_irda_check_speed(si);
 
        /*
         * Start reception.  This disables the transmitter for
         * If this is an empty frame, we can bypass a lot.
         */
        if (skb->len == 0) {
-               if (si->newspeed) {
-                       si->newspeed = 0;
-                       sa1100_irda_set_speed(si, speed);
-               }
+               sa1100_irda_check_speed(si);
                dev_kfree_skb(skb);
                return NETDEV_TX_OK;
        }