@@ -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);
Get regmap directly from the parent device registering the auxiliary reset driver, instead of using device data attached to the auxiliary device. This simplifies the registration a bit. Suggested-by: Stephen Boyd <sboyd@kernel.org> Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> --- drivers/reset/amlogic/reset-meson-aux.c | 36 +++++++++++---------------------- 1 file changed, 12 insertions(+), 24 deletions(-)