|
@@ -20,6 +20,10 @@
|
|
|
#include <linux/gpio.h>
|
|
|
#include <linux/regulator/machine.h>
|
|
|
#include <linux/mfd/tps6586x.h>
|
|
|
+#include <linux/of.h>
|
|
|
+#include <linux/of_i2c.h>
|
|
|
+
|
|
|
+#include <asm/mach-types.h>
|
|
|
|
|
|
#include <mach/irqs.h>
|
|
|
|
|
@@ -110,7 +114,26 @@ static struct i2c_board_info __initdata harmony_regulators[] = {
|
|
|
|
|
|
int __init harmony_regulator_init(void)
|
|
|
{
|
|
|
- i2c_register_board_info(3, harmony_regulators, 1);
|
|
|
+ if (machine_is_harmony()) {
|
|
|
+ i2c_register_board_info(3, harmony_regulators, 1);
|
|
|
+ } else { /* Harmony, booted using device tree */
|
|
|
+ struct device_node *np;
|
|
|
+ struct i2c_adapter *adapter;
|
|
|
+
|
|
|
+ np = of_find_node_by_path("/i2c@7000d000");
|
|
|
+ if (np == NULL) {
|
|
|
+ pr_err("Could not find device_node for DVC I2C\n");
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+
|
|
|
+ adapter = of_find_i2c_adapter_by_node(np);
|
|
|
+ if (!adapter) {
|
|
|
+ pr_err("Could not find i2c_adapter for DVC I2C\n");
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+
|
|
|
+ i2c_new_device(adapter, harmony_regulators);
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|