| #include <common.h> | |
| #include <board/cogent/dipsw.h> | |
| unsigned char | |
| dipsw_raw(void) | |
| { | |
| return cma_mb_reg_read(&((cma_mb_dipsw *)CMA_MB_DIPSW_BASE)->dip_val); | |
| } | |
| unsigned char | |
| dipsw_cooked(void) | |
| { | |
| unsigned char val1, val2, mask1, mask2; | |
| val1 = dipsw_raw(); | |
| /* | |
| * we want to mirror the bits because the low bit is switch 1 and high | |
| * bit is switch 8 and also invert them because 1=off and 0=on, according | |
| * to manual. | |
| * | |
| * this makes the value more intuitive i.e. | |
| * - left most, or high, or top, bit is left most switch (1); | |
| * - right most, or low, or bottom, bit is right most switch (8) | |
| * - a set bit means "on" and a clear bit means "off" | |
| */ | |
| val2 = 0; | |
| for (mask1 = 1 << 7, mask2 = 1; mask1 > 0; mask1 >>= 1, mask2 <<= 1) | |
| if ((val1 & mask1) == 0) | |
| val2 |= mask2; | |
| return (val2); | |
| } | |
| void | |
| dipsw_init(void) | |
| { | |
| unsigned char val, mask; | |
| val = dipsw_cooked(); | |
| printf("|"); | |
| for (mask = 1 << 7; mask > 0; mask >>= 1) | |
| if (val & mask) | |
| printf("on |"); | |
| else | |
| printf("off|"); | |
| printf("\n"); | |
| } |