Skip to content

Commit cc3b124

Browse files
LaurentiuM1234pH5
authored andcommitted
reset: imx8mp-audiomix: Extend the driver usage
Switch to per-device reset map to allow reusing the driver for other NXP block control IPs. Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
1 parent 6d6818a commit cc3b124

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

drivers/reset/reset-imx8mp-audiomix.c

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ struct imx8mp_reset_map {
2424
bool active_low;
2525
};
2626

27-
static const struct imx8mp_reset_map reset_map[] = {
27+
struct imx8mp_reset_info {
28+
const struct imx8mp_reset_map *map;
29+
int num_lines;
30+
};
31+
32+
static const struct imx8mp_reset_map imx8mp_reset_map[] = {
2833
[IMX8MP_AUDIOMIX_EARC_RESET] = {
2934
.offset = IMX8MP_AUDIOMIX_EARC_RESET_OFFSET,
3035
.mask = BIT(0),
@@ -42,9 +47,15 @@ static const struct imx8mp_reset_map reset_map[] = {
4247
},
4348
};
4449

50+
static const struct imx8mp_reset_info imx8mp_reset_info = {
51+
.map = imx8mp_reset_map,
52+
.num_lines = ARRAY_SIZE(imx8mp_reset_map),
53+
};
54+
4555
struct imx8mp_audiomix_reset {
4656
struct reset_controller_dev rcdev;
4757
struct regmap *regmap;
58+
const struct imx8mp_reset_map *map;
4859
};
4960

5061
static struct imx8mp_audiomix_reset *to_imx8mp_audiomix_reset(struct reset_controller_dev *rcdev)
@@ -56,6 +67,7 @@ static int imx8mp_audiomix_update(struct reset_controller_dev *rcdev,
5667
unsigned long id, bool assert)
5768
{
5869
struct imx8mp_audiomix_reset *priv = to_imx8mp_audiomix_reset(rcdev);
70+
const struct imx8mp_reset_map *reset_map = priv->map;
5971
unsigned int mask, offset, active_low, val;
6072

6173
mask = reset_map[id].mask;
@@ -132,16 +144,20 @@ static int imx8mp_audiomix_reset_get_regmap(struct imx8mp_audiomix_reset *priv)
132144
static int imx8mp_audiomix_reset_probe(struct auxiliary_device *adev,
133145
const struct auxiliary_device_id *id)
134146
{
147+
const struct imx8mp_reset_info *rinfo;
135148
struct imx8mp_audiomix_reset *priv;
136149
struct device *dev = &adev->dev;
137150
int ret;
138151

152+
rinfo = (void *)id->driver_data;
153+
139154
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
140155
if (!priv)
141156
return -ENOMEM;
142157

143158
priv->rcdev.owner = THIS_MODULE;
144-
priv->rcdev.nr_resets = ARRAY_SIZE(reset_map);
159+
priv->map = rinfo->map;
160+
priv->rcdev.nr_resets = rinfo->num_lines;
145161
priv->rcdev.ops = &imx8mp_audiomix_reset_ops;
146162
priv->rcdev.of_node = dev->parent->of_node;
147163
priv->rcdev.dev = dev;
@@ -164,6 +180,7 @@ static int imx8mp_audiomix_reset_probe(struct auxiliary_device *adev,
164180
static const struct auxiliary_device_id imx8mp_audiomix_reset_ids[] = {
165181
{
166182
.name = "clk_imx8mp_audiomix.reset",
183+
.driver_data = (kernel_ulong_t)&imx8mp_reset_info,
167184
},
168185
{ }
169186
};

0 commit comments

Comments
 (0)