void serial_setbrg_dev(const int dev_index) { DECLARE_GLOBAL_DATA_PTR; struct s5pc1xx_uart *const uart = s5pc1xx_get_base_uart(dev_index); u32 pclk = get_pclk(); u32 baudrate = gd->baudrate; u32 val; val = pclk / baudrate; writel(val / 16 - 1, &uart->ubrdiv); writew(udivslot[val % 16], &uart->udivslot); }
static void _serial_setbrg(const int dev_index) { struct s3c_uart *uart = (struct s3c_uart *)samsung_get_base_uart(); unsigned int reg = 0; int i; /* value is calculated so : (int)(PCLK/16./baudrate) -1 */ reg = get_pclk() / (16 * gd->baudrate) - 1; writel(reg, &uart->ubrdiv); for (i = 0; i < 100; i++) /* Delay */ ; }
static void _serial_init(int bord_rate, int data, int parity, int stop) { setval(GPHCON, 0xa, 4, 4 + 4 * UART_NR); setbit(GPHUP, 0x3, 2 + 2 * UART_NR); switch(data) { case 5: clrbit(ULCON, 0x3, 0); break; case 6: setval(ULCON, 0x1, 2, 0); break; case 7: setval(ULCON, 0x2, 2, 0); break; case 8: default: setbit(ULCON, 0x3, 0); } switch(parity) { case 1: setval(ULCON, 0x4, 3, 3); break; case 2: setval(ULCON, 0x5, 3, 3); break; case 0: default: clrbit(ULCON, 0x7, 3); } switch(stop) { case 2: set1(ULCON, 2); break; case 1: default: set0(ULCON, 2); } setval(UCON, 0x5, 4, 0); UBRDIV = get_pclk() / (bord_rate * 16) - 1; }
int timer_init(void) { struct s5pc1xx_timer *const timer = s5pc1xx_get_base_timer(); u32 val; /* * @ PWM Timer 4 * Timer Freq(HZ) = * PCLK / { (prescaler_value + 1) * (divider_value) } */ /* set prescaler : 16 */ /* set divider : 2 */ writel((PRESCALER_1 & 0xff) << 8, &timer->tcfg0); writel((MUX_DIV_2 & 0xf) << MUX4_DIV_SHIFT, &timer->tcfg1); if (count_value == 0) { /* reset initial value */ /* count_value = 2085937.5(HZ) (per 1 sec)*/ count_value = get_pclk() / ((PRESCALER_1 + 1) * (MUX_DIV_2 + 1)); /* count_value / 100 = 20859.375(HZ) (per 10 msec) */ count_value = count_value / 100; } /* set count value */ writel(count_value, &timer->tcntb4); lastdec = count_value; val = (readl(&timer->tcon) & ~(0x07 << TCON_TIMER4_SHIFT)) | S5PC1XX_TCON4_AUTO_RELOAD; /* auto reload & manual update */ writel(val | S5PC1XX_TCON4_UPDATE, &timer->tcon); /* start PWM timer 4 */ writel(val | S5PC1XX_TCON4_START, &timer->tcon); timestamp = 0; return 0; }