linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: u.kleine-koenig@pengutronix.de (Uwe Kleine-König)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 06/11] ARM: imx: Add IOMUX support for i.MX28
Date: Mon, 15 Nov 2010 17:46:31 +0100	[thread overview]
Message-ID: <20101115164631.GN8942@pengutronix.de> (raw)
In-Reply-To: <1289831795-4373-7-git-send-email-shawn.guo@freescale.com>

On Mon, Nov 15, 2010 at 10:36:30PM +0800, Shawn Guo wrote:
> Soc i.MX28 supports IOMUX function in block PINCTRL. Comparing
> to the naming of iomux-v1 and iomux-v3, it uses iomux-pinctrl,
> since PINCTRL is a totally different IP block from IOMUX and it's
> not reasonable to name it iomux-v2 or iomux-v4, which is used to
iomux v2 is already taken (by mx31) it just doesn't have this name (yet)
in the code.

> distinguish the different revision of same IP block.
Sounds more like something complet
> 
> Signed-off-by: Shawn Guo <shawn.guo@freescale.com>
> ---
>  arch/arm/plat-mxc/include/mach/iomux-mx28.h    |   50 +++++++++++++
>  arch/arm/plat-mxc/include/mach/iomux-pinctrl.h |   91 +++++++++++++++++++++++
>  arch/arm/plat-mxc/iomux-pinctrl.c              |   94 ++++++++++++++++++++++++
>  3 files changed, 235 insertions(+), 0 deletions(-)
>  create mode 100644 arch/arm/plat-mxc/include/mach/iomux-mx28.h
>  create mode 100644 arch/arm/plat-mxc/include/mach/iomux-pinctrl.h
>  create mode 100644 arch/arm/plat-mxc/iomux-pinctrl.c
> 
> diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx28.h b/arch/arm/plat-mxc/include/mach/iomux-mx28.h
> new file mode 100644
> index 0000000..8c68bd6
> --- /dev/null
> +++ b/arch/arm/plat-mxc/include/mach/iomux-mx28.h
> @@ -0,0 +1,50 @@
> +/*
> + * Copyright (C) 2009-2010 Freescale Semiconductor, Inc. All Rights Reserved.
> + *
> + * 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.
> + *
> + * You should have received a copy of the GNU General Public License along
> + * with this program; if not, write to the Free Software Foundation, Inc.,
> + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> + */
> +
> +#ifndef __MACH_IOMUX_MX28_H__
> +#define __MACH_IOMUX_MX28_H__
> +
> +#include <mach/iomux-pinctrl.h>
> +
> +/*
> + * The naming convention for the pad modes is MX28_PAD_<padname>__<padmode>
> + * If <padname> or <padmode> refers to a GPIO, it is named GPIO_<unit>_<num>
> + * See also iomux-pinctrl.h
> + *
> + *					 		BANK PIN     MUX            VOL          MA            PULL
> + */
> +/* DUART */
> +#define MX28_PAD_PWM0__DUART_RX			IOMUX_PAD(3, 16, PAD_MUXSEL_2,    PAD_3V3,     PAD_4MA,      PAD_NOPULL)
> +#define MX28_PAD_PWM1__DUART_TX			IOMUX_PAD(3, 17, PAD_MUXSEL_2,    PAD_3V3,     PAD_4MA,      PAD_NOPULL)
> +
> +/* FEC */
> +#define MX28_PAD_ENET0_MDC__ENET0_MDC		IOMUX_PAD(4, 0,  PAD_MUXSEL_0,    PAD_3V3,     PAD_8MA,      PAD_PULL)
> +#define MX28_PAD_ENET0_MDIO__ENET0_MDIO		IOMUX_PAD(4, 1,  PAD_MUXSEL_0,    PAD_3V3,     PAD_8MA,      PAD_PULL)
> +#define MX28_PAD_ENET0_RX_EN__ENET0_RX_EN	IOMUX_PAD(4, 2,  PAD_MUXSEL_0,    PAD_3V3,     PAD_8MA,      PAD_PULL)
> +#define MX28_PAD_ENET0_RXD0__ENET0_RXD0		IOMUX_PAD(4, 3,  PAD_MUXSEL_0,    PAD_3V3,     PAD_8MA,      PAD_PULL)
> +#define MX28_PAD_ENET0_RXD1__ENET0_RXD1		IOMUX_PAD(4, 4,  PAD_MUXSEL_0,    PAD_3V3,     PAD_8MA,      PAD_PULL)
> +#define MX28_PAD_ENET0_TX_EN__ENET0_TX_EN	IOMUX_PAD(4, 6,  PAD_MUXSEL_0,    PAD_3V3,     PAD_8MA,      PAD_PULL)
> +#define MX28_PAD_ENET0_TXD0__ENET0_TXD0		IOMUX_PAD(4, 7,  PAD_MUXSEL_0,    PAD_3V3,     PAD_8MA,      PAD_PULL)
> +#define MX28_PAD_ENET0_TXD1__ENET0_TXD1		IOMUX_PAD(4, 8,  PAD_MUXSEL_0,    PAD_3V3,     PAD_8MA,      PAD_PULL)
> +#define MX28_PAD_ENET_CLK__ENET_CLK		IOMUX_PAD(4, 16, PAD_MUXSEL_0,    PAD_3V3,     PAD_8MA,      PAD_PULL)
> +
> +/* GPIO */
> +#define MX28_PAD_SSP1_DATA3__GPIO_2_15		IOMUX_PAD(2, 15, PAD_MUXSEL_GPIO, PAD_3V3,     PAD_4MA,      PAD_NOPULL)
> +#define MX28_PAD_ENET0_RX_CLK__GPIO_4_13	IOMUX_PAD(4, 13, PAD_MUXSEL_GPIO, PAD_3V3,     PAD_4MA,      PAD_NOPULL)
> +
> +#endif /* __MACH_IOMUX_MX28_H__ */
> diff --git a/arch/arm/plat-mxc/include/mach/iomux-pinctrl.h b/arch/arm/plat-mxc/include/mach/iomux-pinctrl.h
> new file mode 100644
> index 0000000..c2fdb33
> --- /dev/null
> +++ b/arch/arm/plat-mxc/include/mach/iomux-pinctrl.h
> @@ -0,0 +1,91 @@
> +/*
> + * Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH,
> + *			<armlinux@phytec.de>
> + * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
> + *
> + * 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.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> + * MA 02110-1301, USA.
> + */
> +
> +#ifndef __MACH_IOMUX_PINCTRL_H__
> +#define __MACH_IOMUX_PINCTRL_H__
> +
> +typedef struct deprecated_pad_desc {
> +	unsigned bank:3;
> +	unsigned pin:5;
> +	unsigned muxsel:2;
> +	unsigned ma:3;
> +	unsigned vol:2;
> +	unsigned pull:1;
> +} iomux_pinctrl_cfg_t;
Oh, you start with things that are already now deprecated?

