summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2008-07-14 10:45:47 +0200
committerStefan Roese <sr@denx.de>2008-07-14 10:45:47 +0200
commit4b326101d6cfaeab8250988bc4c7f51e6c92d719 (patch)
treed04632af08591263f5cd6fc8a5c6ba8ac3d6d246 /drivers
parent69e2c6d0d13d7c8cf1612ac090bdc4c59ba6858e (diff)
parentd5996dd555edf52721b7691a4c59de016251ed39 (diff)
downloadu-boot-imx-4b326101d6cfaeab8250988bc4c7f51e6c92d719.zip
u-boot-imx-4b326101d6cfaeab8250988bc4c7f51e6c92d719.tar.gz
u-boot-imx-4b326101d6cfaeab8250988bc4c7f51e6c92d719.tar.bz2
Merge branch 'master' of /home/stefan/git/u-boot/u-boot into next
Diffstat (limited to 'drivers')
-rw-r--r--drivers/hwmon/Makefile12
-rw-r--r--drivers/hwmon/adm1021.c35
-rw-r--r--drivers/hwmon/ds1621.c12
-rw-r--r--drivers/hwmon/ds1722.c5
-rw-r--r--drivers/hwmon/ds1775.c8
-rw-r--r--drivers/hwmon/lm73.c6
-rw-r--r--drivers/hwmon/lm75.c8
-rw-r--r--drivers/hwmon/lm81.c8
-rw-r--r--drivers/mtd/dataflash.c16
-rw-r--r--drivers/net/smc911x.c4
-rw-r--r--drivers/net/tsi108_eth.c4
-rw-r--r--drivers/serial/mcfuart.c4
-rw-r--r--drivers/serial/serial.c11
-rw-r--r--drivers/serial/serial_xuartlite.c37
-rw-r--r--drivers/usb/usbdcore.c16
-rw-r--r--drivers/video/mb862xx.c2
16 files changed, 126 insertions, 62 deletions
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index 065433a..f09f145 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -30,13 +30,13 @@ include $(TOPDIR)/config.mk
LIB = $(obj)libhwmon.a
-COBJS-y += adm1021.o
-COBJS-y += ds1621.o
-COBJS-y += ds1722.o
-COBJS-y += ds1775.o
+COBJS-$(CONFIG_DTT_ADM1021) += adm1021.o
+COBJS-$(CONFIG_DTT_DS1621) += ds1621.o
+COBJS-$(CONFIG_DTT_DS1722) += ds1722.o
+COBJS-$(CONFIG_DTT_DS1775) += ds1775.o
COBJS-$(CONFIG_DTT_LM73) += lm73.o
-COBJS-y += lm75.o
-COBJS-y += lm81.o
+COBJS-$(CONFIG_DTT_LM75) += lm75.o
+COBJS-$(CONFIG_DTT_LM81) += lm81.o
COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c)
diff --git a/drivers/hwmon/adm1021.c b/drivers/hwmon/adm1021.c
index 9f65cfb..b791ec0 100644
--- a/drivers/hwmon/adm1021.c
+++ b/drivers/hwmon/adm1021.c
@@ -33,11 +33,40 @@
#include <common.h>
-#ifdef CONFIG_DTT_ADM1021
-
#include <i2c.h>
#include <dtt.h>
+#define DTT_READ_LOC_VALUE 0x00
+#define DTT_READ_REM_VALUE 0x01
+#define DTT_READ_STATUS 0x02
+#define DTT_READ_CONFIG 0x03
+#define DTT_READ_CONVRATE 0x04
+#define DTT_READ_LOC_HIGHLIM 0x05
+#define DTT_READ_LOC_LOWLIM 0x06
+#define DTT_READ_REM_HIGHLIM 0x07
+#define DTT_READ_REM_LOWLIM 0x08
+#define DTT_READ_DEVID 0xfe
+
+#define DTT_WRITE_CONFIG 0x09
+#define DTT_WRITE_CONVRATE 0x0a
+#define DTT_WRITE_LOC_HIGHLIM 0x0b
+#define DTT_WRITE_LOC_LOWLIM 0x0c
+#define DTT_WRITE_REM_HIGHLIM 0x0d
+#define DTT_WRITE_REM_LOWLIM 0x0e
+#define DTT_WRITE_ONESHOT 0x0f
+
+#define DTT_STATUS_BUSY 0x80 /* 1=ADC Converting */
+#define DTT_STATUS_LHIGH 0x40 /* 1=Local High Temp Limit Tripped */
+#define DTT_STATUS_LLOW 0x20 /* 1=Local Low Temp Limit Tripped */
+#define DTT_STATUS_RHIGH 0x10 /* 1=Remote High Temp Limit Tripped */
+#define DTT_STATUS_RLOW 0x08 /* 1=Remote Low Temp Limit Tripped */
+#define DTT_STATUS_OPEN 0x04 /* 1=Remote Sensor Open-Circuit */
+
+#define DTT_CONFIG_ALERT_MASKED 0x80 /* 0=ALERT Enabled, 1=ALERT Masked */
+#define DTT_CONFIG_STANDBY 0x40 /* 0=Run, 1=Standby */
+
+#define DTT_ADM1021_DEVID 0x41
+
typedef
struct {
uint i2c_addr:7; /* 7bit i2c chip address */
@@ -170,5 +199,3 @@ dtt_get_temp (int sensor)
return (int) val;
} /* dtt_get_temp() */
-
-#endif /* CONFIG_DTT_ADM1021 */
diff --git a/drivers/hwmon/ds1621.c b/drivers/hwmon/ds1621.c
index 4948181..749aa26 100644
--- a/drivers/hwmon/ds1621.c
+++ b/drivers/hwmon/ds1621.c
@@ -27,7 +27,6 @@
#include <common.h>
-#ifdef CONFIG_DTT_DS1621
#if !defined(CFG_EEPROM_PAGE_WRITE_ENABLE) || \
(CFG_EEPROM_PAGE_WRITE_BITS < 1)
# error "CFG_EEPROM_PAGE_WRITE_ENABLE must be defined and CFG_EEPROM_PAGE_WRITE_BITS must be greater than 1 to use CONFIG_DTT_DS1621"
@@ -39,6 +38,14 @@
* Device code
*/
#define DTT_I2C_DEV_CODE 0x48 /* Dallas Semi's DS1621 */
+#define DTT_READ_TEMP 0xAA
+#define DTT_READ_COUNTER 0xA8
+#define DTT_READ_SLOPE 0xA9
+#define DTT_WRITE_START_CONV 0xEE
+#define DTT_WRITE_STOP_CONV 0x22
+#define DTT_TEMP_HIGH 0xA1
+#define DTT_TEMP_LOW 0xA2
+#define DTT_CONFIG 0xAC
int dtt_read(int sensor, int reg)
{
@@ -185,6 +192,3 @@ int dtt_get_temp(int sensor)
return (dtt_read(sensor, DTT_READ_TEMP) / 256);
} /* dtt_get_temp() */
-
-
-#endif /* CONFIG_DTT_DS1621 */
diff --git a/drivers/hwmon/ds1722.c b/drivers/hwmon/ds1722.c
index c19ee01..7e2f1ed 100644
--- a/drivers/hwmon/ds1722.c
+++ b/drivers/hwmon/ds1722.c
@@ -1,8 +1,5 @@
#include <common.h>
-
-#ifdef CONFIG_DS1722
-
#include <ssi.h>
static void ds1722_select(int dev)
@@ -138,5 +135,3 @@ int ds1722_probe(int dev)
printf("%d.%d deg C\n\n", (char)(temp >> 8), temp & 0xff);
return 0;
}
-
-#endif
diff --git a/drivers/hwmon/ds1775.c b/drivers/hwmon/ds1775.c
index 0fbb0b4..6a4d8e5 100644
--- a/drivers/hwmon/ds1775.c
+++ b/drivers/hwmon/ds1775.c
@@ -21,11 +21,14 @@
#include <common.h>
-#ifdef CONFIG_DTT_DS1775
#include <i2c.h>
#include <dtt.h>
#define DTT_I2C_DEV_CODE CFG_I2C_DTT_ADDR /* Dallas Semi's DS1775 device code */
+#define DTT_READ_TEMP 0x0
+#define DTT_CONFIG 0x1
+#define DTT_TEMP_HYST 0x2
+#define DTT_TEMP_OS 0x3
int dtt_read(int sensor, int reg)
{
@@ -151,6 +154,3 @@ int dtt_get_temp(int sensor)
{
return (dtt_read(sensor, DTT_READ_TEMP) / 256);
}
-
-
-#endif /* CONFIG_DTT_DS1775 */
diff --git a/drivers/hwmon/lm73.c b/drivers/hwmon/lm73.c
index 98e8bd2..dd24683 100644
--- a/drivers/hwmon/lm73.c
+++ b/drivers/hwmon/lm73.c
@@ -38,6 +38,12 @@
* Device code
*/
#define DTT_I2C_DEV_CODE 0x48 /* National Semi's LM73 device */
+#define DTT_READ_TEMP 0x0
+#define DTT_CONFIG 0x1
+#define DTT_TEMP_HIGH 0x2
+#define DTT_TEMP_LOW 0x3
+#define DTT_CONTROL 0x4
+#define DTT_ID 0x7
int dtt_read(int const sensor, int const reg)
{
diff --git a/drivers/hwmon/lm75.c b/drivers/hwmon/lm75.c
index c348517..8051cb2 100644
--- a/drivers/hwmon/lm75.c
+++ b/drivers/hwmon/lm75.c
@@ -27,7 +27,6 @@
#include <common.h>
-#ifdef CONFIG_DTT_LM75
#if !defined(CFG_EEPROM_PAGE_WRITE_ENABLE) || \
(CFG_EEPROM_PAGE_WRITE_BITS < 1)
# error "CFG_EEPROM_PAGE_WRITE_ENABLE must be defined and CFG_EEPROM_PAGE_WRITE_BITS must be greater than 1 to use CONFIG_DTT_LM75"
@@ -36,11 +35,14 @@
#include <i2c.h>
#include <dtt.h>
-
/*
* Device code
*/
#define DTT_I2C_DEV_CODE 0x48 /* ON Semi's LM75 device */
+#define DTT_READ_TEMP 0x0
+#define DTT_CONFIG 0x1
+#define DTT_TEMP_HYST 0x2
+#define DTT_TEMP_SET 0x3
int dtt_read(int sensor, int reg)
{
@@ -200,5 +202,3 @@ int dtt_get_temp(int sensor)
}
return (int)((int16_t) ret / 256);
} /* dtt_get_temp() */
-
-#endif /* CONFIG_DTT_LM75 */
diff --git a/drivers/hwmon/lm81.c b/drivers/hwmon/lm81.c
index 03bc53d..9349eb6 100644
--- a/drivers/hwmon/lm81.c
+++ b/drivers/hwmon/lm81.c
@@ -32,7 +32,6 @@
#include <common.h>
-#ifdef CONFIG_DTT_LM81
#if !defined(CFG_EEPROM_PAGE_WRITE_ENABLE) || \
(CFG_EEPROM_PAGE_WRITE_BITS < 1)
# error "CFG_EEPROM_PAGE_WRITE_ENABLE must be defined and CFG_EEPROM_PAGE_WRITE_BITS must be greater than 1 to use CONFIG_DTT_LM81"
@@ -45,6 +44,11 @@
* Device code
*/
#define DTT_I2C_DEV_CODE 0x2c /* ON Semi's LM81 device */
+#define DTT_READ_TEMP 0x27
+#define DTT_CONFIG_TEMP 0x4b
+#define DTT_TEMP_MAX 0x39
+#define DTT_TEMP_HYST 0x3a
+#define DTT_CONFIG 0x40
int dtt_read(int sensor, int reg)
{
@@ -144,5 +148,3 @@ int dtt_get_temp(int sensor)
return (TEMP_FROM_REG((val << 1) + ((tmpcnf & 0x80) >> 7))) / 10;
} /* dtt_get_temp() */
-
-#endif /* CONFIG_DTT_LM81 */
diff --git a/drivers/mtd/dataflash.c b/drivers/mtd/dataflash.c
index 8247aa0..0ad48cd 100644
--- a/drivers/mtd/dataflash.c
+++ b/drivers/mtd/dataflash.c
@@ -54,6 +54,17 @@ int AT91F_DataflashInit (void)
&dataflash_info[i].Desc);
switch (dfcode) {
+ case AT45DB021:
+ dataflash_info[i].Device.pages_number = 1024;
+ dataflash_info[i].Device.pages_size = 263;
+ dataflash_info[i].Device.page_offset = 9;
+ dataflash_info[i].Device.byte_mask = 0x300;
+ dataflash_info[i].Device.cs = cs[i].cs;
+ dataflash_info[i].Desc.DataFlash_state = IDLE;
+ dataflash_info[i].logical_address = cs[i].addr;
+ dataflash_info[i].id = dfcode;
+ found[i] += dfcode;;
+ break;
case AT45DB161:
dataflash_info[i].Device.pages_number = 4096;
dataflash_info[i].Device.pages_size = 528;
@@ -162,7 +173,7 @@ void AT91F_DataflashSetEnv (void)
if((env & FLAG_SETENV) == FLAG_SETENV) {
start =
dataflash_info[i].Device.area_list[j].start;
- sprintf((char*) s,"%X",start);
+ sprintf((char*) s,"%lX",start);
setenv((char*) area_list[part].label,(char*) s);
}
part++;
@@ -178,6 +189,9 @@ void dataflash_print_info (void)
if (dataflash_info[i].id != 0) {
printf("DataFlash:");
switch (dataflash_info[i].id) {
+ case AT45DB021:
+ printf("AT45DB021\n");
+ break;
case AT45DB161:
printf("AT45DB161\n");
break;
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index 1484b0b..0fff820 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -597,7 +597,7 @@ int eth_init(bd_t *bd)
val = reg_read(BYTE_TEST);
if (val != 0x87654321) {
- printf(DRIVERNAME ": Invalid chip endian 0x%08x\n", val);
+ printf(DRIVERNAME ": Invalid chip endian 0x%08lx\n", val);
goto err_out;
}
@@ -606,7 +606,7 @@ int eth_init(bd_t *bd)
if (chip_ids[i].id == val) break;
}
if (!chip_ids[i].id) {
- printf(DRIVERNAME ": Unknown chip ID %04x\n", val);
+ printf(DRIVERNAME ": Unknown chip ID %04lx\n", val);
goto err_out;
}
diff --git a/drivers/net/tsi108_eth.c b/drivers/net/tsi108_eth.c
index 57c0dc3..2534097 100644
--- a/drivers/net/tsi108_eth.c
+++ b/drivers/net/tsi108_eth.c
@@ -899,7 +899,7 @@ static int tsi108_eth_send (struct eth_device *dev,
status = le32_to_cpu(tx_descr->config_status);
if ((status & DMA_DESCR_TX_OK) == 0) {
#ifdef TX_PRINT_ERRORS
- printf ("TX packet error: 0x%08x\n %s%s%s%s\n", status,
+ printf ("TX packet error: 0x%08lx\n %s%s%s%s\n", status,
status & DMA_DESCR_TX_OK ? "tx error, " : "",
status & DMA_DESCR_TX_RETRY_LIMIT ?
"retry limit reached, " : "",
@@ -959,7 +959,7 @@ static int tsi108_eth_recv (struct eth_device *dev)
status = le32_to_cpu(rx_descr->config_status);
if (status & DMA_DESCR_RX_BAD_FRAME) {
#ifdef RX_PRINT_ERRORS
- printf ("RX packet error: 0x%08x\n %s%s%s%s%s%s\n",
+ printf ("RX packet error: 0x%08lx\n %s%s%s%s%s%s\n",
status,
status & DMA_DESCR_RX_FRAME_IS_TYPE ? "too big, "
: "",
diff --git a/drivers/serial/mcfuart.c b/drivers/serial/mcfuart.c
index 88f3eb1..5eb4f45 100644
--- a/drivers/serial/mcfuart.c
+++ b/drivers/serial/mcfuart.c
@@ -63,8 +63,8 @@ int serial_init(void)
uart->umr = UART_UMR_SB_STOP_BITS_1;
/* Setting up BaudRate */
- counter = (u32) (gd->bus_clk / (gd->baudrate));
- counter >>= 5;
+ counter = (u32) ((gd->bus_clk / 32) + (gd->baudrate / 2));
+ counter = counter / gd->baudrate;
/* write to CTUR: divide counter upper byte */
uart->ubg1 = (u8) ((counter & 0xff00) >> 8);
diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c
index 182ca2d..4ccaee2 100644
--- a/drivers/serial/serial.c
+++ b/drivers/serial/serial.c
@@ -124,6 +124,8 @@ static NS16550_t serial_ports[4] = {
static int calc_divisor (NS16550_t port)
{
+ uint32_t clk_divisor;
+
#ifdef CONFIG_OMAP1510
/* If can't cleanly clock 115200 set div to 1 */
if ((CFG_NS16550_CLK == 12000000) && (gd->baudrate == 115200)) {
@@ -147,10 +149,15 @@ static int calc_divisor (NS16550_t port)
/* Compute divisor value. Normally, we should simply return:
* CFG_NS16550_CLK) / MODE_X_DIV / gd->baudrate
- * but we need to round that value by adding 0.5 or 8/16.
+ * but we need to round that value by adding 0.5 (2/4).
* Rounding is especially important at high baud rates.
*/
- return (((16 * CFG_NS16550_CLK) / MODE_X_DIV / gd->baudrate) + 8) / 16;
+ clk_divisor = (((4 * CFG_NS16550_CLK) /
+ (MODE_X_DIV * gd->baudrate)) + 2) / 4;
+
+ debug("NS16550 clock divisor = %d\n", clk_divisor);
+
+ return clk_divisor;
}
#if !defined(CONFIG_SERIAL_MULTI)
diff --git a/drivers/serial/serial_xuartlite.c b/drivers/serial/serial_xuartlite.c
index d678ab6..5c41a1c 100644
--- a/drivers/serial/serial_xuartlite.c
+++ b/drivers/serial/serial_xuartlite.c
@@ -1,6 +1,8 @@
/*
- * (C) Copyright 2004 Atmark Techno, Inc.
+ * (C) Copyright 2008 Michal Simek <monstr@monstr.eu>
+ * Clean driver and add xilinx constant from header file
*
+ * (C) Copyright 2004 Atmark Techno, Inc.
* Yasushi SHOJI <yashi@atmark-techno.com>
*
* See file CREDITS for list of people who contributed to this
@@ -13,7 +15,7 @@
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
@@ -23,19 +25,21 @@
*/
#include <config.h>
+#include <asm/io.h>
#ifdef CONFIG_XILINX_UARTLITE
-#include <asm/serial_xuartlite.h>
+#define RX_FIFO_OFFSET 0 /* receive FIFO, read only */
+#define TX_FIFO_OFFSET 4 /* transmit FIFO, write only */
+#define STATUS_REG_OFFSET 8 /* status register, read only */
-/* FIXME: we should convert these to in32 and out32 */
-#define IO_WORD(offset) (*(volatile unsigned long *)(offset))
-#define IO_SERIAL(offset) IO_WORD(CONFIG_SERIAL_BASE + (offset))
+#define SR_TX_FIFO_FULL 0x08 /* transmit FIFO full */
+#define SR_RX_FIFO_VALID_DATA 0x01 /* data in receive FIFO */
+#define SR_RX_FIFO_FULL 0x02 /* receive FIFO full */
-#define IO_SERIAL_RX_FIFO IO_SERIAL(XUL_RX_FIFO_OFFSET)
-#define IO_SERIAL_TX_FIFO IO_SERIAL(XUL_TX_FIFO_OFFSET)
-#define IO_SERIAL_STATUS IO_SERIAL(XUL_STATUS_REG_OFFSET)
-#define IO_SERIAL_CONTROL IO_SERIAL(XUL_CONTROL_REG_OFFSET)
+#define UARTLITE_STATUS (CONFIG_SERIAL_BASE + STATUS_REG_OFFSET)
+#define UARTLITE_TX_FIFO (CONFIG_SERIAL_BASE + TX_FIFO_OFFSET)
+#define UARTLITE_RX_FIFO (CONFIG_SERIAL_BASE + RX_FIFO_OFFSET)
int serial_init(void)
{
@@ -50,9 +54,10 @@ void serial_setbrg(void)
void serial_putc(const char c)
{
- if (c == '\n') serial_putc('\r');
- while (IO_SERIAL_STATUS & XUL_SR_TX_FIFO_FULL);
- IO_SERIAL_TX_FIFO = (unsigned char) (c & 0xff);
+ if (c == '\n')
+ serial_putc('\r');
+ while (in_be32(UARTLITE_STATUS) & SR_TX_FIFO_FULL);
+ out_be32(UARTLITE_TX_FIFO, (unsigned char) (c & 0xff));
}
void serial_puts(const char * s)
@@ -64,13 +69,13 @@ void serial_puts(const char * s)
int serial_getc(void)
{
- while (!(IO_SERIAL_STATUS & XUL_SR_RX_FIFO_VALID_DATA));
- return IO_SERIAL_RX_FIFO & 0xff;
+ while (!(in_be32(UARTLITE_STATUS) & SR_RX_FIFO_VALID_DATA));
+ return in_be32(UARTLITE_RX_FIFO) & 0xff;
}
int serial_tstc(void)
{
- return (IO_SERIAL_STATUS & XUL_SR_RX_FIFO_VALID_DATA);
+ return (in_be32(UARTLITE_STATUS) & SR_RX_FIFO_VALID_DATA);
}
#endif /* CONFIG_MICROBLZE */
diff --git a/drivers/usb/usbdcore.c b/drivers/usb/usbdcore.c
index a621ce7..808da9f 100644
--- a/drivers/usb/usbdcore.c
+++ b/drivers/usb/usbdcore.c
@@ -546,21 +546,23 @@ void urb_append (urb_link * hd, struct urb *urb)
*
* NOTE: endpoint_address MUST contain a direction flag.
*/
-struct urb *usbd_alloc_urb (struct usb_device_instance *device, struct usb_endpoint_instance *endpoint)
+struct urb *usbd_alloc_urb (struct usb_device_instance *device,
+ struct usb_endpoint_instance *endpoint)
{
struct urb *urb;
- if( !(urb = (struct urb*)malloc(sizeof(struct urb))) ) {
- usberr(" F A T A L: malloc(%u) FAILED!!!!", sizeof(struct urb));
- return NULL;
+ if (!(urb = (struct urb *) malloc (sizeof (struct urb)))) {
+ usberr (" F A T A L: malloc(%u) FAILED!!!!",
+ sizeof (struct urb));
+ return NULL;
}
/* Fill in known fields */
- memset(urb, 0, sizeof(struct urb));
+ memset (urb, 0, sizeof (struct urb));
urb->endpoint = endpoint;
urb->device = device;
- urb->buffer = (u8*)urb->buffer_data;
- urb->buffer_length = sizeof(urb->buffer_data);
+ urb->buffer = (u8 *) urb->buffer_data;
+ urb->buffer_length = sizeof (urb->buffer_data);
urb_link_init (&urb->link);
diff --git a/drivers/video/mb862xx.c b/drivers/video/mb862xx.c
index 9684cf3..733d9a2 100644
--- a/drivers/video/mb862xx.c
+++ b/drivers/video/mb862xx.c
@@ -173,6 +173,8 @@ static void de_init (void)
DE_WR_FIFO (0x09410000);
DE_WR_FIFO (0x00000000);
DE_WR_FIFO (pGD->winSizeY<<16 | pGD->winSizeX);
+ /* sync with SW access to framebuffer */
+ de_wait ();
}
#if defined(CONFIG_VIDEO_CORALP)