1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #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");
- }
|