2007-07-10 20:10:04 +08:00
|
|
|
/*
|
|
|
|
* DaVinci pin multiplexing configurations
|
|
|
|
*
|
|
|
|
* Author: Vladimir Barinov, MontaVista Software, Inc. <source@mvista.com>
|
|
|
|
*
|
|
|
|
* 2007 (c) MontaVista Software, Inc. This file is licensed under
|
|
|
|
* the terms of the GNU General Public License version 2. This program
|
|
|
|
* is licensed "as is" without any warranty of any kind, whether express
|
|
|
|
* or implied.
|
|
|
|
*/
|
|
|
|
#include <linux/io.h>
|
|
|
|
#include <linux/spinlock.h>
|
|
|
|
|
2008-08-05 23:14:15 +08:00
|
|
|
#include <mach/hardware.h>
|
2007-07-10 20:10:04 +08:00
|
|
|
|
2008-08-05 23:14:15 +08:00
|
|
|
#include <mach/mux.h>
|
2007-07-10 20:10:04 +08:00
|
|
|
|
|
|
|
/* System control register offsets */
|
|
|
|
#define PINMUX0 0x00
|
|
|
|
#define PINMUX1 0x04
|
|
|
|
|
|
|
|
static DEFINE_SPINLOCK(mux_lock);
|
|
|
|
|
|
|
|
void davinci_mux_peripheral(unsigned int mux, unsigned int enable)
|
|
|
|
{
|
|
|
|
u32 pinmux, muxreg = PINMUX0;
|
|
|
|
|
|
|
|
if (mux >= DAVINCI_MUX_LEVEL2) {
|
|
|
|
muxreg = PINMUX1;
|
|
|
|
mux -= DAVINCI_MUX_LEVEL2;
|
|
|
|
}
|
|
|
|
|
|
|
|
spin_lock(&mux_lock);
|
|
|
|
pinmux = davinci_readl(DAVINCI_SYSTEM_MODULE_BASE + muxreg);
|
|
|
|
if (enable)
|
|
|
|
pinmux |= (1 << mux);
|
|
|
|
else
|
|
|
|
pinmux &= ~(1 << mux);
|
|
|
|
davinci_writel(pinmux, DAVINCI_SYSTEM_MODULE_BASE + muxreg);
|
|
|
|
spin_unlock(&mux_lock);
|
|
|
|
}
|