diff options
Diffstat (limited to 'arch/arm/plat-omap')
-rw-r--r-- | arch/arm/plat-omap/devices.c | 7 | ||||
-rw-r--r-- | arch/arm/plat-omap/dma.c | 16 | ||||
-rw-r--r-- | arch/arm/plat-omap/gpio.c | 3 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/mach/aic23.h | 116 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/mach/board-h3.h | 4 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/mach/cpu.h | 1 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/mach/gpio.h | 10 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/mach/mcbsp.h | 17 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/mach/mmc.h | 10 | ||||
-rw-r--r-- | arch/arm/plat-omap/mcbsp.c | 56 | ||||
-rw-r--r-- | arch/arm/plat-omap/usb.c | 14 |
11 files changed, 82 insertions, 172 deletions
diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c index ac15c23fd5da..208dbb121f47 100644 --- a/arch/arm/plat-omap/devices.c +++ b/arch/arm/plat-omap/devices.c | |||
@@ -200,14 +200,15 @@ void omap_mcbsp_register_board_cfg(struct omap_mcbsp_platform_data *config, | |||
200 | /* | 200 | /* |
201 | * Register MMC devices. Called from mach-omap1 and mach-omap2 device init. | 201 | * Register MMC devices. Called from mach-omap1 and mach-omap2 device init. |
202 | */ | 202 | */ |
203 | int __init omap_mmc_add(int id, unsigned long base, unsigned long size, | 203 | int __init omap_mmc_add(const char *name, int id, unsigned long base, |
204 | unsigned int irq, struct omap_mmc_platform_data *data) | 204 | unsigned long size, unsigned int irq, |
205 | struct omap_mmc_platform_data *data) | ||
205 | { | 206 | { |
206 | struct platform_device *pdev; | 207 | struct platform_device *pdev; |
207 | struct resource res[OMAP_MMC_NR_RES]; | 208 | struct resource res[OMAP_MMC_NR_RES]; |
208 | int ret; | 209 | int ret; |
209 | 210 | ||
210 | pdev = platform_device_alloc("mmci-omap", id); | 211 | pdev = platform_device_alloc(name, id); |
211 | if (!pdev) | 212 | if (!pdev) |
212 | return -ENOMEM; | 213 | return -ENOMEM; |
213 | 214 | ||
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index 692d2b495af3..47ec77af4ccb 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
@@ -278,14 +278,11 @@ void omap_set_dma_transfer_params(int lch, int data_type, int elem_count, | |||
278 | u32 val; | 278 | u32 val; |
279 | 279 | ||
280 | val = dma_read(CCR(lch)); | 280 | val = dma_read(CCR(lch)); |
281 | val &= ~(3 << 19); | ||
282 | if (dma_trigger > 63) | ||
283 | val |= 1 << 20; | ||
284 | if (dma_trigger > 31) | ||
285 | val |= 1 << 19; | ||
286 | 281 | ||
287 | val &= ~(0x1f); | 282 | /* DMA_SYNCHRO_CONTROL_UPPER depends on the channel number */ |
288 | val |= (dma_trigger & 0x1f); | 283 | val &= ~((3 << 19) | 0x1f); |
284 | val |= (dma_trigger & ~0x1f) << 14; | ||
285 | val |= dma_trigger & 0x1f; | ||
289 | 286 | ||
290 | if (sync_mode & OMAP_DMA_SYNC_FRAME) | 287 | if (sync_mode & OMAP_DMA_SYNC_FRAME) |
291 | val |= 1 << 5; | 288 | val |= 1 << 5; |
@@ -712,6 +709,7 @@ int omap_request_dma(int dev_id, const char *dev_name, | |||
712 | chan->dev_name = dev_name; | 709 | chan->dev_name = dev_name; |
713 | chan->callback = callback; | 710 | chan->callback = callback; |
714 | chan->data = data; | 711 | chan->data = data; |
712 | chan->flags = 0; | ||
715 | 713 | ||
716 | #ifndef CONFIG_ARCH_OMAP1 | 714 | #ifndef CONFIG_ARCH_OMAP1 |
717 | if (cpu_class_is_omap2()) { | 715 | if (cpu_class_is_omap2()) { |
@@ -1891,11 +1889,11 @@ static int omap2_dma_handle_ch(int ch) | |||
1891 | status = dma_read(CSR(ch)); | 1889 | status = dma_read(CSR(ch)); |
1892 | } | 1890 | } |
1893 | 1891 | ||
1892 | dma_write(status, CSR(ch)); | ||
1893 | |||
1894 | if (likely(dma_chan[ch].callback != NULL)) | 1894 | if (likely(dma_chan[ch].callback != NULL)) |
1895 | dma_chan[ch].callback(ch, status, dma_chan[ch].data); | 1895 | dma_chan[ch].callback(ch, status, dma_chan[ch].data); |
1896 | 1896 | ||
1897 | dma_write(status, CSR(ch)); | ||
1898 | |||
1899 | return 0; | 1897 | return 0; |
1900 | } | 1898 | } |
1901 | 1899 | ||
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index 07b6968a7d16..f856a90b264e 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c | |||
@@ -1789,6 +1789,8 @@ static int dbg_gpio_show(struct seq_file *s, void *unused) | |||
1789 | /* FIXME for at least omap2, show pullup/pulldown state */ | 1789 | /* FIXME for at least omap2, show pullup/pulldown state */ |
1790 | 1790 | ||
1791 | irqstat = irq_desc[irq].status; | 1791 | irqstat = irq_desc[irq].status; |
1792 | #if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP24XX) || \ | ||
1793 | defined(CONFIG_ARCH_OMAP34XX) | ||
1792 | if (is_in && ((bank->suspend_wakeup & mask) | 1794 | if (is_in && ((bank->suspend_wakeup & mask) |
1793 | || irqstat & IRQ_TYPE_SENSE_MASK)) { | 1795 | || irqstat & IRQ_TYPE_SENSE_MASK)) { |
1794 | char *trigger = NULL; | 1796 | char *trigger = NULL; |
@@ -1818,6 +1820,7 @@ static int dbg_gpio_show(struct seq_file *s, void *unused) | |||
1818 | (bank->suspend_wakeup & mask) | 1820 | (bank->suspend_wakeup & mask) |
1819 | ? " wakeup" : ""); | 1821 | ? " wakeup" : ""); |
1820 | } | 1822 | } |
1823 | #endif | ||
1821 | seq_printf(s, "\n"); | 1824 | seq_printf(s, "\n"); |
1822 | } | 1825 | } |
1823 | 1826 | ||
diff --git a/arch/arm/plat-omap/include/mach/aic23.h b/arch/arm/plat-omap/include/mach/aic23.h deleted file mode 100644 index 5ccedac77526..000000000000 --- a/arch/arm/plat-omap/include/mach/aic23.h +++ /dev/null | |||
@@ -1,116 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/plat-omap/include/mach/aic23.h | ||
3 | * | ||
4 | * Hardware definitions for TI TLV320AIC23 audio codec | ||
5 | * | ||
6 | * Copyright (C) 2002 RidgeRun, Inc. | ||
7 | * Author: Steve Johnson | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms of the GNU General Public License as published by the | ||
11 | * Free Software Foundation; either version 2 of the License, or (at your | ||
12 | * option) any later version. | ||
13 | * | ||
14 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
15 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
16 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
17 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
18 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
19 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
20 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
21 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
22 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
23 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
24 | * | ||
25 | * You should have received a copy of the GNU General Public License along | ||
26 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
27 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
28 | */ | ||
29 | |||
30 | #ifndef __ASM_ARCH_AIC23_H | ||
31 | #define __ASM_ARCH_AIC23_H | ||
32 | |||
33 | // Codec TLV320AIC23 | ||
34 | #define LEFT_LINE_VOLUME_ADDR 0x00 | ||
35 | #define RIGHT_LINE_VOLUME_ADDR 0x01 | ||
36 | #define LEFT_CHANNEL_VOLUME_ADDR 0x02 | ||
37 | #define RIGHT_CHANNEL_VOLUME_ADDR 0x03 | ||
38 | #define ANALOG_AUDIO_CONTROL_ADDR 0x04 | ||
39 | #define DIGITAL_AUDIO_CONTROL_ADDR 0x05 | ||
40 | #define POWER_DOWN_CONTROL_ADDR 0x06 | ||
41 | #define DIGITAL_AUDIO_FORMAT_ADDR 0x07 | ||
42 | #define SAMPLE_RATE_CONTROL_ADDR 0x08 | ||
43 | #define DIGITAL_INTERFACE_ACT_ADDR 0x09 | ||
44 | #define RESET_CONTROL_ADDR 0x0F | ||
45 | |||
46 | // Left (right) line input volume control register | ||
47 | #define LRS_ENABLED 0x0100 | ||
48 | #define LIM_MUTED 0x0080 | ||
49 | #define LIV_DEFAULT 0x0017 | ||
50 | #define LIV_MAX 0x001f | ||
51 | #define LIV_MIN 0x0000 | ||
52 | |||
53 | // Left (right) channel headphone volume control register | ||
54 | #define LZC_ON 0x0080 | ||
55 | #define LHV_DEFAULT 0x0079 | ||
56 | #define LHV_MAX 0x007f | ||
57 | #define LHV_MIN 0x0000 | ||
58 | |||
59 | // Analog audio path control register | ||
60 | #define STA_REG(x) ((x)<<6) | ||
61 | #define STE_ENABLED 0x0020 | ||
62 | #define DAC_SELECTED 0x0010 | ||
63 | #define BYPASS_ON 0x0008 | ||
64 | #define INSEL_MIC 0x0004 | ||
65 | #define MICM_MUTED 0x0002 | ||
66 | #define MICB_20DB 0x0001 | ||
67 | |||
68 | // Digital audio path control register | ||
69 | #define DACM_MUTE 0x0008 | ||
70 | #define DEEMP_32K 0x0002 | ||
71 | #define DEEMP_44K 0x0004 | ||
72 | #define DEEMP_48K 0x0006 | ||
73 | #define ADCHP_ON 0x0001 | ||
74 | |||
75 | // Power control down register | ||
76 | #define DEVICE_POWER_OFF 0x0080 | ||
77 | #define CLK_OFF 0x0040 | ||
78 | #define OSC_OFF 0x0020 | ||
79 | #define OUT_OFF 0x0010 | ||
80 | #define DAC_OFF 0x0008 | ||
81 | #define ADC_OFF 0x0004 | ||
82 | #define MIC_OFF 0x0002 | ||
83 | #define LINE_OFF 0x0001 | ||
84 | |||
85 | // Digital audio interface register | ||
86 | #define MS_MASTER 0x0040 | ||
87 | #define LRSWAP_ON 0x0020 | ||
88 | #define LRP_ON 0x0010 | ||
89 | #define IWL_16 0x0000 | ||
90 | #define IWL_20 0x0004 | ||
91 | #define IWL_24 0x0008 | ||
92 | #define IWL_32 0x000C | ||
93 | #define FOR_I2S 0x0002 | ||
94 | #define FOR_DSP 0x0003 | ||
95 | |||
96 | // Sample rate control register | ||
97 | #define CLKOUT_HALF 0x0080 | ||
98 | #define CLKIN_HALF 0x0040 | ||
99 | #define BOSR_384fs 0x0002 // BOSR_272fs when in USB mode | ||
100 | #define USB_CLK_ON 0x0001 | ||
101 | #define SR_MASK 0xf | ||
102 | #define CLKOUT_SHIFT 7 | ||
103 | #define CLKIN_SHIFT 6 | ||
104 | #define SR_SHIFT 2 | ||
105 | #define BOSR_SHIFT 1 | ||
106 | |||
107 | // Digital interface register | ||
108 | #define ACT_ON 0x0001 | ||
109 | |||
110 | #define TLV320AIC23ID1 (0x1a) // cs low | ||
111 | #define TLV320AIC23ID2 (0x1b) // cs high | ||
112 | |||
113 | void aic23_power_up(void); | ||
114 | void aic23_power_down(void); | ||
115 | |||
116 | #endif /* __ASM_ARCH_AIC23_H */ | ||
diff --git a/arch/arm/plat-omap/include/mach/board-h3.h b/arch/arm/plat-omap/include/mach/board-h3.h index 14909dc7858a..1888326da7ea 100644 --- a/arch/arm/plat-omap/include/mach/board-h3.h +++ b/arch/arm/plat-omap/include/mach/board-h3.h | |||
@@ -30,7 +30,9 @@ | |||
30 | /* In OMAP1710 H3 the Ethernet is directly connected to CS1 */ | 30 | /* In OMAP1710 H3 the Ethernet is directly connected to CS1 */ |
31 | #define OMAP1710_ETHR_START 0x04000300 | 31 | #define OMAP1710_ETHR_START 0x04000300 |
32 | 32 | ||
33 | #define H3_TPS_GPIO_BASE (OMAP_MAX_GPIO_LINES + 16 /* MPUIO */) | ||
34 | # define H3_TPS_GPIO_MMC_PWR_EN (H3_TPS_GPIO_BASE + 4) | ||
35 | |||
33 | extern void h3_mmc_init(void); | 36 | extern void h3_mmc_init(void); |
34 | extern void h3_mmc_slot_cover_handler(void *arg, int state); | ||
35 | 37 | ||
36 | #endif /* __ASM_ARCH_OMAP_H3_H */ | 38 | #endif /* __ASM_ARCH_OMAP_H3_H */ |
diff --git a/arch/arm/plat-omap/include/mach/cpu.h b/arch/arm/plat-omap/include/mach/cpu.h index b2062f1175de..a8e1178a9468 100644 --- a/arch/arm/plat-omap/include/mach/cpu.h +++ b/arch/arm/plat-omap/include/mach/cpu.h | |||
@@ -339,6 +339,7 @@ IS_OMAP_TYPE(3430, 0x3430) | |||
339 | #define OMAP3430_REV_ES2_0 0x34301034 | 339 | #define OMAP3430_REV_ES2_0 0x34301034 |
340 | #define OMAP3430_REV_ES2_1 0x34302034 | 340 | #define OMAP3430_REV_ES2_1 0x34302034 |
341 | #define OMAP3430_REV_ES3_0 0x34303034 | 341 | #define OMAP3430_REV_ES3_0 0x34303034 |
342 | #define OMAP3430_REV_ES3_1 0x34304034 | ||
342 | 343 | ||
343 | /* | 344 | /* |
344 | * omap_chip bits | 345 | * omap_chip bits |
diff --git a/arch/arm/plat-omap/include/mach/gpio.h b/arch/arm/plat-omap/include/mach/gpio.h index 04e68e88f134..8d9dfe314387 100644 --- a/arch/arm/plat-omap/include/mach/gpio.h +++ b/arch/arm/plat-omap/include/mach/gpio.h | |||
@@ -87,16 +87,6 @@ extern void omap_set_gpio_debounce_time(int gpio, int enable); | |||
87 | #include <linux/errno.h> | 87 | #include <linux/errno.h> |
88 | #include <asm-generic/gpio.h> | 88 | #include <asm-generic/gpio.h> |
89 | 89 | ||
90 | static inline int omap_request_gpio(int gpio) | ||
91 | { | ||
92 | return gpio_request(gpio, "FIXME"); | ||
93 | } | ||
94 | |||
95 | static inline void omap_free_gpio(int gpio) | ||
96 | { | ||
97 | gpio_free(gpio); | ||
98 | } | ||
99 | |||
100 | static inline int gpio_get_value(unsigned gpio) | 90 | static inline int gpio_get_value(unsigned gpio) |
101 | { | 91 | { |
102 | return __gpio_get_value(gpio); | 92 | return __gpio_get_value(gpio); |
diff --git a/arch/arm/plat-omap/include/mach/mcbsp.h b/arch/arm/plat-omap/include/mach/mcbsp.h index 6a0d1a0a24a7..113c2466c86a 100644 --- a/arch/arm/plat-omap/include/mach/mcbsp.h +++ b/arch/arm/plat-omap/include/mach/mcbsp.h | |||
@@ -87,6 +87,10 @@ | |||
87 | #define OMAP_MCBSP_REG_XCERG 0x3A | 87 | #define OMAP_MCBSP_REG_XCERG 0x3A |
88 | #define OMAP_MCBSP_REG_XCERH 0x3C | 88 | #define OMAP_MCBSP_REG_XCERH 0x3C |
89 | 89 | ||
90 | /* Dummy defines, these are not available on omap1 */ | ||
91 | #define OMAP_MCBSP_REG_XCCR 0x00 | ||
92 | #define OMAP_MCBSP_REG_RCCR 0x00 | ||
93 | |||
90 | #define AUDIO_MCBSP_DATAWRITE (OMAP1510_MCBSP1_BASE + OMAP_MCBSP_REG_DXR1) | 94 | #define AUDIO_MCBSP_DATAWRITE (OMAP1510_MCBSP1_BASE + OMAP_MCBSP_REG_DXR1) |
91 | #define AUDIO_MCBSP_DATAREAD (OMAP1510_MCBSP1_BASE + OMAP_MCBSP_REG_DRR1) | 95 | #define AUDIO_MCBSP_DATAREAD (OMAP1510_MCBSP1_BASE + OMAP_MCBSP_REG_DRR1) |
92 | 96 | ||
@@ -231,11 +235,16 @@ | |||
231 | #define XPBBLK(value) ((value)<<7) /* Bits 7:8 */ | 235 | #define XPBBLK(value) ((value)<<7) /* Bits 7:8 */ |
232 | 236 | ||
233 | /*********************** McBSP XCCR bit definitions *************************/ | 237 | /*********************** McBSP XCCR bit definitions *************************/ |
238 | #define EXTCLKGATE 0x8000 | ||
239 | #define PPCONNECT 0x4000 | ||
240 | #define DXENDLY(value) ((value)<<12) /* Bits 12:13 */ | ||
241 | #define XFULL_CYCLE 0x0800 | ||
234 | #define DILB 0x0020 | 242 | #define DILB 0x0020 |
235 | #define XDMAEN 0x0008 | 243 | #define XDMAEN 0x0008 |
236 | #define XDISABLE 0x0001 | 244 | #define XDISABLE 0x0001 |
237 | 245 | ||
238 | /********************** McBSP RCCR bit definitions *************************/ | 246 | /********************** McBSP RCCR bit definitions *************************/ |
247 | #define RFULL_CYCLE 0x0800 | ||
239 | #define RDMAEN 0x0008 | 248 | #define RDMAEN 0x0008 |
240 | #define RDISABLE 0x0001 | 249 | #define RDISABLE 0x0001 |
241 | 250 | ||
@@ -267,6 +276,8 @@ struct omap_mcbsp_reg_cfg { | |||
267 | u16 rcerh; | 276 | u16 rcerh; |
268 | u16 xcerg; | 277 | u16 xcerg; |
269 | u16 xcerh; | 278 | u16 xcerh; |
279 | u16 xccr; | ||
280 | u16 rccr; | ||
270 | }; | 281 | }; |
271 | 282 | ||
272 | typedef enum { | 283 | typedef enum { |
@@ -333,7 +344,8 @@ struct omap_mcbsp_platform_data { | |||
333 | u8 dma_rx_sync, dma_tx_sync; | 344 | u8 dma_rx_sync, dma_tx_sync; |
334 | u16 rx_irq, tx_irq; | 345 | u16 rx_irq, tx_irq; |
335 | struct omap_mcbsp_ops *ops; | 346 | struct omap_mcbsp_ops *ops; |
336 | char const *clk_name; | 347 | char const **clk_names; |
348 | int num_clks; | ||
337 | }; | 349 | }; |
338 | 350 | ||
339 | struct omap_mcbsp { | 351 | struct omap_mcbsp { |
@@ -365,7 +377,8 @@ struct omap_mcbsp { | |||
365 | /* Protect the field .free, while checking if the mcbsp is in use */ | 377 | /* Protect the field .free, while checking if the mcbsp is in use */ |
366 | spinlock_t lock; | 378 | spinlock_t lock; |
367 | struct omap_mcbsp_platform_data *pdata; | 379 | struct omap_mcbsp_platform_data *pdata; |
368 | struct clk *clk; | 380 | struct clk **clks; |
381 | int num_clks; | ||
369 | }; | 382 | }; |
370 | extern struct omap_mcbsp **mcbsp_ptr; | 383 | extern struct omap_mcbsp **mcbsp_ptr; |
371 | extern int omap_mcbsp_count; | 384 | extern int omap_mcbsp_count; |
diff --git a/arch/arm/plat-omap/include/mach/mmc.h b/arch/arm/plat-omap/include/mach/mmc.h index 031250f02805..73a9e15031b1 100644 --- a/arch/arm/plat-omap/include/mach/mmc.h +++ b/arch/arm/plat-omap/include/mach/mmc.h | |||
@@ -115,8 +115,9 @@ void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, | |||
115 | int nr_controllers); | 115 | int nr_controllers); |
116 | void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, | 116 | void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, |
117 | int nr_controllers); | 117 | int nr_controllers); |
118 | int omap_mmc_add(int id, unsigned long base, unsigned long size, | 118 | int omap_mmc_add(const char *name, int id, unsigned long base, |
119 | unsigned int irq, struct omap_mmc_platform_data *data); | 119 | unsigned long size, unsigned int irq, |
120 | struct omap_mmc_platform_data *data); | ||
120 | #else | 121 | #else |
121 | static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, | 122 | static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data, |
122 | int nr_controllers) | 123 | int nr_controllers) |
@@ -126,8 +127,9 @@ static inline void omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, | |||
126 | int nr_controllers) | 127 | int nr_controllers) |
127 | { | 128 | { |
128 | } | 129 | } |
129 | static inline int omap_mmc_add(int id, unsigned long base, unsigned long size, | 130 | static inline int omap_mmc_add(const char *name, int id, unsigned long base, |
130 | unsigned int irq, struct omap_mmc_platform_data *data) | 131 | unsigned long size, unsigned int irq, |
132 | struct omap_mmc_platform_data *data) | ||
131 | { | 133 | { |
132 | return 0; | 134 | return 0; |
133 | } | 135 | } |
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c index af33fc713e1a..e5842e30e534 100644 --- a/arch/arm/plat-omap/mcbsp.c +++ b/arch/arm/plat-omap/mcbsp.c | |||
@@ -173,6 +173,10 @@ void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg *config) | |||
173 | OMAP_MCBSP_WRITE(io_base, MCR2, config->mcr2); | 173 | OMAP_MCBSP_WRITE(io_base, MCR2, config->mcr2); |
174 | OMAP_MCBSP_WRITE(io_base, MCR1, config->mcr1); | 174 | OMAP_MCBSP_WRITE(io_base, MCR1, config->mcr1); |
175 | OMAP_MCBSP_WRITE(io_base, PCR0, config->pcr0); | 175 | OMAP_MCBSP_WRITE(io_base, PCR0, config->pcr0); |
176 | if (cpu_is_omap2430() || cpu_is_omap34xx()) { | ||
177 | OMAP_MCBSP_WRITE(io_base, XCCR, config->xccr); | ||
178 | OMAP_MCBSP_WRITE(io_base, RCCR, config->rccr); | ||
179 | } | ||
176 | } | 180 | } |
177 | EXPORT_SYMBOL(omap_mcbsp_config); | 181 | EXPORT_SYMBOL(omap_mcbsp_config); |
178 | 182 | ||
@@ -210,6 +214,7 @@ EXPORT_SYMBOL(omap_mcbsp_set_io_type); | |||
210 | int omap_mcbsp_request(unsigned int id) | 214 | int omap_mcbsp_request(unsigned int id) |
211 | { | 215 | { |
212 | struct omap_mcbsp *mcbsp; | 216 | struct omap_mcbsp *mcbsp; |
217 | int i; | ||
213 | int err; | 218 | int err; |
214 | 219 | ||
215 | if (!omap_mcbsp_check_valid_id(id)) { | 220 | if (!omap_mcbsp_check_valid_id(id)) { |
@@ -221,7 +226,8 @@ int omap_mcbsp_request(unsigned int id) | |||
221 | if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->request) | 226 | if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->request) |
222 | mcbsp->pdata->ops->request(id); | 227 | mcbsp->pdata->ops->request(id); |
223 | 228 | ||
224 | clk_enable(mcbsp->clk); | 229 | for (i = 0; i < mcbsp->num_clks; i++) |
230 | clk_enable(mcbsp->clks[i]); | ||
225 | 231 | ||
226 | spin_lock(&mcbsp->lock); | 232 | spin_lock(&mcbsp->lock); |
227 | if (!mcbsp->free) { | 233 | if (!mcbsp->free) { |
@@ -272,6 +278,7 @@ EXPORT_SYMBOL(omap_mcbsp_request); | |||
272 | void omap_mcbsp_free(unsigned int id) | 278 | void omap_mcbsp_free(unsigned int id) |
273 | { | 279 | { |
274 | struct omap_mcbsp *mcbsp; | 280 | struct omap_mcbsp *mcbsp; |
281 | int i; | ||
275 | 282 | ||
276 | if (!omap_mcbsp_check_valid_id(id)) { | 283 | if (!omap_mcbsp_check_valid_id(id)) { |
277 | printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1); | 284 | printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1); |
@@ -282,7 +289,8 @@ void omap_mcbsp_free(unsigned int id) | |||
282 | if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free) | 289 | if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free) |
283 | mcbsp->pdata->ops->free(id); | 290 | mcbsp->pdata->ops->free(id); |
284 | 291 | ||
285 | clk_disable(mcbsp->clk); | 292 | for (i = mcbsp->num_clks - 1; i >= 0; i--) |
293 | clk_disable(mcbsp->clks[i]); | ||
286 | 294 | ||
287 | spin_lock(&mcbsp->lock); | 295 | spin_lock(&mcbsp->lock); |
288 | if (mcbsp->free) { | 296 | if (mcbsp->free) { |
@@ -868,6 +876,7 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev) | |||
868 | struct omap_mcbsp_platform_data *pdata = pdev->dev.platform_data; | 876 | struct omap_mcbsp_platform_data *pdata = pdev->dev.platform_data; |
869 | struct omap_mcbsp *mcbsp; | 877 | struct omap_mcbsp *mcbsp; |
870 | int id = pdev->id - 1; | 878 | int id = pdev->id - 1; |
879 | int i; | ||
871 | int ret = 0; | 880 | int ret = 0; |
872 | 881 | ||
873 | if (!pdata) { | 882 | if (!pdata) { |
@@ -912,14 +921,25 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev) | |||
912 | mcbsp->dma_rx_sync = pdata->dma_rx_sync; | 921 | mcbsp->dma_rx_sync = pdata->dma_rx_sync; |
913 | mcbsp->dma_tx_sync = pdata->dma_tx_sync; | 922 | mcbsp->dma_tx_sync = pdata->dma_tx_sync; |
914 | 923 | ||
915 | if (pdata->clk_name) | 924 | if (pdata->num_clks) { |
916 | mcbsp->clk = clk_get(&pdev->dev, pdata->clk_name); | 925 | mcbsp->num_clks = pdata->num_clks; |
917 | if (IS_ERR(mcbsp->clk)) { | 926 | mcbsp->clks = kzalloc(mcbsp->num_clks * sizeof(struct clk *), |
918 | dev_err(&pdev->dev, | 927 | GFP_KERNEL); |
919 | "Invalid clock configuration for McBSP%d.\n", | 928 | if (!mcbsp->clks) { |
920 | mcbsp->id); | 929 | ret = -ENOMEM; |
921 | ret = PTR_ERR(mcbsp->clk); | 930 | goto exit; |
922 | goto err_clk; | 931 | } |
932 | for (i = 0; i < mcbsp->num_clks; i++) { | ||
933 | mcbsp->clks[i] = clk_get(&pdev->dev, pdata->clk_names[i]); | ||
934 | if (IS_ERR(mcbsp->clks[i])) { | ||
935 | dev_err(&pdev->dev, | ||
936 | "Invalid %s configuration for McBSP%d.\n", | ||
937 | pdata->clk_names[i], mcbsp->id); | ||
938 | ret = PTR_ERR(mcbsp->clks[i]); | ||
939 | goto err_clk; | ||
940 | } | ||
941 | } | ||
942 | |||
923 | } | 943 | } |
924 | 944 | ||
925 | mcbsp->pdata = pdata; | 945 | mcbsp->pdata = pdata; |
@@ -928,6 +948,9 @@ static int __devinit omap_mcbsp_probe(struct platform_device *pdev) | |||
928 | return 0; | 948 | return 0; |
929 | 949 | ||
930 | err_clk: | 950 | err_clk: |
951 | while (i--) | ||
952 | clk_put(mcbsp->clks[i]); | ||
953 | kfree(mcbsp->clks); | ||
931 | iounmap(mcbsp->io_base); | 954 | iounmap(mcbsp->io_base); |
932 | err_ioremap: | 955 | err_ioremap: |
933 | mcbsp->free = 0; | 956 | mcbsp->free = 0; |
@@ -938,6 +961,7 @@ exit: | |||
938 | static int __devexit omap_mcbsp_remove(struct platform_device *pdev) | 961 | static int __devexit omap_mcbsp_remove(struct platform_device *pdev) |
939 | { | 962 | { |
940 | struct omap_mcbsp *mcbsp = platform_get_drvdata(pdev); | 963 | struct omap_mcbsp *mcbsp = platform_get_drvdata(pdev); |
964 | int i; | ||
941 | 965 | ||
942 | platform_set_drvdata(pdev, NULL); | 966 | platform_set_drvdata(pdev, NULL); |
943 | if (mcbsp) { | 967 | if (mcbsp) { |
@@ -946,12 +970,18 @@ static int __devexit omap_mcbsp_remove(struct platform_device *pdev) | |||
946 | mcbsp->pdata->ops->free) | 970 | mcbsp->pdata->ops->free) |
947 | mcbsp->pdata->ops->free(mcbsp->id); | 971 | mcbsp->pdata->ops->free(mcbsp->id); |
948 | 972 | ||
949 | clk_disable(mcbsp->clk); | 973 | for (i = mcbsp->num_clks - 1; i >= 0; i--) { |
950 | clk_put(mcbsp->clk); | 974 | clk_disable(mcbsp->clks[i]); |
975 | clk_put(mcbsp->clks[i]); | ||
976 | } | ||
951 | 977 | ||
952 | iounmap(mcbsp->io_base); | 978 | iounmap(mcbsp->io_base); |
953 | 979 | ||
954 | mcbsp->clk = NULL; | 980 | if (mcbsp->num_clks) { |
981 | kfree(mcbsp->clks); | ||
982 | mcbsp->clks = NULL; | ||
983 | mcbsp->num_clks = 0; | ||
984 | } | ||
955 | mcbsp->free = 0; | 985 | mcbsp->free = 0; |
956 | mcbsp->dev = NULL; | 986 | mcbsp->dev = NULL; |
957 | } | 987 | } |
diff --git a/arch/arm/plat-omap/usb.c b/arch/arm/plat-omap/usb.c index add0485703b5..e278de6862ae 100644 --- a/arch/arm/plat-omap/usb.c +++ b/arch/arm/plat-omap/usb.c | |||
@@ -431,15 +431,6 @@ bad: | |||
431 | 431 | ||
432 | /*-------------------------------------------------------------------------*/ | 432 | /*-------------------------------------------------------------------------*/ |
433 | 433 | ||
434 | #if defined(CONFIG_USB_GADGET_OMAP) || \ | ||
435 | defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) || \ | ||
436 | (defined(CONFIG_USB_OTG) && defined(CONFIG_ARCH_OMAP_OTG)) | ||
437 | static void usb_release(struct device *dev) | ||
438 | { | ||
439 | /* normally not freed */ | ||
440 | } | ||
441 | #endif | ||
442 | |||
443 | #ifdef CONFIG_USB_GADGET_OMAP | 434 | #ifdef CONFIG_USB_GADGET_OMAP |
444 | 435 | ||
445 | static struct resource udc_resources[] = { | 436 | static struct resource udc_resources[] = { |
@@ -466,7 +457,6 @@ static struct platform_device udc_device = { | |||
466 | .name = "omap_udc", | 457 | .name = "omap_udc", |
467 | .id = -1, | 458 | .id = -1, |
468 | .dev = { | 459 | .dev = { |
469 | .release = usb_release, | ||
470 | .dma_mask = &udc_dmamask, | 460 | .dma_mask = &udc_dmamask, |
471 | .coherent_dma_mask = 0xffffffff, | 461 | .coherent_dma_mask = 0xffffffff, |
472 | }, | 462 | }, |
@@ -497,7 +487,6 @@ static struct platform_device ohci_device = { | |||
497 | .name = "ohci", | 487 | .name = "ohci", |
498 | .id = -1, | 488 | .id = -1, |
499 | .dev = { | 489 | .dev = { |
500 | .release = usb_release, | ||
501 | .dma_mask = &ohci_dmamask, | 490 | .dma_mask = &ohci_dmamask, |
502 | .coherent_dma_mask = 0xffffffff, | 491 | .coherent_dma_mask = 0xffffffff, |
503 | }, | 492 | }, |
@@ -524,9 +513,6 @@ static struct resource otg_resources[] = { | |||
524 | static struct platform_device otg_device = { | 513 | static struct platform_device otg_device = { |
525 | .name = "omap_otg", | 514 | .name = "omap_otg", |
526 | .id = -1, | 515 | .id = -1, |
527 | .dev = { | ||
528 | .release = usb_release, | ||
529 | }, | ||
530 | .num_resources = ARRAY_SIZE(otg_resources), | 516 | .num_resources = ARRAY_SIZE(otg_resources), |
531 | .resource = otg_resources, | 517 | .resource = otg_resources, |
532 | }; | 518 | }; |