summaryrefslogtreecommitdiff
path: root/drivers/reset
diff options
context:
space:
mode:
authorJerome Brunet <jbrunet@baylibre.com>2024-12-09 17:04:34 +0100
committerPhilipp Zabel <p.zabel@pengutronix.de>2025-01-15 17:59:31 +0100
commitccfba09ceecc3ac1f264e680120cef01aed6e75e (patch)
treefca4b032d66c3ae3777a3708bff062ec09a202a4 /drivers/reset
parent64de6a3fed96bad801e8ecd70140a4fc1304bdde (diff)
reset: amlogic: aux: get regmap through parent device
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> Acked-by: Arnd Bergmann <arnd@arndb.de> Link: https://lore.kernel.org/r/20241209-meson-rst-aux-rework-v1-1-d2afb69cc72e@baylibre.com Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Diffstat (limited to 'drivers/reset')
-rw-r--r--drivers/reset/amlogic/reset-meson-aux.c36
1 files changed, 12 insertions, 24 deletions
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);