mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 17:51:43 +00:00
98da352953
This adds a driver for the U300 pinmux portions of the system controller "SYSCON". It also serves as an example of how to use the pinmux subsystem. This driver also houses the platform data for the only supported platform. This deletes the old U300 driver in arch/arm/mach-u300 and replace it with a driver using the new subsystem. The new driver is considerably fatter than the old one, but it also registers all 467 pins of the system and adds the power and EMIF pin groups and corresponding functions. The idea is to use this driver as a a reference for other implementation so it needs to be as complete and verbose as possible. Reviewed-by: Barry Song <21cnbao@gmail.com> [Fixup for changed function names and semantics in the v10 patch] Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
53 lines
1.3 KiB
C
53 lines
1.3 KiB
C
/*
|
|
*
|
|
* arch/arm/mach-u300/mmc.c
|
|
*
|
|
*
|
|
* Copyright (C) 2009 ST-Ericsson SA
|
|
* License terms: GNU General Public License (GPL) version 2
|
|
*
|
|
* Author: Linus Walleij <linus.walleij@stericsson.com>
|
|
* Author: Johan Lundin
|
|
* Author: Jonas Aaberg <jonas.aberg@stericsson.com>
|
|
*/
|
|
#include <linux/device.h>
|
|
#include <linux/amba/bus.h>
|
|
#include <linux/mmc/host.h>
|
|
#include <linux/gpio.h>
|
|
#include <linux/dmaengine.h>
|
|
#include <linux/amba/mmci.h>
|
|
#include <linux/slab.h>
|
|
#include <mach/coh901318.h>
|
|
#include <mach/dma_channels.h>
|
|
|
|
#include "mmc.h"
|
|
|
|
static struct mmci_platform_data mmc0_plat_data = {
|
|
/*
|
|
* Do not set ocr_mask or voltage translation function,
|
|
* we have a regulator we can control instead.
|
|
*/
|
|
/* Nominally 2.85V on our platform */
|
|
.f_max = 24000000,
|
|
.gpio_wp = -1,
|
|
.gpio_cd = U300_GPIO_PIN_MMC_CD,
|
|
.cd_invert = true,
|
|
.capabilities = MMC_CAP_MMC_HIGHSPEED |
|
|
MMC_CAP_SD_HIGHSPEED | MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
|
#ifdef CONFIG_COH901318
|
|
.dma_filter = coh901318_filter_id,
|
|
.dma_rx_param = (void *) U300_DMA_MMCSD_RX_TX,
|
|
/* Don't specify a TX channel, this RX channel is bidirectional */
|
|
#endif
|
|
};
|
|
|
|
int __devinit mmc_init(struct amba_device *adev)
|
|
{
|
|
struct device *mmcsd_device = &adev->dev;
|
|
int ret = 0;
|
|
|
|
mmcsd_device->platform_data = &mmc0_plat_data;
|
|
|
|
return ret;
|
|
}
|