+ /* PIOB and PIOC clock enabling */
+ *AT91C_PMC_PCER = 1 << AT91C_ID_PIOB;
+ *AT91C_PMC_PCER = 1 << AT91C_ID_PIOC;
+
+ /*
+ * configure PC0-PC3 as input without pull ups, so RS485 driver enable
+ * (CMC-PU2) and digital outputs (CMC-BASIC) are deactivated.
+ */
+ pioc->PIO_ODR = AT91C_PIO_PC0 | AT91C_PIO_PC1 |
+ AT91C_PIO_PC2 | AT91C_PIO_PC3;
+ pioc->PIO_PPUDR = AT91C_PIO_PC0 | AT91C_PIO_PC1 |
+ AT91C_PIO_PC2 | AT91C_PIO_PC3;
+ pioc->PIO_PER = AT91C_PIO_PC0 | AT91C_PIO_PC1 |
+ AT91C_PIO_PC2 | AT91C_PIO_PC3;
+
+ /*
+ * On CMC-PU2 board configure PB3-PB6 to input without pull ups to
+ * clear the duo LEDs (the external pull downs assure a proper
+ * signal). On CMC-BASIC set PB3-PB6 to output and drive it
+ * high, to configure current meassurement on AINx.
+ */
+ if (hw_detect() & CMC_PU2) {
+ piob->PIO_ODR = AT91C_PIO_PB3 | AT91C_PIO_PB4 |
+ AT91C_PIO_PB5 | AT91C_PIO_PB6;
+ }
+ else if (hw_detect() & CMC_BASIC) {
+ piob->PIO_SODR = AT91C_PIO_PB3 | AT91C_PIO_PB4 |
+ AT91C_PIO_PB5 | AT91C_PIO_PB6;
+ piob->PIO_OER = AT91C_PIO_PB3 | AT91C_PIO_PB4 |
+ AT91C_PIO_PB5 | AT91C_PIO_PB6;
+ }
+ piob->PIO_PPUDR = AT91C_PIO_PB3 | AT91C_PIO_PB4 |
+ AT91C_PIO_PB5 | AT91C_PIO_PB6;
+ piob->PIO_PER = AT91C_PIO_PB3 | AT91C_PIO_PB4 |
+ AT91C_PIO_PB5 | AT91C_PIO_PB6;
+
+ /*
+ * arch number of CMC_PU2-Board. MACH_TYPE_CMC_PU2 is not supported in
+ * the linuxarm kernel, yet.
+ */