Re: [PATCH] ARM: OMAP2: Add pinmux support for OMAP3430 (refreshed)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



And here's some clean-up on top of the previous three patches.
Not using ctrl_read/write yet.

Tony
>From 65e13b9132ecee387771ff838f9da5678bcfc5f2 Mon Sep 17 00:00:00 2001
From: Tony Lindgren <tony@xxxxxxxxxxx>
Date: Wed, 23 Jan 2008 13:52:18 -0800
Subject: [PATCH] ARM: OMAP: Clean-up GPIO code

Misc clean-up for the GPIO code:

- Combine 24xx and 34xx debug function
- Remove some unnecessary ifdefs

Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>

diff --git a/arch/arm/mach-omap1/mux.c b/arch/arm/mach-omap1/mux.c
index cf3bdc0..ef8e88e 100644
--- a/arch/arm/mach-omap1/mux.c
+++ b/arch/arm/mach-omap1/mux.c
@@ -3,9 +3,9 @@
  *
  * OMAP1 pin multiplexing configurations
  *
- * Copyright (C) 2003 - 2005 Nokia Corporation
+ * Copyright (C) 2003 - 2008 Nokia Corporation
  *
- * Written by Tony Lindgren <tony.lindgren@xxxxxxxxx>
+ * Written by Tony Lindgren
  *
  * 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
@@ -35,7 +35,7 @@
 static struct omap_mux_cfg arch_mux_cfg;
 
 #ifdef CONFIG_ARCH_OMAP730
