blob: 1eb87cbb5443308013cd517ea030d8db655c4350 [file] [log] [blame]
/*
* Copyright (C) STMicroelectronics 2009
* Copyright (C) ST-Ericsson SA 2010
*
* License Terms: GNU General Public License v2
* Author: Sundar Iyer <sundar.iyer@stericsson.com>
*
* Board specific file for regulator machine initialization
*
*/
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/amba/bus.h>
#include <linux/regulator/machine.h>
#include <mach/devices.h>
/* U8500 Power section */
#ifdef CONFIG_REGULATOR
#define U8500_VAPE_REGULATOR_MIN_VOLTAGE (1800000)
#define U8500_VAPE_REGULATOR_MAX_VOLTAGE (2000000)
/* tying VAPE regulator to symbolic consumer devices */
static struct regulator_consumer_supply db8500_vape_consumers[] = {
{
.supply = "v-ape",
},
};
/* VAPE supply, for interconnect */
static struct regulator_init_data db8500_vape_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "DB8500-VAPE",
.min_uV = U8500_VAPE_REGULATOR_MIN_VOLTAGE,
.max_uV = U8500_VAPE_REGULATOR_MAX_VOLTAGE,
.input_uV = 1, /* notional, for set_mode* */
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_DRMS |
REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(db8500_vape_consumers),
.consumer_supplies = db8500_vape_consumers,
};
static struct platform_device db8500_vape_regulator_dev = {
.name = "db8500-regulator",
.id = 0,
.dev = {
.platform_data = &db8500_vape_init,
},
};
/* VANA Supply, for analogue part of displays */
#define U8500_VANA_REGULATOR_MIN_VOLTAGE (0)
#define U8500_VANA_REGULATOR_MAX_VOLTAGE (1200000)
static struct regulator_consumer_supply db8500_vana_consumers[] = {
{
.dev = &ux500_mcde_device.dev,
.supply = "v-ana",
},
};
static struct regulator_init_data db8500_vana_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "VANA",
.min_uV = U8500_VANA_REGULATOR_MIN_VOLTAGE,
.max_uV = U8500_VANA_REGULATOR_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL |
REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(db8500_vana_consumers),
.consumer_supplies = db8500_vana_consumers,
};
static struct platform_device db8500_vana_regulator_dev = {
.name = "db8500-regulator",
.id = 1,
.dev = {
.platform_data = &db8500_vana_init,
},
};
#ifdef CONFIG_SENSORS1P_MOP
extern struct platform_device sensors1p_device;
#endif
/* VAUX1 supply */
#define AB8500_VAUXN_LDO_MIN_VOLTAGE (1100000)
#define AB8500_VAUXN_LDO_MAX_VOLTAGE (3300000)
static struct regulator_consumer_supply ab8500_vaux1_consumers[] = {
{
.dev = NULL,
.supply = "v-display",
},
#ifdef CONFIG_SENSORS1P_MOP
{
.dev = &sensors1p_device.dev,
.supply = "v-proximity",
},
{
.dev = &sensors1p_device.dev,
.supply = "v-hal",
},
#endif
};
static struct regulator_init_data ab8500_vaux1_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "AB8500-VAUX1",
.min_uV = AB8500_VAUXN_LDO_MIN_VOLTAGE,
.max_uV = AB8500_VAUXN_LDO_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),
.consumer_supplies = ab8500_vaux1_consumers,
};
/* as the vaux2 is not a u8500 specific regulator, it is named
* as the ab8500 series */
static struct platform_device ab8500_vaux1_regulator_dev = {
.name = "ab8500-regulator",
.id = 0,
.dev = {
.platform_data = &ab8500_vaux1_init,
},
};
/* VAUX2 supply */
/* supply for on-board eMMC */
static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {
{
.dev = &ux500_sdi4_device.dev,
.supply = "v-eMMC",
}
};
static struct regulator_init_data ab8500_vaux2_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "AB8500-VAUX2",
.min_uV = AB8500_VAUXN_LDO_MIN_VOLTAGE,
.max_uV = AB8500_VAUXN_LDO_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),
.consumer_supplies = ab8500_vaux2_consumers,
};
static struct platform_device ab8500_vaux2_regulator_dev = {
.name = "ab8500-regulator",
.id = 1,
.dev = {
.platform_data = &ab8500_vaux2_init,
},
};
/* VAUX3 supply */
/* supply for MMC-SD */
static struct regulator_consumer_supply ab8500_vaux3_consumers[] = {
{
.dev = &ux500_sdi0_device.dev,
.supply = "v-MMC-SD"
}
};
static struct regulator_init_data ab8500_vaux3_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "AB8500-VAUX3",
.min_uV = AB8500_VAUXN_LDO_MIN_VOLTAGE,
.max_uV = AB8500_VAUXN_LDO_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),
.consumer_supplies = ab8500_vaux3_consumers,
};
static struct platform_device ab8500_vaux3_regulator_dev = {
.name = "ab8500-regulator",
.id = 9,
.dev = {
.platform_data = &ab8500_vaux3_init,
},
};
/* supply for tvout, gpadc, TVOUT LDO */
#define AB8500_VTVOUT_LDO_MIN_VOLTAGE (0)
#define AB8500_VTVOUT_LDO_MAX_VOLTAGE (2000000)
static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {
{
.supply = "v-tvout",
},
{
.supply = "ab8500-gpadc",
}
};
static struct regulator_init_data ab8500_vtvout_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "AB8500-VTVOUT",
.min_uV = AB8500_VTVOUT_LDO_MIN_VOLTAGE,
.max_uV = AB8500_VTVOUT_LDO_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(ab8500_vtvout_consumers),
.consumer_supplies = ab8500_vtvout_consumers,
};
static struct platform_device ab8500_vtvout_regulator_dev = {
.name = "ab8500-regulator",
.id = 2,
.dev = {
.platform_data = &ab8500_vtvout_init,
},
};
/* supply for usb, VBUS LDO */
#define AB8500_VBUS_REGULATOR_MIN_VOLTAGE (0)
#define AB8500_VBUS_REGULATOR_MAX_VOLTAGE (5000000)
static struct regulator_consumer_supply ab8500_vbus_consumers[] = {
{
.supply = "v-bus",
}
};
static struct regulator_init_data ab8500_vbus_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "AB8500-VBUS",
.min_uV = AB8500_VBUS_REGULATOR_MIN_VOLTAGE,
.max_uV = AB8500_VBUS_REGULATOR_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(ab8500_vbus_consumers),
.consumer_supplies = ab8500_vbus_consumers,
};
static struct platform_device ab8500_vbus_regulator_dev = {
.name = "ab8500-regulator",
.id = 3,
.dev = {
.platform_data = &ab8500_vbus_init,
},
};
/* supply for ab8500-vaudio, VAUDIO LDO */
#define AB8500_VAUDIO_REGULATOR_MIN_VOLTAGE (1925000)
#define AB8500_VAUDIO_REGULATOR_MAX_VOLTAGE (2075000)
static struct regulator_consumer_supply ab8500_vaudio_consumers[] = {
{
.supply = "v-audio",
}
};
static struct regulator_init_data ab8500_vaudio_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "AB8500-VAUDIO",
.min_uV = AB8500_VAUDIO_REGULATOR_MIN_VOLTAGE,
.max_uV = AB8500_VAUDIO_REGULATOR_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(ab8500_vaudio_consumers),
.consumer_supplies = ab8500_vaudio_consumers,
};
static struct platform_device ab8500_vaudio_regulator_dev = {
.name = "ab8500-regulator",
.id = 4,
.dev = {
.platform_data = &ab8500_vaudio_init,
},
};
/* supply for v-anamic1 VAMic1-LDO */
#define AB8500_VAMIC1_REGULATOR_MIN_VOLTAGE (2000000)
#define AB8500_VAMIC1_REGULATOR_MAX_VOLTAGE (2100000)
static struct regulator_consumer_supply ab8500_vamic1_consumers[] = {
{
.supply = "v-amic1",
}
};
static struct regulator_init_data ab8500_vamic1_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "AB8500-VAMIC1",
.min_uV = AB8500_VAMIC1_REGULATOR_MIN_VOLTAGE,
.max_uV = AB8500_VAMIC1_REGULATOR_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers),
.consumer_supplies = ab8500_vamic1_consumers,
};
static struct platform_device ab8500_vamic1_regulator_dev = {
.name = "ab8500-regulator",
.id = 5,
.dev = {
.platform_data = &ab8500_vamic1_init,
},
};
/* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */
static struct regulator_consumer_supply ab8500_vamic2_consumers[] = {
{
.supply = "v-amic2",
}
};
static struct regulator_init_data ab8500_vamic2_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "AB8500-VAMIC2",
.min_uV = AB8500_VAMIC1_REGULATOR_MIN_VOLTAGE,
.max_uV = AB8500_VAMIC1_REGULATOR_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers),
.consumer_supplies = ab8500_vamic2_consumers,
};
static struct platform_device ab8500_vamic2_regulator_dev = {
.name = "ab8500-regulator",
.id = 6,
.dev = {
.platform_data = &ab8500_vamic2_init,
},
};
/* supply for v-dmic, VDMIC LDO */
#define AB8500_VDMIC_REGULATOR_MIN_VOLTAGE (1700000)
#define AB8500_VDMIC_REGULATOR_MAX_VOLTAGE (1950000)
static struct regulator_consumer_supply ab8500_vdmic_consumers[] = {
{
.supply = "v-dmic",
}
};
static struct regulator_init_data ab8500_vdmic_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "AB8500-VDMIC",
.min_uV = AB8500_VDMIC_REGULATOR_MIN_VOLTAGE,
.max_uV = AB8500_VDMIC_REGULATOR_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(ab8500_vdmic_consumers),
.consumer_supplies = ab8500_vdmic_consumers,
};
static struct platform_device ab8500_vdmic_regulator_dev = {
.name = "ab8500-regulator",
.id = 7,
.dev = {
.platform_data = &ab8500_vdmic_init,
},
};
/* supply for v-intcore12, VINTCORE12 LDO */
#define AB8500_VINTCORE_REGULATOR_MIN_VOLTAGE (1200000)
#define AB8500_VINTCORE_REGULATOR_MAX_VOLTAGE (1350000)
static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {
{
.supply = "v-intcore",
}
};
static struct regulator_init_data ab8500_vintcore_init = {
.supply_regulator_dev = NULL,
.constraints = {
.name = "AB8500-VINTCORE",
.min_uV = AB8500_VINTCORE_REGULATOR_MIN_VOLTAGE,
.max_uV = AB8500_VINTCORE_REGULATOR_MAX_VOLTAGE,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
.valid_modes_mask = REGULATOR_MODE_NORMAL|REGULATOR_MODE_IDLE,
},
.num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),
.consumer_supplies = ab8500_vintcore_consumers,
};
static struct platform_device ab8500_vintcore_regulator_dev = {
.name = "ab8500-regulator",
.id = 8,
.dev = {
.platform_data = &ab8500_vintcore_init,
},
};
static struct platform_device *u8500_regulators[] = {
&db8500_vape_regulator_dev,
&db8500_vana_regulator_dev,
&ab8500_vaux1_regulator_dev,
&ab8500_vaux2_regulator_dev,
&ab8500_vaux3_regulator_dev,
&ab8500_vtvout_regulator_dev,
&ab8500_vbus_regulator_dev,
&ab8500_vaudio_regulator_dev,
&ab8500_vamic1_regulator_dev,
&ab8500_vamic2_regulator_dev,
&ab8500_vdmic_regulator_dev,
&ab8500_vintcore_regulator_dev,
};
#endif
/* FIXME: move this to the appropriate file */
void __init u8500_init_regulators(void)
{
#ifdef CONFIG_REGULATOR
/* we want the on-chip regulator before any device registration */
platform_add_devices(u8500_regulators, ARRAY_SIZE(u8500_regulators));
#endif
}