/* * * arch/arm/mach-u300/padmux.c * * * Copyright (C) 2009 ST-Ericsson AB * License terms: GNU General Public License (GPL) version 2 * U300 PADMUX functions * Author: Linus Walleij <linus.walleij@stericsson.com> * */ #include <linux/io.h> #include <linux/err.h> #include <mach/u300-regs.h> #include <mach/syscon.h> #include "padmux.h" /* Set the PAD MUX to route the MMC reader correctly to GPIO0. */ void pmx_set_mission_mode_mmc(void) { u16 val; val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMC1LR); val &= ~U300_SYSCON_PMC1LR_MMCSD_MASK; writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMC1LR); val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMC1HR); val &= ~U300_SYSCON_PMC1HR_APP_GPIO_1_MASK; val |= U300_SYSCON_PMC1HR_APP_GPIO_1_MMC; writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMC1HR); } void pmx_set_mission_mode_spi(void) { u16 val; /* Set up padmuxing so the SPI port and its chipselects are active */ val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMC1HR); /* * Activate the SPI port (disable the use of these pins for generic * GPIO, DSP, AAIF */ val &= ~U300_SYSCON_PMC1HR_APP_SPI_2_MASK; val |= U300_SYSCON_PMC1HR_APP_SPI_2_SPI; /* * Use GPIO pin SPI CS1 for CS1 actually (it can be used for other * things also) */ val &= ~U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK; val |= U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI; /* * Use GPIO pin SPI CS2 for CS2 actually (it can be used for other * things also) */ val &= ~U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK; val |= U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI; writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMC1HR); }