[ARM] pxa/mioa701: add Maxim 1586 voltage regulator
authorRobert Jarzmik <robert.jarzmik@free.fr>
Thu, 30 Apr 2009 03:53:30 +0000 (11:53 +0800)
committerEric Miao <eric.y.miao@gmail.com>
Tue, 16 Jun 2009 13:03:35 +0000 (21:03 +0800)
On this board, the PXA272 CPU voltage VCC_CORE is provided
by a Maxim 1586 voltage regulator. Use the regulator
framework to provide VCC_CORE control. When cpufreq will be
updated to ask for vcc_core, this will optimize power
drained by the board.

Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Eric Miao <eric.miao@marvell.com>
arch/arm/mach-pxa/mioa701.c

index 4dc8c2ec40a912cffbab11e676f5f53bd046049d..99e5a880a4adf494f4ca2f51e8fab1f800d936fb 100644 (file)
@@ -37,6 +37,7 @@
 #include <linux/wm97xx_batt.h>
 #include <linux/mtd/physmap.h>
 #include <linux/usb/gpio_vbus.h>
+#include <linux/regulator/max1586.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -716,6 +717,37 @@ static struct wm97xx_batt_info mioa701_battery_data = {
        .batt_name      = "mioa701_battery",
 };
 
+/*
+ * Voltage regulation
+ */
+static struct regulator_consumer_supply max1586_consumers[] = {
+       {
+               .supply = "vcc_core",
+       }
+};
+
+static struct regulator_init_data max1586_v3_info = {
+       .constraints = {
+               .name = "vcc_core range",
+               .min_uV = 1000000,
+               .max_uV = 1705000,
+               .always_on = 1,
+               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+       },
+       .num_consumer_supplies = ARRAY_SIZE(max1586_consumers),
+       .consumer_supplies = max1586_consumers,
+};
+
+static struct max1586_subdev_data max1586_subdevs[] = {
+       { .name = "vcc_core", .id = MAX1586_V3,
+         .platform_data = &max1586_v3_info },
+};
+
+static struct max1586_platform_data max1586_info = {
+       .subdevs = max1586_subdevs,
+       .num_subdevs = ARRAY_SIZE(max1586_subdevs),
+};
+
 /*
  * Camera interface
  */
@@ -725,6 +757,13 @@ struct pxacamera_platform_data mioa701_pxacamera_platform_data = {
        .mclk_10khz = 5000,
 };
 
+static struct i2c_board_info __initdata mioa701_pi2c_devices[] = {
+       {
+               I2C_BOARD_INFO("max1586", 0x14),
+               .platform_data = &max1586_info,
+       },
+};
+
 static struct soc_camera_link iclink = {
        .bus_id = 0, /* Must match id in pxa27x_device_camera in device.c */
 };
@@ -825,7 +864,9 @@ static void __init mioa701_machine_init(void)
        platform_add_devices(devices, ARRAY_SIZE(devices));
        gsm_init();
 
+       i2c_register_board_info(1, ARRAY_AND_SIZE(mioa701_pi2c_devices));
        pxa_set_i2c_info(&i2c_pdata);
+       pxa27x_set_i2c_power_info(NULL);
        pxa_set_camera_info(&mioa701_pxacamera_platform_data);
        i2c_register_board_info(0, ARRAY_AND_SIZE(mioa701_i2c_devices));
 }