Skip to content

Commit 301b96e

Browse files
committed
clk: amlogic: axg-audio: use the auxiliary reset driver
Remove the implementation of the reset driver in axg audio clock driver and migrate to the one provided by reset framework on the auxiliary bus. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jerome Brunet <[email protected]>
1 parent ac32d03 commit 301b96e

File tree

2 files changed

+15
-102
lines changed

2 files changed

+15
-102
lines changed

drivers/clk/meson/Kconfig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ config COMMON_CLK_AXG_AUDIO
106106
select COMMON_CLK_MESON_SCLK_DIV
107107
select COMMON_CLK_MESON_CLKC_UTILS
108108
select REGMAP_MMIO
109-
select RESET_CONTROLLER
109+
select AUXILIARY_BUS
110+
imply RESET_MESON_AUX
110111
help
111112
Support for the audio clock controller on AmLogic A113D devices,
112113
aka axg, Say Y if you want audio subsystem to work.

drivers/clk/meson/axg-audio.c

Lines changed: 13 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Author: Jerome Brunet <[email protected]>
55
*/
66

7+
#include <linux/auxiliary_bus.h>
78
#include <linux/clk.h>
89
#include <linux/clk-provider.h>
910
#include <linux/init.h>
@@ -12,7 +13,6 @@
1213
#include <linux/platform_device.h>
1314
#include <linux/regmap.h>
1415
#include <linux/reset.h>
15-
#include <linux/reset-controller.h>
1616
#include <linux/slab.h>
1717

1818
#include "meson-clkc-utils.h"
@@ -1678,84 +1678,6 @@ static struct clk_regmap *const sm1_clk_regmaps[] = {
16781678
&sm1_earcrx_dmac_clk,
16791679
};
16801680

