mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-04 21:42:31 -04:00
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>
This commit is contained in:
committed by
Philipp Zabel
parent
6d6818abec
commit
cc3b1245cd
@@ -24,7 +24,12 @@ struct imx8mp_reset_map {
|
||||
bool active_low;
|
||||
};
|
||||
|
||||
static const struct imx8mp_reset_map reset_map[] = {
|
||||
struct imx8mp_reset_info {
|
||||
const struct imx8mp_reset_map *map;
|
||||
int num_lines;
|
||||
};
|
||||
|
||||
static const struct imx8mp_reset_map imx8mp_reset_map[] = {
|
||||
[IMX8MP_AUDIOMIX_EARC_RESET] = {
|
||||
.offset = IMX8MP_AUDIOMIX_EARC_RESET_OFFSET,
|
||||
.mask = BIT(0),
|
||||
@@ -42,9 +47,15 @@ static const struct imx8mp_reset_map reset_map[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static const struct imx8mp_reset_info imx8mp_reset_info = {
|
||||
.map = imx8mp_reset_map,
|
||||
.num_lines = ARRAY_SIZE(imx8mp_reset_map),
|
||||
};
|
||||
|
||||
struct imx8mp_audiomix_reset {
|
||||
struct reset_controller_dev rcdev;
|
||||
struct regmap *regmap;
|
||||
const struct imx8mp_reset_map *map;
|
||||
};
|
||||
|
||||
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,
|
||||
unsigned long id, bool assert)
|
||||
{
|
||||
struct imx8mp_audiomix_reset *priv = to_imx8mp_audiomix_reset(rcdev);
|
||||
const struct imx8mp_reset_map *reset_map = priv->map;
|
||||
unsigned int mask, offset, active_low, val;
|
||||
|
||||
mask = reset_map[id].mask;
|
||||
@@ -132,16 +144,20 @@ static int imx8mp_audiomix_reset_get_regmap(struct imx8mp_audiomix_reset *priv)
|
||||
static int imx8mp_audiomix_reset_probe(struct auxiliary_device *adev,
|
||||
const struct auxiliary_device_id *id)
|
||||
{
|
||||
const struct imx8mp_reset_info *rinfo;
|
||||
struct imx8mp_audiomix_reset *priv;
|
||||
struct device *dev = &adev->dev;
|
||||
int ret;
|
||||
|
||||
rinfo = (void *)id->driver_data;
|
||||
|
||||
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
|
||||
priv->rcdev.owner = THIS_MODULE;
|
||||
priv->rcdev.nr_resets = ARRAY_SIZE(reset_map);
|
||||
priv->map = rinfo->map;
|
||||
priv->rcdev.nr_resets = rinfo->num_lines;
|
||||
priv->rcdev.ops = &imx8mp_audiomix_reset_ops;
|
||||
priv->rcdev.of_node = dev->parent->of_node;
|
||||
priv->rcdev.dev = dev;
|
||||
@@ -164,6 +180,7 @@ static int imx8mp_audiomix_reset_probe(struct auxiliary_device *adev,
|
||||
static const struct auxiliary_device_id imx8mp_audiomix_reset_ids[] = {
|
||||
{
|
||||
.name = "clk_imx8mp_audiomix.reset",
|
||||
.driver_data = (kernel_ulong_t)&imx8mp_reset_info,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user