]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/i2c/busses/i2c-powermac.c
hwmon: (ams) Convert to a new-style i2c driver
[linux-2.6-omap-h63xx.git] / drivers / i2c / busses / i2c-powermac.c
index 0e7b1c6724aa5e0059deede2ca40f3cf5fcd89e8..60ca91745e55cebc37ae21a8857d00348a819f00 100644 (file)
@@ -259,6 +259,35 @@ static int __devinit i2c_powermac_probe(struct platform_device *dev)
        }
 
        printk(KERN_INFO "PowerMac i2c bus %s registered\n", name);
+
+       if (!strncmp(basename, "uni-n", 5)) {
+               struct device_node *np;
+               const u32 *prop;
+               struct i2c_board_info info;
+
+               /* Instantiate I2C motion sensor if present */
+               np = of_find_node_by_name(NULL, "accelerometer");
+               if (np && of_device_is_compatible(np, "AAPL,accelerometer_1") &&
+                   (prop = of_get_property(np, "reg", NULL))) {
+                       int i2c_bus;
+                       const char *tmp_bus;
+
+                       /* look for bus either using "reg" or by path */
+                       tmp_bus = strstr(np->full_name, "/i2c-bus@");
+                       if (tmp_bus)
+                               i2c_bus = *(tmp_bus + 9) - '0';
+                       else
+                               i2c_bus = ((*prop) >> 8) & 0x0f;
+
+                       if (pmac_i2c_get_channel(bus) == i2c_bus) {
+                               memset(&info, 0, sizeof(struct i2c_board_info));
+                               info.addr = ((*prop) & 0xff) >> 1;
+                               strlcpy(info.type, "ams", I2C_NAME_SIZE);
+                               i2c_new_device(adapter, &info);
+                       }
+               }
+       }
+
        return rc;
 }