diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2012-06-06 14:11:57 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-06-06 14:11:57 +0200 |
commit | 497d1c49f4b75a6827bb400513d53a39dc8bb57c (patch) | |
tree | 3227133463cb942c4d5be45108aab82e79daa98c /drivers | |
parent | 94418c2d0d3d7dbaa6995fb53f00a5d5fc9f4028 (diff) | |
parent | 4024d9ca11295b63dd2b9b795a8f1019b9bba64a (diff) | |
download | barebox-497d1c49f4b75a6827bb400513d53a39dc8bb57c.tar.gz barebox-497d1c49f4b75a6827bb400513d53a39dc8bb57c.tar.xz |
Merge branch 'next'
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/base/resource.c | 2 | ||||
-rw-r--r-- | drivers/mtd/nand/nand_imx.c | 2 | ||||
-rw-r--r-- | drivers/mtd/nand/nand_s3c24xx.c | 10 | ||||
-rw-r--r-- | drivers/nor/cfi_flash.h | 10 | ||||
-rw-r--r-- | drivers/serial/Kconfig | 2 | ||||
-rw-r--r-- | drivers/serial/serial_s3c.c | 55 | ||||
-rw-r--r-- | drivers/spi/imx_spi.c | 4 | ||||
-rw-r--r-- | drivers/spi/spi.c | 2 | ||||
-rw-r--r-- | drivers/usb/host/ehci-hcd.c | 2 | ||||
-rw-r--r-- | drivers/usb/host/ohci-hcd.c | 4 | ||||
-rw-r--r-- | drivers/usb/storage/usb.c | 2 |
11 files changed, 69 insertions, 26 deletions
diff --git a/drivers/base/resource.c b/drivers/base/resource.c index b31c7d7e1a..347b2f01f0 100644 --- a/drivers/base/resource.c +++ b/drivers/base/resource.c @@ -113,8 +113,10 @@ struct device_d *add_usb_ehci_device(int id, resource_size_t hccr, res = xzalloc(sizeof(struct resource) * 2); res[0].start = hccr; + res[0].size = 0x40; res[0].flags = IORESOURCE_MEM; res[1].start = hcor; + res[1].size = 0xc0; res[1].flags = IORESOURCE_MEM; return add_generic_device_res("ehci", id, res, 2, pdata); diff --git a/drivers/mtd/nand/nand_imx.c b/drivers/mtd/nand/nand_imx.c index 85cfbeda95..e75ffbc819 100644 --- a/drivers/mtd/nand/nand_imx.c +++ b/drivers/mtd/nand/nand_imx.c @@ -1135,7 +1135,7 @@ static int __init imxnd_probe(struct device_d *dev) this->ecc.layout = oob_smallpage; - /* NAND bus width determines access funtions used by upper layer */ + /* NAND bus width determines access functions used by upper layer */ if (pdata->width == 2) { this->options |= NAND_BUSWIDTH_16; this->ecc.layout = &nandv1_hw_eccoob_smallpage; diff --git a/drivers/mtd/nand/nand_s3c24xx.c b/drivers/mtd/nand/nand_s3c24xx.c index dbf2e1420e..c6297011a3 100644 --- a/drivers/mtd/nand/nand_s3c24xx.c +++ b/drivers/mtd/nand/nand_s3c24xx.c @@ -36,7 +36,7 @@ #include <io.h> #include <asm-generic/errno.h> -#ifdef CONFIG_S3C24XX_NAND_BOOT +#ifdef CONFIG_S3C_NAND_BOOT # define __nand_boot_init __bare_init # ifndef BOARD_DEFAULT_NAND_TIMING # define BOARD_DEFAULT_NAND_TIMING 0x0737 @@ -49,7 +49,7 @@ * Define this symbol for testing purpose. It will add a command to read an * image from the NAND like it the boot strap code will do. */ -#define CONFIG_NAND_S3C24XX_BOOT_DEBUG +#define CONFIG_NAND_S3C_BOOT_DEBUG /* NAND controller's register */ @@ -497,7 +497,7 @@ static struct driver_d s3c24x0_nand_driver = { .probe = s3c24x0_nand_probe, }; -#ifdef CONFIG_S3C24XX_NAND_BOOT +#ifdef CONFIG_S3C_NAND_BOOT static void __nand_boot_init wait_for_completion(void __iomem *host) { @@ -603,7 +603,7 @@ void __nand_boot_init s3c24x0_nand_load_image(void *dest, int size, int page) disable_nand_controller(host); } -#ifdef CONFIG_NAND_S3C24XX_BOOT_DEBUG +#ifdef CONFIG_NAND_S3C_BOOT_DEBUG #include <command.h> static int do_nand_boot_test(int argc, char *argv[]) @@ -636,7 +636,7 @@ BAREBOX_CMD_START(nand_boot_test) BAREBOX_CMD_END #endif -#endif /* CONFIG_S3C24XX_NAND_BOOT */ +#endif /* CONFIG_S3C_NAND_BOOT */ /* * Main initialization routine diff --git a/drivers/nor/cfi_flash.h b/drivers/nor/cfi_flash.h index df482b6c56..fec08940ab 100644 --- a/drivers/nor/cfi_flash.h +++ b/drivers/nor/cfi_flash.h @@ -30,7 +30,17 @@ #include <linux/mtd/mtd.h> typedef unsigned long flash_sect_t; + +#if defined(CONFIG_DRIVER_CFI_BANK_WIDTH_8) typedef u64 cfiword_t; +#elif defined(CONFIG_DRIVER_CFI_BANK_WIDTH_4) +typedef u32 cfiword_t; +#elif defined(CONFIG_DRIVER_CFI_BANK_WIDTH_2) +typedef u16 cfiword_t; +#else +typedef u8 cfiword_t; +#endif + struct cfi_cmd_set; /*----------------------------------------------------------------------- diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index 186b59638f..a9383da9d7 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -80,7 +80,7 @@ config DRIVER_SERIAL_PL010 config DRIVER_SERIAL_S3C bool "Samsung S3C serial driver" - depends on ARCH_S3C24xx + depends on ARCH_SAMSUNG default y help Say Y here if you want to use the CONS on a Samsung S3C CPU diff --git a/drivers/serial/serial_s3c.c b/drivers/serial/serial_s3c.c index 2bdc1df696..7a9b355704 100644 --- a/drivers/serial/serial_s3c.c +++ b/drivers/serial/serial_s3c.c @@ -40,6 +40,17 @@ #define UTXH 0x20 /* transmitt */ #define URXH 0x24 /* receive */ #define UBRDIV 0x28 /* baudrate generator */ +#ifdef S3C_UART_HAS_UBRDIVSLOT +# define UBRDIVSLOT 0x2c /* baudrate slot generator */ +#endif +#ifdef S3C_UART_HAS_UINTM +# define UINTM 0x38 /* interrupt mask register */ +#endif + +#ifndef S3C_UART_CLKSEL +/* Use pclk */ +# define S3C_UART_CLKSEL 0 +#endif struct s3c_uart { void __iomem *regs; @@ -51,26 +62,32 @@ struct s3c_uart { static unsigned s3c_get_arch_uart_input_clock(void __iomem *base) { unsigned reg = readw(base + UCON); - - switch (reg & 0xc00) { - case 0x000: - case 0x800: - return s3c_get_pclk(); - case 0x400: - break; /* TODO UEXTCLK */ - case 0xc00: - break; /* TODO FCLK/n */ - } - - return 0; /* not nice, but we can't emit an error message! */ + reg = (reg >> 10) & 0x3; + return s3c_get_uart_clk(reg); } +#ifdef S3C_UART_HAS_UBRDIVSLOT +/* + * This table takes the fractional value of the baud divisor and gives + * the recommended setting for the UDIVSLOT register. Refer the datasheet + * for further details + */ +static const uint16_t udivslot_table[] __maybe_unused = { + 0x0000, 0x0080, 0x0808, 0x0888, 0x2222, 0x4924, 0x4A52, 0x54AA, + 0x5555, 0xD555, 0xD5D5, 0xDDD5, 0xDDDD, 0xDFDD, 0xDFDF, 0xFFDF, +}; +#endif + static int s3c_serial_setbaudrate(struct console_device *cdev, int baudrate) { struct s3c_uart *priv = to_s3c_uart(cdev); void __iomem *base = priv->regs; unsigned val; +#ifdef S3C_UART_HAS_UBRDIVSLOT + val = s3c_get_arch_uart_input_clock(base) / baudrate; + writew(udivslot_table[val & 15], base + UBRDIVSLOT); +#endif val = s3c_get_arch_uart_input_clock(base) / (16 * baudrate) - 1; writew(val, base + UBRDIV); @@ -88,11 +105,15 @@ static int s3c_serial_init_port(struct console_device *cdev) /* Normal,No parity,1 stop,8 bit */ writeb(0x03, base + ULCON); - /* - * tx=level,rx=edge,disable timeout int.,enable rx error int., - * normal,interrupt or polling - */ - writew(0x0245, base + UCON); + + /* tx=level,rx=edge,disable timeout int.,enable rx error int., + * normal, interrupt or polling, no pre-divider */ + writew(0x0245 | ((S3C_UART_CLKSEL) << 10), base + UCON); + +#ifdef S3C_UART_HAS_UINTM + /* 'interrupt or polling mode' for both directions */ + writeb(0xf, base + UINTM); +#endif #ifdef CONFIG_DRIVER_SERIAL_S3C_AUTOSYNC writeb(0x10, base + UMCON); /* enable auto flow control */ diff --git a/drivers/spi/imx_spi.c b/drivers/spi/imx_spi.c index 3b33b669fb..42358f2e6a 100644 --- a/drivers/spi/imx_spi.c +++ b/drivers/spi/imx_spi.c @@ -145,6 +145,10 @@ struct spi_imx_devtype_data { static int imx_spi_setup(struct spi_device *spi) { + struct imx_spi *imx = container_of(spi->master, struct imx_spi, master); + + imx->chipselect(spi, 0); + debug("%s mode 0x%08x bits_per_word: %d speed: %d\n", __FUNCTION__, spi->mode, spi->bits_per_word, spi->max_speed_hz); diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 7a8aed42e2..a7fe10cba0 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -78,6 +78,8 @@ struct spi_device *spi_new_device(struct spi_master *master, proxy->bits_per_word = chip->bits_per_word ? chip->bits_per_word : 8; proxy->dev.platform_data = chip->platform_data; strcpy(proxy->dev.name, chip->name); + /* allocate a free id for this chip */ + proxy->dev.id = DEVICE_ID_DYNAMIC; proxy->dev.type_data = proxy; dev_add_child(master->dev, &proxy->dev); diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index ae2b41ed53..a2473a9141 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -858,7 +858,7 @@ static int ehci_probe(struct device_d *dev) uint32_t reg; struct ehci_platform_data *pdata = dev->platform_data; - ehci = xmalloc(sizeof(struct ehci_priv)); + ehci = xzalloc(sizeof(struct ehci_priv)); host = &ehci->host; dev->priv = ehci; diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index f103101464..05e4094386 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -859,6 +859,8 @@ static void td_fill(struct ohci *ohci, unsigned int info, td->hwNextTD = virt_to_phys((void *)m32_swap((unsigned long)td_pt)); + dma_flush_range((unsigned long)data, (unsigned long)(data + len)); + /* append to queue */ td->ed->hwTailP = td->hwNextTD; } @@ -1555,6 +1557,8 @@ int submit_common_msg(struct usb_device *dev, unsigned long pipe, void *buffer, dev->status = stat; dev->act_len = urb->actual_length; + dma_inv_range((unsigned long)buffer, (unsigned long)(buffer + transfer_len)); + pkt_print(urb, dev, pipe, buffer, transfer_len, setup, "RET(ctlr)", usb_pipein(pipe)); diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index fa3691af15..2adc2ef508 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c @@ -613,7 +613,7 @@ static struct usb_device_id usb_storage_usb_ids[] = { ***********************************************************************/ static struct usb_driver usb_storage_driver = { - .driver.name = "usb-storage", + .name = "usb-storage", .id_table = usb_storage_usb_ids, .probe = usb_stor_probe, .disconnect = usb_stor_disconnect, |