i2c: pxa: Add support for the I2C units found in Armada 3700
The Armada 3700 has two I2C controllers that is compliant with the I2C Bus Specificiation 2.1, supports multi-master and different bus speed: Standard mode (up to 100 KHz), Fast mode (up to 400 KHz), High speed mode (up to 3.4 Mhz). This IP block has a lot of similarity with the PXA, except some register offsets and bitfield. This commits adds a basic support for this I2C unit. Signed-off-by: Romain Perier <romain.perier@free-electrons.com> Tested-by: Gregory CLEMENT <gregory.clement@free-electrons.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
parent
6c14bdacdb
commit
294be03c62
|
@ -763,7 +763,7 @@ config I2C_PUV3
|
|||
|
||||
config I2C_PXA
|
||||
tristate "Intel PXA2XX I2C adapter"
|
||||
depends on ARCH_PXA || ARCH_MMP || (X86_32 && PCI && OF)
|
||||
depends on ARCH_PXA || ARCH_MMP || ARCH_MVEBU || (X86_32 && PCI && OF)
|
||||
help
|
||||
If you have devices in the PXA I2C bus, say yes to this option.
|
||||
This driver can also be built as a module. If so, the module
|
||||
|
|
|
@ -57,8 +57,12 @@ enum pxa_i2c_types {
|
|||
REGS_PXA3XX,
|
||||
REGS_CE4100,
|
||||
REGS_PXA910,
|
||||
REGS_A3700,
|
||||
};
|
||||
|
||||
#define ICR_BUSMODE_FM (1 << 16) /* shifted fast mode for armada-3700 */
|
||||
#define ICR_BUSMODE_HS (1 << 17) /* shifted high speed mode for armada-3700 */
|
||||
|
||||
/*
|
||||
* I2C registers definitions
|
||||
*/
|
||||
|
@ -93,6 +97,15 @@ static struct pxa_reg_layout pxa_reg_layout[] = {
|
|||
.ilcr = 0x28,
|
||||
.iwcr = 0x30,
|
||||
},
|
||||
[REGS_A3700] = {
|
||||
.ibmr = 0x00,
|
||||
.idbr = 0x04,
|
||||
.icr = 0x08,
|
||||
.isr = 0x0c,
|
||||
.isar = 0x10,
|
||||
.fm = ICR_BUSMODE_FM,
|
||||
.hs = ICR_BUSMODE_HS,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct platform_device_id i2c_pxa_id_table[] = {
|
||||
|
@ -100,6 +113,7 @@ static const struct platform_device_id i2c_pxa_id_table[] = {
|
|||
{ "pxa3xx-pwri2c", REGS_PXA3XX },
|
||||
{ "ce4100-i2c", REGS_CE4100 },
|
||||
{ "pxa910-i2c", REGS_PXA910 },
|
||||
{ "armada-3700-i2c", REGS_A3700 },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(platform, i2c_pxa_id_table);
|
||||
|
@ -1141,6 +1155,7 @@ static const struct of_device_id i2c_pxa_dt_ids[] = {
|
|||
{ .compatible = "mrvl,pxa-i2c", .data = (void *)REGS_PXA2XX },
|
||||
{ .compatible = "mrvl,pwri2c", .data = (void *)REGS_PXA3XX },
|
||||
{ .compatible = "mrvl,mmp-twsi", .data = (void *)REGS_PXA910 },
|
||||
{ .compatible = "marvell,armada-3700-i2c", .data = (void *)REGS_A3700 },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, i2c_pxa_dt_ids);
|
||||
|
|
Loading…
Reference in New Issue