diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-02 17:33:21 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-02 17:33:21 -0400 |
commit | 0bf6a210a43f7118d858806200127e421649fc4e (patch) | |
tree | 9a17d88ebd1b9bc693fba7f39c12123dec96e930 /arch/arm/mach-omap1 | |
parent | ee1a8d402e7e204d57fb108aa40003b6d1633036 (diff) | |
parent | 5c913a9a9772f4b434aaea7328836419287b5d1c (diff) |
Merge tag 'drivers-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC driver specific changes from Arnd Bergmann:
"These changes are all driver specific and cross over between arm-soc
contents and some other subsystem, in these cases cpufreq, crypto,
dma, pinctrl, mailbox and usb, and the subsystem owners agreed to have
these changes merged through arm-soc.
As we proceed to untangle the dependencies between platform code and
driver code, the amount of changes in this category is fortunately
shrinking, for 3.11 we have 16 branches here and 101 non-merge
changesets, the majority of which are for the stedma40 dma engine
driver used in the ux500 platform. Cleaning up that code touches
multiple subsystems, but gets rid of the dependency in the end.
The mailbox code moved out from mach-omap2 to drivers/mailbox is an
intermediate step and is still omap specific at the moment. Patches
exist to generalize the subsystem and add other drivers with the same
API, but those did not make it for 3.11."
* tag 'drivers-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (101 commits)
crypto: ux500: use dmaengine_submit API
crypto: ux500: use dmaengine_prep_slave_sg API
crypto: ux500: use dmaengine_device_control API
crypto: ux500/crypt: add missing __iomem qualifiers
crypto: ux500/hash: add missing static qualifiers
crypto: ux500/hash: use readl on iomem addresses
dmaengine: ste_dma40: Declare memcpy config as static
ARM: ux500: Remove mop500_snowball_ethernet_clock_enable()
ARM: ux500: Correct the EN_3v3 regulator's on/off GPIO
ARM: ux500: Provide a AB8500 GPIO Device Tree node
gpio: rcar: fix gpio_rcar_of_table
gpio-rcar: Remove #ifdef CONFIG_OF around OF-specific sections
gpio-rcar: Reference core gpio documentation in the DT bindings
clk: exynos5250: Add enum entries for divider clock of i2s1 and i2s2
ARM: dts: Update Samsung I2S documentation
ARM: dts: add clock provider information for i2s controllers in Exynos5250
ARM: dts: add Exynos audio subsystem clock controller node
clk: samsung: register audio subsystem clocks using common clock framework
ARM: dts: use #include for all device trees for Samsung
pinctrl: s3c24xx: use correct header for chained_irq functions
...
Diffstat (limited to 'arch/arm/mach-omap1')
-rw-r--r-- | arch/arm/mach-omap1/Makefile | 4 | ||||
-rw-r--r-- | arch/arm/mach-omap1/mailbox.c | 199 |
2 files changed, 0 insertions, 203 deletions
diff --git a/arch/arm/mach-omap1/Makefile b/arch/arm/mach-omap1/Makefile index 222d58c0ae76..3889b6cd211e 100644 --- a/arch/arm/mach-omap1/Makefile +++ b/arch/arm/mach-omap1/Makefile | |||
@@ -19,10 +19,6 @@ obj-$(CONFIG_ARCH_OMAP16XX) += ocpi.o | |||
19 | # Power Management | 19 | # Power Management |
20 | obj-$(CONFIG_PM) += pm.o sleep.o | 20 | obj-$(CONFIG_PM) += pm.o sleep.o |
21 | 21 | ||
22 | # DSP | ||
23 | obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox_mach.o | ||
24 | mailbox_mach-objs := mailbox.o | ||
25 | |||
26 | i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o | 22 | i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o |
27 | obj-y += $(i2c-omap-m) $(i2c-omap-y) | 23 | obj-y += $(i2c-omap-m) $(i2c-omap-y) |
28 | 24 | ||
diff --git a/arch/arm/mach-omap1/mailbox.c b/arch/arm/mach-omap1/mailbox.c deleted file mode 100644 index efc8f207f6fc..000000000000 --- a/arch/arm/mach-omap1/mailbox.c +++ /dev/null | |||
@@ -1,199 +0,0 @@ | |||
1 | /* | ||
2 | * Mailbox reservation modules for OMAP1 | ||
3 | * | ||
4 | * Copyright (C) 2006-2009 Nokia Corporation | ||
5 | * Written by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> | ||
6 | * | ||
7 | * This file is subject to the terms and conditions of the GNU General Public | ||
8 | * License. See the file "COPYING" in the main directory of this archive | ||
9 | * for more details. | ||
10 | */ | ||
11 | |||
12 | #include <linux/module.h> | ||
13 | #include <linux/interrupt.h> | ||
14 | #include <linux/platform_device.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <plat/mailbox.h> | ||
17 | |||
18 | #define MAILBOX_ARM2DSP1 0x00 | ||
19 | #define MAILBOX_ARM2DSP1b 0x04 | ||
20 | #define MAILBOX_DSP2ARM1 0x08 | ||
21 | #define MAILBOX_DSP2ARM1b 0x0c | ||
22 | #define MAILBOX_DSP2ARM2 0x10 | ||
23 | #define MAILBOX_DSP2ARM2b 0x14 | ||
24 | #define MAILBOX_ARM2DSP1_Flag 0x18 | ||
25 | #define MAILBOX_DSP2ARM1_Flag 0x1c | ||
26 | #define MAILBOX_DSP2ARM2_Flag 0x20 | ||
27 | |||
28 | static void __iomem *mbox_base; | ||
29 | |||
30 | struct omap_mbox1_fifo { | ||
31 | unsigned long cmd; | ||
32 | unsigned long data; | ||
33 | unsigned long flag; | ||
34 | }; | ||
35 | |||
36 | struct omap_mbox1_priv { | ||
37 | struct omap_mbox1_fifo tx_fifo; | ||
38 | struct omap_mbox1_fifo rx_fifo; | ||
39 | }; | ||
40 | |||
41 | static inline int mbox_read_reg(size_t ofs) | ||
42 | { | ||
43 | return __raw_readw(mbox_base + ofs); | ||
44 | } | ||
45 | |||
46 | static inline void mbox_write_reg(u32 val, size_t ofs) | ||
47 | { | ||
48 | __raw_writew(val, mbox_base + ofs); | ||
49 | } | ||
50 | |||
51 | /* msg */ | ||
52 | static mbox_msg_t omap1_mbox_fifo_read(struct omap_mbox *mbox) | ||
53 | { | ||
54 | struct omap_mbox1_fifo *fifo = | ||
55 | &((struct omap_mbox1_priv *)mbox->priv)->rx_fifo; | ||
56 | mbox_msg_t msg; | ||
57 | |||
58 | msg = mbox_read_reg(fifo->data); | ||
59 | msg |= ((mbox_msg_t) mbox_read_reg(fifo->cmd)) << 16; | ||
60 | |||
61 | return msg; | ||
62 | } | ||
63 | |||
64 | static void | ||
65 | omap1_mbox_fifo_write(struct omap_mbox *mbox, mbox_msg_t msg) | ||
66 | { | ||
67 | struct omap_mbox1_fifo *fifo = | ||
68 | &((struct omap_mbox1_priv *)mbox->priv)->tx_fifo; | ||
69 | |||
70 | mbox_write_reg(msg & 0xffff, fifo->data); | ||
71 | mbox_write_reg(msg >> 16, fifo->cmd); | ||
72 | } | ||
73 | |||
74 | static int omap1_mbox_fifo_empty(struct omap_mbox *mbox) | ||
75 | { | ||
76 | return 0; | ||
77 | } | ||
78 | |||
79 | static int omap1_mbox_fifo_full(struct omap_mbox *mbox) | ||
80 | { | ||
81 | struct omap_mbox1_fifo *fifo = | ||
82 | &((struct omap_mbox1_priv *)mbox->priv)->rx_fifo; | ||
83 | |||
84 | return mbox_read_reg(fifo->flag); | ||
85 | } | ||
86 | |||
87 | /* irq */ | ||
88 | static void | ||
89 | omap1_mbox_enable_irq(struct omap_mbox *mbox, omap_mbox_type_t irq) | ||
90 | { | ||
91 | if (irq == IRQ_RX) | ||
92 | enable_irq(mbox->irq); | ||
93 | } | ||
94 | |||
95 | static void | ||
96 | omap1_mbox_disable_irq(struct omap_mbox *mbox, omap_mbox_type_t irq) | ||
97 | { | ||
98 | if (irq == IRQ_RX) | ||
99 | disable_irq(mbox->irq); | ||
100 | } | ||
101 | |||
102 | static int | ||
103 | omap1_mbox_is_irq(struct omap_mbox *mbox, omap_mbox_type_t irq) | ||
104 | { | ||
105 | if (irq == IRQ_TX) | ||
106 | return 0; | ||
107 | return 1; | ||
108 | } | ||
109 | |||
110 | static struct omap_mbox_ops omap1_mbox_ops = { | ||
111 | .type = OMAP_MBOX_TYPE1, | ||
112 | .fifo_read = omap1_mbox_fifo_read, | ||
113 | .fifo_write = omap1_mbox_fifo_write, | ||
114 | .fifo_empty = omap1_mbox_fifo_empty, | ||
115 | .fifo_full = omap1_mbox_fifo_full, | ||
116 | .enable_irq = omap1_mbox_enable_irq, | ||
117 | .disable_irq = omap1_mbox_disable_irq, | ||
118 | .is_irq = omap1_mbox_is_irq, | ||
119 | }; | ||
120 | |||
121 | /* FIXME: the following struct should be created automatically by the user id */ | ||
122 | |||
123 | /* DSP */ | ||
124 | static struct omap_mbox1_priv omap1_mbox_dsp_priv = { | ||
125 | .tx_fifo = { | ||
126 | .cmd = MAILBOX_ARM2DSP1b, | ||
127 | .data = MAILBOX_ARM2DSP1, | ||
128 | .flag = MAILBOX_ARM2DSP1_Flag, | ||
129 | }, | ||
130 | .rx_fifo = { | ||
131 | .cmd = MAILBOX_DSP2ARM1b, | ||
132 | .data = MAILBOX_DSP2ARM1, | ||
133 | .flag = MAILBOX_DSP2ARM1_Flag, | ||
134 | }, | ||
135 | }; | ||
136 | |||
137 | static struct omap_mbox mbox_dsp_info = { | ||
138 | .name = "dsp", | ||
139 | .ops = &omap1_mbox_ops, | ||
140 | .priv = &omap1_mbox_dsp_priv, | ||
141 | }; | ||
142 | |||
143 | static struct omap_mbox *omap1_mboxes[] = { &mbox_dsp_info, NULL }; | ||
144 | |||
145 | static int omap1_mbox_probe(struct platform_device *pdev) | ||
146 | { | ||
147 | struct resource *mem; | ||
148 | int ret; | ||
149 | struct omap_mbox **list; | ||
150 | |||
151 | list = omap1_mboxes; | ||
152 | list[0]->irq = platform_get_irq_byname(pdev, "dsp"); | ||
153 | |||
154 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
155 | mbox_base = ioremap(mem->start, resource_size(mem)); | ||
156 | if (!mbox_base) | ||
157 | return -ENOMEM; | ||
158 | |||
159 | ret = omap_mbox_register(&pdev->dev, list); | ||
160 | if (ret) { | ||
161 | iounmap(mbox_base); | ||
162 | return ret; | ||
163 | } | ||
164 | |||
165 | return 0; | ||
166 | } | ||
167 | |||
168 | static int omap1_mbox_remove(struct platform_device *pdev) | ||
169 | { | ||
170 | omap_mbox_unregister(); | ||
171 | iounmap(mbox_base); | ||
172 | return 0; | ||
173 | } | ||
174 | |||
175 | static struct platform_driver omap1_mbox_driver = { | ||
176 | .probe = omap1_mbox_probe, | ||
177 | .remove = omap1_mbox_remove, | ||
178 | .driver = { | ||
179 | .name = "omap-mailbox", | ||
180 | }, | ||
181 | }; | ||
182 | |||
183 | static int __init omap1_mbox_init(void) | ||
184 | { | ||
185 | return platform_driver_register(&omap1_mbox_driver); | ||
186 | } | ||
187 | |||
188 | static void __exit omap1_mbox_exit(void) | ||
189 | { | ||
190 | platform_driver_unregister(&omap1_mbox_driver); | ||
191 | } | ||
192 | |||
193 | module_init(omap1_mbox_init); | ||
194 | module_exit(omap1_mbox_exit); | ||
195 | |||
196 | MODULE_LICENSE("GPL v2"); | ||
197 | MODULE_DESCRIPTION("omap mailbox: omap1 architecture specific functions"); | ||
198 | MODULE_AUTHOR("Hiroshi DOYU <Hiroshi.DOYU@nokia.com>"); | ||
199 | MODULE_ALIAS("platform:omap1-mailbox"); | ||