diff options
author | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2011-03-25 11:41:20 -0400 |
---|---|---|
committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2011-03-25 11:41:20 -0400 |
commit | 7bf7e370d5919112c223a269462cd0b546903829 (patch) | |
tree | 03ccc715239df14ae168277dbccc9d9cf4d8a2c8 /arch/arm/mach-tegra/board-harmony.c | |
parent | 68b1a1e786f29c900fa1c516a402e24f0ece622a (diff) | |
parent | d39dd11c3e6a7af5c20bfac40594db36cf270f42 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into for-linus-1
* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6: (9356 commits)
[media] rc: update for bitop name changes
fs: simplify iget & friends
fs: pull inode->i_lock up out of writeback_single_inode
fs: rename inode_lock to inode_hash_lock
fs: move i_wb_list out from under inode_lock
fs: move i_sb_list out from under inode_lock
fs: remove inode_lock from iput_final and prune_icache
fs: Lock the inode LRU list separately
fs: factor inode disposal
fs: protect inode->i_state with inode->i_lock
lib, arch: add filter argument to show_mem and fix private implementations
SLUB: Write to per cpu data when allocating it
slub: Fix debugobjects with lockless fastpath
autofs4: Do not potentially dereference NULL pointer returned by fget() in autofs_dev_ioctl_setpipefd()
autofs4 - remove autofs4_lock
autofs4 - fix d_manage() return on rcu-walk
autofs4 - fix autofs4_expire_indirect() traversal
autofs4 - fix dentry leak in autofs4_expire_direct()
autofs4 - reinstate last used update on access
vfs - check non-mountpoint dentry might block in __follow_mount_rcu()
...
NOTE!
This merge commit was created to fix compilation error. The block
tree was merged upstream and removed the 'elv_queue_empty()'
function which the new 'mtdswap' driver is using. So a simple
merge of the mtd tree with upstream does not compile. And the
mtd tree has already be published, so re-basing it is not an option.
To fix this unfortunate situation, I had to merge upstream into the
mtd-2.6.git tree without committing, put the fixup patch on top of
this, and then commit this. The result is that we do not have commits
which do not compile.
In other words, this merge commit "merges" 3 things: the MTD tree, the
upstream tree, and the fixup patch.
Diffstat (limited to 'arch/arm/mach-tegra/board-harmony.c')
-rw-r--r-- | arch/arm/mach-tegra/board-harmony.c | 145 |
1 files changed, 116 insertions, 29 deletions
diff --git a/arch/arm/mach-tegra/board-harmony.c b/arch/arm/mach-tegra/board-harmony.c index b9dbdb1289d0..75c918a86a31 100644 --- a/arch/arm/mach-tegra/board-harmony.c +++ b/arch/arm/mach-tegra/board-harmony.c | |||
@@ -2,6 +2,7 @@ | |||
2 | * arch/arm/mach-tegra/board-harmony.c | 2 | * arch/arm/mach-tegra/board-harmony.c |
3 | * | 3 | * |
4 | * Copyright (C) 2010 Google, Inc. | 4 | * Copyright (C) 2010 Google, Inc. |
5 | * Copyright (C) 2011 NVIDIA, Inc. | ||
5 | * | 6 | * |
6 | * This software is licensed under the terms of the GNU General Public | 7 | * This software is licensed under the terms of the GNU General Public |
7 | * License version 2, as published by the Free Software Foundation, and | 8 | * License version 2, as published by the Free Software Foundation, and |
@@ -22,43 +23,27 @@ | |||
22 | #include <linux/dma-mapping.h> | 23 | #include <linux/dma-mapping.h> |
23 | #include <linux/pda_power.h> | 24 | #include <linux/pda_power.h> |
24 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | #include <linux/gpio.h> | ||
27 | #include <linux/i2c.h> | ||
28 | #include <linux/i2c-tegra.h> | ||
29 | |||
30 | #include <sound/wm8903.h> | ||
25 | 31 | ||
26 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
27 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
28 | #include <asm/mach/time.h> | 34 | #include <asm/mach/time.h> |
29 | #include <asm/setup.h> | 35 | #include <asm/setup.h> |
30 | 36 | ||
37 | #include <mach/harmony_audio.h> | ||
31 | #include <mach/iomap.h> | 38 | #include <mach/iomap.h> |
32 | #include <mach/irqs.h> | 39 | #include <mach/irqs.h> |
40 | #include <mach/sdhci.h> | ||
33 | 41 | ||
34 | #include "board.h" | 42 | #include "board.h" |
35 | #include "board-harmony.h" | 43 | #include "board-harmony.h" |
36 | #include "clock.h" | 44 | #include "clock.h" |
37 | 45 | #include "devices.h" | |
38 | /* NVidia bootloader tags */ | 46 | #include "gpio-names.h" |
39 | #define ATAG_NVIDIA 0x41000801 | ||
40 | |||
41 | #define ATAG_NVIDIA_RM 0x1 | ||
42 | #define ATAG_NVIDIA_DISPLAY 0x2 | ||
43 | #define ATAG_NVIDIA_FRAMEBUFFER 0x3 | ||
44 | #define ATAG_NVIDIA_CHIPSHMOO 0x4 | ||
45 | #define ATAG_NVIDIA_CHIPSHMOOPHYS 0x5 | ||
46 | #define ATAG_NVIDIA_PRESERVED_MEM_0 0x10000 | ||
47 | #define ATAG_NVIDIA_PRESERVED_MEM_N 2 | ||
48 | #define ATAG_NVIDIA_FORCE_32 0x7fffffff | ||
49 | |||
50 | struct tag_tegra { | ||
51 | __u32 bootarg_key; | ||
52 | __u32 bootarg_len; | ||
53 | char bootarg[1]; | ||
54 | }; | ||
55 | |||
56 | static int __init parse_tag_nvidia(const struct tag *tag) | ||
57 | { | ||
58 | |||
59 | return 0; | ||
60 | } | ||
61 | __tagtable(ATAG_NVIDIA, parse_tag_nvidia); | ||
62 | 47 | ||
63 | static struct plat_serial8250_port debug_uart_platform_data[] = { | 48 | static struct plat_serial8250_port debug_uart_platform_data[] = { |
64 | { | 49 | { |
@@ -82,8 +67,81 @@ static struct platform_device debug_uart = { | |||
82 | }, | 67 | }, |
83 | }; | 68 | }; |
84 | 69 | ||
70 | static struct harmony_audio_platform_data harmony_audio_pdata = { | ||
71 | .gpio_spkr_en = TEGRA_GPIO_SPKR_EN, | ||
72 | .gpio_hp_det = TEGRA_GPIO_HP_DET, | ||
73 | .gpio_int_mic_en = TEGRA_GPIO_INT_MIC_EN, | ||
74 | .gpio_ext_mic_en = TEGRA_GPIO_EXT_MIC_EN, | ||
75 | }; | ||
76 | |||
77 | static struct platform_device harmony_audio_device = { | ||
78 | .name = "tegra-snd-harmony", | ||
79 | .id = 0, | ||
80 | .dev = { | ||
81 | .platform_data = &harmony_audio_pdata, | ||
82 | }, | ||
83 | }; | ||
84 | |||
85 | static struct tegra_i2c_platform_data harmony_i2c1_platform_data = { | ||
86 | .bus_clk_rate = 400000, | ||
87 | }; | ||
88 | |||
89 | static struct tegra_i2c_platform_data harmony_i2c2_platform_data = { | ||
90 | .bus_clk_rate = 400000, | ||
91 | }; | ||
92 | |||
93 | static struct tegra_i2c_platform_data harmony_i2c3_platform_data = { | ||
94 | .bus_clk_rate = 400000, | ||
95 | }; | ||
96 | |||
97 | static struct tegra_i2c_platform_data harmony_dvc_platform_data = { | ||
98 | .bus_clk_rate = 400000, | ||
99 | }; | ||
100 | |||
101 | static struct wm8903_platform_data harmony_wm8903_pdata = { | ||
102 | .irq_active_low = 0, | ||
103 | .micdet_cfg = 0, | ||
104 | .micdet_delay = 100, | ||
105 | .gpio_base = HARMONY_GPIO_WM8903(0), | ||
106 | .gpio_cfg = { | ||
107 | WM8903_GPIO_NO_CONFIG, | ||
108 | WM8903_GPIO_NO_CONFIG, | ||
109 | 0, | ||
110 | WM8903_GPIO_NO_CONFIG, | ||
111 | WM8903_GPIO_NO_CONFIG, | ||
112 | }, | ||
113 | }; | ||
114 | |||
115 | static struct i2c_board_info __initdata wm8903_board_info = { | ||
116 | I2C_BOARD_INFO("wm8903", 0x1a), | ||
117 | .platform_data = &harmony_wm8903_pdata, | ||
118 | .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_CDC_IRQ), | ||
119 | }; | ||
120 | |||
121 | static void __init harmony_i2c_init(void) | ||
122 | { | ||
123 | tegra_i2c_device1.dev.platform_data = &harmony_i2c1_platform_data; | ||
124 | tegra_i2c_device2.dev.platform_data = &harmony_i2c2_platform_data; | ||
125 | tegra_i2c_device3.dev.platform_data = &harmony_i2c3_platform_data; | ||
126 | tegra_i2c_device4.dev.platform_data = &harmony_dvc_platform_data; | ||
127 | |||
128 | platform_device_register(&tegra_i2c_device1); | ||
129 | platform_device_register(&tegra_i2c_device2); | ||
130 | platform_device_register(&tegra_i2c_device3); | ||
131 | platform_device_register(&tegra_i2c_device4); | ||
132 | |||
133 | i2c_register_board_info(0, &wm8903_board_info, 1); | ||
134 | } | ||
135 | |||
85 | static struct platform_device *harmony_devices[] __initdata = { | 136 | static struct platform_device *harmony_devices[] __initdata = { |
86 | &debug_uart, | 137 | &debug_uart, |
138 | &tegra_sdhci_device1, | ||
139 | &tegra_sdhci_device2, | ||
140 | &tegra_sdhci_device4, | ||
141 | &tegra_i2s_device1, | ||
142 | &tegra_das_device, | ||
143 | &tegra_pcm_device, | ||
144 | &harmony_audio_device, | ||
87 | }; | 145 | }; |
88 | 146 | ||
89 | static void __init tegra_harmony_fixup(struct machine_desc *desc, | 147 | static void __init tegra_harmony_fixup(struct machine_desc *desc, |
@@ -99,25 +157,54 @@ static void __init tegra_harmony_fixup(struct machine_desc *desc, | |||
99 | static __initdata struct tegra_clk_init_table harmony_clk_init_table[] = { | 157 | static __initdata struct tegra_clk_init_table harmony_clk_init_table[] = { |
100 | /* name parent rate enabled */ | 158 | /* name parent rate enabled */ |
101 | { "uartd", "pll_p", 216000000, true }, | 159 | { "uartd", "pll_p", 216000000, true }, |
160 | { "pll_a", "pll_p_out1", 56448000, true }, | ||
161 | { "pll_a_out0", "pll_a", 11289600, true }, | ||
162 | { "cdev1", NULL, 0, true }, | ||
163 | { "i2s1", "pll_a_out0", 11289600, false}, | ||
102 | { NULL, NULL, 0, 0}, | 164 | { NULL, NULL, 0, 0}, |
103 | }; | 165 | }; |
104 | 166 | ||
167 | |||
168 | static struct tegra_sdhci_platform_data sdhci_pdata1 = { | ||
169 | .cd_gpio = -1, | ||
170 | .wp_gpio = -1, | ||
171 | .power_gpio = -1, | ||
172 | }; | ||
173 | |||
174 | static struct tegra_sdhci_platform_data sdhci_pdata2 = { | ||
175 | .cd_gpio = TEGRA_GPIO_SD2_CD, | ||
176 | .wp_gpio = TEGRA_GPIO_SD2_WP, | ||
177 | .power_gpio = TEGRA_GPIO_SD2_POWER, | ||
178 | }; | ||
179 | |||
180 | static struct tegra_sdhci_platform_data sdhci_pdata4 = { | ||
181 | .cd_gpio = TEGRA_GPIO_SD4_CD, | ||
182 | .wp_gpio = TEGRA_GPIO_SD4_WP, | ||
183 | .power_gpio = TEGRA_GPIO_SD4_POWER, | ||
184 | .is_8bit = 1, | ||
185 | }; | ||
186 | |||
105 | static void __init tegra_harmony_init(void) | 187 | static void __init tegra_harmony_init(void) |
106 | { | 188 | { |
107 | tegra_common_init(); | ||
108 | |||
109 | tegra_clk_init_from_table(harmony_clk_init_table); | 189 | tegra_clk_init_from_table(harmony_clk_init_table); |
110 | 190 | ||
111 | harmony_pinmux_init(); | 191 | harmony_pinmux_init(); |
112 | 192 | ||
193 | tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1; | ||
194 | tegra_sdhci_device2.dev.platform_data = &sdhci_pdata2; | ||
195 | tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; | ||
196 | |||
113 | platform_add_devices(harmony_devices, ARRAY_SIZE(harmony_devices)); | 197 | platform_add_devices(harmony_devices, ARRAY_SIZE(harmony_devices)); |
198 | harmony_i2c_init(); | ||
199 | harmony_regulator_init(); | ||
114 | } | 200 | } |
115 | 201 | ||
116 | MACHINE_START(HARMONY, "harmony") | 202 | MACHINE_START(HARMONY, "harmony") |
117 | .boot_params = 0x00000100, | 203 | .boot_params = 0x00000100, |
118 | .fixup = tegra_harmony_fixup, | 204 | .fixup = tegra_harmony_fixup, |
119 | .init_irq = tegra_init_irq, | ||
120 | .init_machine = tegra_harmony_init, | ||
121 | .map_io = tegra_map_common_io, | 205 | .map_io = tegra_map_common_io, |
206 | .init_early = tegra_init_early, | ||
207 | .init_irq = tegra_init_irq, | ||
122 | .timer = &tegra_timer, | 208 | .timer = &tegra_timer, |
209 | .init_machine = tegra_harmony_init, | ||
123 | MACHINE_END | 210 | MACHINE_END |