diff options
| -rw-r--r-- | arch/arm/configs/tegra_defconfig | 29 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/Kconfig | 5 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/Makefile | 4 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-harmony-pcie.c | 24 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-harmony-pinmux.c | 28 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-harmony-power.c | 117 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-harmony.c | 95 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-harmony.h | 15 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-paz00-pinmux.c | 157 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-paz00.c | 128 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-paz00.h | 29 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-seaboard-pinmux.c | 11 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-seaboard.c | 68 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-seaboard.h | 3 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-trimslice-pinmux.c | 9 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-trimslice.c | 19 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-trimslice.h | 3 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/devices.c | 70 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/devices.h | 4 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/include/mach/iomap.h | 3 | 
20 files changed, 787 insertions, 34 deletions
diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig index 7a9267e5da5..8845f1c9925 100644 --- a/arch/arm/configs/tegra_defconfig +++ b/arch/arm/configs/tegra_defconfig @@ -21,6 +21,10 @@ CONFIG_MODULE_FORCE_UNLOAD=y  # CONFIG_IOSCHED_CFQ is not set  CONFIG_ARCH_TEGRA=y  CONFIG_MACH_HARMONY=y +CONFIG_MACH_KAEN=y +CONFIG_MACH_PAZ00=y +CONFIG_MACH_TRIMSLICE=y +CONFIG_MACH_WARIO=y  CONFIG_TEGRA_DEBUG_UARTD=y  CONFIG_ARM_ERRATA_742230=y  CONFIG_NO_HZ=y @@ -40,6 +44,10 @@ CONFIG_PACKET=y  CONFIG_UNIX=y  CONFIG_NET_KEY=y  CONFIG_INET=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y  CONFIG_INET_ESP=y  # CONFIG_INET_XFRM_MODE_TUNNEL is not set  # CONFIG_INET_XFRM_MODE_BEET is not set @@ -66,7 +74,7 @@ CONFIG_APDS9802ALS=y  CONFIG_ISL29003=y  CONFIG_NETDEVICES=y  CONFIG_DUMMY=y -# CONFIG_NETDEV_1000 is not set +CONFIG_R8169=y  # CONFIG_NETDEV_10000 is not set  # CONFIG_WLAN is not set  # CONFIG_INPUT is not set @@ -78,12 +86,23 @@ CONFIG_SERIAL_8250_CONSOLE=y  # CONFIG_LEGACY_PTYS is not set  # CONFIG_HW_RANDOM is not set  CONFIG_I2C=y -# CONFIG_HWMON is not set -# CONFIG_MFD_SUPPORT is not set +# CONFIG_I2C_COMPAT is not set +# CONFIG_I2C_HELPER_AUTO is not set +CONFIG_I2C_TEGRA=y +CONFIG_SENSORS_LM90=y +CONFIG_MFD_TPS6586X=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_TPS6586X=y  # CONFIG_USB_SUPPORT is not set  CONFIG_MMC=y  CONFIG_MMC_SDHCI=y  CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_TEGRA=y +CONFIG_STAGING=y +# CONFIG_STAGING_EXCLUDE_BUILD is not set +CONFIG_IIO=y +CONFIG_SENSORS_ISL29018=y +CONFIG_SENSORS_AK8975=y  CONFIG_EXT2_FS=y  CONFIG_EXT2_FS_XATTR=y  CONFIG_EXT2_FS_POSIX_ACL=y @@ -95,6 +114,10 @@ CONFIG_EXT3_FS_SECURITY=y  # CONFIG_DNOTIFY is not set  CONFIG_VFAT_FS=y  CONFIG_TMPFS=y +CONFIG_NFS_FS=y +CONFIG_ROOT_NFS=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_EFI_PARTITION=y  CONFIG_NLS_CODEPAGE_437=y  CONFIG_NLS_ISO8859_1=y  CONFIG_PRINTK_TIME=y diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index 622a9ec1ff0..3cdeffc97b4 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig @@ -36,6 +36,11 @@ config MACH_KAEN         help           Support for the Kaen version of Seaboard +config MACH_PAZ00 +       bool "Paz00 board" +       help +         Support for the Toshiba AC100/Dynabook AZ netbook +  config MACH_SEABOARD         bool "Seaboard board"         help diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile index 9f7a7e1e0c3..1afe05038c2 100644 --- a/arch/arm/mach-tegra/Makefile +++ b/arch/arm/mach-tegra/Makefile @@ -22,6 +22,10 @@ obj-$(CONFIG_USB_SUPPORT)		+= usb_phy.o  obj-${CONFIG_MACH_HARMONY}              += board-harmony.o  obj-${CONFIG_MACH_HARMONY}              += board-harmony-pinmux.o  obj-${CONFIG_MACH_HARMONY}              += board-harmony-pcie.o +obj-${CONFIG_MACH_HARMONY}              += board-harmony-power.o + +obj-${CONFIG_MACH_PAZ00}		+= board-paz00.o +obj-${CONFIG_MACH_PAZ00}		+= board-paz00-pinmux.o  obj-${CONFIG_MACH_SEABOARD}             += board-seaboard.o  obj-${CONFIG_MACH_SEABOARD}             += board-seaboard-pinmux.o diff --git a/arch/arm/mach-tegra/board-harmony-pcie.c b/arch/arm/mach-tegra/board-harmony-pcie.c index f7e7d4514b6..9c27b95b8d8 100644 --- a/arch/arm/mach-tegra/board-harmony-pcie.c +++ b/arch/arm/mach-tegra/board-harmony-pcie.c @@ -27,13 +27,29 @@  #ifdef CONFIG_TEGRA_PCI +/* GPIO 3 of the PMIC */ +#define EN_VDD_1V05_GPIO	(TEGRA_NR_GPIOS + 2) +  static int __init harmony_pcie_init(void)  { +	struct regulator *regulator = NULL;  	int err;  	if (!machine_is_harmony())  		return 0; +	err = gpio_request(EN_VDD_1V05_GPIO, "EN_VDD_1V05"); +	if (err) +		return err; + +	gpio_direction_output(EN_VDD_1V05_GPIO, 1); + +	regulator = regulator_get(NULL, "pex_clk"); +	if (IS_ERR_OR_NULL(regulator)) +		goto err_reg; + +	regulator_enable(regulator); +  	tegra_pinmux_set_tristate(TEGRA_PINGROUP_GPV, TEGRA_TRI_NORMAL);  	tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXA, TEGRA_TRI_NORMAL);  	tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXK, TEGRA_TRI_NORMAL); @@ -49,9 +65,15 @@ err_pcie:  	tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXA, TEGRA_TRI_TRISTATE);  	tegra_pinmux_set_tristate(TEGRA_PINGROUP_SLXK, TEGRA_TRI_TRISTATE); +	regulator_disable(regulator); +	regulator_put(regulator); +err_reg: +	gpio_free(EN_VDD_1V05_GPIO); +  	return err;  } -subsys_initcall(harmony_pcie_init); +/* PCI should be initialized after I2C, mfd and regulators */ +subsys_initcall_sync(harmony_pcie_init);  #endif diff --git a/arch/arm/mach-tegra/board-harmony-pinmux.c b/arch/arm/mach-tegra/board-harmony-pinmux.c index 98368d947be..4d63e2e97a8 100644 --- a/arch/arm/mach-tegra/board-harmony-pinmux.c +++ b/arch/arm/mach-tegra/board-harmony-pinmux.c @@ -27,11 +27,11 @@ static struct tegra_pingroup_config harmony_pinmux[] = {  	{TEGRA_PINGROUP_ATC,   TEGRA_MUX_NAND,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},  	{TEGRA_PINGROUP_ATD,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},  	{TEGRA_PINGROUP_ATE,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, -	{TEGRA_PINGROUP_CDEV1, TEGRA_MUX_OSC,           TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_CDEV1, TEGRA_MUX_PLLA_OUT,      TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},  	{TEGRA_PINGROUP_CDEV2, TEGRA_MUX_PLLP_OUT4,     TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_CRTP,  TEGRA_MUX_CRT,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_CSUS,  TEGRA_MUX_VI_SENSOR_CLK, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, -	{TEGRA_PINGROUP_DAP1,  TEGRA_MUX_DAP1,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_DAP1,  TEGRA_MUX_DAP1,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},  	{TEGRA_PINGROUP_DAP2,  TEGRA_MUX_DAP2,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_DAP3,  TEGRA_MUX_DAP3,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_DAP4,  TEGRA_MUX_DAP4,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, @@ -114,13 +114,13 @@ static struct tegra_pingroup_config harmony_pinmux[] = {  	{TEGRA_PINGROUP_SLXK,  TEGRA_MUX_PCIE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_SPDI,  TEGRA_MUX_RSVD2,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_SPDO,  TEGRA_MUX_RSVD2,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, -	{TEGRA_PINGROUP_SPIA,  TEGRA_MUX_GMI,           TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, -	{TEGRA_PINGROUP_SPIB,  TEGRA_MUX_GMI,           TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, -	{TEGRA_PINGROUP_SPIC,  TEGRA_MUX_GMI,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_SPIA,  TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_SPIB,  TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_SPIC,  TEGRA_MUX_GMI,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_SPID,  TEGRA_MUX_SPI1,          TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_SPIE,  TEGRA_MUX_SPI1,          TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_SPIF,  TEGRA_MUX_SPI1,          TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, -	{TEGRA_PINGROUP_SPIG,  TEGRA_MUX_SPI2_ALT,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SPIG,  TEGRA_MUX_SPI2_ALT,      TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_SPIH,  TEGRA_MUX_SPI2_ALT,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_UAA,   TEGRA_MUX_ULPI,          TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE},  	{TEGRA_PINGROUP_UAB,   TEGRA_MUX_ULPI,          TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, @@ -141,12 +141,16 @@ static struct tegra_pingroup_config harmony_pinmux[] = {  };  static struct tegra_gpio_table gpio_table[] = { -	{ .gpio = TEGRA_GPIO_PI5,	.enable = true	}, /* mmc2 cd	*/ -	{ .gpio = TEGRA_GPIO_PH1,	.enable = true	}, /* mmc2 wp	*/ -	{ .gpio = TEGRA_GPIO_PT3,	.enable = true	}, /* mmc2 pwr	*/ -	{ .gpio = TEGRA_GPIO_PH2,	.enable = true	}, /* mmc4 cd	*/ -	{ .gpio = TEGRA_GPIO_PH3,	.enable = true	}, /* mmc4 wp	*/ -	{ .gpio = TEGRA_GPIO_PI6,	.enable = true	}, /* mmc4 pwr	*/ +	{ .gpio = TEGRA_GPIO_SD2_CD,		.enable = true	}, +	{ .gpio = TEGRA_GPIO_SD2_WP,		.enable = true	}, +	{ .gpio = TEGRA_GPIO_SD2_POWER,		.enable = true	}, +	{ .gpio = TEGRA_GPIO_SD4_CD,		.enable = true	}, +	{ .gpio = TEGRA_GPIO_SD4_WP,		.enable = true	}, +	{ .gpio = TEGRA_GPIO_SD4_POWER,		.enable = true	}, +	{ .gpio = TEGRA_GPIO_CDC_IRQ,		.enable = true	}, +	{ .gpio = TEGRA_GPIO_HP_DET,		.enable = true	}, +	{ .gpio = TEGRA_GPIO_INT_MIC_EN,	.enable = true	}, +	{ .gpio = TEGRA_GPIO_EXT_MIC_EN,	.enable = true	},  };  void harmony_pinmux_init(void) diff --git a/arch/arm/mach-tegra/board-harmony-power.c b/arch/arm/mach-tegra/board-harmony-power.c new file mode 100644 index 00000000000..c84442cabe0 --- /dev/null +++ b/arch/arm/mach-tegra/board-harmony-power.c @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2010 NVIDIA, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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., 59 Temple Place, Suite 330, Boston, MA + * 02111-1307, USA + */ +#include <linux/i2c.h> +#include <linux/platform_device.h> +#include <linux/gpio.h> + +#include <linux/regulator/machine.h> +#include <linux/mfd/tps6586x.h> + +#include <mach/irqs.h> + +#define PMC_CTRL		0x0 +#define PMC_CTRL_INTR_LOW	(1 << 17) + +static struct regulator_consumer_supply tps658621_ldo0_supply[] = { +	REGULATOR_SUPPLY("pex_clk", NULL), +}; + +static struct regulator_init_data ldo0_data = { +	.constraints = { +		.min_uV = 1250 * 1000, +		.max_uV = 3300 * 1000, +		.valid_modes_mask = (REGULATOR_MODE_NORMAL | +				     REGULATOR_MODE_STANDBY), +		.valid_ops_mask = (REGULATOR_CHANGE_MODE | +				   REGULATOR_CHANGE_STATUS | +				   REGULATOR_CHANGE_VOLTAGE), +	}, +	.num_consumer_supplies = ARRAY_SIZE(tps658621_ldo0_supply), +	.consumer_supplies = tps658621_ldo0_supply, +}; + +#define HARMONY_REGULATOR_INIT(_id, _minmv, _maxmv)			\ +	static struct regulator_init_data _id##_data = {		\ +		.constraints = {					\ +			.min_uV = (_minmv)*1000,			\ +			.max_uV = (_maxmv)*1000,			\ +			.valid_modes_mask = (REGULATOR_MODE_NORMAL |	\ +					     REGULATOR_MODE_STANDBY),	\ +			.valid_ops_mask = (REGULATOR_CHANGE_MODE |	\ +					   REGULATOR_CHANGE_STATUS |	\ +					   REGULATOR_CHANGE_VOLTAGE),	\ +		},							\ +	} + +HARMONY_REGULATOR_INIT(sm0, 725, 1500); +HARMONY_REGULATOR_INIT(sm1, 725, 1500); +HARMONY_REGULATOR_INIT(sm2, 3000, 4550); +HARMONY_REGULATOR_INIT(ldo1, 725, 1500); +HARMONY_REGULATOR_INIT(ldo2, 725, 1500); +HARMONY_REGULATOR_INIT(ldo3, 1250, 3300); +HARMONY_REGULATOR_INIT(ldo4, 1700, 2475); +HARMONY_REGULATOR_INIT(ldo5, 1250, 3300); +HARMONY_REGULATOR_INIT(ldo6, 1250, 3300); +HARMONY_REGULATOR_INIT(ldo7, 1250, 3300); +HARMONY_REGULATOR_INIT(ldo8, 1250, 3300); +HARMONY_REGULATOR_INIT(ldo9, 1250, 3300); + +#define TPS_REG(_id, _data)			\ +	{					\ +		.id = TPS6586X_ID_##_id,	\ +		.name = "tps6586x-regulator",	\ +		.platform_data = _data,		\ +	} + +static struct tps6586x_subdev_info tps_devs[] = { +	TPS_REG(SM_0, &sm0_data), +	TPS_REG(SM_1, &sm1_data), +	TPS_REG(SM_2, &sm2_data), +	TPS_REG(LDO_0, &ldo0_data), +	TPS_REG(LDO_1, &ldo1_data), +	TPS_REG(LDO_2, &ldo2_data), +	TPS_REG(LDO_3, &ldo3_data), +	TPS_REG(LDO_4, &ldo4_data), +	TPS_REG(LDO_5, &ldo5_data), +	TPS_REG(LDO_6, &ldo6_data), +	TPS_REG(LDO_7, &ldo7_data), +	TPS_REG(LDO_8, &ldo8_data), +	TPS_REG(LDO_9, &ldo9_data), +}; + +static struct tps6586x_platform_data tps_platform = { +	.irq_base	= TEGRA_NR_IRQS, +	.num_subdevs	= ARRAY_SIZE(tps_devs), +	.subdevs	= tps_devs, +	.gpio_base	= TEGRA_NR_GPIOS, +}; + +static struct i2c_board_info __initdata harmony_regulators[] = { +	{ +		I2C_BOARD_INFO("tps6586x", 0x34), +		.irq		= INT_EXTERNAL_PMU, +		.platform_data	= &tps_platform, +	}, +}; + +int __init harmony_regulator_init(void) +{ +	i2c_register_board_info(3, harmony_regulators, 1); + +	return 0; +} diff --git a/arch/arm/mach-tegra/board-harmony.c b/arch/arm/mach-tegra/board-harmony.c index 49224e936eb..75c918a86a3 100644 --- a/arch/arm/mach-tegra/board-harmony.c +++ b/arch/arm/mach-tegra/board-harmony.c @@ -2,6 +2,7 @@   * arch/arm/mach-tegra/board-harmony.c   *   * Copyright (C) 2010 Google, Inc. + * Copyright (C) 2011 NVIDIA, Inc.   *   * This software is licensed under the terms of the GNU General Public   * License version 2, as published by the Free Software Foundation, and @@ -22,12 +23,18 @@  #include <linux/dma-mapping.h>  #include <linux/pda_power.h>  #include <linux/io.h> +#include <linux/gpio.h> +#include <linux/i2c.h> +#include <linux/i2c-tegra.h> + +#include <sound/wm8903.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/setup.h> +#include <mach/harmony_audio.h>  #include <mach/iomap.h>  #include <mach/irqs.h>  #include <mach/sdhci.h> @@ -60,11 +67,81 @@ static struct platform_device debug_uart = {  	},  }; +static struct harmony_audio_platform_data harmony_audio_pdata = { +	.gpio_spkr_en		= TEGRA_GPIO_SPKR_EN, +	.gpio_hp_det		= TEGRA_GPIO_HP_DET, +	.gpio_int_mic_en	= TEGRA_GPIO_INT_MIC_EN, +	.gpio_ext_mic_en	= TEGRA_GPIO_EXT_MIC_EN, +}; + +static struct platform_device harmony_audio_device = { +	.name	= "tegra-snd-harmony", +	.id	= 0, +	.dev	= { +		.platform_data  = &harmony_audio_pdata, +	}, +}; + +static struct tegra_i2c_platform_data harmony_i2c1_platform_data = { +	.bus_clk_rate   = 400000, +}; + +static struct tegra_i2c_platform_data harmony_i2c2_platform_data = { +	.bus_clk_rate   = 400000, +}; + +static struct tegra_i2c_platform_data harmony_i2c3_platform_data = { +	.bus_clk_rate   = 400000, +}; + +static struct tegra_i2c_platform_data harmony_dvc_platform_data = { +	.bus_clk_rate   = 400000, +}; + +static struct wm8903_platform_data harmony_wm8903_pdata = { +	.irq_active_low = 0, +	.micdet_cfg = 0, +	.micdet_delay = 100, +	.gpio_base = HARMONY_GPIO_WM8903(0), +	.gpio_cfg = { +		WM8903_GPIO_NO_CONFIG, +		WM8903_GPIO_NO_CONFIG, +		0, +		WM8903_GPIO_NO_CONFIG, +		WM8903_GPIO_NO_CONFIG, +	}, +}; + +static struct i2c_board_info __initdata wm8903_board_info = { +	I2C_BOARD_INFO("wm8903", 0x1a), +	.platform_data = &harmony_wm8903_pdata, +	.irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_CDC_IRQ), +}; + +static void __init harmony_i2c_init(void) +{ +	tegra_i2c_device1.dev.platform_data = &harmony_i2c1_platform_data; +	tegra_i2c_device2.dev.platform_data = &harmony_i2c2_platform_data; +	tegra_i2c_device3.dev.platform_data = &harmony_i2c3_platform_data; +	tegra_i2c_device4.dev.platform_data = &harmony_dvc_platform_data; + +	platform_device_register(&tegra_i2c_device1); +	platform_device_register(&tegra_i2c_device2); +	platform_device_register(&tegra_i2c_device3); +	platform_device_register(&tegra_i2c_device4); + +	i2c_register_board_info(0, &wm8903_board_info, 1); +} +  static struct platform_device *harmony_devices[] __initdata = {  	&debug_uart,  	&tegra_sdhci_device1,  	&tegra_sdhci_device2,  	&tegra_sdhci_device4, +	&tegra_i2s_device1, +	&tegra_das_device, +	&tegra_pcm_device, +	&harmony_audio_device,  };  static void __init tegra_harmony_fixup(struct machine_desc *desc, @@ -80,6 +157,10 @@ static void __init tegra_harmony_fixup(struct machine_desc *desc,  static __initdata struct tegra_clk_init_table harmony_clk_init_table[] = {  	/* name		parent		rate		enabled */  	{ "uartd",	"pll_p",	216000000,	true }, +	{ "pll_a",	"pll_p_out1",	56448000,	true }, +	{ "pll_a_out0",	"pll_a",	11289600,	true }, +	{ "cdev1",	NULL,		0,		true }, +	{ "i2s1",	"pll_a_out0",	11289600,	false},  	{ NULL,		NULL,		0,		0},  }; @@ -91,15 +172,15 @@ static struct tegra_sdhci_platform_data sdhci_pdata1 = {  };  static struct tegra_sdhci_platform_data sdhci_pdata2 = { -	.cd_gpio	= TEGRA_GPIO_PI5, -	.wp_gpio	= TEGRA_GPIO_PH1, -	.power_gpio	= TEGRA_GPIO_PT3, +	.cd_gpio	= TEGRA_GPIO_SD2_CD, +	.wp_gpio	= TEGRA_GPIO_SD2_WP, +	.power_gpio	= TEGRA_GPIO_SD2_POWER,  };  static struct tegra_sdhci_platform_data sdhci_pdata4 = { -	.cd_gpio	= TEGRA_GPIO_PH2, -	.wp_gpio	= TEGRA_GPIO_PH3, -	.power_gpio	= TEGRA_GPIO_PI6, +	.cd_gpio	= TEGRA_GPIO_SD4_CD, +	.wp_gpio	= TEGRA_GPIO_SD4_WP, +	.power_gpio	= TEGRA_GPIO_SD4_POWER,  	.is_8bit	= 1,  }; @@ -114,6 +195,8 @@ static void __init tegra_harmony_init(void)  	tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4;  	platform_add_devices(harmony_devices, ARRAY_SIZE(harmony_devices)); +	harmony_i2c_init(); +	harmony_regulator_init();  }  MACHINE_START(HARMONY, "harmony") diff --git a/arch/arm/mach-tegra/board-harmony.h b/arch/arm/mach-tegra/board-harmony.h index 09ca7755dd5..1e57b071f52 100644 --- a/arch/arm/mach-tegra/board-harmony.h +++ b/arch/arm/mach-tegra/board-harmony.h @@ -17,6 +17,21 @@  #ifndef _MACH_TEGRA_BOARD_HARMONY_H  #define _MACH_TEGRA_BOARD_HARMONY_H +#define HARMONY_GPIO_WM8903(_x_)	(TEGRA_NR_GPIOS + (_x_)) + +#define TEGRA_GPIO_SD2_CD		TEGRA_GPIO_PI5 +#define TEGRA_GPIO_SD2_WP		TEGRA_GPIO_PH1 +#define TEGRA_GPIO_SD2_POWER		TEGRA_GPIO_PT3 +#define TEGRA_GPIO_SD4_CD		TEGRA_GPIO_PH2 +#define TEGRA_GPIO_SD4_WP		TEGRA_GPIO_PH3 +#define TEGRA_GPIO_SD4_POWER		TEGRA_GPIO_PI6 +#define TEGRA_GPIO_CDC_IRQ		TEGRA_GPIO_PX3 +#define TEGRA_GPIO_SPKR_EN		HARMONY_GPIO_WM8903(2) +#define TEGRA_GPIO_HP_DET		TEGRA_GPIO_PW2 +#define TEGRA_GPIO_INT_MIC_EN		TEGRA_GPIO_PX0 +#define TEGRA_GPIO_EXT_MIC_EN		TEGRA_GPIO_PX1 +  void harmony_pinmux_init(void); +int harmony_regulator_init(void);  #endif diff --git a/arch/arm/mach-tegra/board-paz00-pinmux.c b/arch/arm/mach-tegra/board-paz00-pinmux.c new file mode 100644 index 00000000000..2643d1bd568 --- /dev/null +++ b/arch/arm/mach-tegra/board-paz00-pinmux.c @@ -0,0 +1,157 @@ +/* + * arch/arm/mach-tegra/board-paz00-pinmux.c + * + * Copyright (C) 2010 Marc Dietrich <marvin24@gmx.de> + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * 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. + * + */ + +#include <linux/kernel.h> +#include <linux/gpio.h> +#include <mach/pinmux.h> + +#include "gpio-names.h" +#include "board-paz00.h" + +static struct tegra_pingroup_config paz00_pinmux[] = { +	{TEGRA_PINGROUP_ATA,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_ATB,   TEGRA_MUX_SDIO4,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_ATC,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_ATD,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_ATE,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_CDEV1, TEGRA_MUX_PLLA_OUT,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_CDEV2, TEGRA_MUX_PLLP_OUT4,     TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_CRTP,  TEGRA_MUX_CRT,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_CSUS,  TEGRA_MUX_PLLC_OUT1,     TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_DAP1,  TEGRA_MUX_DAP1,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_DAP2,  TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_DAP3,  TEGRA_MUX_DAP3,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_DAP4,  TEGRA_MUX_DAP4,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_DDC,   TEGRA_MUX_I2C2,          TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_DTA,   TEGRA_MUX_RSVD1,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_DTB,   TEGRA_MUX_RSVD1,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_DTC,   TEGRA_MUX_RSVD1,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_DTD,   TEGRA_MUX_RSVD1,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_DTE,   TEGRA_MUX_RSVD1,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_DTF,   TEGRA_MUX_I2C3,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_GMA,   TEGRA_MUX_SDIO4,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_GMB,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_GMC,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_GMD,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_GME,   TEGRA_MUX_SDIO4,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_GPU,   TEGRA_MUX_PWM,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_GPU7,  TEGRA_MUX_RTCK,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_GPV,   TEGRA_MUX_PCIE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_HDINT, TEGRA_MUX_HDMI,          TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_I2CP,  TEGRA_MUX_I2C,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_IRRX,  TEGRA_MUX_UARTA,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_IRTX,  TEGRA_MUX_UARTA,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_KBCA,  TEGRA_MUX_KBC,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_KBCB,  TEGRA_MUX_SDIO2,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_KBCC,  TEGRA_MUX_KBC,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_KBCD,  TEGRA_MUX_SDIO2,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_KBCE,  TEGRA_MUX_KBC,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_KBCF,  TEGRA_MUX_KBC,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LCSN,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LD0,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD1,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD10,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD11,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD12,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD13,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD14,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD15,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD16,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD17,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD2,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD3,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD4,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD5,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD6,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD7,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD8,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LD9,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LDC,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LDI,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LHP0,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LHP1,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LHP2,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LHS,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LM0,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LM1,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LPP,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LPW0,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LPW1,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LPW2,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LSC0,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LSC1,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LSCK,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LSDA,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LSDI,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LSPI,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_LVP0,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LVP1,  TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_LVS,   TEGRA_MUX_DISPLAYA,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_OWC,   TEGRA_MUX_OWR,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_PMC,   TEGRA_MUX_PWR_ON,        TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_PTA,   TEGRA_MUX_HDMI,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_RM,    TEGRA_MUX_I2C,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_SDB,   TEGRA_MUX_PWM,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SDC,   TEGRA_MUX_TWC,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SDD,   TEGRA_MUX_PWM,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SDIO1, TEGRA_MUX_SDIO1,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_SLXA,  TEGRA_MUX_PCIE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SLXC,  TEGRA_MUX_SPI4,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SLXD,  TEGRA_MUX_SPI4,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SLXK,  TEGRA_MUX_PCIE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_SPDI,  TEGRA_MUX_RSVD2,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SPDO,  TEGRA_MUX_RSVD2,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_SPIA,  TEGRA_MUX_GMI,           TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SPIB,  TEGRA_MUX_GMI,           TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SPIC,  TEGRA_MUX_GMI,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_SPID,  TEGRA_MUX_GMI,           TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SPIE,  TEGRA_MUX_GMI,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SPIF,  TEGRA_MUX_RSVD4,         TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_SPIG,  TEGRA_MUX_SPI2_ALT,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_SPIH,  TEGRA_MUX_SPI2_ALT,      TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_UAA,   TEGRA_MUX_ULPI,          TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_UAB,   TEGRA_MUX_ULPI,          TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_UAC,   TEGRA_MUX_RSVD4,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_UAD,   TEGRA_MUX_SPDIF,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_UCA,   TEGRA_MUX_UARTC,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_UCB,   TEGRA_MUX_UARTC,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE}, +	{TEGRA_PINGROUP_UDA,   TEGRA_MUX_ULPI,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_CK32,  TEGRA_MUX_NONE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_DDRC,  TEGRA_MUX_NONE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_PMCA,  TEGRA_MUX_NONE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_PMCB,  TEGRA_MUX_NONE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_PMCC,  TEGRA_MUX_NONE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_PMCD,  TEGRA_MUX_NONE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_PMCE,  TEGRA_MUX_NONE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_XM2C,  TEGRA_MUX_NONE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +	{TEGRA_PINGROUP_XM2D,  TEGRA_MUX_NONE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL}, +}; + +static struct tegra_gpio_table gpio_table[] = { +	{ .gpio = TEGRA_GPIO_SD1_CD,	.enable = true	}, +	{ .gpio = TEGRA_GPIO_SD1_WP,	.enable = true	}, +	{ .gpio = TEGRA_GPIO_SD1_POWER,	.enable = true	}, +	{ .gpio = TEGRA_GPIO_SD4_CD,	.enable = true	}, +	{ .gpio = TEGRA_GPIO_SD4_WP,	.enable = true	}, +	{ .gpio = TEGRA_GPIO_SD4_POWER,	.enable = true	}, +}; + +void paz00_pinmux_init(void) +{ +	tegra_pinmux_config_table(paz00_pinmux, ARRAY_SIZE(paz00_pinmux)); + +	tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table)); +} diff --git a/arch/arm/mach-tegra/board-paz00.c b/arch/arm/mach-tegra/board-paz00.c new file mode 100644 index 00000000000..57e50a823ee --- /dev/null +++ b/arch/arm/mach-tegra/board-paz00.c @@ -0,0 +1,128 @@ +/* + * arch/arm/mach-tegra/board-paz00.c + * + * Copyright (C) 2011 Marc Dietrich <marvin24@gmx.de> + * + * Based on board-harmony.c + * Copyright (C) 2010 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * 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. + * + */ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/serial_8250.h> +#include <linux/clk.h> +#include <linux/dma-mapping.h> +#include <linux/pda_power.h> +#include <linux/io.h> + +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <asm/mach/time.h> +#include <asm/setup.h> + +#include <mach/iomap.h> +#include <mach/irqs.h> +#include <mach/sdhci.h> + +#include "board.h" +#include "board-paz00.h" +#include "clock.h" +#include "devices.h" +#include "gpio-names.h" + +static struct plat_serial8250_port debug_uart_platform_data[] = { +	{ +		.membase	= IO_ADDRESS(TEGRA_UARTD_BASE), +		.mapbase	= TEGRA_UARTD_BASE, +		.irq		= INT_UARTD, +		.flags		= UPF_BOOT_AUTOCONF, +		.iotype		= UPIO_MEM, +		.regshift	= 2, +		.uartclk	= 216000000, +	}, { +		.flags		= 0 +	} +}; + +static struct platform_device debug_uart = { +	.name = "serial8250", +	.id = PLAT8250_DEV_PLATFORM, +	.dev = { +		.platform_data = debug_uart_platform_data, +	}, +}; + +static struct platform_device *paz00_devices[] __initdata = { +	&debug_uart, +	&tegra_sdhci_device1, +	&tegra_sdhci_device2, +	&tegra_sdhci_device4, +}; + +static void __init tegra_paz00_fixup(struct machine_desc *desc, +	struct tag *tags, char **cmdline, struct meminfo *mi) +{ +	mi->nr_banks = 1; +	mi->bank[0].start = PHYS_OFFSET; +	mi->bank[0].size = 448 * SZ_1M; +} + +static __initdata struct tegra_clk_init_table paz00_clk_init_table[] = { +	/* name		parent		rate		enabled */ +	{ "uartd",	"pll_p",	216000000,	true }, +	{ NULL,		NULL,		0,		0}, +}; + + +static struct tegra_sdhci_platform_data sdhci_pdata1 = { +	.cd_gpio	= TEGRA_GPIO_SD1_CD, +	.wp_gpio	= TEGRA_GPIO_SD1_WP, +	.power_gpio	= TEGRA_GPIO_SD1_POWER, +}; + +static struct tegra_sdhci_platform_data sdhci_pdata2 = { +	.cd_gpio	= -1, +	.wp_gpio	= -1, +	.power_gpio	= -1, +}; + +static struct tegra_sdhci_platform_data sdhci_pdata4 = { +	.cd_gpio	= TEGRA_GPIO_SD4_CD, +	.wp_gpio	= TEGRA_GPIO_SD4_WP, +	.power_gpio	= TEGRA_GPIO_SD4_POWER, +	.is_8bit	= 1, +}; + +static void __init tegra_paz00_init(void) +{ +	tegra_clk_init_from_table(paz00_clk_init_table); + +	paz00_pinmux_init(); + +	tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1; +	tegra_sdhci_device2.dev.platform_data = &sdhci_pdata2; +	tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; + +	platform_add_devices(paz00_devices, ARRAY_SIZE(paz00_devices)); +} + +MACHINE_START(PAZ00, "paz00") +	.boot_params	= 0x00000100, +	.fixup		= tegra_paz00_fixup, +	.map_io         = tegra_map_common_io, +	.init_early	= tegra_init_early, +	.init_irq       = tegra_init_irq, +	.timer          = &tegra_timer, +	.init_machine   = tegra_paz00_init, +MACHINE_END diff --git a/arch/arm/mach-tegra/board-paz00.h b/arch/arm/mach-tegra/board-paz00.h new file mode 100644 index 00000000000..da193ca76d3 --- /dev/null +++ b/arch/arm/mach-tegra/board-paz00.h @@ -0,0 +1,29 @@ +/* + * arch/arm/mach-tegra/board-paz00.h + * + * Copyright (C) 2010 Marc Dietrich <marvin24@gmx.de> + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * 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. + * + */ + +#ifndef _MACH_TEGRA_BOARD_PAZ00_H +#define _MACH_TEGRA_BOARD_PAZ00_H + +#define TEGRA_GPIO_SD1_CD               TEGRA_GPIO_PV5 +#define TEGRA_GPIO_SD1_WP               TEGRA_GPIO_PH1 +#define TEGRA_GPIO_SD1_POWER            TEGRA_GPIO_PT3 +#define TEGRA_GPIO_SD4_CD               TEGRA_GPIO_PH2 +#define TEGRA_GPIO_SD4_WP               TEGRA_GPIO_PH3 +#define TEGRA_GPIO_SD4_POWER            TEGRA_GPIO_PI6 + +void paz00_pinmux_init(void); + +#endif diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c index 2d6ad83ed4b..0bda495e974 100644 --- a/arch/arm/mach-tegra/board-seaboard-pinmux.c +++ b/arch/arm/mach-tegra/board-seaboard-pinmux.c @@ -161,11 +161,12 @@ static __initdata struct tegra_pingroup_config seaboard_pinmux[] = {  static struct tegra_gpio_table gpio_table[] = { -	{ .gpio = TEGRA_GPIO_PI5,	.enable = true	}, /* mmc2 cd	 */ -	{ .gpio = TEGRA_GPIO_PH1,	.enable = true	}, /* mmc2 wp	 */ -	{ .gpio = TEGRA_GPIO_PI6,	.enable = true	}, /* mmc2 pwr	 */ -	{ .gpio = TEGRA_GPIO_LIDSWITCH,	.enable = true	}, /* lid switch */ -	{ .gpio = TEGRA_GPIO_POWERKEY,	.enable = true	}, /* power key	 */ +	{ .gpio = TEGRA_GPIO_SD2_CD,		.enable = true }, +	{ .gpio = TEGRA_GPIO_SD2_WP,		.enable = true }, +	{ .gpio = TEGRA_GPIO_SD2_POWER,		.enable = true }, +	{ .gpio = TEGRA_GPIO_LIDSWITCH,		.enable = true }, +	{ .gpio = TEGRA_GPIO_POWERKEY,		.enable = true }, +	{ .gpio = TEGRA_GPIO_ISL29018_IRQ,	.enable = true },  };  void __init seaboard_pinmux_init(void) diff --git a/arch/arm/mach-tegra/board-seaboard.c b/arch/arm/mach-tegra/board-seaboard.c index 6ca9e61f6cd..a8d7ace9f95 100644 --- a/arch/arm/mach-tegra/board-seaboard.c +++ b/arch/arm/mach-tegra/board-seaboard.c @@ -18,9 +18,12 @@  #include <linux/init.h>  #include <linux/platform_device.h>  #include <linux/serial_8250.h> +#include <linux/i2c.h> +#include <linux/i2c-tegra.h>  #include <linux/delay.h>  #include <linux/input.h>  #include <linux/io.h> +#include <linux/gpio.h>  #include <linux/gpio_keys.h>  #include <mach/iomap.h> @@ -63,6 +66,22 @@ static __initdata struct tegra_clk_init_table seaboard_clk_init_table[] = {  	{ NULL,		NULL,		0,		0},  }; +static struct tegra_i2c_platform_data seaboard_i2c1_platform_data = { +	.bus_clk_rate	= 400000. +}; + +static struct tegra_i2c_platform_data seaboard_i2c2_platform_data = { +	.bus_clk_rate	= 400000, +}; + +static struct tegra_i2c_platform_data seaboard_i2c3_platform_data = { +	.bus_clk_rate	= 400000, +}; + +static struct tegra_i2c_platform_data seaboard_dvc_platform_data = { +	.bus_clk_rate	= 400000, +}; +  static struct gpio_keys_button seaboard_gpio_keys_buttons[] = {  	{  		.code		= SW_LID, @@ -103,9 +122,9 @@ static struct tegra_sdhci_platform_data sdhci_pdata1 = {  };  static struct tegra_sdhci_platform_data sdhci_pdata3 = { -	.cd_gpio	= TEGRA_GPIO_PI5, -	.wp_gpio	= TEGRA_GPIO_PH1, -	.power_gpio	= TEGRA_GPIO_PI6, +	.cd_gpio	= TEGRA_GPIO_SD2_CD, +	.wp_gpio	= TEGRA_GPIO_SD2_WP, +	.power_gpio	= TEGRA_GPIO_SD2_POWER,  };  static struct tegra_sdhci_platform_data sdhci_pdata4 = { @@ -124,7 +143,36 @@ static struct platform_device *seaboard_devices[] __initdata = {  	&seaboard_gpio_keys_device,  }; -static void __init __tegra_seaboard_init(void) +static struct i2c_board_info __initdata isl29018_device = { +	I2C_BOARD_INFO("isl29018", 0x44), +	.irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_ISL29018_IRQ), +}; + +static struct i2c_board_info __initdata adt7461_device = { +	I2C_BOARD_INFO("adt7461", 0x4c), +}; + +static void __init seaboard_i2c_init(void) +{ +	gpio_request(TEGRA_GPIO_ISL29018_IRQ, "isl29018"); +	gpio_direction_input(TEGRA_GPIO_ISL29018_IRQ); + +	i2c_register_board_info(0, &isl29018_device, 1); + +	i2c_register_board_info(4, &adt7461_device, 1); + +	tegra_i2c_device1.dev.platform_data = &seaboard_i2c1_platform_data; +	tegra_i2c_device2.dev.platform_data = &seaboard_i2c2_platform_data; +	tegra_i2c_device3.dev.platform_data = &seaboard_i2c3_platform_data; +	tegra_i2c_device4.dev.platform_data = &seaboard_dvc_platform_data; + +	platform_device_register(&tegra_i2c_device1); +	platform_device_register(&tegra_i2c_device2); +	platform_device_register(&tegra_i2c_device3); +	platform_device_register(&tegra_i2c_device4); +} + +static void __init seaboard_common_init(void)  {  	seaboard_pinmux_init(); @@ -144,7 +192,9 @@ static void __init tegra_seaboard_init(void)  	debug_uart_platform_data[0].mapbase = TEGRA_UARTD_BASE;  	debug_uart_platform_data[0].irq = INT_UARTD; -	__tegra_seaboard_init(); +	seaboard_common_init(); + +	seaboard_i2c_init();  }  static void __init tegra_kaen_init(void) @@ -154,7 +204,9 @@ static void __init tegra_kaen_init(void)  	debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE;  	debug_uart_platform_data[0].irq = INT_UARTB; -	__tegra_seaboard_init(); +	seaboard_common_init(); + +	seaboard_i2c_init();  }  static void __init tegra_wario_init(void) @@ -164,7 +216,9 @@ static void __init tegra_wario_init(void)  	debug_uart_platform_data[0].mapbase = TEGRA_UARTB_BASE;  	debug_uart_platform_data[0].irq = INT_UARTB; -	__tegra_seaboard_init(); +	seaboard_common_init(); + +	seaboard_i2c_init();  } diff --git a/arch/arm/mach-tegra/board-seaboard.h b/arch/arm/mach-tegra/board-seaboard.h index a098e359973..d8415e1a843 100644 --- a/arch/arm/mach-tegra/board-seaboard.h +++ b/arch/arm/mach-tegra/board-seaboard.h @@ -17,6 +17,9 @@  #ifndef _MACH_TEGRA_BOARD_SEABOARD_H  #define _MACH_TEGRA_BOARD_SEABOARD_H +#define TEGRA_GPIO_SD2_CD		TEGRA_GPIO_PI5 +#define TEGRA_GPIO_SD2_WP		TEGRA_GPIO_PH1 +#define TEGRA_GPIO_SD2_POWER		TEGRA_GPIO_PI6  #define TEGRA_GPIO_LIDSWITCH		TEGRA_GPIO_PC7  #define TEGRA_GPIO_USB1			TEGRA_GPIO_PD0  #define TEGRA_GPIO_POWERKEY		TEGRA_GPIO_PV2 diff --git a/arch/arm/mach-tegra/board-trimslice-pinmux.c b/arch/arm/mach-tegra/board-trimslice-pinmux.c index 6d4fc9f7f1f..13534fa08ab 100644 --- a/arch/arm/mach-tegra/board-trimslice-pinmux.c +++ b/arch/arm/mach-tegra/board-trimslice-pinmux.c @@ -16,8 +16,11 @@  #include <linux/kernel.h>  #include <linux/init.h> +  #include <mach/pinmux.h> +#include <mach/gpio.h> +#include "gpio-names.h"  #include "board-trimslice.h"  static __initdata struct tegra_pingroup_config trimslice_pinmux[] = { @@ -139,7 +142,13 @@ static __initdata struct tegra_pingroup_config trimslice_pinmux[] = {  	{TEGRA_PINGROUP_XM2D,  TEGRA_MUX_NONE,          TEGRA_PUPD_NORMAL,      TEGRA_TRI_NORMAL},  }; +static struct tegra_gpio_table gpio_table[] = { +	{ .gpio = TRIMSLICE_GPIO_SD4_CD, .enable = true	}, /* mmc4 cd */ +	{ .gpio = TRIMSLICE_GPIO_SD4_WP, .enable = true	}, /* mmc4 wp */ +}; +  void __init trimslice_pinmux_init(void)  {  	tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux)); +	tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table));  } diff --git a/arch/arm/mach-tegra/board-trimslice.c b/arch/arm/mach-tegra/board-trimslice.c index 7be7d4acd02..cda4cfd78e8 100644 --- a/arch/arm/mach-tegra/board-trimslice.c +++ b/arch/arm/mach-tegra/board-trimslice.c @@ -29,9 +29,12 @@  #include <asm/setup.h>  #include <mach/iomap.h> +#include <mach/sdhci.h>  #include "board.h"  #include "clock.h" +#include "devices.h" +#include "gpio-names.h"  #include "board-trimslice.h" @@ -56,9 +59,22 @@ static struct platform_device debug_uart = {  		.platform_data	= debug_uart_platform_data,  	},  }; +static struct tegra_sdhci_platform_data sdhci_pdata1 = { +	.cd_gpio	= -1, +	.wp_gpio	= -1, +	.power_gpio	= -1, +}; + +static struct tegra_sdhci_platform_data sdhci_pdata4 = { +	.cd_gpio	= TRIMSLICE_GPIO_SD4_CD, +	.wp_gpio	= TRIMSLICE_GPIO_SD4_WP, +	.power_gpio	= -1, +};  static struct platform_device *trimslice_devices[] __initdata = {  	&debug_uart, +	&tegra_sdhci_device1, +	&tegra_sdhci_device4,  };  static void __init tegra_trimslice_fixup(struct machine_desc *desc, @@ -92,6 +108,9 @@ static void __init tegra_trimslice_init(void)  	trimslice_pinmux_init(); +	tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1; +	tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; +  	platform_add_devices(trimslice_devices, ARRAY_SIZE(trimslice_devices));  } diff --git a/arch/arm/mach-tegra/board-trimslice.h b/arch/arm/mach-tegra/board-trimslice.h index 16ec0f0d3bb..e8ef6291c6f 100644 --- a/arch/arm/mach-tegra/board-trimslice.h +++ b/arch/arm/mach-tegra/board-trimslice.h @@ -17,6 +17,9 @@  #ifndef _MACH_TEGRA_BOARD_TRIMSLICE_H  #define _MACH_TEGRA_BOARD_TRIMSLICE_H +#define TRIMSLICE_GPIO_SD4_CD	TEGRA_GPIO_PP1	/* mmc4 cd */ +#define TRIMSLICE_GPIO_SD4_WP	TEGRA_GPIO_PP2	/* mmc4 wp */ +  void trimslice_pinmux_init(void);  #endif diff --git a/arch/arm/mach-tegra/devices.c b/arch/arm/mach-tegra/devices.c index 682e6d33108..1528f9daef1 100644 --- a/arch/arm/mach-tegra/devices.c +++ b/arch/arm/mach-tegra/devices.c @@ -503,3 +503,73 @@ struct platform_device tegra_uarte_device = {  		.coherent_dma_mask	= DMA_BIT_MASK(32),  	},  }; + +static struct resource i2s_resource1[] = { +	[0] = { +		.start	= INT_I2S1, +		.end	= INT_I2S1, +		.flags	= IORESOURCE_IRQ +	}, +	[1] = { +		.start	= TEGRA_DMA_REQ_SEL_I2S_1, +		.end	= TEGRA_DMA_REQ_SEL_I2S_1, +		.flags	= IORESOURCE_DMA +	}, +	[2] = { +		.start	= TEGRA_I2S1_BASE, +		.end	= TEGRA_I2S1_BASE + TEGRA_I2S1_SIZE - 1, +		.flags	= IORESOURCE_MEM +	} +}; + +static struct resource i2s_resource2[] = { +	[0] = { +		.start	= INT_I2S2, +		.end	= INT_I2S2, +		.flags	= IORESOURCE_IRQ +	}, +	[1] = { +		.start	= TEGRA_DMA_REQ_SEL_I2S2_1, +		.end	= TEGRA_DMA_REQ_SEL_I2S2_1, +		.flags	= IORESOURCE_DMA +	}, +	[2] = { +		.start	= TEGRA_I2S2_BASE, +		.end	= TEGRA_I2S2_BASE + TEGRA_I2S2_SIZE - 1, +		.flags	= IORESOURCE_MEM +	} +}; + +struct platform_device tegra_i2s_device1 = { +	.name		= "tegra-i2s", +	.id		= 0, +	.resource	= i2s_resource1, +	.num_resources	= ARRAY_SIZE(i2s_resource1), +}; + +struct platform_device tegra_i2s_device2 = { +	.name		= "tegra-i2s", +	.id		= 1, +	.resource	= i2s_resource2, +	.num_resources	= ARRAY_SIZE(i2s_resource2), +}; + +static struct resource tegra_das_resources[] = { +	[0] = { +		.start = TEGRA_APB_MISC_DAS_BASE, +		.end = TEGRA_APB_MISC_DAS_BASE + TEGRA_APB_MISC_DAS_SIZE - 1, +		.flags = IORESOURCE_MEM, +	}, +}; + +struct platform_device tegra_das_device = { +	.name		= "tegra-das", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(tegra_das_resources), +	.resource	= tegra_das_resources, +}; + +struct platform_device tegra_pcm_device = { +	.name = "tegra-pcm-audio", +	.id = -1, +}; diff --git a/arch/arm/mach-tegra/devices.h b/arch/arm/mach-tegra/devices.h index 888810c37ee..4a7dc0a097d 100644 --- a/arch/arm/mach-tegra/devices.h +++ b/arch/arm/mach-tegra/devices.h @@ -42,5 +42,9 @@ extern struct platform_device tegra_uartc_device;  extern struct platform_device tegra_uartd_device;  extern struct platform_device tegra_uarte_device;  extern struct platform_device tegra_pmu_device; +extern struct platform_device tegra_i2s_device1; +extern struct platform_device tegra_i2s_device2; +extern struct platform_device tegra_das_device; +extern struct platform_device tegra_pcm_device;  #endif diff --git a/arch/arm/mach-tegra/include/mach/iomap.h b/arch/arm/mach-tegra/include/mach/iomap.h index 691cdabd69c..19dec3ac085 100644 --- a/arch/arm/mach-tegra/include/mach/iomap.h +++ b/arch/arm/mach-tegra/include/mach/iomap.h @@ -122,6 +122,9 @@  #define TEGRA_APB_MISC_BASE		0x70000000  #define TEGRA_APB_MISC_SIZE		SZ_4K +#define TEGRA_APB_MISC_DAS_BASE		0x70000c00 +#define TEGRA_APB_MISC_DAS_SIZE		SZ_128 +  #define TEGRA_AC97_BASE			0x70002000  #define TEGRA_AC97_SIZE			SZ_512  |