diff options
Diffstat (limited to 'drivers')
31 files changed, 534 insertions, 79 deletions
diff --git a/drivers/base/driver.c b/drivers/base/driver.c index c43a4bde2a..3b39c28494 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c @@ -368,18 +368,6 @@ struct resource *dev_get_resource_by_name(struct device_d *dev, return ERR_PTR(-ENOENT); } -void *dev_get_mem_region_by_name(struct device_d *dev, const char *name) -{ - struct resource *res; - - res = dev_get_resource_by_name(dev, IORESOURCE_MEM, name); - if (IS_ERR(res)) - return ERR_CAST(res); - - return (void __force *)res->start; -} -EXPORT_SYMBOL(dev_get_mem_region_by_name); - void __iomem *dev_request_mem_region_by_name(struct device_d *dev, const char *name) { struct resource *res; @@ -396,32 +384,28 @@ void __iomem *dev_request_mem_region_by_name(struct device_d *dev, const char *n } EXPORT_SYMBOL(dev_request_mem_region_by_name); -void __iomem *dev_request_mem_region_err_null(struct device_d *dev, int num) +struct resource *dev_request_mem_resource(struct device_d *dev, int num) { struct resource *res; res = dev_get_resource(dev, IORESOURCE_MEM, num); if (IS_ERR(res)) - return NULL; - - res = request_iomem_region(dev_name(dev), res->start, res->end); - if (IS_ERR(res)) - return NULL; + return ERR_CAST(res); - return IOMEM(res->start); + return request_iomem_region(dev_name(dev), res->start, res->end); } -EXPORT_SYMBOL(dev_request_mem_region_err_null); -struct resource *dev_request_mem_resource(struct device_d *dev, int num) +void __iomem *dev_request_mem_region_err_null(struct device_d *dev, int num) { struct resource *res; - res = dev_get_resource(dev, IORESOURCE_MEM, num); + res = dev_request_mem_resource(dev, num); if (IS_ERR(res)) - return ERR_CAST(res); + return NULL; - return request_iomem_region(dev_name(dev), res->start, res->end); + return IOMEM(res->start); } +EXPORT_SYMBOL(dev_request_mem_region_err_null); void __iomem *dev_request_mem_region(struct device_d *dev, int num) { @@ -435,29 +419,22 @@ void __iomem *dev_request_mem_region(struct device_d *dev, int num) } EXPORT_SYMBOL(dev_request_mem_region); -int generic_memmap_ro(struct cdev *cdev, void **map, int flags) +int generic_memmap_rw(struct cdev *cdev, void **map, int flags) { if (!cdev->dev) return -EINVAL; - if (flags & PROT_WRITE) - return -EACCES; *map = dev_get_mem_region(cdev->dev, 0); - if (IS_ERR(*map)) - return PTR_ERR(*map); - return 0; + + return PTR_ERR_OR_ZERO(*map); } -int generic_memmap_rw(struct cdev *cdev, void **map, int flags) +int generic_memmap_ro(struct cdev *cdev, void **map, int flags) { - if (!cdev->dev) - return -EINVAL; - - *map = dev_get_mem_region(cdev->dev, 0); - if (IS_ERR(*map)) - return PTR_ERR(*map); + if (flags & PROT_WRITE) + return -EACCES; - return 0; + return generic_memmap_rw(cdev, map, flags); } int dummy_probe(struct device_d *dev) diff --git a/drivers/clocksource/timer-atmel-pit.c b/drivers/clocksource/timer-atmel-pit.c index 947a1e7f49..40895847f0 100644 --- a/drivers/clocksource/timer-atmel-pit.c +++ b/drivers/clocksource/timer-atmel-pit.c @@ -30,7 +30,6 @@ #include <clock.h> #include <mach/hardware.h> #include <mach/at91_pit.h> -#include <mach/io.h> #include <io.h> #include <linux/clk.h> #include <linux/err.h> diff --git a/drivers/gpio/gpio-dw.c b/drivers/gpio/gpio-dw.c index f145c01232..b81e6a75c5 100644 --- a/drivers/gpio/gpio-dw.c +++ b/drivers/gpio/gpio-dw.c @@ -199,4 +199,4 @@ static int __init dwgpio_init(void) { return platform_driver_register(&dwgpio_driver); } -core_initcall(dwgpio_init); +postcore_initcall(dwgpio_init); diff --git a/drivers/gpio/gpio-imx.c b/drivers/gpio/gpio-imx.c index d618e60119..2827e11e73 100644 --- a/drivers/gpio/gpio-imx.c +++ b/drivers/gpio/gpio-imx.c @@ -222,4 +222,4 @@ static int imx_gpio_add(void) platform_driver_register(&imx_gpio_driver); return 0; } -core_initcall(imx_gpio_add); +postcore_initcall(imx_gpio_add); diff --git a/drivers/gpio/gpio-mxs.c b/drivers/gpio/gpio-mxs.c index b2b3ad3ac6..ef78873ad2 100644 --- a/drivers/gpio/gpio-mxs.c +++ b/drivers/gpio/gpio-mxs.c @@ -183,4 +183,4 @@ static int mxs_gpio_add(void) platform_driver_register(&mxs_gpio_driver); return 0; } -core_initcall(mxs_gpio_add); +postcore_initcall(mxs_gpio_add); diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c index 2aff62be59..ab35310fbe 100644 --- a/drivers/gpio/gpio-vf610.c +++ b/drivers/gpio/gpio-vf610.c @@ -142,9 +142,8 @@ static int vf610_gpio_probe(struct device_d *dev) port->chip.base *= VF610_GPIO_PER_PORT; port->chip.dev = dev; - gpiochip_add(&port->chip); - return 0; + return gpiochip_add(&port->chip); free_port: free(port); @@ -161,4 +160,4 @@ static int __init gpio_vf610_init(void) { return platform_driver_register(&vf610_gpio_driver); } -core_initcall(gpio_vf610_init); +postcore_initcall(gpio_vf610_init); diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index b83a27de7d..4c7aee4a0b 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -91,6 +91,23 @@ done: return ret; } +int gpio_find_by_label(const char *label) +{ + int i; + + for (i = 0; i < ARCH_NR_GPIOS; i++) { + struct gpio_info *info = &gpio_desc[i]; + + if (!info->requested || !info->chip || !info->label) + continue; + + if (!strcmp(info->label, label)) + return i; + } + + return -ENOENT; +} + void gpio_free(unsigned gpio) { struct gpio_info *gi = gpio_to_desc(gpio); @@ -352,12 +369,12 @@ static int of_hog_gpio(struct device_node *np, struct gpio_chip *chip, flags |= GPIOF_ACTIVE_LOW; gpio = gpio_get_num(chip->dev, gpio_num); - if (ret == -EPROBE_DEFER) - return ret; + if (gpio == -EPROBE_DEFER) + return gpio; - if (ret < 0) { + if (gpio < 0) { dev_err(chip->dev, "unable to get gpio %u\n", gpio_num); - return ret; + return gpio; } @@ -382,7 +399,10 @@ static int of_hog_gpio(struct device_node *np, struct gpio_chip *chip, else return -EINVAL; - of_property_read_string(np, "line-name", &name); + /* The line-name is optional and if not present the node name is used */ + ret = of_property_read_string(np, "line-name", &name); + if (ret < 0) + name = np->name; return gpio_request_one(gpio, flags, name); } diff --git a/drivers/mtd/nand/nand_denali_dt.c b/drivers/mtd/nand/nand_denali_dt.c index 2c6b188094..e3024549cd 100644 --- a/drivers/mtd/nand/nand_denali_dt.c +++ b/drivers/mtd/nand/nand_denali_dt.c @@ -86,7 +86,7 @@ out_disable_clk: static __maybe_unused struct of_device_id denali_nand_compatible[] = { { - .compatible = "denali,denali-nand-dt" + .compatible = "altr,socfpga-denali-nand" }, { /* sentinel */ } diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig index 38b6f42419..c28a6d4e43 100644 --- a/drivers/nvmem/Kconfig +++ b/drivers/nvmem/Kconfig @@ -43,4 +43,12 @@ config RAVE_SP_EEPROM help Say y here to enable Rave SP EEPROM support. +config EEPROM_93XX46 + bool "Microwire EEPROM 93XX46 support" + depends on SPI + help + Driver for the microwire EEPROM chipsets 93xx46x. The driver + supports both read and write commands and also the command to + erase the whole EEPROM. + endif diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile index 716e5dbe87..abf9dae429 100644 --- a/drivers/nvmem/Makefile +++ b/drivers/nvmem/Makefile @@ -13,4 +13,7 @@ obj-$(CONFIG_IMX_OCOTP) += nvmem_ocotp.o nvmem_ocotp-y := ocotp.o obj-$(CONFIG_RAVE_SP_EEPROM) += nvmem-rave-sp-eeprom.o -nvmem-rave-sp-eeprom-y := rave-sp-eeprom.o
\ No newline at end of file +nvmem-rave-sp-eeprom-y := rave-sp-eeprom.o + +obj-$(CONFIG_EEPROM_93XX46) += nvmem_eeprom_93xx46.o +nvmem_eeprom_93xx46-y := eeprom_93xx46.o
\ No newline at end of file diff --git a/drivers/nvmem/eeprom_93xx46.c b/drivers/nvmem/eeprom_93xx46.c new file mode 100644 index 0000000000..d96ba32d07 --- /dev/null +++ b/drivers/nvmem/eeprom_93xx46.c @@ -0,0 +1,446 @@ +/* + * Driver for 93xx46 EEPROMs + * + * (C) 2011 DENX Software Engineering, Anatolij Gustschin <agust@denx.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include <common.h> +#include <init.h> +#include <driver.h> +#include <of.h> +#include <spi/spi.h> +#include <of.h> +#include <spi/spi.h> +#include <malloc.h> +#include <gpio.h> +#include <of_gpio.h> +#include <of_device.h> + +#include <linux/nvmem-provider.h> + + +#define OP_START 0x4 +#define OP_WRITE (OP_START | 0x1) +#define OP_READ (OP_START | 0x2) +#define ADDR_EWDS 0x00 +#define ADDR_ERAL 0x20 +#define ADDR_EWEN 0x30 + +struct eeprom_93xx46_platform_data { + unsigned char flags; +#define EE_ADDR8 0x01 /* 8 bit addr. cfg */ +#define EE_ADDR16 0x02 /* 16 bit addr. cfg */ +#define EE_READONLY 0x08 /* forbid writing */ + + unsigned int quirks; +/* Single word read transfers only; no sequential read. */ +#define EEPROM_93XX46_QUIRK_SINGLE_WORD_READ (1 << 0) +/* Instructions such as EWEN are (addrlen + 2) in length. */ +#define EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH (1 << 1) + + /* + * optional hooks to control additional logic + * before and after spi transfer. + */ + void (*prepare)(void *); + void (*finish)(void *); + int select; +}; + +struct eeprom_93xx46_devtype_data { + unsigned int quirks; +}; + +static const struct eeprom_93xx46_devtype_data atmel_at93c46d_data = { + .quirks = EEPROM_93XX46_QUIRK_SINGLE_WORD_READ | + EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH, +}; + +struct eeprom_93xx46_dev { + struct spi_device *spi; + struct eeprom_93xx46_platform_data *pdata; + struct nvmem_config nvmem_config; + struct nvmem_device *nvmem; + int addrlen; + int size; +}; + +static inline bool has_quirk_single_word_read(struct eeprom_93xx46_dev *edev) +{ + return edev->pdata->quirks & EEPROM_93XX46_QUIRK_SINGLE_WORD_READ; +} + +static inline bool has_quirk_instruction_length(struct eeprom_93xx46_dev *edev) +{ + return edev->pdata->quirks & EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH; +} + +static int eeprom_93xx46_read(struct device_d *dev, int off, + void *val, int count) +{ + struct eeprom_93xx46_dev *edev = dev->parent->priv; + char *buf = val; + int err = 0; + + if (unlikely(off >= edev->size)) + return 0; + if ((off + count) > edev->size) + count = edev->size - off; + if (unlikely(!count)) + return count; + + if (edev->pdata->prepare) + edev->pdata->prepare(edev); + + while (count) { + struct spi_message m; + struct spi_transfer t[2] = { { 0 } }; + u16 cmd_addr = OP_READ << edev->addrlen; + size_t nbytes = count; + int bits; + + if (edev->addrlen == 7) { + cmd_addr |= off & 0x7f; + bits = 10; + if (has_quirk_single_word_read(edev)) + nbytes = 1; + } else { + cmd_addr |= (off >> 1) & 0x3f; + bits = 9; + if (has_quirk_single_word_read(edev)) + nbytes = 2; + } + + dev_dbg(&edev->spi->dev, "read cmd 0x%x, %d Hz\n", + cmd_addr, edev->spi->max_speed_hz); + + spi_message_init(&m); + + t[0].tx_buf = (char *)&cmd_addr; + t[0].len = 2; + t[0].bits_per_word = bits; + spi_message_add_tail(&t[0], &m); + + t[1].rx_buf = buf; + t[1].len = count; + t[1].bits_per_word = 8; + spi_message_add_tail(&t[1], &m); + + err = spi_sync(edev->spi, &m); + /* have to wait at least Tcsl ns */ + ndelay(250); + + if (err) { + dev_err(&edev->spi->dev, "read %zu bytes at %d: err. %d\n", + nbytes, (int)off, err); + break; + } + + buf += nbytes; + off += nbytes; + count -= nbytes; + } + + if (edev->pdata->finish) + edev->pdata->finish(edev); + + return err; +} + +static int eeprom_93xx46_ew(struct eeprom_93xx46_dev *edev, int is_on) +{ + struct spi_message m; + struct spi_transfer t; + int bits, ret; + u16 cmd_addr; + + cmd_addr = OP_START << edev->addrlen; + if (edev->addrlen == 7) { + cmd_addr |= (is_on ? ADDR_EWEN : ADDR_EWDS) << 1; + bits = 10; + } else { + cmd_addr |= (is_on ? ADDR_EWEN : ADDR_EWDS); + bits = 9; + } + + if (has_quirk_instruction_length(edev)) { + cmd_addr <<= 2; + bits += 2; + } + + dev_dbg(&edev->spi->dev, "ew%s cmd 0x%04x, %d bits\n", + is_on ? "en" : "ds", cmd_addr, bits); + + spi_message_init(&m); + memset(&t, 0, sizeof(t)); + + t.tx_buf = &cmd_addr; + t.len = 2; + t.bits_per_word = bits; + spi_message_add_tail(&t, &m); + + if (edev->pdata->prepare) + edev->pdata->prepare(edev); + + ret = spi_sync(edev->spi, &m); + /* have to wait at least Tcsl ns */ + ndelay(250); + if (ret) + dev_err(&edev->spi->dev, "erase/write %sable error %d\n", + is_on ? "en" : "dis", ret); + + if (edev->pdata->finish) + edev->pdata->finish(edev); + + return ret; +} + +static ssize_t +eeprom_93xx46_write_word(struct eeprom_93xx46_dev *edev, + const char *buf, unsigned off) +{ + struct spi_message m; + struct spi_transfer t[2]; + int bits, data_len, ret; + u16 cmd_addr; + + cmd_addr = OP_WRITE << edev->addrlen; + + if (edev->addrlen == 7) { + cmd_addr |= off & 0x7f; + bits = 10; + data_len = 1; + } else { + cmd_addr |= (off >> 1) & 0x3f; + bits = 9; + data_len = 2; + } + + dev_dbg(&edev->spi->dev, "write cmd 0x%x\n", cmd_addr); + + spi_message_init(&m); + memset(t, 0, sizeof(t)); + + t[0].tx_buf = (char *)&cmd_addr; + t[0].len = 2; + t[0].bits_per_word = bits; + spi_message_add_tail(&t[0], &m); + + t[1].tx_buf = buf; + t[1].len = data_len; + t[1].bits_per_word = 8; + spi_message_add_tail(&t[1], &m); + + ret = spi_sync(edev->spi, &m); + /* have to wait program cycle time Twc ms */ + mdelay(6); + return ret; +} + +static int eeprom_93xx46_write(struct device_d *dev, const int off, + const void *val, int count) +{ + struct eeprom_93xx46_dev *edev = dev->parent->priv; + const char *buf = val; + int i, ret, step = 1; + + if (unlikely(off >= edev->size)) + return -EFBIG; + if ((off + count) > edev->size) + count = edev->size - off; + if (unlikely(!count)) + return count; + + /* only write even number of bytes on 16-bit devices */ + if (edev->addrlen == 6) { + step = 2; + count &= ~1; + } + + /* erase/write enable */ + ret = eeprom_93xx46_ew(edev, 1); + if (ret) + return ret; + + if (edev->pdata->prepare) + edev->pdata->prepare(edev); + + for (i = 0; i < count; i += step) { + ret = eeprom_93xx46_write_word(edev, &buf[i], off + i); + if (ret) { + dev_err(&edev->spi->dev, "write failed at %d: %d\n", + (int)off + i, ret); + break; + } + } + + if (edev->pdata->finish) + edev->pdata->finish(edev); + + /* erase/write disable */ + eeprom_93xx46_ew(edev, 0); + return ret; +} + +static void select_assert(void *context) +{ + struct eeprom_93xx46_dev *edev = context; + + if (gpio_is_valid(edev->pdata->select)) + gpio_set_active(edev->pdata->select, true); +} + +static void select_deassert(void *context) +{ + struct eeprom_93xx46_dev *edev = context; + + if (gpio_is_valid(edev->pdata->select)) + gpio_set_active(edev->pdata->select, false); +} + +static const struct of_device_id eeprom_93xx46_of_table[] = { + { .compatible = "eeprom-93xx46", }, + { .compatible = "atmel,at93c46d", .data = &atmel_at93c46d_data, }, + {} +}; + +static int eeprom_93xx46_probe_dt(struct spi_device *spi) +{ + const struct of_device_id *of_id = + of_match_device(eeprom_93xx46_of_table, &spi->dev); + struct device_node *np = spi->dev.device_node; + struct eeprom_93xx46_platform_data *pd; + enum of_gpio_flags of_flags; + unsigned long flags = GPIOF_OUT_INIT_INACTIVE; + u32 tmp; + int ret; + + pd = xzalloc(sizeof(*pd)); + + ret = of_property_read_u32(np, "data-size", &tmp); + if (ret < 0) { + dev_err(&spi->dev, "data-size property not found\n"); + return ret; + } + + if (tmp == 8) { + pd->flags |= EE_ADDR8; + } else if (tmp == 16) { + pd->flags |= EE_ADDR16; + } else { + dev_err(&spi->dev, "invalid data-size (%d)\n", tmp); + return -EINVAL; + } + + if (of_property_read_bool(np, "read-only")) + pd->flags |= EE_READONLY; + + pd->select =of_get_named_gpio_flags(np, "select", 0, &of_flags); + if (gpio_is_valid(pd->select)) { + char *name; + + if (of_flags & OF_GPIO_ACTIVE_LOW) + flags |= GPIOF_ACTIVE_LOW; + + name = basprintf("%s select", dev_name(&spi->dev)); + ret = gpio_request_one(pd->select, flags, name); + if (ret < 0) + return ret; + } + + pd->prepare = select_assert; + pd->finish = select_deassert; + + if (gpio_is_valid(pd->select)) + gpio_set_active(pd->select, false); + + if (of_id->data) { + const struct eeprom_93xx46_devtype_data *data = of_id->data; + + pd->quirks = data->quirks; + } + + spi->dev.platform_data = pd; + + return 0; +} + +static const struct nvmem_bus eeprom_93xx46_nvmem_bus = { + .write = eeprom_93xx46_write, + .read = eeprom_93xx46_read, +}; + +static int eeprom_93xx46_probe(struct device_d *dev) +{ + struct spi_device *spi = (struct spi_device *)dev->type_data; + struct eeprom_93xx46_platform_data *pd; + struct eeprom_93xx46_dev *edev; + int err; + + if (dev->device_node) { + err = eeprom_93xx46_probe_dt(spi); + if (err < 0) + return err; + } + + pd = spi->dev.platform_data; + if (!pd) { + dev_err(&spi->dev, "missing platform data\n"); + return -ENODEV; + } + + edev = xzalloc(sizeof(*edev)); + + if (pd->flags & EE_ADDR8) + edev->addrlen = 7; + else if (pd->flags & EE_ADDR16) + edev->addrlen = 6; + else { + dev_err(&spi->dev, "unspecified address type\n"); + err = -EINVAL; + goto fail; + } + + edev->spi = spi; + edev->pdata = pd; + + edev->size = 128; + edev->nvmem_config.name = dev_name(&spi->dev); + edev->nvmem_config.dev = &spi->dev; + edev->nvmem_config.read_only = pd->flags & EE_READONLY; + edev->nvmem_config.bus = &eeprom_93xx46_nvmem_bus; + edev->nvmem_config.stride = 4; + edev->nvmem_config.word_size = 1; + edev->nvmem_config.size = edev->size; + + dev->priv = edev; + + edev->nvmem = nvmem_register(&edev->nvmem_config); + if (IS_ERR(edev->nvmem)) { + err = PTR_ERR(edev->nvmem); + goto fail; + } + + dev_info(&spi->dev, "%d-bit eeprom %s\n", + (pd->flags & EE_ADDR8) ? 8 : 16, + (pd->flags & EE_READONLY) ? "(readonly)" : ""); + + return 0; +fail: + kfree(edev); + return err; +} + +static struct driver_d eeprom_93xx46_driver = { + .name = "93xx46", + .probe = eeprom_93xx46_probe, + .of_compatible = DRV_OF_COMPAT(eeprom_93xx46_of_table), +}; +device_spi_driver(eeprom_93xx46_driver); + + + diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 92dd86e4ec..cf3f1ee147 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -227,7 +227,7 @@ static struct device_node *__of_unflatten_dtb(const void *infdt, bool constprops p = of_new_property(node, name, nodep, len); if (!strcmp(name, "phandle") && len == 4) - node->phandle = be32_to_cpup(p->value); + node->phandle = be32_to_cpup(of_property_get_value(p)); dt_struct = dt_struct_advance(&f, dt_struct, sizeof(struct fdt_property) + len); diff --git a/drivers/pinctrl/imx-iomux-v1.c b/drivers/pinctrl/imx-iomux-v1.c index a3f04802a2..61e8f9680f 100644 --- a/drivers/pinctrl/imx-iomux-v1.c +++ b/drivers/pinctrl/imx-iomux-v1.c @@ -314,4 +314,4 @@ static int imx_iomux_v1_init(void) { return platform_driver_register(&imx_iomux_v1_driver); } -postcore_initcall(imx_iomux_v1_init); +core_initcall(imx_iomux_v1_init); diff --git a/drivers/pinctrl/imx-iomux-v2.c b/drivers/pinctrl/imx-iomux-v2.c index 0c985a69d3..60b635a8a8 100644 --- a/drivers/pinctrl/imx-iomux-v2.c +++ b/drivers/pinctrl/imx-iomux-v2.c @@ -154,4 +154,4 @@ static int imx_iomux_init(void) { return platform_driver_register(&imx_iomux_driver); } -postcore_initcall(imx_iomux_init); +core_initcall(imx_iomux_init); diff --git a/drivers/pinctrl/imx-iomux-v3.c b/drivers/pinctrl/imx-iomux-v3.c index 0ab97040e0..b2a67fcccc 100644 --- a/drivers/pinctrl/imx-iomux-v3.c +++ b/drivers/pinctrl/imx-iomux-v3.c @@ -266,4 +266,4 @@ static int imx_iomux_v3_init(void) { return platform_driver_register(&imx_iomux_v3_driver); } -postcore_initcall(imx_iomux_v3_init); +core_initcall(imx_iomux_v3_init); diff --git a/drivers/pinctrl/mvebu/armada-370.c b/drivers/pinctrl/mvebu/armada-370.c index 2fd07a7b87..4fde16ab5d 100644 --- a/drivers/pinctrl/mvebu/armada-370.c +++ b/drivers/pinctrl/mvebu/armada-370.c @@ -415,4 +415,4 @@ static int armada_370_pinctrl_init(void) { return platform_driver_register(&armada_370_pinctrl_driver); } -postcore_initcall(armada_370_pinctrl_init); +core_initcall(armada_370_pinctrl_init); diff --git a/drivers/pinctrl/mvebu/armada-xp.c b/drivers/pinctrl/mvebu/armada-xp.c index 2657db5fcf..089942d696 100644 --- a/drivers/pinctrl/mvebu/armada-xp.c +++ b/drivers/pinctrl/mvebu/armada-xp.c @@ -405,4 +405,4 @@ static int armada_xp_pinctrl_init(void) { return platform_driver_register(&armada_xp_pinctrl_driver); } -postcore_initcall(armada_xp_pinctrl_init); +core_initcall(armada_xp_pinctrl_init); diff --git a/drivers/pinctrl/mvebu/dove.c b/drivers/pinctrl/mvebu/dove.c index 8de01e74d6..2d9d8094f8 100644 --- a/drivers/pinctrl/mvebu/dove.c +++ b/drivers/pinctrl/mvebu/dove.c @@ -742,4 +742,4 @@ static int dove_pinctrl_init(void) { return platform_driver_register(&dove_pinctrl_driver); } -postcore_initcall(dove_pinctrl_init); +core_initcall(dove_pinctrl_init); diff --git a/drivers/pinctrl/mvebu/kirkwood.c b/drivers/pinctrl/mvebu/kirkwood.c index 4b2618cd2e..a347239028 100644 --- a/drivers/pinctrl/mvebu/kirkwood.c +++ b/drivers/pinctrl/mvebu/kirkwood.c @@ -456,4 +456,4 @@ static int kirkwood_pinctrl_init(void) { return platform_driver_register(&kirkwood_pinctrl_driver); } -postcore_initcall(kirkwood_pinctrl_init); +core_initcall(kirkwood_pinctrl_init); diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c index 630f11be76..3201eb9cb1 100644 --- a/drivers/pinctrl/pinctrl-at91.c +++ b/drivers/pinctrl/pinctrl-at91.c @@ -538,7 +538,7 @@ static int at91_pinctrl_init(void) { return platform_driver_register(&at91_pinctrl_driver); } -postcore_initcall(at91_pinctrl_init); +core_initcall(at91_pinctrl_init); static int at91_gpio_get(struct gpio_chip *chip, unsigned offset) { @@ -718,4 +718,4 @@ static int at91_gpio_init(void) { return platform_driver_register(&at91_gpio_driver); } -postcore_initcall(at91_gpio_init); +core_initcall(at91_gpio_init); diff --git a/drivers/pinctrl/pinctrl-mxs.c b/drivers/pinctrl/pinctrl-mxs.c index 479c31a426..b48ed2ace1 100644 --- a/drivers/pinctrl/pinctrl-mxs.c +++ b/drivers/pinctrl/pinctrl-mxs.c @@ -168,4 +168,4 @@ static int mxs_pinctrl_init(void) { return platform_driver_register(&mxs_pinctrl_driver); } -postcore_initcall(mxs_pinctrl_init); +core_initcall(mxs_pinctrl_init); diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c index 15b74cc1df..3c581ed5d3 100644 --- a/drivers/pinctrl/pinctrl-single.c +++ b/drivers/pinctrl/pinctrl-single.c @@ -167,4 +167,4 @@ static int pcs_init(void) { return platform_driver_register(&pcs_driver); } -postcore_initcall(pcs_init); +core_initcall(pcs_init); diff --git a/drivers/pinctrl/pinctrl-tegra-xusb.c b/drivers/pinctrl/pinctrl-tegra-xusb.c index a7a75bb9c5..e477280e62 100644 --- a/drivers/pinctrl/pinctrl-tegra-xusb.c +++ b/drivers/pinctrl/pinctrl-tegra-xusb.c @@ -518,4 +518,4 @@ static int pinctrl_tegra_xusb_init(void) { return platform_driver_register(&pinctrl_tegra_xusb_driver); } -postcore_initcall(pinctrl_tegra_xusb_init); +core_initcall(pinctrl_tegra_xusb_init); diff --git a/drivers/pinctrl/pinctrl-tegra20.c b/drivers/pinctrl/pinctrl-tegra20.c index eaaba9e7a7..337992c21f 100644 --- a/drivers/pinctrl/pinctrl-tegra20.c +++ b/drivers/pinctrl/pinctrl-tegra20.c @@ -350,4 +350,4 @@ static int pinctrl_tegra20_init(void) { return platform_driver_register(&pinctrl_tegra20_driver); } -postcore_initcall(pinctrl_tegra20_init); +core_initcall(pinctrl_tegra20_init); diff --git a/drivers/pinctrl/pinctrl-tegra30.c b/drivers/pinctrl/pinctrl-tegra30.c index 4b271dd0b6..d9b49c57d9 100644 --- a/drivers/pinctrl/pinctrl-tegra30.c +++ b/drivers/pinctrl/pinctrl-tegra30.c @@ -935,4 +935,4 @@ static int pinctrl_tegra30_init(void) { return platform_driver_register(&pinctrl_tegra30_driver); } -postcore_initcall(pinctrl_tegra30_init); +core_initcall(pinctrl_tegra30_init); diff --git a/drivers/pinctrl/pinctrl-vf610.c b/drivers/pinctrl/pinctrl-vf610.c index a46b0e2ca0..662fa9b6c9 100644 --- a/drivers/pinctrl/pinctrl-vf610.c +++ b/drivers/pinctrl/pinctrl-vf610.c @@ -165,4 +165,4 @@ static int pinctrl_vf610_init(void) { return platform_driver_register(&pinctrl_vf610_driver); } -postcore_initcall(pinctrl_vf610_init); +core_initcall(pinctrl_vf610_init); diff --git a/drivers/spi/atmel_spi.c b/drivers/spi/atmel_spi.c index a0243be858..55bea79a5e 100644 --- a/drivers/spi/atmel_spi.c +++ b/drivers/spi/atmel_spi.c @@ -32,7 +32,6 @@ #include <of_gpio.h> #include <io.h> #include <spi/spi.h> -#include <mach/io.h> #include <mach/iomux.h> #include <mach/board.h> #include <mach/cpu.h> diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index 18427114d1..645275a016 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c @@ -18,6 +18,7 @@ #include <errno.h> #include <init.h> #include <gpio.h> +#include <io.h> #include <clock.h> #include <usb/ch9.h> #include <usb/gadget.h> @@ -30,7 +31,9 @@ #include <asm/byteorder.h> #include <mach/hardware.h> -#include <mach/io.h> +#if defined CONFIG_ARCH_AT91SAM9261 || defined CONFIG_ARCH_AT91SAM9G10 +#include <mach/at91sam9261.h> +#endif #include <mach/board.h> #include <mach/cpu.h> #include <mach/at91sam9261_matrix.h> @@ -691,10 +694,12 @@ static void pullup(struct at91_udc *udc, int is_on) txvc |= AT91_UDP_TXVC_PUON; at91_udp_write(udc, AT91_UDP_TXVC, txvc); } else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) { +#if defined CONFIG_ARCH_AT91SAM9261 || defined CONFIG_ARCH_AT91SAM9G10 u32 usbpucr; - usbpucr = at91_sys_read(AT91_MATRIX_USBPUCR); - usbpucr |= AT91_MATRIX_USBPUCR_PUON; - at91_sys_write(AT91_MATRIX_USBPUCR, usbpucr); + usbpucr = readl(AT91SAM9261_BASE_MATRIX + AT91SAM9261_MATRIX_USBPUCR); + usbpucr |= AT91SAM9261_MATRIX_USBPUCR_PUON; + writel(usbpucr, AT91SAM9261_BASE_MATRIX + AT91SAM9261_MATRIX_USBPUCR); +#endif } } else { stop_activity(udc); @@ -708,10 +713,12 @@ static void pullup(struct at91_udc *udc, int is_on) txvc &= ~AT91_UDP_TXVC_PUON; at91_udp_write(udc, AT91_UDP_TXVC, txvc); } else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) { +#if defined CONFIG_ARCH_AT91SAM9261 || defined CONFIG_ARCH_AT91SAM9G10 u32 usbpucr; - usbpucr = at91_sys_read(AT91_MATRIX_USBPUCR); - usbpucr &= ~AT91_MATRIX_USBPUCR_PUON; - at91_sys_write(AT91_MATRIX_USBPUCR, usbpucr); + usbpucr = readl(AT91SAM9261_BASE_MATRIX + AT91SAM9261_MATRIX_USBPUCR); + usbpucr &= ~AT91SAM9261_MATRIX_USBPUCR_PUON; + writel(usbpucr, AT91SAM9261_BASE_MATRIX + AT91SAM9261_MATRIX_USBPUCR); +#endif } clk_off(udc); } diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c index 23f2ab6841..d61920e42d 100644 --- a/drivers/usb/gadget/f_fastboot.c +++ b/drivers/usb/gadget/f_fastboot.c @@ -697,7 +697,6 @@ static void cb_download(struct f_fastboot *f_fb, const char *cmd) fastboot_tx_print(f_fb, "FAILdata invalid size"); } else { struct usb_request *req = f_fb->out_req; - struct usb_ep *ep = f_fb->out_ep; fastboot_tx_print(f_fb, "DATA%08x", f_fb->download_size); req->complete = rx_handler_dl_image; req->length = rx_bytes_expected(f_fb); diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c index 5d130f598e..aa84334b09 100644 --- a/drivers/video/atmel_hlcdfb.c +++ b/drivers/video/atmel_hlcdfb.c @@ -24,7 +24,6 @@ #include <linux/clk.h> #include <mach/hardware.h> #include <mach/atmel_hlcdc.h> -#include <mach/io.h> #include <mach/cpu.h> #include <errno.h> diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c index d343c5c059..322404f322 100644 --- a/drivers/video/atmel_lcdfb.c +++ b/drivers/video/atmel_lcdfb.c @@ -22,7 +22,6 @@ #include <io.h> #include <init.h> #include <mach/hardware.h> -#include <mach/io.h> #include <errno.h> #include <linux/clk.h> |