diff --git a/drivers/reset/amlogic/reset-meson-aux.c b/drivers/reset/amlogic/reset-meson-aux.c index 4b422ae5fcd2..0fc1788eb7a8 100644 --- a/drivers/reset/amlogic/reset-meson-aux.c +++ b/drivers/reset/amlogic/reset-meson-aux.c @@ -18,14 +18,6 @@ static DEFINE_IDA(meson_rst_aux_ida); -struct meson_reset_adev { - struct auxiliary_device adev; - struct regmap *map; -}; - -#define to_meson_reset_adev(_adev) \ - container_of((_adev), struct meson_reset_adev, adev) - static const struct meson_reset_param meson_a1_audio_param = { .reset_ops = &meson_reset_toggle_ops, .reset_num = 32, @@ -72,10 +64,13 @@ static int meson_reset_aux_probe(struct auxiliary_device *adev, { const struct meson_reset_param *param = (const struct meson_reset_param *)(id->driver_data); - struct meson_reset_adev *raux = - to_meson_reset_adev(adev); + struct regmap *map; + + map = dev_get_regmap(adev->dev.parent, NULL); + if (!map) + return -EINVAL; - return meson_reset_controller_register(&adev->dev, raux->map, param); + return meson_reset_controller_register(&adev->dev, map, param); } static struct auxiliary_driver meson_reset_aux_driver = { @@ -87,11 +82,9 @@ module_auxiliary_driver(meson_reset_aux_driver); static void meson_rst_aux_release(struct device *dev) { struct auxiliary_device *adev = to_auxiliary_dev(dev); - struct meson_reset_adev *raux = - to_meson_reset_adev(adev); ida_free(&meson_rst_aux_ida, adev->id); - kfree(raux); + kfree(adev); } static void meson_rst_aux_unregister_adev(void *_adev) @@ -103,24 +96,19 @@ static void meson_rst_aux_unregister_adev(void *_adev) } int devm_meson_rst_aux_register(struct device *dev, - struct regmap *map, const char *adev_name) { - struct meson_reset_adev *raux; struct auxiliary_device *adev; int ret; - raux = kzalloc(sizeof(*raux), GFP_KERNEL); - if (!raux) + adev = kzalloc(sizeof(*adev), GFP_KERNEL); + if (!adev) return -ENOMEM; ret = ida_alloc(&meson_rst_aux_ida, GFP_KERNEL); if (ret < 0) - goto raux_free; - - raux->map = map; + goto adev_free; - adev = &raux->adev; adev->id = ret; adev->name = adev_name; adev->dev.parent = dev; @@ -142,8 +130,8 @@ int devm_meson_rst_aux_register(struct device *dev, ida_free: ida_free(&meson_rst_aux_ida, adev->id); -raux_free: - kfree(raux); +adev_free: + kfree(adev); return ret; } EXPORT_SYMBOL_GPL(devm_meson_rst_aux_register);