Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

regulator: arizona-ldo1: Move pdata into a separate structure

In preparation for sharing this driver with Madera, move the pdata
for the LDO1 regulator out of struct arizona_pdata into a dedicated
pdata struct for this driver. As a result the code in
arizona_ldo1_of_get_pdata() can be made independent of struct arizona.

This patch also updates the definition of struct arizona_pdata and
the use of this pdata in mach-crag6410-module.c

Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Richard Fitzgerald and committed by
Mark Brown
aaa84e6a 7d8d14b5

+53 -22
+6 -2
arch/arm/mach-s3c64xx/mach-crag6410-module.c
··· 209 209 }; 210 210 211 211 static struct arizona_pdata wm5102_reva_pdata = { 212 - .ldoena = S3C64XX_GPN(7), 212 + .ldo1 = { 213 + .ldoena = S3C64XX_GPN(7), 214 + }, 213 215 .gpio_base = CODEC_GPIO_BASE, 214 216 .irq_flags = IRQF_TRIGGER_HIGH, 215 217 .micd_pol_gpio = CODEC_GPIO_BASE + 4, ··· 241 239 }; 242 240 243 241 static struct arizona_pdata wm5102_pdata = { 244 - .ldoena = S3C64XX_GPN(7), 242 + .ldo1 = { 243 + .ldoena = S3C64XX_GPN(7), 244 + }, 245 245 .gpio_base = CODEC_GPIO_BASE, 246 246 .irq_flags = IRQF_TRIGGER_HIGH, 247 247 .micd_pol_gpio = CODEC_GPIO_BASE + 2,
+21 -18
drivers/regulator/arizona-ldo1.c
··· 25 25 #include <linux/gpio.h> 26 26 #include <linux/slab.h> 27 27 28 + #include <linux/regulator/arizona-ldo1.h> 29 + 28 30 #include <linux/mfd/arizona/core.h> 29 31 #include <linux/mfd/arizona/pdata.h> 30 32 #include <linux/mfd/arizona/registers.h> ··· 188 186 .num_consumer_supplies = 1, 189 187 }; 190 188 191 - static int arizona_ldo1_of_get_pdata(struct device *dev, 192 - struct arizona *arizona, 189 + static int arizona_ldo1_of_get_pdata(struct arizona_ldo1_pdata *pdata, 193 190 struct regulator_config *config, 194 - const struct regulator_desc *desc) 191 + const struct regulator_desc *desc, 192 + bool *external_dcvdd) 195 193 { 196 - struct arizona_pdata *pdata = &arizona->pdata; 197 194 struct arizona_ldo1 *ldo1 = config->driver_data; 198 - struct device_node *np = arizona->dev->of_node; 195 + struct device_node *np = config->dev->of_node; 199 196 struct device_node *init_node, *dcvdd_node; 200 197 struct regulator_init_data *init_data; 201 198 202 199 pdata->ldoena = of_get_named_gpio(np, "wlf,ldoena", 0); 203 200 if (pdata->ldoena < 0) { 204 - dev_warn(arizona->dev, 201 + dev_warn(config->dev, 205 202 "LDOENA GPIO property missing/malformed: %d\n", 206 203 pdata->ldoena); 207 204 pdata->ldoena = 0; ··· 214 213 if (init_node) { 215 214 config->of_node = init_node; 216 215 217 - init_data = of_get_regulator_init_data(dev, init_node, desc); 218 - 216 + init_data = of_get_regulator_init_data(config->dev, init_node, 217 + desc); 219 218 if (init_data) { 220 219 init_data->consumer_supplies = &ldo1->supply; 221 220 init_data->num_consumer_supplies = 1; 222 221 223 222 if (dcvdd_node && dcvdd_node != init_node) 224 - arizona->external_dcvdd = true; 223 + *external_dcvdd = true; 225 224 226 - pdata->ldo1 = init_data; 225 + pdata->init_data = init_data; 227 226 } 228 227 } else if (dcvdd_node) { 229 - arizona->external_dcvdd = true; 228 + *external_dcvdd = true; 230 229 } 231 230 232 231 of_node_put(dcvdd_node); ··· 240 239 const struct regulator_desc *desc; 241 240 struct regulator_config config = { }; 242 241 struct arizona_ldo1 *ldo1; 242 + bool external_dcvdd = false; 243 243 int ret; 244 - 245 - arizona->external_dcvdd = false; 246 244 247 245 ldo1 = devm_kzalloc(&pdev->dev, sizeof(*ldo1), GFP_KERNEL); 248 246 if (!ldo1) ··· 283 283 284 284 if (IS_ENABLED(CONFIG_OF)) { 285 285 if (!dev_get_platdata(arizona->dev)) { 286 - ret = arizona_ldo1_of_get_pdata(&pdev->dev, arizona, 287 - &config, desc); 286 + ret = arizona_ldo1_of_get_pdata(&arizona->pdata.ldo1, 287 + &config, desc, 288 + &external_dcvdd); 288 289 if (ret < 0) 289 290 return ret; 290 291 } 291 292 } 292 293 293 - config.ena_gpio = arizona->pdata.ldoena; 294 + config.ena_gpio = arizona->pdata.ldo1.ldoena; 294 295 295 - if (arizona->pdata.ldo1) 296 - config.init_data = arizona->pdata.ldo1; 296 + if (arizona->pdata.ldo1.init_data) 297 + config.init_data = arizona->pdata.ldo1.init_data; 297 298 else 298 299 config.init_data = &ldo1->init_data; 299 300 ··· 304 303 */ 305 304 if (config.init_data->num_consumer_supplies == 0) 306 305 arizona->external_dcvdd = true; 306 + else 307 + arizona->external_dcvdd = external_dcvdd; 307 308 308 309 ldo1->regulator = devm_regulator_register(&pdev->dev, desc, &config); 309 310
+2 -2
include/linux/mfd/arizona/pdata.h
··· 12 12 #define _ARIZONA_PDATA_H 13 13 14 14 #include <dt-bindings/mfd/arizona.h> 15 + #include <linux/regulator/arizona-ldo1.h> 15 16 #include <linux/regulator/arizona-micsupp.h> 16 17 17 18 #define ARIZONA_GPN_DIR_MASK 0x8000 /* GPN_DIR */ ··· 78 77 79 78 struct arizona_pdata { 80 79 int reset; /** GPIO controlling /RESET, if any */ 81 - int ldoena; /** GPIO controlling LODENA, if any */ 82 80 83 81 /** Regulator configuration for MICVDD */ 84 82 struct arizona_micsupp_pdata micvdd; 85 83 86 84 /** Regulator configuration for LDO1 */ 87 - struct regulator_init_data *ldo1; 85 + struct arizona_ldo1_pdata ldo1; 88 86 89 87 /** If a direct 32kHz clock is provided on an MCLK specify it here */ 90 88 int clk32k_src;
+24
include/linux/regulator/arizona-ldo1.h
··· 1 + /* 2 + * Platform data for Arizona LDO1 regulator 3 + * 4 + * Copyright 2017 Cirrus Logic 5 + * 6 + * This program is free software; you can redistribute it and/or modify 7 + * it under the terms of the GNU General Public License version 2 as 8 + * published by the Free Software Foundation. 9 + */ 10 + 11 + #ifndef ARIZONA_LDO1_H 12 + #define ARIZONA_LDO1_H 13 + 14 + struct regulator_init_data; 15 + 16 + struct arizona_ldo1_pdata { 17 + /** GPIO controlling LDOENA, if any */ 18 + int ldoena; 19 + 20 + /** Regulator configuration for LDO1 */ 21 + const struct regulator_init_data *init_data; 22 + }; 23 + 24 + #endif