-struct pin_config __initdata_or_module omap730_pins[] = {
+static struct pin_config __initdata_or_module omap730_pins[] = {
 MUX_CFG_730("E2_730_KBR0",        12,   21,    0,   20,   1, 0)
 MUX_CFG_730("J7_730_KBR1",        12,   25,    0,   24,   1, 0)
 MUX_CFG_730("E1_730_KBR2",        12,   29,    0,   28,   1, 0)
@@ -51,10 +51,13 @@ MUX_CFG_730("AA17_730_USB_DM",     2,   21,    0,   20,   0, 0)
 MUX_CFG_730("W16_730_USB_PU_EN",   2,   25,    0,   24,   0, 0)
 MUX_CFG_730("W17_730_USB_VBUSI",   2,   29,    0,   28,   0, 0)
 };
-#endif
+#define OMAP730_PINS_SZ		ARRAY_SIZE(omap730_pins)
+#else
+#define OMAP730_PINS_SZ		0
+#endif	/* CONFIG_ARCH_OMAP730 */
 
 #if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX)
-struct pin_config __initdata_or_module omap1xxx_pins[] = {
+static struct pin_config __initdata_or_module omap1xxx_pins[] = {
 /*
  *	 description		mux  mode   mux	 pull pull  pull  pu_pd	 pu  dbg
  *				reg  offset mode reg  bit   ena	  reg
@@ -308,8 +311,10 @@ MUX_CFG("Y12_1610_CCP_CLKP",	 8,   18,    6,   1,  24,   1,    1,     0,  0)
 MUX_CFG("W13_1610_CCP_CLKM",	 9,    0,    6,   1,  28,   1,    1,     0,  0)
 MUX_CFG("W14_1610_CCP_DATAP",	 9,   24,    6,   2,   4,   1,    2,     0,  0)
 MUX_CFG("Y14_1610_CCP_DATAM",	 9,   21,    6,   2,   3,   1,    2,     0,  0)
-
 };
+#define OMAP1XXX_PINS_SZ		ARRAY_SIZE(omap1xxx_pins)
+#else
+#define OMAP1XXX_PINS_SZ		0
 #endif	/* CONFIG_ARCH_OMAP15XX || CONFIG_ARCH_OMAP16XX */
 
 int __init_or_module omap1_cfg_reg(const struct pin_config *cfg)
@@ -422,22 +427,17 @@ int __init_or_module omap1_cfg_reg(const struct pin_config *cfg)
 
 int __init omap1_mux_init(void)
 {
-
-#ifdef CONFIG_ARCH_OMAP730
 	if (cpu_is_omap730()) {
 		arch_mux_cfg.pins	= omap730_pins;
-		arch_mux_cfg.size	= ARRAY_SIZE(omap730_pins);
+		arch_mux_cfg.size	= OMAP730_PINS_SZ;
 		arch_mux_cfg.cfg_reg	= omap1_cfg_reg;
 	}
-#endif
 
-#if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX)
 	if (cpu_is_omap15xx() || cpu_is_omap16xx()) {
 		arch_mux_cfg.pins	= omap1xxx_pins;
-		arch_mux_cfg.size	= ARRAY_SIZE(omap1xxx_pins);
+		arch_mux_cfg.size	= OMAP1XXX_PINS_SZ;
 		arch_mux_cfg.cfg_reg	= omap1_cfg_reg;
 	}
-#endif
 
 	return omap_mux_register(&arch_mux_cfg);
 }
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
index 64bcfb3..33f0435 100644
--- a/arch/arm/mach-omap2/mux.c
+++ b/arch/arm/mach-omap2/mux.c
@@ -3,10 +3,10 @@
  *
  * OMAP2 and OMAP3 pin multiplexing configurations
  *
- * Copyright (C) 2008 Texas Instruments Inc.
- * Copyright (C) 2003 - 2005 Nokia Corporation
+ * Copyright (C) 2004 - 2008 Texas Instruments Inc.
+ * Copyright (C) 2003 - 2008 Nokia Corporation
  *
- * Written by Tony Lindgren <tony.lindgren@xxxxxxxxx>
+ * Written by Tony Lindgren
  *
  * 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
@@ -31,7 +31,7 @@
 
 #include <asm/arch/mux.h>
 
-#include "../mach-omap2/control.h"
+#include "control.h"
 
 #ifdef CONFIG_OMAP_MUX
 
@@ -40,7 +40,7 @@ static struct omap_mux_cfg arch_mux_cfg;
 /* NOTE: See mux.h for the enumeration */
 
 #ifdef CONFIG_ARCH_OMAP24XX
-struct pin_config __initdata_or_module omap24xx_pins[] = {
+static struct pin_config __initdata_or_module omap24xx_pins[] = {
 /*
  *	description			mux	mux	pull	pull	debug
  *					offset	mode	ena	type
@@ -212,10 +212,16 @@ MUX_CFG_24XX("AD16_2430_MCBSP2_CLX_OFF",0x012F,	0,	0,	0,	1)
 MUX_CFG_24XX("AE13_2430_MCBSP2_DX_OFF",	0x0130,	0,	0,	0,	1)
 MUX_CFG_24XX("AD13_2430_MCBSP2_DR_OFF",	0x0131,	0,	0,	0,	1)
 };
-#endif
+
+#define OMAP24XX_PINS_SZ	ARRAY_SIZE(omap24xx_pins)
+
+#else
+#define omap24xx_pins		NULL
+#define OMAP24XX_PINS_SZ	0
+#endif	/* CONFIG_ARCH_OMAP24XX */
 
 #ifdef CONFIG_ARCH_OMAP34XX
-struct pin_config __initdata_or_module omap34xx_pins[] = {
+static struct pin_config __initdata_or_module omap34xx_pins[] = {
 /*
  *	description			mux	mux	pull	pull	inp
  *					offset	mode	ena	type	ena
@@ -276,7 +282,13 @@ MUX_CFG_34XX("R4_3430_USB2HS_PHY_D6",	0x1dc,	3,	0,	0,	1,
 MUX_CFG_34XX("T4_3430_USB2HS_PHY_D3",	0x1de,	3,	0,	0,	1,
 				0,	0,	0,	0,	0,	0)
 };
-#endif
+
+#define OMAP34XX_PINS_SZ	ARRAY_SIZE(omap34xx_pins)
+
+#else
+#define omap34xx_pins		NULL
+#define OMAP34XX_PINS_SZ	0
+#endif	/* CONFIG_ARCH_OMAP34XX */
 
 #define OMAP24XX_PULL_ENA	(1 << 3)
 #define OMAP24XX_PULL_UP	(1 << 4)
@@ -289,38 +301,53 @@ MUX_CFG_34XX("T4_3430_USB2HS_PHY_D3",	0x1de,	3,	0,	0,	1,
 #define OMAP3_OFF_PULL_UP	(1 << 13)
 #define OMAP3_WAKEUP_EN		(1 << 14)
 
-#ifdef CONFIG_ARCH_OMAP24XX
 
+#if defined(CONFIG_OMAP_MUX_DEBUG) || defined(CONFIG_OMAP_MUX_WARNINGS)
+void __init_or_module omap2_cfg_debug(const struct pin_config *cfg, u8 reg)
+{
+	u8 orig;
+	u8 warn = 0, debug = 0;
+
+	if (cpu_is_omap24xx())
+		orig = omap_readb(omap2_ctrl_base + cfg->mux_reg);
+	else
+		orig = omap_readw(omap2_ctrl_base + cfg->mux_reg);
+
+#ifdef	CONFIG_OMAP_MUX_DEBUG
+	debug = cfg->debug;
+#endif
+	warn = (orig != reg);
+	if (debug || warn)
+		printk(KERN_WARNING
+			"MUX: setup %s (0x%08lx): 0x%02x -> 0x%02x\n",
+			cfg->name, omap2_ctrl_base + cfg->mux_reg, orig, reg);
+}
+#else
+#define omap2_cfg_debug(x, y)	do {} while (0)
+#endif
+
+#ifdef CONFIG_ARCH_OMAP24XX
 /* REVISIT: Convert this code to use ctrl_{read,write}_reg */
 int __init_or_module omap24xx_cfg_reg(const struct pin_config *cfg)
 {
+	static DEFINE_SPINLOCK(mux_spin_lock);
+	unsigned long flags;
 	u8 reg = 0;
-	unsigned int mask, warn = 0;
 
+	spin_lock_irqsave(&mux_spin_lock, flags);
 	reg |= cfg->mask & 0x7;
 	if (cfg->pull_val)
 		reg |= OMAP24XX_PULL_ENA;
-	if(cfg->pu_pd_val)
+	if (cfg->pu_pd_val)
 		reg |= OMAP24XX_PULL_UP;
-#if defined(CONFIG_OMAP_MUX_DEBUG) || defined(CONFIG_OMAP_MUX_WARNINGS)
-	{
-		u8 orig = omap_readb(omap2_ctrl_base + cfg->mux_reg);
-		u8 debug = 0;
-
-#ifdef	CONFIG_OMAP_MUX_DEBUG
-		debug = cfg->debug;
-#endif
-		warn = (orig != reg);
-		if (debug || warn)
-			printk("MUX: setup %s (0x%08lx): 0x%02x -> 0x%02x\n",
-				cfg->name, omap2_ctrl_base + cfg->mux_reg,
-				orig, reg);
-	}
-#endif
-	omap_writeb(reg, omap2_ctrl_base + cfg->mux_reg);
+	omap2_cfg_debug(cfg, reg);
+       	omap_writeb(reg, omap2_ctrl_base + cfg->mux_reg);
+	spin_unlock_irqrestore(&mux_spin_lock, flags);
 
 	return 0;
 }
+#else
+#define omap24xx_cfg_reg	0
 #endif
 
 #ifdef CONFIG_ARCH_OMAP34XX
@@ -330,80 +357,50 @@ int __init_or_module omap34xx_cfg_reg(const struct pin_config *cfg)
 	static DEFINE_SPINLOCK(mux_spin_lock);
 	unsigned long flags;
 	u8 reg = 0;
-	unsigned int warn = 0;
 
 	spin_lock_irqsave(&mux_spin_lock, flags);
-
 	reg |= cfg->mask & 0x7;
-
 	if (cfg->pull_val)
 		reg |= OMAP24XX_PULL_ENA;
 	if(cfg->pu_pd_val)
 		reg |= OMAP24XX_PULL_UP;
-
 	if (cfg->input_en_val)
 		reg |= OMAP3_INPUT_EN;
-
 	if (cfg->offenable)
 		reg |= OMAP3_OFF_EN;
-
 	if (cfg->offoutenable)
 		reg |= OMAP3_OFFOUT_EN;
-
 	if (cfg->offoutvalue)
 		reg |= OMAP3_OFFOUT_VAL;
-
 	if (cfg->offpulludenable)
 		reg |= OMAP3_OFF_PULL_EN;
-
 	if (cfg->offpulltypeselect)
 		reg |= OMAP3_OFF_PULL_UP;
-
 	if (cfg->wakeupenable)
 		reg |= OMAP3_WAKEUP_EN;
-
-#if defined(CONFIG_OMAP_MUX_DEBUG) || defined(CONFIG_OMAP_MUX_WARNINGS)
-	{
-		u8 orig = omap_readw(omap2_ctrl_base + cfg->mux_reg);
-		u8 debug = 0;
-
-#ifdef CONFIG_OMAP_MUX_DEBUG
-		debug = cfg->debug;
-#endif
-		warn = (orig != reg);
-		if (debug || warn)
-			printk(KERN_WARNING
-				"MUX: setup %s (0x%08lx): 0x%02x -> 0x%02x\n",
-					cfg->name,
-					omap2_ctrl_base + cfg->mux_reg,
-					orig, reg);
-	}
-#endif
+	omap2_cfg_debug(cfg, reg);
 	omap_writew((u16) reg, omap2_ctrl_base + cfg->mux_reg);
 	spin_unlock_irqrestore(&mux_spin_lock, flags);
 
 	return 0;
 }
+#else
+#define omap34xx_cfg_reg	0
 #endif
 
 int __init omap2_mux_init(void)
 {
-
-#ifdef CONFIG_ARCH_OMAP24XX
 	if (cpu_is_omap24xx()) {
 		arch_mux_cfg.pins	= omap24xx_pins;
-		arch_mux_cfg.size	= ARRAY_SIZE(omap24xx_pins);
+		arch_mux_cfg.size	= OMAP24XX_PINS_SZ;
 		arch_mux_cfg.cfg_reg	= omap24xx_cfg_reg;
 	}
-#endif
 
-#ifdef CONFIG_ARCH_OMAP34XX
 	if (cpu_is_omap34xx()) {
 		arch_mux_cfg.pins	= omap34xx_pins;
-		arch_mux_cfg.size	= ARRAY_SIZE(omap34xx_pins);
+		arch_mux_cfg.size	= OMAP24XX_PINS_SZ;
 		arch_mux_cfg.cfg_reg	= omap34xx_cfg_reg;
 	}
-#endif
 
 	return omap_mux_register(&arch_mux_cfg);
 }
diff --git a/arch/arm/plat-omap/mux.c b/arch/arm/plat-omap/mux.c
index 4de18b9..6f3f459 100644
--- a/arch/arm/plat-omap/mux.c
+++ b/arch/arm/plat-omap/mux.c
@@ -3,9 +3,9 @@
  *
  * Utility to set the Omap MUX and PULL_DWN registers from a table in mux.h
  *
- * Copyright (C) 2003 - 2005 Nokia Corporation
+ * Copyright (C) 2003 - 2008 Nokia Corporation
  *
- * Written by Tony Lindgren <tony.lindgren@xxxxxxxxx>
+ * Written by Tony Lindgren
  *
  * 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
diff --git a/include/asm-arm/arch-omap/mux.h b/include/asm-arm/arch-omap/mux.h
index 95cabe9..daa051d 100644
--- a/include/asm-arm/arch-omap/mux.h
+++ b/include/asm-arm/arch-omap/mux.h
@@ -4,9 +4,10 @@
  * Table of the Omap register configurations for the FUNC_MUX and
  * PULL_DWN combinations.
  *
- * Copyright (C) 2003 - 2005 Nokia Corporation
+ * Copyright (C) 2004 - 2008 Texas Instruments Inc.
+ * Copyright (C) 2003 - 2008 Nokia Corporation
  *
- * Written by Tony Lindgren <tony.lindgren@xxxxxxxxx>
+ * Written by Tony Lindgren
  *
  * 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
@@ -27,14 +28,6 @@
  *	 - W8	     = ball
  *	 - 1610	     = 1510 or 1610, none if common for both 1510 and 1610
  *	 - MMC2_DAT0 = function
- *
- * Change log:
- *   Added entry for the I2C interface. (02Feb 2004)
- *   Copyright (C) 2004 Texas Instruments
- *
- *   Added entry for the keypad and uwire CS1. (09Mar 2004)
- *   Copyright (C) 2004 Texas Instruments
- *
  */
 
 #ifndef __ASM_ARCH_MUX_H

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux