mirror of
https://github.com/torvalds/linux.git
synced 2024-12-12 14:12:51 +00:00
Merge branch 'fix-cpts-release-action-in-am65-cpts-driver'
Siddharth Vadapalli says: ==================== Fix CPTS release action in am65-cpts driver Delete unreachable code in am65_cpsw_init_cpts() function, which was Reported-by: Leon Romanovsky <leon@kernel.org> at: https://lore.kernel.org/r/Y8aHwSnVK9+sAb24@unreal Remove the devm action associated with am65_cpts_release() and invoke the function directly on the cleanup and exit paths. v4: https://lore.kernel.org/r/20230120044201.357950-1-s-vadapalli@ti.com/ v3: https://lore.kernel.org/r/20230118095439.114222-1-s-vadapalli@ti.com/ v2: https://lore.kernel.org/r/20230116044517.310461-1-s-vadapalli@ti.com/ v1: https://lore.kernel.org/r/20230113104816.132815-1-s-vadapalli@ti.com/ ==================== Link: https://lore.kernel.org/r/20230120070731.383729-1-s-vadapalli@ti.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
commit
5cf6c22b5b
@ -1937,11 +1937,6 @@ static int am65_cpsw_init_cpts(struct am65_cpsw_common *common)
|
||||
int ret = PTR_ERR(cpts);
|
||||
|
||||
of_node_put(node);
|
||||
if (ret == -EOPNOTSUPP) {
|
||||
dev_info(dev, "cpts disabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
dev_err(dev, "cpts create err %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
@ -2919,6 +2914,7 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev)
|
||||
|
||||
err_free_phylink:
|
||||
am65_cpsw_nuss_phylink_cleanup(common);
|
||||
am65_cpts_release(common->cpts);
|
||||
err_of_clear:
|
||||
of_platform_device_destroy(common->mdio_dev, NULL);
|
||||
err_pm_clear:
|
||||
@ -2947,6 +2943,7 @@ static int am65_cpsw_nuss_remove(struct platform_device *pdev)
|
||||
*/
|
||||
am65_cpsw_nuss_cleanup_ndev(common);
|
||||
am65_cpsw_nuss_phylink_cleanup(common);
|
||||
am65_cpts_release(common->cpts);
|
||||
am65_cpsw_disable_serdes_phy(common);
|
||||
|
||||
of_platform_device_destroy(common->mdio_dev, NULL);
|
||||
|
@ -1052,14 +1052,13 @@ static int am65_cpts_of_parse(struct am65_cpts *cpts, struct device_node *node)
|
||||
return cpts_of_mux_clk_setup(cpts, node);
|
||||
}
|
||||
|
||||
static void am65_cpts_release(void *data)
|
||||
void am65_cpts_release(struct am65_cpts *cpts)
|
||||
{
|
||||
struct am65_cpts *cpts = data;
|
||||
|
||||
ptp_clock_unregister(cpts->ptp_clock);
|
||||
am65_cpts_disable(cpts);
|
||||
clk_disable_unprepare(cpts->refclk);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(am65_cpts_release);
|
||||
|
||||
struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
|
||||
struct device_node *node)
|
||||
@ -1139,18 +1138,12 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
|
||||
}
|
||||
cpts->phc_index = ptp_clock_index(cpts->ptp_clock);
|
||||
|
||||
ret = devm_add_action_or_reset(dev, am65_cpts_release, cpts);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to add ptpclk reset action %d", ret);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(dev, cpts->irq, NULL,
|
||||
am65_cpts_interrupt,
|
||||
IRQF_ONESHOT, dev_name(dev), cpts);
|
||||
if (ret < 0) {
|
||||
dev_err(cpts->dev, "error attaching irq %d\n", ret);
|
||||
return ERR_PTR(ret);
|
||||
goto reset_ptpclk;
|
||||
}
|
||||
|
||||
dev_info(dev, "CPTS ver 0x%08x, freq:%u, add_val:%u pps:%d\n",
|
||||
@ -1159,6 +1152,8 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
|
||||
|
||||
return cpts;
|
||||
|
||||
reset_ptpclk:
|
||||
am65_cpts_release(cpts);
|
||||
refclk_disable:
|
||||
clk_disable_unprepare(cpts->refclk);
|
||||
return ERR_PTR(ret);
|
||||
|
@ -18,6 +18,7 @@ struct am65_cpts_estf_cfg {
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_TI_K3_AM65_CPTS)
|
||||
void am65_cpts_release(struct am65_cpts *cpts);
|
||||
struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
|
||||
struct device_node *node);
|
||||
int am65_cpts_phc_index(struct am65_cpts *cpts);
|
||||
@ -31,6 +32,10 @@ void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx);
|
||||
void am65_cpts_suspend(struct am65_cpts *cpts);
|
||||
void am65_cpts_resume(struct am65_cpts *cpts);
|
||||
#else
|
||||
static inline void am65_cpts_release(struct am65_cpts *cpts)
|
||||
{
|
||||
}
|
||||
|
||||
static inline struct am65_cpts *am65_cpts_create(struct device *dev,
|
||||
void __iomem *regs,
|
||||
struct device_node *node)
|
||||
|
Loading…
Reference in New Issue
Block a user