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

mfd: regulator: clk: Split rohm-bd718x7.h

Split the bd718x7.h to ROHM common and bd718x7 specific parts
so that we do not need to add same things in every new ROHM
PMIC header. Please note that this change requires changes also
in bd718x7 sub-device drivers for regulators and clk.

Signed-off-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Acked-by: Mark Brown <broonie@kernel.org>
Acked-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>

authored by

Matti Vaittinen and committed by
Lee Jones
2a6a7aac a188339c

+56 -40
+3 -3
drivers/clk/clk-bd718x7.c
··· 17 17 u8 reg; 18 18 u8 mask; 19 19 struct platform_device *pdev; 20 - struct bd718xx *mfd; 20 + struct rohm_regmap_dev *mfd; 21 21 }; 22 22 23 23 static int bd71837_clk_set(struct clk_hw *hw, int status) ··· 68 68 int rval = -ENOMEM; 69 69 const char *parent_clk; 70 70 struct device *parent = pdev->dev.parent; 71 - struct bd718xx *mfd = dev_get_drvdata(parent); 71 + struct rohm_regmap_dev *mfd = dev_get_drvdata(parent); 72 72 struct clk_init_data init = { 73 73 .name = "bd718xx-32k-out", 74 74 .ops = &bd71837_clk_ops, ··· 119 119 module_platform_driver(bd71837_clk); 120 120 121 121 MODULE_AUTHOR("Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>"); 122 - MODULE_DESCRIPTION("BD71837 chip clk driver"); 122 + MODULE_DESCRIPTION("BD71837/BD71847 chip clk driver"); 123 123 MODULE_LICENSE("GPL");
+12 -11
drivers/mfd/rohm-bd718x7.c
··· 98 98 return -ENOMEM; 99 99 100 100 bd718xx->chip_irq = i2c->irq; 101 - bd718xx->chip_type = (unsigned int)(uintptr_t) 101 + bd718xx->chip.chip_type = (unsigned int)(uintptr_t) 102 102 of_device_get_match_data(&i2c->dev); 103 - bd718xx->dev = &i2c->dev; 103 + bd718xx->chip.dev = &i2c->dev; 104 104 dev_set_drvdata(&i2c->dev, bd718xx); 105 105 106 - bd718xx->regmap = devm_regmap_init_i2c(i2c, &bd718xx_regmap_config); 107 - if (IS_ERR(bd718xx->regmap)) { 106 + bd718xx->chip.regmap = devm_regmap_init_i2c(i2c, 107 + &bd718xx_regmap_config); 108 + if (IS_ERR(bd718xx->chip.regmap)) { 108 109 dev_err(&i2c->dev, "regmap initialization failed\n"); 109 - return PTR_ERR(bd718xx->regmap); 110 + return PTR_ERR(bd718xx->chip.regmap); 110 111 } 111 112 112 - ret = devm_regmap_add_irq_chip(&i2c->dev, bd718xx->regmap, 113 + ret = devm_regmap_add_irq_chip(&i2c->dev, bd718xx->chip.regmap, 113 114 bd718xx->chip_irq, IRQF_ONESHOT, 0, 114 115 &bd718xx_irq_chip, &bd718xx->irq_data); 115 116 if (ret) { ··· 119 118 } 120 119 121 120 /* Configure short press to 10 milliseconds */ 122 - ret = regmap_update_bits(bd718xx->regmap, 121 + ret = regmap_update_bits(bd718xx->chip.regmap, 123 122 BD718XX_REG_PWRONCONFIG0, 124 123 BD718XX_PWRBTN_PRESS_DURATION_MASK, 125 124 BD718XX_PWRBTN_SHORT_PRESS_10MS); ··· 130 129 } 131 130 132 131 /* Configure long press to 10 seconds */ 133 - ret = regmap_update_bits(bd718xx->regmap, 132 + ret = regmap_update_bits(bd718xx->chip.regmap, 134 133 BD718XX_REG_PWRONCONFIG1, 135 134 BD718XX_PWRBTN_PRESS_DURATION_MASK, 136 135 BD718XX_PWRBTN_LONG_PRESS_10S); ··· 150 149 151 150 button.irq = ret; 152 151 153 - ret = devm_mfd_add_devices(bd718xx->dev, PLATFORM_DEVID_AUTO, 152 + ret = devm_mfd_add_devices(bd718xx->chip.dev, PLATFORM_DEVID_AUTO, 154 153 bd718xx_mfd_cells, 155 154 ARRAY_SIZE(bd718xx_mfd_cells), NULL, 0, 156 155 regmap_irq_get_domain(bd718xx->irq_data)); ··· 163 162 static const struct of_device_id bd718xx_of_match[] = { 164 163 { 165 164 .compatible = "rohm,bd71837", 166 - .data = (void *)BD718XX_TYPE_BD71837, 165 + .data = (void *)ROHM_CHIP_TYPE_BD71837, 167 166 }, 168 167 { 169 168 .compatible = "rohm,bd71847", 170 - .data = (void *)BD718XX_TYPE_BD71847, 169 + .data = (void *)ROHM_CHIP_TYPE_BD71847, 171 170 }, 172 171 { } 173 172 };
+13 -12
drivers/regulator/bd718x7-regulator.c
··· 1152 1152 { 1153 1153 struct bd718xx *mfd; 1154 1154 struct regulator_config config = { 0 }; 1155 - struct bd718xx_pmic_inits pmic_regulators[] = { 1156 - [BD718XX_TYPE_BD71837] = { 1155 + struct bd718xx_pmic_inits pmic_regulators[ROHM_CHIP_TYPE_AMOUNT] = { 1156 + [ROHM_CHIP_TYPE_BD71837] = { 1157 1157 .r_datas = bd71837_regulators, 1158 1158 .r_amount = ARRAY_SIZE(bd71837_regulators), 1159 1159 }, 1160 - [BD718XX_TYPE_BD71847] = { 1160 + [ROHM_CHIP_TYPE_BD71847] = { 1161 1161 .r_datas = bd71847_regulators, 1162 1162 .r_amount = ARRAY_SIZE(bd71847_regulators), 1163 1163 }, ··· 1173 1173 goto err; 1174 1174 } 1175 1175 1176 - if (mfd->chip_type >= BD718XX_TYPE_AMOUNT || 1177 - !pmic_regulators[mfd->chip_type].r_datas) { 1176 + if (mfd->chip.chip_type >= ROHM_CHIP_TYPE_AMOUNT || 1177 + !pmic_regulators[mfd->chip.chip_type].r_datas) { 1178 1178 dev_err(&pdev->dev, "Unsupported chip type\n"); 1179 1179 err = -EINVAL; 1180 1180 goto err; 1181 1181 } 1182 1182 1183 1183 /* Register LOCK release */ 1184 - err = regmap_update_bits(mfd->regmap, BD718XX_REG_REGLOCK, 1184 + err = regmap_update_bits(mfd->chip.regmap, BD718XX_REG_REGLOCK, 1185 1185 (REGLOCK_PWRSEQ | REGLOCK_VREG), 0); 1186 1186 if (err) { 1187 1187 dev_err(&pdev->dev, "Failed to unlock PMIC (%d)\n", err); ··· 1200 1200 * bit allowing HW defaults for power rails to be used 1201 1201 */ 1202 1202 if (!use_snvs) { 1203 - err = regmap_update_bits(mfd->regmap, BD718XX_REG_TRANS_COND1, 1203 + err = regmap_update_bits(mfd->chip.regmap, 1204 + BD718XX_REG_TRANS_COND1, 1204 1205 BD718XX_ON_REQ_POWEROFF_MASK | 1205 1206 BD718XX_SWRESET_POWEROFF_MASK | 1206 1207 BD718XX_WDOG_POWEROFF_MASK | ··· 1216 1215 } 1217 1216 } 1218 1217 1219 - for (i = 0; i < pmic_regulators[mfd->chip_type].r_amount; i++) { 1218 + for (i = 0; i < pmic_regulators[mfd->chip.chip_type].r_amount; i++) { 1220 1219 1221 1220 const struct regulator_desc *desc; 1222 1221 struct regulator_dev *rdev; 1223 1222 const struct bd718xx_regulator_data *r; 1224 1223 1225 - r = &pmic_regulators[mfd->chip_type].r_datas[i]; 1224 + r = &pmic_regulators[mfd->chip.chip_type].r_datas[i]; 1226 1225 desc = &r->desc; 1227 1226 1228 1227 config.dev = pdev->dev.parent; 1229 - config.regmap = mfd->regmap; 1228 + config.regmap = mfd->chip.regmap; 1230 1229 1231 1230 rdev = devm_regulator_register(&pdev->dev, desc, &config); 1232 1231 if (IS_ERR(rdev)) { ··· 1255 1254 */ 1256 1255 if (!use_snvs || !rdev->constraints->always_on || 1257 1256 !rdev->constraints->boot_on) { 1258 - err = regmap_update_bits(mfd->regmap, r->init.reg, 1257 + err = regmap_update_bits(mfd->chip.regmap, r->init.reg, 1259 1258 r->init.mask, r->init.val); 1260 1259 if (err) { 1261 1260 dev_err(&pdev->dev, ··· 1265 1264 } 1266 1265 } 1267 1266 for (j = 0; j < r->additional_init_amnt; j++) { 1268 - err = regmap_update_bits(mfd->regmap, 1267 + err = regmap_update_bits(mfd->chip.regmap, 1269 1268 r->additional_inits[j].reg, 1270 1269 r->additional_inits[j].mask, 1271 1270 r->additional_inits[j].val);
+8 -14
include/linux/mfd/rohm-bd718x7.h
··· 4 4 #ifndef __LINUX_MFD_BD718XX_H__ 5 5 #define __LINUX_MFD_BD718XX_H__ 6 6 7 + #include <linux/mfd/rohm-generic.h> 7 8 #include <linux/regmap.h> 8 - 9 - enum { 10 - BD718XX_TYPE_BD71837 = 0, 11 - BD718XX_TYPE_BD71847, 12 - BD718XX_TYPE_AMOUNT 13 - }; 14 9 15 10 enum { 16 11 BD718XX_BUCK1 = 0, ··· 316 321 BD718XX_PWRBTN_LONG_PRESS_15S 317 322 }; 318 323 319 - struct bd718xx_clk; 320 - 321 324 struct bd718xx { 322 - unsigned int chip_type; 323 - struct device *dev; 324 - struct regmap *regmap; 325 - unsigned long int id; 325 + /* 326 + * Please keep this as the first member here as some 327 + * drivers (clk) supporting more than one chip may only know this 328 + * generic struct 'struct rohm_regmap_dev' and assume it is 329 + * the first chunk of parent device's private data. 330 + */ 331 + struct rohm_regmap_dev chip; 326 332 327 333 int chip_irq; 328 334 struct regmap_irq_chip_data *irq_data; 329 - 330 - struct bd718xx_clk *clk; 331 335 }; 332 336 333 337 #endif /* __LINUX_MFD_BD718XX_H__ */
+20
include/linux/mfd/rohm-generic.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 + /* Copyright (C) 2018 ROHM Semiconductors */ 3 + 4 + #ifndef __LINUX_MFD_ROHM_H__ 5 + #define __LINUX_MFD_ROHM_H__ 6 + 7 + enum { 8 + ROHM_CHIP_TYPE_BD71837 = 0, 9 + ROHM_CHIP_TYPE_BD71847, 10 + ROHM_CHIP_TYPE_BD70528, 11 + ROHM_CHIP_TYPE_AMOUNT 12 + }; 13 + 14 + struct rohm_regmap_dev { 15 + unsigned int chip_type; 16 + struct device *dev; 17 + struct regmap *regmap; 18 + }; 19 + 20 + #endif