···88- startup-delay-us: startup time in microseconds99- enable-active-high: Polarity of GPIO is Active high1010If this property is missing, the default assumed is Active low.1111+- gpio-open-drain: GPIO is open drain type.1212+ If this property is missing then default assumption is false.11131214Any property defined as part of the core regulator1315binding, defined in regulator.txt, can also be used.···2725 gpio = <&gpio1 16 0>;2826 startup-delay-us = <70000>;2927 enable-active-high;3030- regulator-boot-on2828+ regulator-boot-on;2929+ gpio-open-drain;3130 };
···6969 return i2c_smbus_write_byte_data(max8952->client, reg, value);7070}71717272-static int max8952_voltage(struct max8952_data *max8952, u8 mode)7373-{7474- return (max8952->pdata->dvs_mode[mode] * 10 + 770) * 1000;7575-}7676-7772static int max8952_list_voltage(struct regulator_dev *rdev,7873 unsigned int selector)7974{···7782 if (rdev_get_id(rdev) != 0)7883 return -EINVAL;79848080- return max8952_voltage(max8952, selector);8585+ return (max8952->pdata->dvs_mode[selector] * 10 + 770) * 1000;8186}82878388static int max8952_is_enabled(struct regulator_dev *rdev)···112117 return 0;113118}114119115115-static int max8952_get_voltage(struct regulator_dev *rdev)120120+static int max8952_get_voltage_sel(struct regulator_dev *rdev)116121{117122 struct max8952_data *max8952 = rdev_get_drvdata(rdev);118123 u8 vid = 0;···122127 if (max8952->vid1)123128 vid += 2;124129125125- return max8952_voltage(max8952, vid);130130+ return vid;126131}127132128133static int max8952_set_voltage_sel(struct regulator_dev *rdev,···149154 .is_enabled = max8952_is_enabled,150155 .enable = max8952_enable,151156 .disable = max8952_disable,152152- .get_voltage = max8952_get_voltage,157157+ .get_voltage_sel = max8952_get_voltage_sel,153158 .set_voltage_sel = max8952_set_voltage_sel,154159 .set_suspend_disable = max8952_disable,155160};
+90-73
drivers/regulator/max8997.c
···2222 */23232424#include <linux/bug.h>2525-#include <linux/delay.h>2625#include <linux/err.h>2726#include <linux/gpio.h>2827#include <linux/slab.h>···277278 u8 val;278279279280 ret = max8997_get_enable_register(rdev, ®, &mask, &pattern);280280- if (ret == -EINVAL)281281- return 1; /* "not controllable" */282282- else if (ret)281281+ if (ret)283282 return ret;284283285284 ret = max8997_read_reg(i2c, reg, &val);···379382 return 0;380383}381384382382-static int max8997_get_voltage(struct regulator_dev *rdev)385385+static int max8997_get_voltage_sel(struct regulator_dev *rdev)383386{384387 struct max8997_data *max8997 = rdev_get_drvdata(rdev);385388 struct i2c_client *i2c = max8997->iodev->i2c;···397400 val >>= shift;398401 val &= mask;399402400400- if (rdev->desc && rdev->desc->ops && rdev->desc->ops->list_voltage)401401- return rdev->desc->ops->list_voltage(rdev, val);402402-403403- /*404404- * max8997_list_voltage returns value for any rdev with voltage_map,405405- * which works for "CHARGER" and "CHARGER TOPOFF" that do not have406406- * list_voltage ops (they are current regulators).407407- */408408- return max8997_list_voltage(rdev, val);403403+ return val;409404}410405411406static inline int max8997_get_voltage_proper_val(···486497 int min_vol = min_uV / 1000, max_vol = max_uV / 1000;487498 const struct voltage_map_desc *desc;488499 int rid = rdev_get_id(rdev);489489- int reg, shift = 0, mask, ret;490490- int i;491491- u8 org;500500+ int i, reg, shift, mask, ret;492501493502 switch (rid) {494503 case MAX8997_LDO1 ... MAX8997_LDO21:···515528 if (ret)516529 return ret;517530518518- max8997_read_reg(i2c, reg, &org);519519- org = (org & mask) >> shift;520520-521531 ret = max8997_update_reg(i2c, reg, i << shift, mask << shift);522532 *selector = i;523533524524- if (rid == MAX8997_BUCK1 || rid == MAX8997_BUCK2 ||525525- rid == MAX8997_BUCK4 || rid == MAX8997_BUCK5) {526526- /* If the voltage is increasing */527527- if (org < i)528528- udelay(DIV_ROUND_UP(desc->step * (i - org),529529- max8997->ramp_delay));534534+ return ret;535535+}536536+537537+static int max8997_set_voltage_ldobuck_time_sel(struct regulator_dev *rdev,538538+ unsigned int old_selector,539539+ unsigned int new_selector)540540+{541541+ struct max8997_data *max8997 = rdev_get_drvdata(rdev);542542+ int rid = rdev_get_id(rdev);543543+ const struct voltage_map_desc *desc = reg_voltage_map[rid];544544+545545+ /* Delay is required only if the voltage is increasing */546546+ if (old_selector >= new_selector)547547+ return 0;548548+549549+ /* No need to delay if gpio_dvs_mode */550550+ switch (rid) {551551+ case MAX8997_BUCK1:552552+ if (max8997->buck1_gpiodvs)553553+ return 0;554554+ break;555555+ case MAX8997_BUCK2:556556+ if (max8997->buck2_gpiodvs)557557+ return 0;558558+ break;559559+ case MAX8997_BUCK5:560560+ if (max8997->buck5_gpiodvs)561561+ return 0;562562+ break;530563 }531564532532- return ret;565565+ switch (rid) {566566+ case MAX8997_BUCK1:567567+ case MAX8997_BUCK2:568568+ case MAX8997_BUCK4:569569+ case MAX8997_BUCK5:570570+ return DIV_ROUND_UP(desc->step * (new_selector - old_selector),571571+ max8997->ramp_delay);572572+ }573573+574574+ return 0;533575}534576535577/*···765749 return ret;766750}767751768768-static int max8997_reg_enable_suspend(struct regulator_dev *rdev)769769-{770770- return 0;771771-}772772-773752static int max8997_reg_disable_suspend(struct regulator_dev *rdev)774753{775754 struct max8997_data *max8997 = rdev_get_drvdata(rdev);···797786 .is_enabled = max8997_reg_is_enabled,798787 .enable = max8997_reg_enable,799788 .disable = max8997_reg_disable,800800- .get_voltage = max8997_get_voltage,789789+ .get_voltage_sel = max8997_get_voltage_sel,801790 .set_voltage = max8997_set_voltage_ldobuck,802802- .set_suspend_enable = max8997_reg_enable_suspend,791791+ .set_voltage_time_sel = max8997_set_voltage_ldobuck_time_sel,803792 .set_suspend_disable = max8997_reg_disable_suspend,804793};805794···808797 .is_enabled = max8997_reg_is_enabled,809798 .enable = max8997_reg_enable,810799 .disable = max8997_reg_disable,811811- .get_voltage = max8997_get_voltage,800800+ .get_voltage_sel = max8997_get_voltage_sel,812801 .set_voltage = max8997_set_voltage_buck,813813- .set_suspend_enable = max8997_reg_enable_suspend,802802+ .set_voltage_time_sel = max8997_set_voltage_ldobuck_time_sel,814803 .set_suspend_disable = max8997_reg_disable_suspend,815804};816805···819808 .is_enabled = max8997_reg_is_enabled,820809 .enable = max8997_reg_enable,821810 .disable = max8997_reg_disable,822822- .set_suspend_enable = max8997_reg_enable_suspend,823811 .set_suspend_disable = max8997_reg_disable_suspend,824812};825813···827817 .is_enabled = max8997_reg_is_enabled,828818 .enable = max8997_reg_enable,829819 .disable = max8997_reg_disable,830830- .get_voltage = max8997_get_voltage,820820+ .get_voltage_sel = max8997_get_voltage_sel,831821 .set_voltage = max8997_set_voltage_safeout,832832- .set_suspend_enable = max8997_reg_enable_suspend,833822 .set_suspend_disable = max8997_reg_disable_suspend,834823};835824836825static struct regulator_ops max8997_fixedstate_ops = {837826 .list_voltage = max8997_list_voltage_charger_cv,838838- .get_voltage = max8997_get_voltage,827827+ .get_voltage_sel = max8997_get_voltage_sel,839828 .set_voltage = max8997_set_voltage_charger_cv,840829};841830842842-static int max8997_set_voltage_ldobuck_wrap(struct regulator_dev *rdev,843843- int min_uV, int max_uV)831831+static int max8997_set_current_limit(struct regulator_dev *rdev,832832+ int min_uA, int max_uA)844833{845834 unsigned dummy;835835+ int rid = rdev_get_id(rdev);846836847847- return max8997_set_voltage_ldobuck(rdev, min_uV, max_uV, &dummy);837837+ if (rid != MAX8997_CHARGER && rid != MAX8997_CHARGER_TOPOFF)838838+ return -EINVAL;839839+840840+ /* Reuse max8997_set_voltage_ldobuck to set current_limit. */841841+ return max8997_set_voltage_ldobuck(rdev, min_uA, max_uA, &dummy);848842}849843844844+static int max8997_get_current_limit(struct regulator_dev *rdev)845845+{846846+ int sel, rid = rdev_get_id(rdev);847847+848848+ if (rid != MAX8997_CHARGER && rid != MAX8997_CHARGER_TOPOFF)849849+ return -EINVAL;850850+851851+ sel = max8997_get_voltage_sel(rdev);852852+ if (sel < 0)853853+ return sel;854854+855855+ /* Reuse max8997_list_voltage to get current_limit. */856856+ return max8997_list_voltage(rdev, sel);857857+}850858851859static struct regulator_ops max8997_charger_ops = {852860 .is_enabled = max8997_reg_is_enabled,853861 .enable = max8997_reg_enable,854862 .disable = max8997_reg_disable,855855- .get_current_limit = max8997_get_voltage,856856- .set_current_limit = max8997_set_voltage_ldobuck_wrap,863863+ .get_current_limit = max8997_get_current_limit,864864+ .set_current_limit = max8997_set_current_limit,857865};858866859867static struct regulator_ops max8997_charger_fixedstate_ops = {860860- .is_enabled = max8997_reg_is_enabled,861861- .get_current_limit = max8997_get_voltage,862862- .set_current_limit = max8997_set_voltage_ldobuck_wrap,868868+ .get_current_limit = max8997_get_current_limit,869869+ .set_current_limit = max8997_set_current_limit,863870};864871865872#define MAX8997_VOLTAGE_REGULATOR(_name, _ops) {\···949922 return -ENODEV;950923 }951924952952- max8997 = kzalloc(sizeof(struct max8997_data), GFP_KERNEL);925925+ max8997 = devm_kzalloc(&pdev->dev, sizeof(struct max8997_data),926926+ GFP_KERNEL);953927 if (!max8997)954928 return -ENOMEM;955929956930 size = sizeof(struct regulator_dev *) * pdata->num_regulators;957957- max8997->rdev = kzalloc(size, GFP_KERNEL);958958- if (!max8997->rdev) {959959- kfree(max8997);931931+ max8997->rdev = devm_kzalloc(&pdev->dev, size, GFP_KERNEL);932932+ if (!max8997->rdev)960933 return -ENOMEM;961961- }962934963935 rdev = max8997->rdev;964936 max8997->dev = &pdev->dev;···981955 pdata->buck1_voltage[i] / 1000 +982956 buck1245_voltage_map_desc.step);983957 if (ret < 0)984984- goto err_alloc;958958+ goto err_out;985959986960 max8997->buck2_vol[i] = ret =987961 max8997_get_voltage_proper_val(···990964 pdata->buck2_voltage[i] / 1000 +991965 buck1245_voltage_map_desc.step);992966 if (ret < 0)993993- goto err_alloc;967967+ goto err_out;994968995969 max8997->buck5_vol[i] = ret =996970 max8997_get_voltage_proper_val(···999973 pdata->buck5_voltage[i] / 1000 +1000974 buck1245_voltage_map_desc.step);1001975 if (ret < 0)10021002- goto err_alloc;976976+ goto err_out;10039771004978 if (max_buck1 < max8997->buck1_vol[i])1005979 max_buck1 = max8997->buck1_vol[i];···10321006 !gpio_is_valid(pdata->buck125_gpios[2])) {10331007 dev_err(&pdev->dev, "GPIO NOT VALID\n");10341008 ret = -EINVAL;10351035- goto err_alloc;10091009+ goto err_out;10361010 }1037101110381012 ret = gpio_request(pdata->buck125_gpios[0],···10411015 dev_warn(&pdev->dev, "Duplicated gpio request"10421016 " on SET1\n");10431017 else if (ret)10441044- goto err_alloc;10181018+ goto err_out;10451019 else10461020 gpio1set = true;10471021···10531027 else if (ret) {10541028 if (gpio1set)10551029 gpio_free(pdata->buck125_gpios[0]);10561056- goto err_alloc;10301030+ goto err_out;10571031 } else10581032 gpio2set = true;10591033···10671041 gpio_free(pdata->buck125_gpios[0]);10681042 if (gpio2set)10691043 gpio_free(pdata->buck125_gpios[1]);10701070- goto err_alloc;10441044+ goto err_out;10711045 }1072104610731047 gpio_direction_output(pdata->buck125_gpios[0],···1136111011371111 return 0;11381112err:11391139- for (i = 0; i < max8997->num_regulators; i++)11401140- if (rdev[i])11411141- regulator_unregister(rdev[i]);11421142-err_alloc:11431143- kfree(max8997->rdev);11441144- kfree(max8997);11451145-11131113+ while (--i >= 0)11141114+ regulator_unregister(rdev[i]);11151115+err_out:11461116 return ret;11471117}11481118···11491127 int i;1150112811511129 for (i = 0; i < max8997->num_regulators; i++)11521152- if (rdev[i])11531153- regulator_unregister(rdev[i]);11541154-11551155- kfree(max8997->rdev);11561156- kfree(max8997);11571157-11301130+ regulator_unregister(rdev[i]);11581131 return 0;11591132}11601133
+17-29
drivers/regulator/max8998.c
···2828#include <linux/slab.h>2929#include <linux/interrupt.h>3030#include <linux/mutex.h>3131-#include <linux/delay.h>3231#include <linux/platform_device.h>3332#include <linux/regulator/driver.h>3433#include <linux/mfd/max8998.h>···718719 return -ENODEV;719720 }720721721721- max8998 = kzalloc(sizeof(struct max8998_data), GFP_KERNEL);722722+ max8998 = devm_kzalloc(&pdev->dev, sizeof(struct max8998_data),723723+ GFP_KERNEL);722724 if (!max8998)723725 return -ENOMEM;724726725727 size = sizeof(struct regulator_dev *) * pdata->num_regulators;726726- max8998->rdev = kzalloc(size, GFP_KERNEL);727727- if (!max8998->rdev) {728728- kfree(max8998);728728+ max8998->rdev = devm_kzalloc(&pdev->dev, size, GFP_KERNEL);729729+ if (!max8998->rdev)729730 return -ENOMEM;730730- }731731732732 rdev = max8998->rdev;733733 max8998->dev = &pdev->dev;···750752 printk(KERN_ERR "MAX8998 SET1 GPIO defined as 0 !\n");751753 WARN_ON(!pdata->buck1_set1);752754 ret = -EIO;753753- goto err_free_mem;755755+ goto err_out;754756 }755757 /* Check if SET2 is not equal to 0 */756758 if (!pdata->buck1_set2) {757759 printk(KERN_ERR "MAX8998 SET2 GPIO defined as 0 !\n");758760 WARN_ON(!pdata->buck1_set2);759761 ret = -EIO;760760- goto err_free_mem;762762+ goto err_out;761763 }762764763765 gpio_request(pdata->buck1_set1, "MAX8998 BUCK1_SET1");···777779 max8998->buck1_vol[0] = i;778780 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK1_VOLTAGE1, i);779781 if (ret)780780- goto err_free_mem;782782+ goto err_out;781783782784 /* Set predefined value for BUCK1 register 2 */783785 i = 0;···789791 max8998->buck1_vol[1] = i;790792 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK1_VOLTAGE2, i);791793 if (ret)792792- goto err_free_mem;794794+ goto err_out;793795794796 /* Set predefined value for BUCK1 register 3 */795797 i = 0;···801803 max8998->buck1_vol[2] = i;802804 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK1_VOLTAGE3, i);803805 if (ret)804804- goto err_free_mem;806806+ goto err_out;805807806808 /* Set predefined value for BUCK1 register 4 */807809 i = 0;···813815 max8998->buck1_vol[3] = i;814816 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK1_VOLTAGE4, i);815817 if (ret)816816- goto err_free_mem;818818+ goto err_out;817819818820 }819821···823825 printk(KERN_ERR "MAX8998 SET3 GPIO defined as 0 !\n");824826 WARN_ON(!pdata->buck2_set3);825827 ret = -EIO;826826- goto err_free_mem;828828+ goto err_out;827829 }828830 gpio_request(pdata->buck2_set3, "MAX8998 BUCK2_SET3");829831 gpio_direction_output(pdata->buck2_set3,···838840 max8998->buck2_vol[0] = i;839841 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK2_VOLTAGE1, i);840842 if (ret)841841- goto err_free_mem;843843+ goto err_out;842844843845 /* BUCK2 register 2 */844846 i = 0;···849851 max8998->buck2_vol[1] = i;850852 ret = max8998_write_reg(i2c, MAX8998_REG_BUCK2_VOLTAGE2, i);851853 if (ret)852852- goto err_free_mem;854854+ goto err_out;853855 }854856855857 for (i = 0; i < pdata->num_regulators; i++) {···879881880882 return 0;881883err:882882- for (i = 0; i < max8998->num_regulators; i++)883883- if (rdev[i])884884- regulator_unregister(rdev[i]);885885-886886-err_free_mem:887887- kfree(max8998->rdev);888888- kfree(max8998);889889-884884+ while (--i >= 0)885885+ regulator_unregister(rdev[i]);886886+err_out:890887 return ret;891888}892889···892899 int i;893900894901 for (i = 0; i < max8998->num_regulators; i++)895895- if (rdev[i])896896- regulator_unregister(rdev[i]);897897-898898- kfree(max8998->rdev);899899- kfree(max8998);900900-902902+ regulator_unregister(rdev[i]);901903 return 0;902904}903905
+47
drivers/regulator/of_regulator.c
···1414#include <linux/slab.h>1515#include <linux/of.h>1616#include <linux/regulator/machine.h>1717+#include <linux/regulator/of_regulator.h>17181819static void of_get_regulation_constraints(struct device_node *np,1920 struct regulator_init_data **init_data)···8685 return init_data;8786}8887EXPORT_SYMBOL_GPL(of_get_regulator_init_data);8888+8989+/**9090+ * of_regulator_match - extract regulator init data9191+ * @dev: device requesting the data9292+ * @node: parent device node of the regulators9393+ * @matches: match table for the regulators9494+ * @num_matches: number of entries in match table9595+ *9696+ * This function uses a match table specified by the regulator driver and9797+ * looks up the corresponding init data in the device tree. Note that the9898+ * match table is modified in place.9999+ *100100+ * Returns the number of matches found or a negative error code on failure.101101+ */102102+int of_regulator_match(struct device *dev, struct device_node *node,103103+ struct of_regulator_match *matches,104104+ unsigned int num_matches)105105+{106106+ unsigned int count = 0;107107+ unsigned int i;108108+109109+ if (!dev || !node)110110+ return -EINVAL;111111+112112+ for (i = 0; i < num_matches; i++) {113113+ struct of_regulator_match *match = &matches[i];114114+ struct device_node *child;115115+116116+ child = of_find_node_by_name(node, match->name);117117+ if (!child)118118+ continue;119119+120120+ match->init_data = of_get_regulator_init_data(dev, child);121121+ if (!match->init_data) {122122+ dev_err(dev, "failed to parse DT for regulator %s\n",123123+ child->name);124124+ return -EINVAL;125125+ }126126+127127+ match->of_node = child;128128+ count++;129129+ }130130+131131+ return count;132132+}133133+EXPORT_SYMBOL_GPL(of_regulator_match);
···182182 if (pdata->ldo[id].enable && gpio_is_valid(pdata->ldo[id].enable)) {183183 ldo->enable = pdata->ldo[id].enable;184184185185- ret = gpio_request(ldo->enable, "WM8994 LDO enable");185185+ ret = gpio_request_one(ldo->enable, 0, "WM8994 LDO enable");186186 if (ret < 0) {187187 dev_err(&pdev->dev, "Failed to get enable GPIO: %d\n",188188 ret);189189 goto err;190190 }191191-192192- ret = gpio_direction_output(ldo->enable, ldo->is_enabled);193193- if (ret < 0) {194194- dev_err(&pdev->dev, "Failed to set GPIO up: %d\n",195195- ret);196196- goto err_gpio;197197- }198191 } else199192 ldo->is_enabled = true;200193201201- config.dev = &pdev->dev;194194+ config.dev = wm8994->dev;202195 config.init_data = pdata->ldo[id].init_data;203196 config.driver_data = ldo;204197 config.regmap = wm8994->regmap;
+11-2
include/linux/i2c/twl.h
···171171TWL_CLASS_IS(4030, TWL4030_CLASS_ID)172172TWL_CLASS_IS(6030, TWL6030_CLASS_ID)173173174174-#define TWL6025_SUBCLASS BIT(4) /* TWL6025 has changed registers */175175-176174/*177175 * Read and write single 8-bit registers178176 */···744746 void *data;745747 unsigned long features;746748};749749+/* chip-specific feature flags, for twl_regulator_driver_data.features */750750+#define TWL4030_VAUX2 BIT(0) /* pre-5030 voltage ranges */751751+#define TPS_SUBSET BIT(1) /* tps659[23]0 have fewer LDOs */752752+#define TWL5031 BIT(2) /* twl5031 has different registers */753753+#define TWL6030_CLASS BIT(3) /* TWL6030 class */754754+#define TWL6025_SUBCLASS BIT(4) /* TWL6025 has changed registers */755755+#define TWL4030_ALLOW_UNSUPPORTED BIT(5) /* Some voltages are possible756756+ * but not officially supported.757757+ * This flag is necessary to758758+ * enable them.759759+ */747760748761/*----------------------------------------------------------------------*/749762