From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Fri, 14 Sep 2012 20:05:12 +0200 Subject: [U-Boot] [PATCH v2 04/11] serial: Use a more precise baud rate generation for serial_s3c24x0 In-Reply-To: <1347643742-19966-5-git-send-email-jose.goncalves@inov.pt> References: <1347643742-19966-1-git-send-email-jose.goncalves@inov.pt> <1347643742-19966-5-git-send-email-jose.goncalves@inov.pt> Message-ID: <201209142005.12736.marex@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Dear Jos? Miguel Gon?alves, > Program udivslot register in order to obtain a more precise baudrate. More explanatory commit message would be nice. [...] > +static const int udivslot[] = { const array const members, no ? > + 0x0000, 0x0080, 0x0808, 0x0888, 0x2222, 0x4924, 0x4A52, 0x54AA, > + 0x5555, 0xD555, 0xD5D5, 0xDDD5, 0xDDDD, 0xDFDD, 0xDFDF, 0xFFDF, > +}; > + > void _serial_setbrg(const int dev_index) > { > struct s3c24x0_uart *uart = s3c24x0_get_base_uart(dev_index); > - unsigned int reg = 0; > + u32 pclk; > + u32 baudrate; > int i; > > - /* value is calculated so : (int)(PCLK/16./baudrate) -1 */ > - reg = get_PCLK() / (16 * gd->baudrate) - 1; > + pclk = get_PCLK(); > + baudrate = gd->baudrate; > > - writel(reg, &uart->ubrdiv); > + writel((pclk / baudrate / 16) - 1, &uart->ubrdiv); > + writel(udivslot[(pclk / baudrate) % 16], &uart->udivslot); > for (i = 0; i < 100; i++) > /* Delay */ ; > } Best regards, Marek Vasut