mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 03:53:37 +02:00
net: stmmac: dwc-qos: clean up clock initialisation
Clean up the clock initialisation by providing a helper to find a named clock in the bulk clocks, and provide the name of the stmmac clock in match data so we can locate the stmmac clock in generic code. Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Tested-by: Thierry Reding <treding@nvidia.com> Link: https://patch.msgid.link/E1tmbhj-004vSz-Pt@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
cff608268b
commit
196b07ba91
|
|
@ -35,6 +35,16 @@ struct tegra_eqos {
|
|||
struct gpio_desc *reset;
|
||||
};
|
||||
|
||||
static struct clk *dwc_eth_find_clk(struct plat_stmmacenet_data *plat_dat,
|
||||
const char *name)
|
||||
{
|
||||
for (int i = 0; i < plat_dat->num_clks; i++)
|
||||
if (strcmp(plat_dat->clks[i].id, name) == 0)
|
||||
return plat_dat->clks[i].clk;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int dwc_eth_dwmac_config_dt(struct platform_device *pdev,
|
||||
struct plat_stmmacenet_data *plat_dat)
|
||||
{
|
||||
|
|
@ -121,12 +131,7 @@ static int dwc_qos_probe(struct platform_device *pdev,
|
|||
struct plat_stmmacenet_data *plat_dat,
|
||||
struct stmmac_resources *stmmac_res)
|
||||
{
|
||||
for (int i = 0; i < plat_dat->num_clks; i++) {
|
||||
if (strcmp(plat_dat->clks[i].id, "apb_pclk") == 0)
|
||||
plat_dat->stmmac_clk = plat_dat->clks[i].clk;
|
||||
else if (strcmp(plat_dat->clks[i].id, "phy_ref_clk") == 0)
|
||||
plat_dat->pclk = plat_dat->clks[i].clk;
|
||||
}
|
||||
plat_dat->pclk = dwc_eth_find_clk(plat_dat, "phy_ref_clk");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -237,18 +242,12 @@ static int tegra_eqos_probe(struct platform_device *pdev,
|
|||
|
||||
eqos->dev = &pdev->dev;
|
||||
eqos->regs = res->addr;
|
||||
eqos->clk_slave = plat_dat->stmmac_clk;
|
||||
|
||||
if (!is_of_node(dev->fwnode))
|
||||
goto bypass_clk_reset_gpio;
|
||||
|
||||
for (int i = 0; i < plat_dat->num_clks; i++) {
|
||||
if (strcmp(plat_dat->clks[i].id, "slave_bus") == 0) {
|
||||
eqos->clk_slave = plat_dat->clks[i].clk;
|
||||
plat_dat->stmmac_clk = eqos->clk_slave;
|
||||
} else if (strcmp(plat_dat->clks[i].id, "tx") == 0) {
|
||||
eqos->clk_tx = plat_dat->clks[i].clk;
|
||||
}
|
||||
}
|
||||
eqos->clk_tx = dwc_eth_find_clk(plat_dat, "tx");
|
||||
|
||||
eqos->reset = devm_gpiod_get(&pdev->dev, "phy-reset", GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(eqos->reset)) {
|
||||
|
|
@ -312,15 +311,18 @@ struct dwc_eth_dwmac_data {
|
|||
struct plat_stmmacenet_data *plat_dat,
|
||||
struct stmmac_resources *res);
|
||||
void (*remove)(struct platform_device *pdev);
|
||||
const char *stmmac_clk_name;
|
||||
};
|
||||
|
||||
static const struct dwc_eth_dwmac_data dwc_qos_data = {
|
||||
.probe = dwc_qos_probe,
|
||||
.stmmac_clk_name = "apb_pclk",
|
||||
};
|
||||
|
||||
static const struct dwc_eth_dwmac_data tegra_eqos_data = {
|
||||
.probe = tegra_eqos_probe,
|
||||
.remove = tegra_eqos_remove,
|
||||
.stmmac_clk_name = "slave_bus",
|
||||
};
|
||||
|
||||
static int dwc_eth_dwmac_probe(struct platform_device *pdev)
|
||||
|
|
@ -360,6 +362,9 @@ static int dwc_eth_dwmac_probe(struct platform_device *pdev)
|
|||
if (ret)
|
||||
return dev_err_probe(&pdev->dev, ret, "Failed to enable clocks\n");
|
||||
|
||||
plat_dat->stmmac_clk = dwc_eth_find_clk(plat_dat,
|
||||
data->stmmac_clk_name);
|
||||
|
||||
ret = data->probe(pdev, plat_dat, &stmmac_res);
|
||||
if (ret < 0) {
|
||||
dev_err_probe(&pdev->dev, ret, "failed to probe subdriver\n");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user