11032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson/*
21032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson * Copyright (C) ST-Ericsson SA 2010
31032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson *
41032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson * License Terms: GNU General Public License v2
51032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson * Authors: Sundar Iyer <sundar.iyer@stericsson.com> for ST-Ericsson
61032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson *          Bengt Jonsson <bengt.g.jonsson@stericsson.com> for ST-Ericsson
71032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson *
81032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson * Power domain regulators on DB8500
91032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson */
101032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
111032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson#include <linux/kernel.h>
121032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson#include <linux/init.h>
131032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson#include <linux/err.h>
141032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson#include <linux/spinlock.h>
151032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson#include <linux/platform_device.h>
1673180f85f4ffbb66843f8248811b2ade29b22df2Mattias Nilsson#include <linux/mfd/dbx500-prcmu.h>
171032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson#include <linux/regulator/driver.h>
181032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson#include <linux/regulator/machine.h>
191032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson#include <linux/regulator/db8500-prcmu.h>
2065602c32ee9b5500e3cb617ccec2154ee2191898Paul Gortmaker#include <linux/module.h>
2138e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson#include "dbx500-prcmu.h"
221032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
231032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int db8500_regulator_enable(struct regulator_dev *rdev)
241032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
2538e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	struct dbx500_regulator_info *info = rdev_get_drvdata(rdev);
261032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
271032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	if (info == NULL)
281032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		return -EINVAL;
291032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
301032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	dev_vdbg(rdev_get_dev(rdev), "regulator-%s-enable\n",
311032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		info->desc.name);
321032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
3338e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	if (!info->is_enabled) {
3438e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson		info->is_enabled = true;
3538e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson		if (!info->exclude_from_power_state)
3638e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson			power_state_active_enable();
3738e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	}
381032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
391032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	return 0;
401032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
411032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
421032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int db8500_regulator_disable(struct regulator_dev *rdev)
431032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
4438e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	struct dbx500_regulator_info *info = rdev_get_drvdata(rdev);
451032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	int ret = 0;
461032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
471032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	if (info == NULL)
481032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		return -EINVAL;
491032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
501032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	dev_vdbg(rdev_get_dev(rdev), "regulator-%s-disable\n",
511032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		info->desc.name);
521032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
5338e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	if (info->is_enabled) {
5438e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson		info->is_enabled = false;
5538e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson		if (!info->exclude_from_power_state)
5638e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson			ret = power_state_active_disable();
5738e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	}
581032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
591032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	return ret;
601032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
611032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
621032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int db8500_regulator_is_enabled(struct regulator_dev *rdev)
631032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
6438e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	struct dbx500_regulator_info *info = rdev_get_drvdata(rdev);
651032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
661032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	if (info == NULL)
671032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		return -EINVAL;
681032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
691032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	dev_vdbg(rdev_get_dev(rdev), "regulator-%s-is_enabled (is_enabled):"
701032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		" %i\n", info->desc.name, info->is_enabled);
711032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
721032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	return info->is_enabled;
731032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
741032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
751032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson/* db8500 regulator operations */
761032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic struct regulator_ops db8500_regulator_ops = {
771032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	.enable			= db8500_regulator_enable,
781032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	.disable		= db8500_regulator_disable,
791032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	.is_enabled		= db8500_regulator_is_enabled,
801032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson};
811032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
821032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson/*
831032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson * EPOD control
841032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson */
851032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic bool epod_on[NUM_EPOD_ID];
861032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic bool epod_ramret[NUM_EPOD_ID];
871032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
881032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int enable_epod(u16 epod_id, bool ramret)
891032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
901032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	int ret;
911032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
921032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	if (ramret) {
931032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		if (!epod_on[epod_id]) {
941032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			ret = prcmu_set_epod(epod_id, EPOD_STATE_RAMRET);
951032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			if (ret < 0)
961032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson				return ret;
971032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		}
981032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		epod_ramret[epod_id] = true;
991032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	} else {
1001032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		ret = prcmu_set_epod(epod_id, EPOD_STATE_ON);
1011032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		if (ret < 0)
1021032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			return ret;
1031032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		epod_on[epod_id] = true;
1041032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	}
1051032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1061032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	return 0;
1071032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
1081032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1091032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int disable_epod(u16 epod_id, bool ramret)
1101032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
1111032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	int ret;
1121032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1131032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	if (ramret) {
1141032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		if (!epod_on[epod_id]) {
1151032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			ret = prcmu_set_epod(epod_id, EPOD_STATE_OFF);
1161032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			if (ret < 0)
1171032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson				return ret;
1181032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		}
1191032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		epod_ramret[epod_id] = false;
1201032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	} else {
1211032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		if (epod_ramret[epod_id]) {
1221032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			ret = prcmu_set_epod(epod_id, EPOD_STATE_RAMRET);
1231032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			if (ret < 0)
1241032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson				return ret;
1251032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		} else {
1261032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			ret = prcmu_set_epod(epod_id, EPOD_STATE_OFF);
1271032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			if (ret < 0)
1281032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson				return ret;
1291032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		}
1301032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		epod_on[epod_id] = false;
1311032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	}
1321032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1331032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	return 0;
1341032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
1351032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1361032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson/*
1371032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson * Regulator switch
1381032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson */
1391032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int db8500_regulator_switch_enable(struct regulator_dev *rdev)
1401032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
14138e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	struct dbx500_regulator_info *info = rdev_get_drvdata(rdev);
1421032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	int ret;
1431032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1441032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	if (info == NULL)
1451032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		return -EINVAL;
1461032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1471032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	dev_vdbg(rdev_get_dev(rdev), "regulator-switch-%s-enable\n",
1481032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		info->desc.name);
1491032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1501032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	ret = enable_epod(info->epod_id, info->is_ramret);
1511032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	if (ret < 0) {
1521032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		dev_err(rdev_get_dev(rdev),
1531032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			"regulator-switch-%s-enable: prcmu call failed\n",
1541032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			info->desc.name);
1551032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		goto out;
1561032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	}
1571032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1581032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	info->is_enabled = true;
1591032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonout:
1601032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	return ret;
1611032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
1621032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1631032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int db8500_regulator_switch_disable(struct regulator_dev *rdev)
1641032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
16538e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	struct dbx500_regulator_info *info = rdev_get_drvdata(rdev);
1661032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	int ret;
1671032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1681032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	if (info == NULL)
1691032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		return -EINVAL;
1701032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1711032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	dev_vdbg(rdev_get_dev(rdev), "regulator-switch-%s-disable\n",
1721032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		info->desc.name);
1731032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1741032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	ret = disable_epod(info->epod_id, info->is_ramret);
1751032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	if (ret < 0) {
1761032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		dev_err(rdev_get_dev(rdev),
1771032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			"regulator_switch-%s-disable: prcmu call failed\n",
1781032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			info->desc.name);
1791032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		goto out;
1801032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	}
1811032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1821032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	info->is_enabled = 0;
1831032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonout:
1841032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	return ret;
1851032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
1861032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1871032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int db8500_regulator_switch_is_enabled(struct regulator_dev *rdev)
1881032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
18938e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	struct dbx500_regulator_info *info = rdev_get_drvdata(rdev);
1901032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1911032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	if (info == NULL)
1921032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		return -EINVAL;
1931032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1941032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	dev_vdbg(rdev_get_dev(rdev),
1951032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		"regulator-switch-%s-is_enabled (is_enabled): %i\n",
1961032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		info->desc.name, info->is_enabled);
1971032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
1981032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	return info->is_enabled;
1991032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
2001032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
2011032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic struct regulator_ops db8500_regulator_switch_ops = {
2021032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	.enable			= db8500_regulator_switch_enable,
2031032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	.disable		= db8500_regulator_switch_disable,
2041032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	.is_enabled		= db8500_regulator_switch_is_enabled,
2051032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson};
2061032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
2071032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson/*
2081032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson * Regulator information
2091032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson */
21038e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonssonstatic struct dbx500_regulator_info
21138e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonssondbx500_regulator_info[DB8500_NUM_REGULATORS] = {
2121032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_VAPE] = {
2131032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
2141032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-vape",
2151032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_VAPE,
2161032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_ops,
2171032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
2181032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
2191032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
2201032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
2211032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_VARM] = {
2221032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
2231032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-varm",
2241032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_VARM,
2251032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_ops,
2261032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
2271032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
2281032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
2291032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
2301032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_VMODEM] = {
2311032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
2321032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-vmodem",
2331032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_VMODEM,
2341032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_ops,
2351032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
2361032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
2371032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
2381032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
2391032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_VPLL] = {
2401032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
2411032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-vpll",
2421032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_VPLL,
2431032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_ops,
2441032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
2451032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
2461032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
2471032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
2481032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_VSMPS1] = {
2491032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
2501032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-vsmps1",
2511032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_VSMPS1,
2521032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_ops,
2531032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
2541032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
2551032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
2561032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
2571032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_VSMPS2] = {
2581032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
2591032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-vsmps2",
2601032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_VSMPS2,
2611032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_ops,
2621032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
2631032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
2641032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
2651032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.exclude_from_power_state = true,
2661032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
2671032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_VSMPS3] = {
2681032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
2691032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-vsmps3",
2701032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_VSMPS3,
2711032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_ops,
2721032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
2731032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
2741032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
2751032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
2761032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_VRF1] = {
2771032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
2781032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-vrf1",
2791032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_VRF1,
2801032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_ops,
2811032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
2821032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
2831032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
2841032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
2851032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_SVAMMDSP] = {
2861032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
2871032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-sva-mmdsp",
2881032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_SVAMMDSP,
2891032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
2901032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
2911032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
2921032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
2931032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id = EPOD_ID_SVAMMDSP,
2941032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
2951032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_SVAMMDSPRET] = {
2961032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
2971032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-sva-mmdsp-ret",
2981032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_SVAMMDSPRET,
2991032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
3001032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
3011032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
3021032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
3031032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id = EPOD_ID_SVAMMDSP,
3041032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.is_ramret = true,
3051032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
3061032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_SVAPIPE] = {
3071032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
3081032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-sva-pipe",
3091032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_SVAPIPE,
3101032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
3111032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
3121032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
3131032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
3141032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id = EPOD_ID_SVAPIPE,
3151032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
3161032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_SIAMMDSP] = {
3171032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
3181032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-sia-mmdsp",
3191032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_SIAMMDSP,
3201032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
3211032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
3221032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
3231032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
3241032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id = EPOD_ID_SIAMMDSP,
3251032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
3261032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_SIAMMDSPRET] = {
3271032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
3281032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-sia-mmdsp-ret",
3291032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_SIAMMDSPRET,
3301032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
3311032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
3321032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
3331032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
3341032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id = EPOD_ID_SIAMMDSP,
3351032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.is_ramret = true,
3361032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
3371032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_SIAPIPE] = {
3381032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
3391032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-sia-pipe",
3401032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_SIAPIPE,
3411032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
3421032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
3431032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
3441032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
3451032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id = EPOD_ID_SIAPIPE,
3461032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
3471032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_SGA] = {
3481032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
3491032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-sga",
3501032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_SGA,
3511032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
3521032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
3531032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
3541032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
3551032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id = EPOD_ID_SGA,
3561032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
3571032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_B2R2_MCDE] = {
3581032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
3591032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-b2r2-mcde",
3601032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_B2R2_MCDE,
3611032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
3621032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
3631032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
3641032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
3651032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id = EPOD_ID_B2R2_MCDE,
3661032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
3671032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_ESRAM12] = {
3681032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
3691032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-esram12",
3701032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_ESRAM12,
3711032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
3721032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
3731032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
3741032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
3751032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id	= EPOD_ID_ESRAM12,
3761032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.is_enabled	= true,
3771032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
3781032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_ESRAM12RET] = {
3791032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
3801032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-esram12-ret",
3811032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_ESRAM12RET,
3821032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
3831032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
3841032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
3851032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
3861032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id = EPOD_ID_ESRAM12,
3871032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.is_ramret = true,
3881032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
3891032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_ESRAM34] = {
3901032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
3911032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-esram34",
3921032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_ESRAM34,
3931032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
3941032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
3951032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
3961032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
3971032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id	= EPOD_ID_ESRAM34,
3981032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.is_enabled	= true,
3991032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
4001032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	[DB8500_REGULATOR_SWITCH_ESRAM34RET] = {
4011032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.desc = {
4021032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.name	= "db8500-esram34-ret",
4031032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.id	= DB8500_REGULATOR_SWITCH_ESRAM34RET,
4041032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.ops	= &db8500_regulator_switch_ops,
4051032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.type	= REGULATOR_VOLTAGE,
4061032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			.owner	= THIS_MODULE,
4071032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		},
4081032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.epod_id = EPOD_ID_ESRAM34,
4091032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.is_ramret = true,
4101032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
4111032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson};
4121032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4131032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int __devinit db8500_regulator_probe(struct platform_device *pdev)
4141032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
41517cf8b429341869c154268f9d92d32a74295a29aSamuel Ortiz	struct regulator_init_data *db8500_init_data =
41617cf8b429341869c154268f9d92d32a74295a29aSamuel Ortiz					dev_get_platdata(&pdev->dev);
4171032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	int i, err;
4181032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4191032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	/* register all regulators */
42038e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	for (i = 0; i < ARRAY_SIZE(dbx500_regulator_info); i++) {
42138e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson		struct dbx500_regulator_info *info;
4221032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		struct regulator_init_data *init_data = &db8500_init_data[i];
4231032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4241032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		/* assign per-regulator data */
42538e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson		info = &dbx500_regulator_info[i];
4261032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		info->dev = &pdev->dev;
4271032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4281032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		/* register with the regulator framework */
4291032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		info->rdev = regulator_register(&info->desc, &pdev->dev,
4302c043bcbf287dc69848054d5c02c55c20f7a7bc5Rajendra Nayak				init_data, info, NULL);
4311032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		if (IS_ERR(info->rdev)) {
4321032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			err = PTR_ERR(info->rdev);
4331032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			dev_err(&pdev->dev, "failed to register %s: err %i\n",
4341032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson				info->desc.name, err);
4351032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4361032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			/* if failing, unregister all earlier regulators */
43790609503b71b6ec4aaf325c88de98da28740bc1dAxel Lin			while (--i >= 0) {
43838e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson				info = &dbx500_regulator_info[i];
4391032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson				regulator_unregister(info->rdev);
4401032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			}
4411032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			return err;
4421032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		}
4431032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4441032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		dev_dbg(rdev_get_dev(info->rdev),
4451032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			"regulator-%s-probed\n", info->desc.name);
4461032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	}
44738e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	err = ux500_regulator_debug_init(pdev,
44838e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson					 dbx500_regulator_info,
44938e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson					 ARRAY_SIZE(dbx500_regulator_info));
4501032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
45138e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	return err;
4521032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
4531032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4541032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int __exit db8500_regulator_remove(struct platform_device *pdev)
4551032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
4561032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	int i;
4571032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
45838e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	ux500_regulator_debug_exit();
45938e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson
46038e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson	for (i = 0; i < ARRAY_SIZE(dbx500_regulator_info); i++) {
46138e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson		struct dbx500_regulator_info *info;
46238e968380b27d6c0f4b68bdd6e3161f8a7effe38Bengt Jonsson		info = &dbx500_regulator_info[i];
4631032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4641032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		dev_vdbg(rdev_get_dev(info->rdev),
4651032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson			"regulator-%s-remove\n", info->desc.name);
4661032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4671032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		regulator_unregister(info->rdev);
4681032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	}
4691032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4701032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	return 0;
4711032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
4721032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4731032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic struct platform_driver db8500_regulator_driver = {
4741032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	.driver = {
4751032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.name = "db8500-prcmu-regulators",
4761032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson		.owner = THIS_MODULE,
4771032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	},
4781032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	.probe = db8500_regulator_probe,
4791032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	.remove = __exit_p(db8500_regulator_remove),
4801032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson};
4811032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4821032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic int __init db8500_regulator_init(void)
4831032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
48490609503b71b6ec4aaf325c88de98da28740bc1dAxel Lin	return platform_driver_register(&db8500_regulator_driver);
4851032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
4861032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4871032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonstatic void __exit db8500_regulator_exit(void)
4881032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson{
4891032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson	platform_driver_unregister(&db8500_regulator_driver);
4901032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson}
4911032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4921032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonarch_initcall(db8500_regulator_init);
4931032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonssonmodule_exit(db8500_regulator_exit);
4941032fbfd792f2b384ac16a63993b8fae5eea9083Bengt Jonsson
4951032fbfd792f2b384ac16a63993b8fae5eea9083Bengt JonssonMODULE_AUTHOR("STMicroelectronics/ST-Ericsson");
4961032fbfd792f2b384ac16a63993b8fae5eea9083Bengt JonssonMODULE_DESCRIPTION("DB8500 regulator driver");
4971032fbfd792f2b384ac16a63993b8fae5eea9083Bengt JonssonMODULE_LICENSE("GPL v2");
498