]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/ipack/devices/ipoctal.c
ipack/devices/ipoctal: rework disable TX when the TX buffer is empty
[karo-tx-linux.git] / drivers / ipack / devices / ipoctal.c
index 850f10506a792982763c61c2ad1b6ba17b652acb..f2875f0f14d4297c3d48df45a7c7fedb98af4ca2 100644 (file)
@@ -177,10 +177,6 @@ static void ipoctal_irq_tx(struct ipoctal_channel *channel)
        (*pointer_write)++;
        *pointer_write = *pointer_write % PAGE_SIZE;
        channel->nb_bytes--;
-
-       if (channel->nb_bytes == 0 &&
-           channel->board_id != IPACK1_DEVICE_ID_SBS_OCTAL_485)
-               iowrite8(CR_DISABLE_TX, &channel->regs->w.cr);
 }
 
 static void ipoctal_irq_channel(struct ipoctal_channel *channel)
@@ -196,14 +192,14 @@ static void ipoctal_irq_channel(struct ipoctal_channel *channel)
        isr = ioread8(&channel->block_regs->r.isr);
        sr = ioread8(&channel->regs->r.sr);
 
-       /* In case of RS-485, change from TX to RX when finishing TX.
-        * Half-duplex. */
-       if ((channel->board_id == IPACK1_DEVICE_ID_SBS_OCTAL_485) &&
-           (sr & SR_TX_EMPTY) && (channel->nb_bytes == 0)) {
-               iowrite8(CR_DISABLE_TX, &channel->regs->w.cr);
-               iowrite8(CR_CMD_NEGATE_RTSN, &channel->regs->w.cr);
-               iowrite8(CR_ENABLE_RX, &channel->regs->w.cr);
+       if ((sr & SR_TX_EMPTY) && (channel->nb_bytes == 0)) {
                iowrite8(CR_DISABLE_TX, &channel->regs->w.cr);
+               /* In case of RS-485, change from TX to RX when finishing TX.
+                * Half-duplex. */
+               if (channel->board_id == IPACK1_DEVICE_ID_SBS_OCTAL_485) {
+                       iowrite8(CR_CMD_NEGATE_RTSN, &channel->regs->w.cr);
+                       iowrite8(CR_ENABLE_RX, &channel->regs->w.cr);
+               }
        }
 
        /* RX data */