MIPS: Netlogic: Platform changes for XLR/XLS I2C
authorJayachandran C <jayachandranc@netlogicmicro.com>
Tue, 24 Jul 2012 15:28:54 +0000 (17:28 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 24 Jul 2012 15:28:54 +0000 (17:28 +0200)
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>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/3757/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/configs/nlm_xlr_defconfig
arch/mips/netlogic/xlr/platform.c

index d0b857d98c91703b01950f9d1a705c1048cd7ac0..138f698d7c00048c4b172718891bac49ef778b61 100644 (file)
@@ -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
index cb0ab63089dbcd1124066073781c6b5ded1583a4..71b44d82621db706844aacfb52f698128a6f58b6 100644 (file)
@@ -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