]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob
0048ecd7959e0e0f14b0bca79b9422bce112b07a
[thirdparty/kernel/stable-queue.git] /
1 From e68bb91baa0bb9817567bd45d560919e8e26373b Mon Sep 17 00:00:00 2001
2 From: Axel Lin <axel.lin@gmail.com>
3 Date: Mon, 10 Sep 2012 10:14:02 +0200
4 Subject: i2c-designware: Fix build error if CONFIG_I2C_DESIGNWARE_PLATFORM=y && CONFIG_I2C_DESIGNWARE_PCI=y
5
6 From: Axel Lin <axel.lin@gmail.com>
7
8 commit e68bb91baa0bb9817567bd45d560919e8e26373b upstream.
9
10 This patch adds config I2C_DESIGNWARE_CORE in Kconfig, and let
11 I2C_DESIGNWARE_PLATFORM and I2C_DESIGNWARE_PCI select I2C_DESIGNWARE_CORE.
12
13 Because both I2C_DESIGNWARE_PLATFORM and I2C_DESIGNWARE_PCI can be built as
14 built-in or module, we also need to export the functions in i2c-designware-core.
15
16 This fixes below build error when CONFIG_I2C_DESIGNWARE_PLATFORM=y &&
17 CONFIG_I2C_DESIGNWARE_PCI=y:
18
19 LD drivers/i2c/busses/built-in.o
20 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_clear_int':
21 i2c-designware-core.c:(.text+0xa10): multiple definition of `i2c_dw_clear_int'
22 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x928): first defined here
23 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_init':
24 i2c-designware-core.c:(.text+0x178): multiple definition of `i2c_dw_init'
25 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x90): first defined here
26 drivers/i2c/busses/i2c-designware-pci.o: In function `dw_readl':
27 i2c-designware-core.c:(.text+0xe8): multiple definition of `dw_readl'
28 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x0): first defined here
29 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_isr':
30 i2c-designware-core.c:(.text+0x724): multiple definition of `i2c_dw_isr'
31 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x63c): first defined here
32 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_xfer':
33 i2c-designware-core.c:(.text+0x4b0): multiple definition of `i2c_dw_xfer'
34 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x3c8): first defined here
35 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_is_enabled':
36 i2c-designware-core.c:(.text+0x9d4): multiple definition of `i2c_dw_is_enabled'
37 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x8ec): first defined here
38 drivers/i2c/busses/i2c-designware-pci.o: In function `dw_writel':
39 i2c-designware-core.c:(.text+0x124): multiple definition of `dw_writel'
40 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x3c): first defined here
41 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_xfer_msg':
42 i2c-designware-core.c:(.text+0x2e8): multiple definition of `i2c_dw_xfer_msg'
43 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x200): first defined here
44 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_enable':
45 i2c-designware-core.c:(.text+0x9c8): multiple definition of `i2c_dw_enable'
46 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x8e0): first defined here
47 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_read_comp_param':
48 i2c-designware-core.c:(.text+0xa24): multiple definition of `i2c_dw_read_comp_param'
49 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x93c): first defined here
50 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_disable':
51 i2c-designware-core.c:(.text+0x9dc): multiple definition of `i2c_dw_disable'
52 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x8f4): first defined here
53 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_func':
54 i2c-designware-core.c:(.text+0x710): multiple definition of `i2c_dw_func'
55 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x628): first defined here
56 drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_disable_int':
57 i2c-designware-core.c:(.text+0xa18): multiple definition of `i2c_dw_disable_int'
58 drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x930): first defined here
59 make[3]: *** [drivers/i2c/busses/built-in.o] Error 1
60 make[2]: *** [drivers/i2c/busses] Error 2
61 make[1]: *** [drivers/i2c] Error 2
62 make: *** [drivers] Error 2
63
64 Signed-off-by: Axel Lin <axel.lin@gmail.com>
65 Signed-off-by: Jean Delvare <khali@linux-fr.org>
66 Tested-by: Jiri Slaby <jslaby@suse.cz>
67 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
68
69 ---
70 drivers/i2c/busses/Kconfig | 5 +++++
71 drivers/i2c/busses/Makefile | 5 +++--
72 drivers/i2c/busses/i2c-designware-core.c | 11 +++++++++++
73 3 files changed, 19 insertions(+), 2 deletions(-)
74
75 --- a/drivers/i2c/busses/Kconfig
76 +++ b/drivers/i2c/busses/Kconfig
77 @@ -350,9 +350,13 @@ config I2C_DAVINCI
78 devices such as DaVinci NIC.
79 For details please see http://www.ti.com/davinci
80
81 +config I2C_DESIGNWARE_CORE
82 + tristate
83 +
84 config I2C_DESIGNWARE_PLATFORM
85 tristate "Synopsys DesignWare Platform"
86 depends on HAVE_CLK
87 + select I2C_DESIGNWARE_CORE
88 help
89 If you say yes to this option, support will be included for the
90 Synopsys DesignWare I2C adapter. Only master mode is supported.
91 @@ -363,6 +367,7 @@ config I2C_DESIGNWARE_PLATFORM
92 config I2C_DESIGNWARE_PCI
93 tristate "Synopsys DesignWare PCI"
94 depends on PCI
95 + select I2C_DESIGNWARE_CORE
96 help
97 If you say yes to this option, support will be included for the
98 Synopsys DesignWare I2C adapter. Only master mode is supported.
99 --- a/drivers/i2c/busses/Makefile
100 +++ b/drivers/i2c/busses/Makefile
101 @@ -33,10 +33,11 @@ obj-$(CONFIG_I2C_AU1550) += i2c-au1550.o
102 obj-$(CONFIG_I2C_BLACKFIN_TWI) += i2c-bfin-twi.o
103 obj-$(CONFIG_I2C_CPM) += i2c-cpm.o
104 obj-$(CONFIG_I2C_DAVINCI) += i2c-davinci.o
105 +obj-$(CONFIG_I2C_DESIGNWARE_CORE) += i2c-designware-core.o
106 obj-$(CONFIG_I2C_DESIGNWARE_PLATFORM) += i2c-designware-platform.o
107 -i2c-designware-platform-objs := i2c-designware-platdrv.o i2c-designware-core.o
108 +i2c-designware-platform-objs := i2c-designware-platdrv.o
109 obj-$(CONFIG_I2C_DESIGNWARE_PCI) += i2c-designware-pci.o
110 -i2c-designware-pci-objs := i2c-designware-pcidrv.o i2c-designware-core.o
111 +i2c-designware-pci-objs := i2c-designware-pcidrv.o
112 obj-$(CONFIG_I2C_EG20T) += i2c-eg20t.o
113 obj-$(CONFIG_I2C_GPIO) += i2c-gpio.o
114 obj-$(CONFIG_I2C_HIGHLANDER) += i2c-highlander.o
115 --- a/drivers/i2c/busses/i2c-designware-core.c
116 +++ b/drivers/i2c/busses/i2c-designware-core.c
117 @@ -25,6 +25,7 @@
118 * ----------------------------------------------------------------------------
119 *
120 */
121 +#include <linux/export.h>
122 #include <linux/clk.h>
123 #include <linux/errno.h>
124 #include <linux/err.h>
125 @@ -316,6 +317,7 @@ int i2c_dw_init(struct dw_i2c_dev *dev)
126 dw_writel(dev, dev->master_cfg , DW_IC_CON);
127 return 0;
128 }
129 +EXPORT_SYMBOL_GPL(i2c_dw_init);
130
131 /*
132 * Waiting for bus not busy
133 @@ -568,12 +570,14 @@ done:
134
135 return ret;
136 }
137 +EXPORT_SYMBOL_GPL(i2c_dw_xfer);
138
139 u32 i2c_dw_func(struct i2c_adapter *adap)
140 {
141 struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
142 return dev->functionality;
143 }
144 +EXPORT_SYMBOL_GPL(i2c_dw_func);
145
146 static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
147 {
148 @@ -678,17 +682,20 @@ tx_aborted:
149
150 return IRQ_HANDLED;
151 }
152 +EXPORT_SYMBOL_GPL(i2c_dw_isr);
153
154 void i2c_dw_enable(struct dw_i2c_dev *dev)
155 {
156 /* Enable the adapter */
157 dw_writel(dev, 1, DW_IC_ENABLE);
158 }
159 +EXPORT_SYMBOL_GPL(i2c_dw_enable);
160
161 u32 i2c_dw_is_enabled(struct dw_i2c_dev *dev)
162 {
163 return dw_readl(dev, DW_IC_ENABLE);
164 }
165 +EXPORT_SYMBOL_GPL(i2c_dw_is_enabled);
166
167 void i2c_dw_disable(struct dw_i2c_dev *dev)
168 {
169 @@ -699,18 +706,22 @@ void i2c_dw_disable(struct dw_i2c_dev *d
170 dw_writel(dev, 0, DW_IC_INTR_MASK);
171 dw_readl(dev, DW_IC_CLR_INTR);
172 }
173 +EXPORT_SYMBOL_GPL(i2c_dw_disable);
174
175 void i2c_dw_clear_int(struct dw_i2c_dev *dev)
176 {
177 dw_readl(dev, DW_IC_CLR_INTR);
178 }
179 +EXPORT_SYMBOL_GPL(i2c_dw_clear_int);
180
181 void i2c_dw_disable_int(struct dw_i2c_dev *dev)
182 {
183 dw_writel(dev, 0, DW_IC_INTR_MASK);
184 }
185 +EXPORT_SYMBOL_GPL(i2c_dw_disable_int);
186
187 u32 i2c_dw_read_comp_param(struct dw_i2c_dev *dev)
188 {
189 return dw_readl(dev, DW_IC_COMP_PARAM_1);
190 }
191 +EXPORT_SYMBOL_GPL(i2c_dw_read_comp_param);