imx233: add uartdbg driver

The driver is current unused and very minimal. It can used on
targets which have an accessible UART port and it will be used on
some creative targets as backlight control.

Change-Id: Id710d63574aadb0a2d7327b03187506b469470b1
This commit is contained in:
Amaury Pouly 2013-06-18 16:24:28 +02:00
parent 4962854005
commit bbb789120c
3 changed files with 110 additions and 0 deletions

View file

@ -534,6 +534,7 @@ target/arm/imx233/pwm-imx233.c
target/arm/imx233/rtc-imx233.c target/arm/imx233/rtc-imx233.c
target/arm/imx233/dcp-imx233.c target/arm/imx233/dcp-imx233.c
target/arm/imx233/emi-imx233.c target/arm/imx233/emi-imx233.c
target/arm/imx233/uartdbg-imx233.c
# ifdef HAVE_TOUCHSCREEN # ifdef HAVE_TOUCHSCREEN
target/arm/imx233/touchscreen-imx233.c target/arm/imx233/touchscreen-imx233.c
# endif # endif

View file

@ -0,0 +1,74 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2013 by Lorenzo Miori
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "uartdbg-imx233.h"
#include "pinctrl-imx233.h"
#include "clkctrl-imx233.h"
void imx233_uartdbg_init(unsigned long baud)
{
/* Enable UART clock */
imx233_clkctrl_enable(CLK_UART, true);
/* Configure UART pins */
imx233_pinctrl_setup_vpin(VPIN_UARTDBG_TX, "uartdbg tx", PINCTRL_DRIVE_4mA, false);
imx233_pinctrl_setup_vpin(VPIN_UARTDBG_RX, "uartdbg rx", PINCTRL_DRIVE_4mA, false);
/* Set baud rate */
HW_UARTDBG_IBRD = baud >> 16;
HW_UARTDBG_FBRD = baud & 0xFFFF;
/* Set port options (actually needed to set baud rate), 8 bit char, enable FIFO buffer */
BF_WR(UARTDBG_LCR_H, WLEN, 3);
BF_WR(UARTDBG_LCR_H, FEN, 1);
/* Finally enable UART device, TX enable, RX enable, device enable */
BF_WR(UARTDBG_CR, TXE, 1);
BF_WR(UARTDBG_CR, RXE, 1);
BF_WR(UARTDBG_CR, UARTEN, 1);
}
void imx233_uartdbg_send(unsigned char data)
{
/* Wait to transmit if TX FIFO buffer is full*/
while (BF_RD(UARTDBG_FR, TXFF));
BF_WR(UARTDBG_DR, DATA, data);
}
void uart_tx(const char* data)
{
while (*data != 0)
imx233_uartdbg_send(*data++);
}
unsigned int uart_rx(char* rx_buf, unsigned int len)
{
unsigned int i = 0;
while(i < len)
{
/* Check if the UART Rx Buffer has something into -> RXFE */
if(!BF_RD(UARTDBG_FR, RXFE))
{
rx_buf[i] = HW_UARTDBG_DR;
i++;
}
}
return i;
}

View file

@ -0,0 +1,35 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2013 by Lorenzo Miori
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "system.h"
#include "regs/regs-uartdbg.h"
/* This values below are valid with a XCLK of 24MHz */
#define BAUD_9600 (uint32_t)(156 << 16 | 16)
#define BAUD_19200 (uint32_t)(78 << 16 | 2)
#define BAUD_38400 (uint32_t)(39 << 16 | 4)
#define BAUD_57600 (uint32_t)(26 << 16 | 3)
#define BAUD_115200 (uint32_t)(13 << 16 | 1)
void imx233_uartdbg_init(unsigned long baud);
void imx233_uartdbg_send(unsigned char data);
void uart_tx(const char* data);
unsigned int uart_rx(char* rx_buf, unsigned int len);