1681-
struct axg_audio_reset_data {
1682-
struct reset_controller_dev rstc;
1683-
struct regmap *map;
1684-
unsigned int offset;
1685-
};
1686-
1687-
static void axg_audio_reset_reg_and_bit(struct axg_audio_reset_data *rst,
1688-
unsigned long id,
1689-
unsigned int *reg,
1690-
unsigned int *bit)
1691-
{
1692-
unsigned int stride = regmap_get_reg_stride(rst->map);
1693-
1694-
*reg = (id / (stride * BITS_PER_BYTE)) * stride;
1695-
*reg += rst->offset;
1696-
*bit = id % (stride * BITS_PER_BYTE);
1697-
}
1698-
1699-
static int axg_audio_reset_update(struct reset_controller_dev *rcdev,
1700-
unsigned long id, bool assert)
1701-
{
1702-
struct axg_audio_reset_data *rst =
1703-
container_of(rcdev, struct axg_audio_reset_data, rstc);
1704-
unsigned int offset, bit;
1705-
1706-
axg_audio_reset_reg_and_bit(rst, id, &offset, &bit);
1707-
1708-
regmap_update_bits(rst->map, offset, BIT(bit),
1709-
assert ? BIT(bit) : 0);
1710-
1711-
return 0;
1712-
}
1713-
1714-
static int axg_audio_reset_status(struct reset_controller_dev *rcdev,
1715-
unsigned long id)
1716-
{
1717-
struct axg_audio_reset_data *rst =
1718-
container_of(rcdev, struct axg_audio_reset_data, rstc);
1719-
unsigned int val, offset, bit;
1720-
1721-
axg_audio_reset_reg_and_bit(rst, id, &offset, &bit);
1722-
1723-
regmap_read(rst->map, offset, &val);
1724-
1725-
return !!(val & BIT(bit));
1726-
}
1727-
1728-
static int axg_audio_reset_assert(struct reset_controller_dev *rcdev,
1729-
unsigned long id)
1730-
{
1731-
return axg_audio_reset_update(rcdev, id, true);
1732-
}
1733-
1734-
static int axg_audio_reset_deassert(struct reset_controller_dev *rcdev,
1735-
unsigned long id)
1736-
{
1737-
return axg_audio_reset_update(rcdev, id, false);
1738-
}
1739-
1740-
static int axg_audio_reset_toggle(struct reset_controller_dev *rcdev,
1741-
unsigned long id)
1742-
{
1743-
int ret;
1744-
1745-
ret = axg_audio_reset_assert(rcdev, id);
1746-
if (ret)
1747-
return ret;
1748-
1749-
return axg_audio_reset_deassert(rcdev, id);
1750-
}
1751-
1752-
static const struct reset_control_ops axg_audio_rstc_ops = {
1753-
.assert = axg_audio_reset_assert,
1754-
.deassert = axg_audio_reset_deassert,
1755-
.reset = axg_audio_reset_toggle,
1756-
.status = axg_audio_reset_status,
1757-
};
1758-
17591681
static struct regmap_config axg_audio_regmap_cfg = {
17601682
.reg_bits = 32,
17611683
.val_bits = 32,
@@ -1766,16 +1688,15 @@ struct audioclk_data {
17661688
struct clk_regmap *const *regmap_clks;
17671689
unsigned int regmap_clk_num;
17681690
struct meson_clk_hw_data hw_clks;
1769-
unsigned int reset_offset;
1770-
unsigned int reset_num;
1691+
const char *rst_drvname;
17711692
unsigned int max_register;
17721693
};
17731694

17741695
static int axg_audio_clkc_probe(struct platform_device *pdev)
17751696
{
17761697
struct device *dev = &pdev->dev;
17771698
const struct audioclk_data *data;
1778-
struct axg_audio_reset_data *rst;
1699+
struct auxiliary_device *auxdev;
17791700
struct regmap *map;
17801701
void __iomem *regs;
17811702
struct clk_hw *hw;
@@ -1834,22 +1755,15 @@ static int axg_audio_clkc_probe(struct platform_device *pdev)
18341755
if (ret)
18351756
return ret;
18361757

1837-
/* Stop here if there is no reset */
1838-
if (!data->reset_num)
1839-
return 0;
1840-
1841-
rst = devm_kzalloc(dev, sizeof(*rst), GFP_KERNEL);
1842-
if (!rst)
1843-
return -ENOMEM;
1844-
1845-
rst->map = map;
1846-
rst->offset = data->reset_offset;
1847-
rst->rstc.nr_resets = data->reset_num;
1848-
rst->rstc.ops = &axg_audio_rstc_ops;
1849-
rst->rstc.of_node = dev->of_node;
1850-
rst->rstc.owner = THIS_MODULE;
1758+
/* Register auxiliary reset driver when applicable */
1759+
if (data->rst_drvname) {
1760+
auxdev = __devm_auxiliary_device_create(dev, dev->driver->name,
1761+
data->rst_drvname, NULL, 0);
1762+
if (!auxdev)
1763+
return -ENODEV;
1764+
}
18511765

1852-
return devm_reset_controller_register(dev, &rst->rstc);
1766+
return 0;
18531767
}
18541768

18551769
static const struct audioclk_data axg_audioclk_data = {
@@ -1869,8 +1783,7 @@ static const struct audioclk_data g12a_audioclk_data = {
18691783
.hws = g12a_audio_hw_clks,
18701784
.num = ARRAY_SIZE(g12a_audio_hw_clks),
18711785
},
1872-
.reset_offset = AUDIO_SW_RESET,
1873-
.reset_num = 26,
1786+
.rst_drvname = "rst-g12a",
18741787
.max_register = AUDIO_CLK_SPDIFOUT_B_CTRL,
18751788
};
18761789

@@ -1881,8 +1794,7 @@ static const struct audioclk_data sm1_audioclk_data = {
18811794
.hws = sm1_audio_hw_clks,
18821795
.num = ARRAY_SIZE(sm1_audio_hw_clks),
18831796
},
1884-
.reset_offset = AUDIO_SM1_SW_RESET0,
1885-
.reset_num = 39,
1797+
.rst_drvname = "rst-sm1",
18861798
.max_register = AUDIO_EARCRX_DMAC_CLK_CTRL,
18871799
};
18881800

0 commit comments

Comments
 (0)