linux-mips
[Top] [All Lists]

[PATCH 10/14] MIPS: Netlogic: Platform changes for XLR/XLS I2C

To: linux-mips@linux-mips.org, ralf@linux-mips.org
Subject: [PATCH 10/14] MIPS: Netlogic: Platform changes for XLR/XLS I2C
From: "Jayachandran C" <jayachandranc@netlogicmicro.com>
Date: Tue, 8 May 2012 18:12:04 +0530
Cc: "Jayachandran C" <jayachandranc@netlogicmicro.com>
In-reply-to: <1336480928-18887-1-git-send-email-jayachandranc@netlogicmicro.com>
References: <1336480928-18887-1-git-send-email-jayachandranc@netlogicmicro.com>
Sender: linux-mips-bounce@linux-mips.org
Add platform code for XLR/XLS I2C controller and devices. Add
devices on the I2C bus on the XLR/XLS developement boards.

Signed-off-by: Jayachandran C <jayachandranc@netlogicmicro.com>
---
 arch/mips/configs/nlm_xlr_defconfig |    4 +++
 arch/mips/netlogic/xlr/platform.c   |   51 +++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+)

diff --git a/arch/mips/configs/nlm_xlr_defconfig 
b/arch/mips/configs/nlm_xlr_defconfig
index d0b857d..138f698 100644
--- a/arch/mips/configs/nlm_xlr_defconfig
+++ b/arch/mips/configs/nlm_xlr_defconfig
@@ -367,6 +367,10 @@ CONFIG_SERIAL_8250_RSA=y
 CONFIG_HW_RANDOM=y
 CONFIG_HW_RANDOM_TIMERIOMEM=m
 CONFIG_RAW_DRIVER=m
+CONFIG_I2C=y
+CONFIG_I2C_XLR=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_DS1374=y
 # CONFIG_HWMON is not set
 # CONFIG_VGA_CONSOLE is not set
 # CONFIG_HID_SUPPORT is not set
diff --git a/arch/mips/netlogic/xlr/platform.c 
b/arch/mips/netlogic/xlr/platform.c
index cb0ab63..71b44d8 100644
--- a/arch/mips/netlogic/xlr/platform.c
+++ b/arch/mips/netlogic/xlr/platform.c
@@ -14,6 +14,7 @@
 #include <linux/resource.h>
 #include <linux/serial_8250.h>
 #include <linux/serial_reg.h>
+#include <linux/i2c.h>
 
 #include <asm/netlogic/haldefs.h>
 #include <asm/netlogic/xlr/iomap.h>
@@ -186,3 +187,53 @@ int xls_platform_usb_init(void)
 
 arch_initcall(xls_platform_usb_init);
 #endif
+
+#ifdef CONFIG_I2C
+static struct i2c_board_info nlm_i2c_board_info1[] __initdata = {
+       /* All XLR boards have this RTC and Max6657 Temp Chip */
+       [0] = {
+               .type   = "ds1374",
+               .addr   = 0x68
+       },
+       [1] = {
+               .type   = "lm90",
+               .addr   = 0x4c
+       },
+};
+
+static struct resource i2c_resources[] = {
+       [0] = {
+               .start  = 0,    /* filled at init */
+               .end    = 0,
+               .flags  = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device nlm_xlr_i2c_1 = {
+       .name           = "xlr-i2cbus",
+       .id             = 1,
+       .num_resources  = 1,
+       .resource       = i2c_resources,
+};
+
+static int __init nlm_i2c_init(void)
+{
+       int err = 0;
+       unsigned int offset;
+
+       /* I2C bus 0 does not have any useful devices, configure only bus 1 */
+       offset = NETLOGIC_IO_I2C_1_OFFSET;
+       nlm_xlr_i2c_1.resource[0].start = CPHYSADDR(nlm_mmio_base(offset));
+       nlm_xlr_i2c_1.resource[0].end = nlm_xlr_i2c_1.resource[0].start + 0xfff;
+
+       platform_device_register(&nlm_xlr_i2c_1);
+
+       err = i2c_register_board_info(1, nlm_i2c_board_info1,
+                               ARRAY_SIZE(nlm_i2c_board_info1));
+       if (err < 0)
+               pr_err("nlm-i2c: cannot register board I2C devices\n");
+       return err;
+}
+
+arch_initcall(nlm_i2c_init);
+#endif
-- 
1.7.9.5



<Prev in Thread] Current Thread [Next in Thread>