diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-05-06 09:30:37 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-05-06 09:30:37 +0200 |
commit | 579b794b5d13e4a1ffa21d2426bfab7050eaba9d (patch) | |
tree | fb7aec42846fb17498f1371363f474691fdbf4d4 /arch | |
parent | 646a0d058dd206ee978803aaeb53c886cbc5ad9f (diff) | |
parent | 32dc070fd499a8a0bc4bc434fe74319c7463a97a (diff) | |
download | barebox-579b794b5d13e4a1ffa21d2426bfab7050eaba9d.tar.gz barebox-579b794b5d13e4a1ffa21d2426bfab7050eaba9d.tar.xz |
Merge branch 'for-next/of'
Conflicts:
arch/arm/mach-imx/Makefile
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-imx/Kconfig | 9 | ||||
-rw-r--r-- | arch/arm/mach-imx/Makefile | 18 | ||||
-rw-r--r-- | arch/arm/mach-imx/iomux-v1.c | 116 | ||||
-rw-r--r-- | arch/arm/mach-imx/iomux-v2.c | 152 | ||||
-rw-r--r-- | arch/arm/mach-imx/iomux-v3.c | 107 |
5 files changed, 18 insertions, 384 deletions
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index eee6acd04e..359b5cd091 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -165,44 +165,53 @@ choice config ARCH_IMX1 bool "i.MX1" select CPU_ARM920T + select PINCTRL_IMX_IOMUX_V1 config ARCH_IMX21 bool "i.MX21" select CPU_ARM926T + select PINCTRL_IMX_IOMUX_V1 config ARCH_IMX25 bool "i.MX25" select CPU_ARM926T select ARCH_HAS_FEC_IMX + select PINCTRL_IMX_IOMUX_V3 config ARCH_IMX27 bool "i.MX27" select CPU_ARM926T select ARCH_HAS_FEC_IMX + select PINCTRL_IMX_IOMUX_V1 config ARCH_IMX31 select CPU_V6 bool "i.MX31" + select PINCTRL_IMX_IOMUX_V2 config ARCH_IMX35 bool "i.MX35" select CPU_V6 select ARCH_HAS_FEC_IMX + select PINCTRL_IMX_IOMUX_V3 config ARCH_IMX51 bool "i.MX51" select CPU_V7 select ARCH_HAS_FEC_IMX + select PINCTRL_IMX_IOMUX_V3 config ARCH_IMX53 bool "i.MX53" select CPU_V7 select ARCH_HAS_FEC_IMX + select PINCTRL_IMX_IOMUX_V3 config ARCH_IMX6 bool "i.MX6" select ARCH_HAS_FEC_IMX select CPU_V7 + select PINCTRL_IMX_IOMUX_V3 endchoice diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index b703ed1dcd..72125e775b 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -1,14 +1,14 @@ obj-y += clocksource.o -obj-$(CONFIG_ARCH_IMX1) += imx1.o iomux-v1.o clk-imx1.o -obj-$(CONFIG_ARCH_IMX25) += imx25.o iomux-v3.o clk-imx25.o -obj-$(CONFIG_ARCH_IMX21) += imx21.o iomux-v1.o clk-imx21.o -obj-$(CONFIG_ARCH_IMX27) += imx27.o iomux-v1.o clk-imx27.o -obj-$(CONFIG_ARCH_IMX31) += imx31.o iomux-v2.o clk-imx31.o -obj-$(CONFIG_ARCH_IMX35) += imx35.o iomux-v3.o clk-imx35.o -obj-$(CONFIG_ARCH_IMX51) += imx51.o iomux-v3.o imx5.o clk-imx5.o -obj-$(CONFIG_ARCH_IMX53) += imx53.o iomux-v3.o imx5.o clk-imx5.o esdctl-v4.o +obj-$(CONFIG_ARCH_IMX1) += imx1.o clk-imx1.o +obj-$(CONFIG_ARCH_IMX25) += imx25.o clk-imx25.o +obj-$(CONFIG_ARCH_IMX21) += imx21.o clk-imx21.o +obj-$(CONFIG_ARCH_IMX27) += imx27.o clk-imx27.o +obj-$(CONFIG_ARCH_IMX31) += imx31.o clk-imx31.o +obj-$(CONFIG_ARCH_IMX35) += imx35.o clk-imx35.o +obj-$(CONFIG_ARCH_IMX51) += imx51.o imx5.o clk-imx5.o +obj-$(CONFIG_ARCH_IMX53) += imx53.o imx5.o clk-imx5.o esdctl-v4.o pbl-$(CONFIG_ARCH_IMX53) += imx53.o imx5.o esdctl-v4.o -obj-$(CONFIG_ARCH_IMX6) += imx6.o iomux-v3.o usb-imx6.o clk-imx6.o +obj-$(CONFIG_ARCH_IMX6) += imx6.o usb-imx6.o clk-imx6.o lwl-$(CONFIG_ARCH_IMX6) += imx6-mmdc.o obj-$(CONFIG_IMX_IIM) += iim.o obj-$(CONFIG_NAND_IMX) += nand.o diff --git a/arch/arm/mach-imx/iomux-v1.c b/arch/arm/mach-imx/iomux-v1.c deleted file mode 100644 index f8f90615c6..0000000000 --- a/arch/arm/mach-imx/iomux-v1.c +++ /dev/null @@ -1,116 +0,0 @@ -#include <common.h> -#include <io.h> -#include <mach/iomux-v1.h> - -/* - * GPIO Module and I/O Multiplexer - * x = 0..3 for reg_A, reg_B, reg_C, reg_D - * - * i.MX1 and i.MXL: 0 <= x <= 3 - * i.MX27 : 0 <= x <= 5 - */ -#define DDIR 0x00 -#define OCR1 0x04 -#define OCR2 0x08 -#define ICONFA1 0x0c -#define ICONFA2 0x10 -#define ICONFB1 0x14 -#define ICONFB2 0x18 -#define DR 0x1c -#define GIUS 0x20 -#define SSR 0x24 -#define ICR1 0x28 -#define ICR2 0x2c -#define IMR 0x30 -#define ISR 0x34 -#define GPR 0x38 -#define SWR 0x3c -#define PUEN 0x40 - -static void __iomem *iomuxv1_base; - -void imx_gpio_mode(int gpio_mode) -{ - unsigned int pin = gpio_mode & GPIO_PIN_MASK; - unsigned int port = (gpio_mode & GPIO_PORT_MASK) >> GPIO_PORT_SHIFT; - unsigned int ocr = (gpio_mode & GPIO_OCR_MASK) >> GPIO_OCR_SHIFT; - unsigned int aout = (gpio_mode & GPIO_AOUT_MASK) >> GPIO_AOUT_SHIFT; - unsigned int bout = (gpio_mode & GPIO_BOUT_MASK) >> GPIO_BOUT_SHIFT; - void __iomem *portbase = iomuxv1_base + port * 0x100; - uint32_t val; - - if (!iomuxv1_base) - return; - - /* Pullup enable */ - val = readl(portbase + PUEN); - if (gpio_mode & GPIO_PUEN) - val |= (1 << pin); - else - val &= ~(1 << pin); - writel(val, portbase + PUEN); - - /* Data direction */ - val = readl(portbase + DDIR); - if (gpio_mode & GPIO_OUT) - val |= 1 << pin; - else - val &= ~(1 << pin); - writel(val, portbase + DDIR); - - /* Primary / alternate function */ - val = readl(portbase + GPR); - if (gpio_mode & GPIO_AF) - val |= (1 << pin); - else - val &= ~(1 << pin); - writel(val, portbase + GPR); - - /* use as gpio? */ - val = readl(portbase + GIUS); - if (!(gpio_mode & (GPIO_PF | GPIO_AF))) - val |= (1 << pin); - else - val &= ~(1 << pin); - writel(val, portbase + GIUS); - - /* Output / input configuration */ - if (pin < 16) { - val = readl(portbase + OCR1); - val &= ~(3 << (pin * 2)); - val |= (ocr << (pin * 2)); - writel(val, portbase + OCR1); - - val = readl(portbase + ICONFA1); - val &= ~(3 << (pin * 2)); - val |= aout << (pin * 2); - writel(val, portbase + ICONFA1); - - val = readl(portbase + ICONFB1); - val &= ~(3 << (pin * 2)); - val |= bout << (pin * 2); - writel(val, portbase + ICONFB1); - } else { - pin -= 16; - - val = readl(portbase + OCR2); - val &= ~(3 << (pin * 2)); - val |= (ocr << (pin * 2)); - writel(val, portbase + OCR2); - - val = readl(portbase + ICONFA2); - val &= ~(3 << (pin * 2)); - val |= aout << (pin * 2); - writel(val, portbase + ICONFA2); - - val = readl(portbase + ICONFB2); - val &= ~(3 << (pin * 2)); - val |= bout << (pin * 2); - writel(val, portbase + ICONFB2); - } -} - -void imx_iomuxv1_init(void __iomem *base) -{ - iomuxv1_base = base; -} diff --git a/arch/arm/mach-imx/iomux-v2.c b/arch/arm/mach-imx/iomux-v2.c deleted file mode 100644 index cef0340909..0000000000 --- a/arch/arm/mach-imx/iomux-v2.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * (C) 2007, Sascha Hauer <sha@pengutronix.de> - * - * 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 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 - * GNU General Public License for more details. - * - * - */ - -#include <common.h> -#include <io.h> -#include <init.h> -#include <mach/iomux-mx31.h> - -/* - * IOMUX register (base) addresses - */ -#define IOMUXINT_OBS1 0x000 -#define IOMUXINT_OBS2 0x004 -#define IOMUXGPR 0x008 -#define IOMUXSW_MUX_CTL 0x00C -#define IOMUXSW_PAD_CTL 0x154 - -#define IOMUX_REG_MASK (IOMUX_PADNUM_MASK & ~0x3) - -static void __iomem *base; - -/* - * set the mode for a IOMUX pin. - */ -int imx_iomux_mode(unsigned int pin_mode) -{ - u32 field, l, mode, ret = 0; - void __iomem *reg; - - if (!base) - return -EINVAL; - - reg = base + IOMUXSW_MUX_CTL + (pin_mode & IOMUX_REG_MASK); - field = pin_mode & 0x3; - mode = (pin_mode & IOMUX_MODE_MASK) >> IOMUX_MODE_SHIFT; - - pr_debug("%s: reg offset = 0x%x field = %d mode = 0x%02x\n", - __func__, (pin_mode & IOMUX_REG_MASK), field, mode); - - l = readl(reg); - l &= ~(0xff << (field * 8)); - l |= mode << (field * 8); - writel(l, reg); - - return ret; -} -EXPORT_SYMBOL(mxc_iomux_mode); - -/* - * This function configures the pad value for a IOMUX pin. - */ -void imx_iomux_set_pad(enum iomux_pins pin, u32 config) -{ - u32 field, l; - void __iomem *reg; - - if (!base) - return; - - pin &= IOMUX_PADNUM_MASK; - reg = base + IOMUXSW_PAD_CTL + (pin + 2) / 3 * 4; - field = (pin + 2) % 3; - - pr_debug("%s: reg offset = 0x%x, field = %d\n", - __func__, (pin + 2) / 3, field); - - l = readl(reg); - l &= ~(0x1ff << (field * 10)); - l |= config << (field * 10); - writel(l, reg); -} -EXPORT_SYMBOL(mxc_iomux_set_pad); - -/* - * This function enables/disables the general purpose function for a particular - * signal. - */ -void imx_iomux_set_gpr(enum iomux_gp_func gp, bool en) -{ - u32 l; - - if (!base) - return; - - l = readl(base + IOMUXGPR); - if (en) - l |= gp; - else - l &= ~gp; - - writel(l, base + IOMUXGPR); -} -EXPORT_SYMBOL(mxc_iomux_set_gpr); - -int imx_iomux_setup_multiple_pins(const unsigned int *pin_list, unsigned count) -{ - int i; - - for (i = 0; i < count; i++) - imx_iomux_mode(pin_list[i]); - - return 0; -} - -static int imx_iomux_probe(struct device_d *dev) -{ - base = dev_request_mem_region(dev, 0); - - return 0; -} - -static __maybe_unused struct of_device_id imx_iomux_dt_ids[] = { - { - .compatible = "fsl,imx31-iomux", - }, { - /* sentinel */ - } -}; - -static struct platform_device_id imx_iomux_ids[] = { - { - .name = "imx31-iomux", - }, { - /* sentinel */ - }, -}; - -static struct driver_d imx_iomux_driver = { - .name = "imx-iomuxv2", - .probe = imx_iomux_probe, - .of_compatible = DRV_OF_COMPAT(imx_iomux_dt_ids), - .id_table = imx_iomux_ids, -}; - -static int imx_iomux_init(void) -{ - return platform_driver_register(&imx_iomux_driver); -} -postcore_initcall(imx_iomux_init); diff --git a/arch/arm/mach-imx/iomux-v3.c b/arch/arm/mach-imx/iomux-v3.c deleted file mode 100644 index 8a6064da6c..0000000000 --- a/arch/arm/mach-imx/iomux-v3.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2004-2006 Freescale Semiconductor, Inc. All Rights Reserved. - * Copyright (C) 2008 by Sascha Hauer <kernel@pengutronix.de> - * Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH, - * <armlinux@phytec.de> - * - * 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 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 - * GNU General Public License for more details. - * - */ -#include <common.h> -#include <init.h> -#include <io.h> -#include <mach/iomux-v3.h> - -static void __iomem *base; - -/* - * configures a single pad in the iomuxer - */ -int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad) -{ - u32 mux_ctrl_ofs = (pad & MUX_CTRL_OFS_MASK) >> MUX_CTRL_OFS_SHIFT; - u32 mux_mode = (pad & MUX_MODE_MASK) >> MUX_MODE_SHIFT; - u32 sel_input_ofs = (pad & MUX_SEL_INPUT_OFS_MASK) >> MUX_SEL_INPUT_OFS_SHIFT; - u32 sel_input = (pad & MUX_SEL_INPUT_MASK) >> MUX_SEL_INPUT_SHIFT; - u32 pad_ctrl_ofs = (pad & MUX_PAD_CTRL_OFS_MASK) >> MUX_PAD_CTRL_OFS_SHIFT; - u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT; - - if (!base) - return -EINVAL; - - debug("%s: mux 0x%08x -> 0x%04x pad: 0x%08x -> 0x%04x sel_inp: 0x%08x -> 0x%04x\n", - __func__, mux_mode, mux_ctrl_ofs, pad_ctrl, pad_ctrl_ofs, sel_input, - sel_input_ofs); - - if (mux_ctrl_ofs) - __raw_writel(mux_mode, base + mux_ctrl_ofs); - - if (sel_input_ofs) - __raw_writel(sel_input, base + sel_input_ofs); - - if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs) - __raw_writel(pad_ctrl, base + pad_ctrl_ofs); - - return 0; -} -EXPORT_SYMBOL(mxc_iomux_v3_setup_pad); - - -int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count) -{ - iomux_v3_cfg_t *p = pad_list; - int i; - int ret; - - for (i = 0; i < count; i++) { - ret = mxc_iomux_v3_setup_pad(*p); - if (ret) - return ret; - p++; - } - return 0; -} -EXPORT_SYMBOL(mxc_iomux_v3_setup_multiple_pads); - -static int imx_iomux_probe(struct device_d *dev) -{ - base = dev_request_mem_region(dev, 0); - - return 0; -} - -static __maybe_unused struct of_device_id imx_iomux_dt_ids[] = { - { - .compatible = "fsl,imx35-iomux", - }, { - /* sentinel */ - } -}; - -static struct platform_device_id imx_iomux_ids[] = { - { - .name = "imx35-iomux", - }, { - /* sentinel */ - }, -}; - -static struct driver_d imx_iomux_driver = { - .name = "imx-iomuxv3", - .probe = imx_iomux_probe, - .of_compatible = DRV_OF_COMPAT(imx_iomux_dt_ids), - .id_table = imx_iomux_ids, -}; - -static int imx_iomux_init(void) -{ - return platform_driver_register(&imx_iomux_driver); -} -postcore_initcall(imx_iomux_init); |