Skip to content

Commit e68bb91

Browse files
AxelLinJean Delvare
authored andcommitted
i2c-designware: Fix build error if CONFIG_I2C_DESIGNWARE_PLATFORM=y && CONFIG_I2C_DESIGNWARE_PCI=y
This patch adds config I2C_DESIGNWARE_CORE in Kconfig, and let I2C_DESIGNWARE_PLATFORM and I2C_DESIGNWARE_PCI select I2C_DESIGNWARE_CORE. Because both I2C_DESIGNWARE_PLATFORM and I2C_DESIGNWARE_PCI can be built as built-in or module, we also need to export the functions in i2c-designware-core. This fixes below build error when CONFIG_I2C_DESIGNWARE_PLATFORM=y && CONFIG_I2C_DESIGNWARE_PCI=y: LD drivers/i2c/busses/built-in.o drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_clear_int': i2c-designware-core.c:(.text+0xa10): multiple definition of `i2c_dw_clear_int' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x928): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_init': i2c-designware-core.c:(.text+0x178): multiple definition of `i2c_dw_init' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x90): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `dw_readl': i2c-designware-core.c:(.text+0xe8): multiple definition of `dw_readl' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x0): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_isr': i2c-designware-core.c:(.text+0x724): multiple definition of `i2c_dw_isr' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x63c): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_xfer': i2c-designware-core.c:(.text+0x4b0): multiple definition of `i2c_dw_xfer' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x3c8): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_is_enabled': i2c-designware-core.c:(.text+0x9d4): multiple definition of `i2c_dw_is_enabled' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x8ec): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `dw_writel': i2c-designware-core.c:(.text+0x124): multiple definition of `dw_writel' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x3c): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_xfer_msg': i2c-designware-core.c:(.text+0x2e8): multiple definition of `i2c_dw_xfer_msg' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x200): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_enable': i2c-designware-core.c:(.text+0x9c8): multiple definition of `i2c_dw_enable' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x8e0): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_read_comp_param': i2c-designware-core.c:(.text+0xa24): multiple definition of `i2c_dw_read_comp_param' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x93c): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_disable': i2c-designware-core.c:(.text+0x9dc): multiple definition of `i2c_dw_disable' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x8f4): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_func': i2c-designware-core.c:(.text+0x710): multiple definition of `i2c_dw_func' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x628): first defined here drivers/i2c/busses/i2c-designware-pci.o: In function `i2c_dw_disable_int': i2c-designware-core.c:(.text+0xa18): multiple definition of `i2c_dw_disable_int' drivers/i2c/busses/i2c-designware-platform.o:i2c-designware-platdrv.c:(.text+0x930): first defined here make[3]: *** [drivers/i2c/busses/built-in.o] Error 1 make[2]: *** [drivers/i2c/busses] Error 2 make[1]: *** [drivers/i2c] Error 2 make: *** [drivers] Error 2 Signed-off-by: Axel Lin <[email protected]> Signed-off-by: Jean Delvare <[email protected]> Tested-by: Jiri Slaby <[email protected]> Cc: [email protected] [3.2+]
1 parent 4a8f1dd commit e68bb91

3 files changed

Lines changed: 19 additions & 2 deletions

File tree

drivers/i2c/busses/Kconfig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,9 +355,13 @@ config I2C_DAVINCI
355355
devices such as DaVinci NIC.
356356
For details please see http://www.ti.com/davinci
357357

358+
config I2C_DESIGNWARE_CORE
359+
tristate
360+
358361
config I2C_DESIGNWARE_PLATFORM
359362
tristate "Synopsys DesignWare Platform"
360363
depends on HAVE_CLK
364+
select I2C_DESIGNWARE_CORE
361365
help
362366
If you say yes to this option, support will be included for the
363367
Synopsys DesignWare I2C adapter. Only master mode is supported.
@@ -368,6 +372,7 @@ config I2C_DESIGNWARE_PLATFORM
368372
config I2C_DESIGNWARE_PCI
369373
tristate "Synopsys DesignWare PCI"
370374
depends on PCI
375+
select I2C_DESIGNWARE_CORE
371376
help
372377
If you say yes to this option, support will be included for the
373378
Synopsys DesignWare I2C adapter. Only master mode is supported.

