Message ID | 20240808102742.4095904-7-jbrunet@baylibre.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Series | reset: amlogic: move audio reset drivers out of CCF | expand |
On 08/08/2024 12:27, Jerome Brunet wrote: > Add a callback to check the status of the level reset, as done in > the reset driver of the audio clock controller. > > This is done keep the functionality when the audio reset controller > get migrated to meson-reset. > > Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> > --- > drivers/reset/reset-meson.c | 20 ++++++++++++++++++-- > 1 file changed, 18 insertions(+), 2 deletions(-) > > diff --git a/drivers/reset/reset-meson.c b/drivers/reset/reset-meson.c > index 5b6f934c0265..b16d9c32adb1 100644 > --- a/drivers/reset/reset-meson.c > +++ b/drivers/reset/reset-meson.c > @@ -56,8 +56,7 @@ static int meson_reset_reset(struct reset_controller_dev *rcdev, > static int meson_reset_level(struct reset_controller_dev *rcdev, > unsigned long id, bool assert) > { > - struct meson_reset *data = > - container_of(rcdev, struct meson_reset, rcdev); > + struct meson_reset *data = container_of(rcdev, struct meson_reset, rcdev); Unrelated change > unsigned int offset, bit; > > meson_reset_offset_and_bit(data, id, &offset, &bit); > @@ -68,6 +67,22 @@ static int meson_reset_level(struct reset_controller_dev *rcdev, > BIT(bit), assert ? BIT(bit) : 0); > } > > +static int meson_reset_status(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct meson_reset *data = > + container_of(rcdev, struct meson_reset, rcdev); > + unsigned int val, offset, bit; > + > + meson_reset_offset_and_bit(data, id, &offset, &bit); > + offset += data->param->level_offset; > + > + regmap_read(data->map, offset, &val); > + val = !!(BIT(bit) & val); > + > + return val ^ data->param->level_low_reset; > +} > + > static int meson_reset_assert(struct reset_controller_dev *rcdev, > unsigned long id) > { > @@ -84,6 +99,7 @@ static const struct reset_control_ops meson_reset_ops = { > .reset = meson_reset_reset, > .assert = meson_reset_assert, > .deassert = meson_reset_deassert, > + .status = meson_reset_status, > }; > > static const struct meson_reset_param meson8b_param = { with the first change removed: Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
diff --git a/drivers/reset/reset-meson.c b/drivers/reset/reset-meson.c index 5b6f934c0265..b16d9c32adb1 100644 --- a/drivers/reset/reset-meson.c +++ b/drivers/reset/reset-meson.c @@ -56,8 +56,7 @@ static int meson_reset_reset(struct reset_controller_dev *rcdev, static int meson_reset_level(struct reset_controller_dev *rcdev, unsigned long id, bool assert) { - struct meson_reset *data = - container_of(rcdev, struct meson_reset, rcdev); + struct meson_reset *data = container_of(rcdev, struct meson_reset, rcdev); unsigned int offset, bit; meson_reset_offset_and_bit(data, id, &offset, &bit); @@ -68,6 +67,22 @@ static int meson_reset_level(struct reset_controller_dev *rcdev, BIT(bit), assert ? BIT(bit) : 0); } +static int meson_reset_status(struct reset_controller_dev *rcdev, + unsigned long id) +{ + struct meson_reset *data = + container_of(rcdev, struct meson_reset, rcdev); + unsigned int val, offset, bit; + + meson_reset_offset_and_bit(data, id, &offset, &bit); + offset += data->param->level_offset; + + regmap_read(data->map, offset, &val); + val = !!(BIT(bit) & val); + + return val ^ data->param->level_low_reset; +} + static int meson_reset_assert(struct reset_controller_dev *rcdev, unsigned long id) { @@ -84,6 +99,7 @@ static const struct reset_control_ops meson_reset_ops = { .reset = meson_reset_reset, .assert = meson_reset_assert, .deassert = meson_reset_deassert, + .status = meson_reset_status, }; static const struct meson_reset_param meson8b_param = {
Add a callback to check the status of the level reset, as done in the reset driver of the audio clock controller. This is done keep the functionality when the audio reset controller get migrated to meson-reset. Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> --- drivers/reset/reset-meson.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-)