mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-15 22:31:47 -04:00
Merge tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux
Pull clk driver fixes from Stephen Boyd: - Mark the DDR bus clk critical in the SpaceMiT driver so that boot doesn't fail - Fix boot on Mobile EyeQ by creating the auxiliary device for the ethernet PHY - Plug an OF node leak in Rockchip rk808 clk driver * tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux: clk: rk808: fix OF node reference imbalance MAINTAINERS: add myself as a reviewer for the clk subsystem reset: eyeq: drop device_set_of_node_from_dev() done by parent clk: eyeq: add EyeQ5 children auxiliary device for generic PHYs clk: eyeq: use the auxiliary device creation helper clk: spacemit: k3: mark top_dclk as CLK_IS_CRITICAL
This commit is contained in:
@@ -6356,6 +6356,7 @@ F: include/uapi/linux/comedi.h
|
||||
COMMON CLK FRAMEWORK
|
||||
M: Michael Turquette <mturquette@baylibre.com>
|
||||
M: Stephen Boyd <sboyd@kernel.org>
|
||||
R: Brian Masney <bmasney@redhat.com>
|
||||
L: linux-clk@vger.kernel.org
|
||||
S: Maintained
|
||||
Q: http://patchwork.kernel.org/project/linux-clk/list/
|
||||
|
||||
@@ -110,6 +110,7 @@ struct eqc_match_data {
|
||||
|
||||
const char *reset_auxdev_name;
|
||||
const char *pinctrl_auxdev_name;
|
||||
const char *eth_phy_auxdev_name;
|
||||
|
||||
unsigned int early_clk_count;
|
||||
};
|
||||
@@ -321,38 +322,18 @@ static void eqc_probe_init_fixed_factors(struct device *dev,
|
||||
}
|
||||
}
|
||||
|
||||
static void eqc_auxdev_release(struct device *dev)
|
||||
{
|
||||
struct auxiliary_device *adev = to_auxiliary_dev(dev);
|
||||
|
||||
kfree(adev);
|
||||
}
|
||||
|
||||
static int eqc_auxdev_create(struct device *dev, void __iomem *base,
|
||||
const char *name, u32 id)
|
||||
static void eqc_auxdev_create_optional(struct device *dev, void __iomem *base,
|
||||
const char *name)
|
||||
{
|
||||
struct auxiliary_device *adev;
|
||||
int ret;
|
||||
|
||||
adev = kzalloc_obj(*adev);
|
||||
if (!adev)
|
||||
return -ENOMEM;
|
||||
|
||||
adev->name = name;
|
||||
adev->dev.parent = dev;
|
||||
adev->dev.platform_data = (void __force *)base;
|
||||
adev->dev.release = eqc_auxdev_release;
|
||||
adev->id = id;
|
||||
|
||||
ret = auxiliary_device_init(adev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = auxiliary_device_add(adev);
|
||||
if (ret)
|
||||
auxiliary_device_uninit(adev);
|
||||
|
||||
return ret;
|
||||
if (name) {
|
||||
adev = devm_auxiliary_device_create(dev, name,
|
||||
(void __force *)base);
|
||||
if (!adev)
|
||||
dev_warn(dev, "failed creating auxiliary device %s.%s\n",
|
||||
KBUILD_MODNAME, name);
|
||||
}
|
||||
}
|
||||
|
||||
static int eqc_probe(struct platform_device *pdev)
|
||||
@@ -364,7 +345,6 @@ static int eqc_probe(struct platform_device *pdev)
|
||||
unsigned int i, clk_count;
|
||||
struct resource *res;
|
||||
void __iomem *base;
|
||||
int ret;
|
||||
|
||||
data = device_get_match_data(dev);
|
||||
if (!data)
|
||||
@@ -378,21 +358,10 @@ static int eqc_probe(struct platform_device *pdev)
|
||||
if (!base)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Init optional reset auxiliary device. */
|
||||
if (data->reset_auxdev_name) {
|
||||
ret = eqc_auxdev_create(dev, base, data->reset_auxdev_name, 0);
|
||||
if (ret)
|
||||
dev_warn(dev, "failed creating auxiliary device %s.%s: %d\n",
|
||||
KBUILD_MODNAME, data->reset_auxdev_name, ret);
|
||||
}
|
||||
|
||||
/* Init optional pinctrl auxiliary device. */
|
||||
if (data->pinctrl_auxdev_name) {
|
||||
ret = eqc_auxdev_create(dev, base, data->pinctrl_auxdev_name, 0);
|
||||
if (ret)
|
||||
dev_warn(dev, "failed creating auxiliary device %s.%s: %d\n",
|
||||
KBUILD_MODNAME, data->pinctrl_auxdev_name, ret);
|
||||
}
|
||||
/* Init optional auxiliary devices. */
|
||||
eqc_auxdev_create_optional(dev, base, data->reset_auxdev_name);
|
||||
eqc_auxdev_create_optional(dev, base, data->pinctrl_auxdev_name);
|
||||
eqc_auxdev_create_optional(dev, base, data->eth_phy_auxdev_name);
|
||||
|
||||
if (data->pll_count + data->div_count + data->fixed_factor_count == 0)
|
||||
return 0; /* Zero clocks, we are done. */
|
||||
@@ -553,6 +522,7 @@ static const struct eqc_match_data eqc_eyeq5_match_data = {
|
||||
|
||||
.reset_auxdev_name = "reset",
|
||||
.pinctrl_auxdev_name = "pinctrl",
|
||||
.eth_phy_auxdev_name = "phy",
|
||||
|
||||
.early_clk_count = ARRAY_SIZE(eqc_eyeq5_early_plls) +
|
||||
ARRAY_SIZE(eqc_eyeq5_early_fixed_factors),
|
||||
|
||||
@@ -153,7 +153,7 @@ static int rk808_clkout_probe(struct platform_device *pdev)
|
||||
struct rk808_clkout *rk808_clkout;
|
||||
int ret;
|
||||
|
||||
dev->of_node = pdev->dev.parent->of_node;
|
||||
device_set_of_node_from_dev(dev, dev->parent);
|
||||
|
||||
rk808_clkout = devm_kzalloc(dev,
|
||||
sizeof(*rk808_clkout), GFP_KERNEL);
|
||||
|
||||
@@ -846,7 +846,7 @@ static const struct clk_parent_data top_parents[] = {
|
||||
CCU_PARENT_HW(pll6_d3),
|
||||
};
|
||||
CCU_MUX_DIV_GATE_FC_DEFINE(top_dclk, top_parents, APMU_TOP_DCLK_CTRL, 5, 3,
|
||||
BIT(8), 2, 3, BIT(1), 0);
|
||||
BIT(8), 2, 3, BIT(1), CLK_IS_CRITICAL);
|
||||
|
||||
static const struct clk_parent_data ucie_parents[] = {
|
||||
CCU_PARENT_HW(pll1_d8_307p2),
|
||||
|
||||
@@ -422,13 +422,6 @@ static int eqr_of_xlate_twocells(struct reset_controller_dev *rcdev,
|
||||
return eqr_of_xlate_internal(rcdev, reset_spec->args[0], reset_spec->args[1]);
|
||||
}
|
||||
|
||||
static void eqr_of_node_put(void *_dev)
|
||||
{
|
||||
struct device *dev = _dev;
|
||||
|
||||
of_node_put(dev->of_node);
|
||||
}
|
||||
|
||||
static int eqr_probe(struct auxiliary_device *adev,
|
||||
const struct auxiliary_device_id *id)
|
||||
{
|
||||
@@ -439,21 +432,8 @@ static int eqr_probe(struct auxiliary_device *adev,
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* We are an auxiliary device of clk-eyeq. We do not have an OF node by
|
||||
* default; let's reuse our parent's OF node.
|
||||
*/
|
||||
WARN_ON(dev->of_node);
|
||||
device_set_of_node_from_dev(dev, dev->parent);
|
||||
if (!dev->of_node)
|
||||
return -ENODEV;
|
||||
|
||||
ret = devm_add_action_or_reset(dev, eqr_of_node_put, dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Using our newfound OF node, we can get match data. We cannot use
|
||||
* device_get_match_data() because it does not match reused OF nodes.
|
||||
* Get match data. We cannot use device_get_match_data() because it does
|
||||
* not accept reused OF nodes; see device_set_of_node_from_dev().
|
||||
*/
|
||||
match = of_match_node(dev->driver->of_match_table, dev->of_node);
|
||||
if (!match || !match->data)
|
||||
|
||||
Reference in New Issue
Block a user