aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorUwe Hermann2010-12-26 00:34:14 +0100
committerUwe Hermann2010-12-26 00:36:32 +0100
commit571c4d37d02e9dd54a65241aec549e7e0875b01b (patch)
tree5028565f6d422f98165f6db0ba3f01e71f97f61e /lib
parent06d1a5ca80e81b06d430201923d4002b7eb6ebe8 (diff)
CAN: Reduce nesting level via code transformations.
Diffstat (limited to 'lib')
-rw-r--r--lib/can.c173
1 files changed, 86 insertions, 87 deletions
diff --git a/lib/can.c b/lib/can.c
index 9fefca4..baddab3 100644
--- a/lib/can.c
+++ b/lib/can.c
@@ -31,9 +31,8 @@ void can_reset(u32 canport)
}
}
-int can_init(u32 canport,
- bool ttcm, bool abom, bool awum, bool nart, bool rflm, bool txfp,
- u32 sjw, u32 ts1, u32 ts2, u32 brp)
+int can_init(u32 canport, bool ttcm, bool abom, bool awum, bool nart,
+ bool rflm, bool txfp, u32 sjw, u32 ts1, u32 ts2, u32 brp)
{
u32 wait_ack = 0x00000000;
u32 can_msr_inak_timeout = 0x0000FFFF;
@@ -52,58 +51,57 @@ int can_init(u32 canport,
}
/* Check the acknowledge. */
- if ((CAN_MSR(canport) & CAN_MSR_INAK) != CAN_MSR_INAK) {
- ret = 1;
- } else {
- /* Set the automatic bus-off management. */
- if (ttcm)
- CAN_MCR(canport) |= CAN_MCR_TTCM;
- else
- CAN_MCR(canport) &= ~CAN_MCR_TTCM;
-
- if (abom)
- CAN_MCR(canport) |= CAN_MCR_ABOM;
- else
- CAN_MCR(canport) &= ~CAN_MCR_ABOM;
-
- if (awum)
- CAN_MCR(canport) |= CAN_MCR_AWUM;
- else
- CAN_MCR(canport) &= ~CAN_MCR_AWUM;
-
- if (nart)
- CAN_MCR(canport) |= CAN_MCR_NART;
- else
- CAN_MCR(canport) &= ~CAN_MCR_NART;
-
- if (rflm)
- CAN_MCR(canport) |= CAN_MCR_RFLM;
- else
- CAN_MCR(canport) &= ~CAN_MCR_RFLM;
-
- if (txfp)
- CAN_MCR(canport) |= CAN_MCR_TXFP;
- else
- CAN_MCR(canport) &= ~CAN_MCR_TXFP;
-
- /* Set bit timings. */
- CAN_BTR(canport) = sjw | ts2 | ts1 |
- (u32)(CAN_BTR_BRP_MASK & (brp - 1));
-
- /* Request initialization "leave". */
- CAN_MCR(canport) &= ~CAN_MCR_INRQ;
-
- /* Wait for acknowledge. */
- wait_ack = 0x00000000;
- while ((wait_ack != can_msr_inak_timeout) &&
- ((CAN_MSR(canport) & CAN_MSR_INAK) == CAN_MSR_INAK)) {
- wait_ack++;
- }
-
- if ((CAN_MSR(canport) & CAN_MSR_INAK) == CAN_MSR_INAK)
- ret = 1;
+ if ((CAN_MSR(canport) & CAN_MSR_INAK) != CAN_MSR_INAK)
+ return 1;
+
+ /* Set the automatic bus-off management. */
+ if (ttcm)
+ CAN_MCR(canport) |= CAN_MCR_TTCM;
+ else
+ CAN_MCR(canport) &= ~CAN_MCR_TTCM;
+
+ if (abom)
+ CAN_MCR(canport) |= CAN_MCR_ABOM;
+ else
+ CAN_MCR(canport) &= ~CAN_MCR_ABOM;
+
+ if (awum)
+ CAN_MCR(canport) |= CAN_MCR_AWUM;
+ else
+ CAN_MCR(canport) &= ~CAN_MCR_AWUM;
+
+ if (nart)
+ CAN_MCR(canport) |= CAN_MCR_NART;
+ else
+ CAN_MCR(canport) &= ~CAN_MCR_NART;
+
+ if (rflm)
+ CAN_MCR(canport) |= CAN_MCR_RFLM;
+ else
+ CAN_MCR(canport) &= ~CAN_MCR_RFLM;
+
+ if (txfp)
+ CAN_MCR(canport) |= CAN_MCR_TXFP;
+ else
+ CAN_MCR(canport) &= ~CAN_MCR_TXFP;
+
+ /* Set bit timings. */
+ CAN_BTR(canport) = sjw | ts2 | ts1 |
+ (u32)(CAN_BTR_BRP_MASK & (brp - 1));
+
+ /* Request initialization "leave". */
+ CAN_MCR(canport) &= ~CAN_MCR_INRQ;
+
+ /* Wait for acknowledge. */
+ wait_ack = 0x00000000;
+ while ((wait_ack != can_msr_inak_timeout) &&
+ ((CAN_MSR(canport) & CAN_MSR_INAK) == CAN_MSR_INAK)) {
+ wait_ack++;
}
+ if ((CAN_MSR(canport) & CAN_MSR_INAK) == CAN_MSR_INAK)
+ ret = 1;
+
return ret;
}
@@ -209,42 +207,43 @@ int can_transmit(u32 canport, u32 id, bool ext, bool rtr, u8 length, u8 *data)
ret = -1;
}
- if (ret != -1) { /* Check if we have an empty mailbox. */
- if (ext) {
- /* Set extended ID. */
- CAN_TIxR(canport, mailbox) |= id << CAN_TIxR_EXID_SHIFT;
- /* Set extended ID indicator bit. */
- CAN_TIxR(canport, mailbox) |= CAN_TIxR_IDE;
- } else {
- /* Set standard ID. */
- CAN_TIxR(canport, mailbox) |= id << CAN_TIxR_STID_SHIFT;
- /* Unset extended ID indicator bit. */
- CAN_TIxR(canport, mailbox) &= ~CAN_TIxR_IDE;
- }
-
- /* Set/clear remote transmission request bit. */
- if (rtr)
- CAN_TIxR(canport, mailbox) |= CAN_TIxR_RTR; /* Set */
- else
- CAN_TIxR(canport, mailbox) &= ~CAN_TIxR_RTR; /* Clear */
-
- /* Set the DLC. */
- CAN_TDTxR(canport, mailbox) &= 0xFFFFFFFF0;
- CAN_TDTxR(canport, mailbox) |= length & CAN_TDTxR_DLC_MASK;
-
- /* Set the data. */
- CAN_TDLxR(canport, mailbox) = 0;
- CAN_TDHxR(canport, mailbox) = 0;
- for (i = 0; (i < 4) && (i < length); i++)
- CAN_TDLxR(canport, mailbox) |= (u32)data[i] << (8 * i);
- for (i = 4; (i < 8) && (i < length); i++)
- CAN_TDHxR(canport, mailbox)
- |= (u32)data[i] << (8 * (i - 4));
-
- /* Request transmission. */
- CAN_TIxR(canport, mailbox) |= CAN_TIxR_TXRQ;
+ /* Check if we have an empty mailbox. */
+ if (ret == -1)
+ return ret;
+
+ if (ext) {
+ /* Set extended ID. */
+ CAN_TIxR(canport, mailbox) |= id << CAN_TIxR_EXID_SHIFT;
+ /* Set extended ID indicator bit. */
+ CAN_TIxR(canport, mailbox) |= CAN_TIxR_IDE;
+ } else {
+ /* Set standard ID. */
+ CAN_TIxR(canport, mailbox) |= id << CAN_TIxR_STID_SHIFT;
+ /* Unset extended ID indicator bit. */
+ CAN_TIxR(canport, mailbox) &= ~CAN_TIxR_IDE;
}
+ /* Set/clear remote transmission request bit. */
+ if (rtr)
+ CAN_TIxR(canport, mailbox) |= CAN_TIxR_RTR; /* Set */
+ else
+ CAN_TIxR(canport, mailbox) &= ~CAN_TIxR_RTR; /* Clear */
+
+ /* Set the DLC. */
+ CAN_TDTxR(canport, mailbox) &= 0xFFFFFFFF0;
+ CAN_TDTxR(canport, mailbox) |= length & CAN_TDTxR_DLC_MASK;
+
+ /* Set the data. */
+ CAN_TDLxR(canport, mailbox) = 0;
+ CAN_TDHxR(canport, mailbox) = 0;
+ for (i = 0; (i < 4) && (i < length); i++)
+ CAN_TDLxR(canport, mailbox) |= (u32)data[i] << (8 * i);
+ for (i = 4; (i < 8) && (i < length); i++)
+ CAN_TDHxR(canport, mailbox) |= (u32)data[i] << (8 * (i - 4));
+
+ /* Request transmission. */
+ CAN_TIxR(canport, mailbox) |= CAN_TIxR_TXRQ;
+
return ret;
}