> +
> +#define IOMUX_PAD(_bank, _pin, _muxsel, _vol, _ma, _pull)	\
> +		{						\
> +			.bank	= _bank,			\
> +			.pin	= _pin,				\
> +			.muxsel	= _muxsel,			\
> +			.vol	= _vol,				\
> +			.ma	= _ma,				\
> +			.pull	= _pull,			\
> +		}
> +
> +#define PAD_MUXSEL_0		0
> +#define PAD_MUXSEL_1		1
> +#define PAD_MUXSEL_2		2
> +#define PAD_MUXSEL_GPIO		3
> +
> +#define PAD_1V8			0
> +#define PAD_3V3			1
> +#define PAD_VOL_NONE		2
> +
> +#define PAD_4MA			0
> +#define PAD_8MA			1
> +#define PAD_12MA		2
> +#define PAD_16MA		3
> +#define PAD_MA_NONE		4
> +
> +#define PAD_NOPULL		0
> +#define PAD_PULL		1
> +
> +#define MX51_NUM_GPIO_PORT	4
> +
> +#define GPIO_PIN_MASK 0x1f
> +
> +#define GPIO_PORT_SHIFT 5
> +#define GPIO_PORT_MASK (0x7 << GPIO_PORT_SHIFT)
> +
> +#define GPIO_PORTA	(0 << GPIO_PORT_SHIFT)
> +#define GPIO_PORTB	(1 << GPIO_PORT_SHIFT)
> +#define GPIO_PORTC	(2 << GPIO_PORT_SHIFT)
> +#define GPIO_PORTD	(3 << GPIO_PORT_SHIFT)
> +#define GPIO_PORTE	(4 << GPIO_PORT_SHIFT)
> +#define GPIO_PORTF	(5 << GPIO_PORT_SHIFT)
> +
> +/*
> + * setups a single pad in the iomuxer
> + */
> +int mxc_iomux_pinctrl_setup_pad(iomux_pinctrl_cfg_t *pad);
> +
> +/*
> + * setups mutliple pads
s/mutliple/multiple/

> + * convenient way to call the above function with tables
> + */
> +int mxc_iomux_pinctrl_setup_multiple_pads(iomux_pinctrl_cfg_t *pad_list, unsigned count);
> +
> +/*
> + * Initialise the iomux controller
> + */
> +void mxc_iomux_pinctrl_init(void __iomem *iomux_pinctrl_base);
> +
> +#endif /* __MACH_IOMUX_PINCTRL_H__*/
> diff --git a/arch/arm/plat-mxc/iomux-pinctrl.c b/arch/arm/plat-mxc/iomux-pinctrl.c
> new file mode 100644
> index 0000000..5f5b5ac
> --- /dev/null
> +++ b/arch/arm/plat-mxc/iomux-pinctrl.c
> @@ -0,0 +1,94 @@
> +/*
> + * Copyright 2004-2010 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.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> + * MA 02110-1301, USA.
> + */
> +#include <linux/errno.h>
> +#include <linux/init.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/string.h>
> +#include <linux/gpio.h>
> +#include <asm/mach/map.h>
> +#include <mach/hardware.h>
> +#include <mach/iomux-pinctrl.h>
> +
> +static void __iomem *base;
> +
> +/*
> + * configures a single pad in the iomuxer
> + */
> +int mxc_iomux_pinctrl_setup_pad(iomux_pinctrl_cfg_t *pad)
> +{
> +	u32 reg, ofs, bp, bm;
> +
> +	/* MUXSEL */
> +	ofs = pad->bank * 0x20 + pad->pin / 16 * 0x10;
> +	bp = pad->pin % 16 * 2;
> +	bm = 0x3 << bp;
> +	reg = __raw_readl(base + ofs);
> +	reg &= ~bm;
> +	reg |= pad->muxsel << bp;
> +	__raw_writel(reg, base + ofs);
> +
> +	/* DRIVE */
> +	if (pad->ma != PAD_MA_NONE && pad->vol != PAD_VOL_NONE)
> +	{
> +		ofs = 0x300 + pad->bank * 0x40 + pad->pin / 8 * 0x10;
> +		bp = pad->pin % 8 * 4;
> +		bm = 0x7 << bp;
> +		reg = __raw_readl(base + ofs);
> +		reg &= ~bm;
> +		reg |= pad->ma << bp | pad->vol << (bp + 2);
> +		__raw_writel(reg, base + ofs);
> +	}
> +
> +	/* PULL */
> +	ofs = 0x600 + pad->bank * 0x10;
> +	bp = pad->pin;
> +	bm = 0x1 << bp;
> +	reg = __raw_readl(base + ofs);
> +	reg &= ~bm;
> +	reg |= pad->pull << bp;
> +	__raw_writel(reg, base + ofs);
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL(mxc_iomux_pinctrl_setup_pad);
> +
> +int mxc_iomux_pinctrl_setup_multiple_pads(iomux_pinctrl_cfg_t *pad_list, unsigned count)
> +{
> +	iomux_pinctrl_cfg_t *p = pad_list;
> +	int i;
> +	int ret;
> +
> +	for (i = 0; i < count; i++) {
> +		ret = mxc_iomux_pinctrl_setup_pad(p);
> +		if (ret)
> +			return ret;
> +		p++;
> +	}
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL(mxc_iomux_pinctrl_setup_multiple_pads);
> +
> +void mxc_iomux_pinctrl_init(void __iomem *iomux_pinctrl_base)
> +{
> +	base = iomux_pinctrl_base;
> +}
> -- 
> 1.7.1
> 
> 
> 

-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

  reply	other threads:[~2010-11-15 16:46 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-15 14:36 [RFC][PATCH 00/11] ARM: imx: Add initial i.MX28 support Shawn Guo
2010-11-15 14:36 ` [PATCH 01/11] ARM: imx: Add basic definitions for i.MX28 Shawn Guo
2010-11-15 16:25   ` Uwe Kleine-König
2010-11-15 14:36 ` [PATCH 02/11] ARM: imx: Add support of interrupt controller ICOLL Shawn Guo
2010-11-15 16:33   ` Uwe Kleine-König
2010-11-15 14:36 ` [PATCH 03/11] ARM: imx: Add reset routine for i.MX28 Shawn Guo
2010-11-15 16:36   ` Uwe Kleine-König
2010-11-17 11:17     ` Shawn Guo
2010-11-17 13:44       ` Uwe Kleine-König
2010-11-15 14:36 ` [PATCH 04/11] ARM: imx: Add timer support " Shawn Guo
2010-11-15 16:40   ` Uwe Kleine-König
2010-11-15 14:36 ` [PATCH 05/11] ARM: imx: Add GPIO " Shawn Guo
2010-11-15 16:43   ` Uwe Kleine-König
2010-11-15 14:36 ` [PATCH 06/11] ARM: imx: Add IOMUX " Shawn Guo
2010-11-15 16:46   ` Uwe Kleine-König [this message]
2010-11-15 14:36 ` [PATCH 07/11] ARM: imx: Add support of uncompress print " Shawn Guo
2010-11-15 16:47   ` Uwe Kleine-König
2010-11-15 14:36 ` [PATCH 08/11] ARM: imx: Add clock support " Shawn Guo
2010-11-15 14:36 ` [PATCH 09/11] ARM: imx: Add memory map " Shawn Guo
2010-11-15 14:36 ` [PATCH 10/11] ARM: imx: Add initial support of machine mx28evk Shawn Guo
2010-11-15 16:54   ` Uwe Kleine-König
2010-11-15 14:36 ` [PATCH 11/11] ARM: imx: Add i.MX28 support into Kconfig and Makefile Shawn Guo
2010-11-15 17:01   ` Uwe Kleine-König
2010-11-16 10:15 ` [RFC][PATCH 00/11] ARM: imx: Add initial i.MX28 support Sascha Hauer
2010-11-16 12:42   ` Shawn Guo
2010-11-16 17:24     ` Uwe Kleine-König
2010-11-17  1:28       ` Shawn Guo
2010-11-17  6:06         ` Uwe Kleine-König

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101115164631.GN8942@pengutronix.de \
    --to=u.kleine-koenig@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).