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