drivers/i2c/busses/Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@ obj-$(CONFIG_I2C_AU1550) += i2c-au1550.o
3333
obj-$(CONFIG_I2C_BLACKFIN_TWI) += i2c-bfin-twi.o
3434
obj-$(CONFIG_I2C_CPM) += i2c-cpm.o
3535
obj-$(CONFIG_I2C_DAVINCI) += i2c-davinci.o
36+
obj-$(CONFIG_I2C_DESIGNWARE_CORE) += i2c-designware-core.o
3637
obj-$(CONFIG_I2C_DESIGNWARE_PLATFORM) += i2c-designware-platform.o
37-
i2c-designware-platform-objs := i2c-designware-platdrv.o i2c-designware-core.o
38+
i2c-designware-platform-objs := i2c-designware-platdrv.o
3839
obj-$(CONFIG_I2C_DESIGNWARE_PCI) += i2c-designware-pci.o
39-
i2c-designware-pci-objs := i2c-designware-pcidrv.o i2c-designware-core.o
40+
i2c-designware-pci-objs := i2c-designware-pcidrv.o
4041
obj-$(CONFIG_I2C_EG20T) += i2c-eg20t.o
4142
obj-$(CONFIG_I2C_GPIO) += i2c-gpio.o
4243
obj-$(CONFIG_I2C_HIGHLANDER) += i2c-highlander.o

drivers/i2c/busses/i2c-designware-core.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
* ----------------------------------------------------------------------------
2626
*
2727
*/
28+
#include <linux/export.h>
2829
#include <linux/clk.h>
2930
#include <linux/errno.h>
3031
#include <linux/err.h>
@@ -316,6 +317,7 @@ int i2c_dw_init(struct dw_i2c_dev *dev)
316317
dw_writel(dev, dev->master_cfg , DW_IC_CON);
317318
return 0;
318319
}
320+
EXPORT_SYMBOL_GPL(i2c_dw_init);
319321

320322
/*
321323
* Waiting for bus not busy
@@ -568,12 +570,14 @@ i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
568570

569571
return ret;
570572
}
573+
EXPORT_SYMBOL_GPL(i2c_dw_xfer);
571574

572575
u32 i2c_dw_func(struct i2c_adapter *adap)
573576
{
574577
struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
575578
return dev->functionality;
576579
}
580+
EXPORT_SYMBOL_GPL(i2c_dw_func);
577581

578582
static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
579583
{
@@ -678,17 +682,20 @@ irqreturn_t i2c_dw_isr(int this_irq, void *dev_id)
678682

679683
return IRQ_HANDLED;
680684
}
685+
EXPORT_SYMBOL_GPL(i2c_dw_isr);
681686

682687
void i2c_dw_enable(struct dw_i2c_dev *dev)
683688
{
684689
/* Enable the adapter */
685690
dw_writel(dev, 1, DW_IC_ENABLE);
686691
}
692+
EXPORT_SYMBOL_GPL(i2c_dw_enable);
687693

688694
u32 i2c_dw_is_enabled(struct dw_i2c_dev *dev)
689695
{
690696
return dw_readl(dev, DW_IC_ENABLE);
691697
}
698+
EXPORT_SYMBOL_GPL(i2c_dw_is_enabled);
692699

693700
void i2c_dw_disable(struct dw_i2c_dev *dev)
694701
{
@@ -699,18 +706,22 @@ void i2c_dw_disable(struct dw_i2c_dev *dev)
699706
dw_writel(dev, 0, DW_IC_INTR_MASK);
700707
dw_readl(dev, DW_IC_CLR_INTR);
701708
}
709+
EXPORT_SYMBOL_GPL(i2c_dw_disable);
702710

703711
void i2c_dw_clear_int(struct dw_i2c_dev *dev)
704712
{
705713
dw_readl(dev, DW_IC_CLR_INTR);
706714
}
715+
EXPORT_SYMBOL_GPL(i2c_dw_clear_int);
707716

708717
void i2c_dw_disable_int(struct dw_i2c_dev *dev)
709718
{
710719
dw_writel(dev, 0, DW_IC_INTR_MASK);
711720
}
721+
EXPORT_SYMBOL_GPL(i2c_dw_disable_int);
712722

713723
u32 i2c_dw_read_comp_param(struct dw_i2c_dev *dev)
714724
{
715725
return dw_readl(dev, DW_IC_COMP_PARAM_1);
716726
}
727+
EXPORT_SYMBOL_GPL(i2c_dw_read_comp_param);

0 commit comments

Comments
 (0)