Apply the new helper to avoid using internal structures from the core. Remove superfluous setting of drvdata while here.
Signed-off-by: Wolfram Sang <[email protected]> --- drivers/hwspinlock/qcom_hwspinlock.c | 45 ++++++++++++++++------------ 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/drivers/hwspinlock/qcom_hwspinlock.c b/drivers/hwspinlock/qcom_hwspinlock.c index 7960a4972eab..73b280988109 100644 --- a/drivers/hwspinlock/qcom_hwspinlock.c +++ b/drivers/hwspinlock/qcom_hwspinlock.c @@ -25,6 +25,13 @@ struct qcom_hwspinlock_of_data { const struct regmap_config *regmap_config; }; +struct qcom_hwspinlock_priv_init_data { + struct device *dev; + struct regmap *regmap; + u32 base; + u32 stride; +}; + static int qcom_hwspinlock_trylock(struct hwspinlock *lock) { struct regmap_field *field = hwspin_lock_get_priv(lock); @@ -89,10 +96,23 @@ static int qcom_hwspinlock_bust(struct hwspinlock *lock, unsigned int id) return 0; } +static void *qcom_hwspinlock_init_priv(int local_id, void *init_data) +{ + struct qcom_hwspinlock_priv_init_data *init = init_data; + struct reg_field field; + + field.reg = init->base + local_id * init->stride; + field.lsb = 0; + field.msb = 31; + + return devm_regmap_field_alloc(init->dev, init->regmap, field); +} + static const struct hwspinlock_ops qcom_hwspinlock_ops = { .trylock = qcom_hwspinlock_trylock, .unlock = qcom_hwspinlock_unlock, .bust = qcom_hwspinlock_bust, + .init_priv = qcom_hwspinlock_init_priv, }; static const struct regmap_config sfpb_mutex_config = { @@ -202,17 +222,14 @@ static struct regmap *qcom_hwspinlock_probe_mmio(struct platform_device *pdev, static int qcom_hwspinlock_probe(struct platform_device *pdev) { + struct qcom_hwspinlock_priv_init_data init; struct hwspinlock_device *bank; - struct reg_field field; struct regmap *regmap; size_t array_size; - u32 stride; - u32 base; - int i; - regmap = qcom_hwspinlock_probe_syscon(pdev, &base, &stride); + regmap = qcom_hwspinlock_probe_syscon(pdev, &init.base, &init.stride); if (IS_ERR(regmap) && PTR_ERR(regmap) == -ENODEV) - regmap = qcom_hwspinlock_probe_mmio(pdev, &base, &stride); + regmap = qcom_hwspinlock_probe_mmio(pdev, &init.base, &init.stride); if (IS_ERR(regmap)) return PTR_ERR(regmap); @@ -222,21 +239,11 @@ static int qcom_hwspinlock_probe(struct platform_device *pdev) if (!bank) return -ENOMEM; - platform_set_drvdata(pdev, bank); - - for (i = 0; i < QCOM_MUTEX_NUM_LOCKS; i++) { - field.reg = base + i * stride; - field.lsb = 0; - field.msb = 31; - - bank->lock[i].priv = devm_regmap_field_alloc(&pdev->dev, - regmap, field); - if (IS_ERR(bank->lock[i].priv)) - return PTR_ERR(bank->lock[i].priv); - } + init.dev = &pdev->dev; + init.regmap = regmap; return devm_hwspin_lock_register(&pdev->dev, bank, &qcom_hwspinlock_ops, - 0, QCOM_MUTEX_NUM_LOCKS, NULL); + 0, QCOM_MUTEX_NUM_LOCKS, &init); } static struct platform_driver qcom_hwspinlock_driver = { -- 2.51.0

