This is a resend of my previous v2 series since I haven't receieved any feedback.
https://lore.kernel.org/linux-phy/[email protected]/T/ I'm hoping to get this merged for v6.19 so that I can remove the round_rate() clk op from the clk core for v6.20. The clk maintainer (Stephen) mentioned this work in his last pull to Linus: https://lore.kernel.org/linux-clk/[email protected]/ The round_rate() clk ops is deprecated in the clk framework in favor of the determine_rate() clk ops, so let's go ahead and convert the drivers in the phy subsystem using the Coccinelle semantic patch posted below. I did a few minor cosmetic cleanups of the code in a few cases. Changes since v2 RESEND: - Collected up 3 Reviewed-by tags Changes since v1: - Patch 8 (phy-rockchip-samsung-hdptx): fix returning error code (Cristian) Coccinelle semantic patch: virtual patch // Look up the current name of the round_rate function @ has_round_rate @ identifier round_rate_name =~ ".*_round_rate"; identifier hw_param, rate_param, parent_rate_param; @@ long round_rate_name(struct clk_hw *hw_param, unsigned long rate_param, unsigned long *parent_rate_param) { ... } // Rename the route_rate function name to determine_rate() @ script:python generate_name depends on has_round_rate @ round_rate_name << has_round_rate.round_rate_name; new_name; @@ coccinelle.new_name = round_rate_name.replace("_round_rate", "_determine_rate") // Change rate to req->rate; also change occurrences of 'return XXX'. @ chg_rate depends on generate_name @ identifier has_round_rate.round_rate_name; identifier has_round_rate.hw_param; identifier has_round_rate.rate_param; identifier has_round_rate.parent_rate_param; identifier ERR =~ "E.*"; expression E; @@ long round_rate_name(struct clk_hw *hw_param, unsigned long rate_param, unsigned long *parent_rate_param) { <... ( -return -ERR; +return -ERR; | - return rate_param; + return 0; | - return E; + req->rate = E; + + return 0; | - rate_param + req->rate ) ...> } // Coccinelle only transforms the first occurrence of the rate parameter // Run a second time. FIXME: Is there a better way to do this? @ chg_rate2 depends on generate_name @ identifier has_round_rate.round_rate_name; identifier has_round_rate.hw_param; identifier has_round_rate.rate_param; identifier has_round_rate.parent_rate_param; @@ long round_rate_name(struct clk_hw *hw_param, unsigned long rate_param, unsigned long *parent_rate_param) { <... - rate_param + req->rate ...> } // Change parent_rate to req->best_parent_rate @ chg_parent_rate depends on generate_name @ identifier has_round_rate.round_rate_name; identifier has_round_rate.hw_param; identifier has_round_rate.rate_param; identifier has_round_rate.parent_rate_param; @@ long round_rate_name(struct clk_hw *hw_param, unsigned long rate_param, unsigned long *parent_rate_param) { <... ( - *parent_rate_param + req->best_parent_rate | - parent_rate_param + &req->best_parent_rate ) ...> } // Convert the function definition from round_rate() to determine_rate() @ func_definition depends on chg_rate @ identifier has_round_rate.round_rate_name; identifier has_round_rate.hw_param; identifier has_round_rate.rate_param; identifier has_round_rate.parent_rate_param; identifier generate_name.new_name; @@ - long round_rate_name(struct clk_hw *hw_param, unsigned long rate_param, - unsigned long *parent_rate_param) + int new_name(struct clk_hw *hw, struct clk_rate_request *req) { ... } // Update the ops from round_rate() to determine_rate() @ ops depends on func_definition @ identifier has_round_rate.round_rate_name; identifier generate_name.new_name; @@ { ..., - .round_rate = round_rate_name, + .determine_rate = new_name, ..., } Note that I used coccinelle 1.2 instead of 1.3 since the newer version adds unnecessary braces as described in this post. https://lore.kernel.org/cocci/[email protected]/ Signed-off-by: Brian Masney <[email protected]> --- Brian Masney (9): phy: freescale: phy-fsl-samsung-hdmi: convert from round_rate() to determine_rate() phy: mediatek: phy-mtk-hdmi-mt2701: convert from round_rate() to determine_rate() phy: mediatek: phy-mtk-hdmi-mt8173: convert from round_rate() to determine_rate() phy: mediatek: phy-mtk-hdmi-mt8195: convert from round_rate() to determine_rate() phy: mediatek: phy-mtk-mipi-dsi-mt8173: convert from round_rate() to determine_rate() phy: mediatek: phy-mtk-mipi-dsi-mt8183: convert from round_rate() to determine_rate() phy: rockchip: phy-rockchip-inno-hdmi: convert from round_rate() to determine_rate() phy: rockchip: phy-rockchip-samsung-hdptx: convert from round_rate() to determine_rate() phy: ti: phy-j721e-wiz: convert from round_rate() to determine_rate() drivers/phy/freescale/phy-fsl-samsung-hdmi.c | 13 ++++++---- drivers/phy/mediatek/phy-mtk-hdmi-mt2701.c | 8 +++--- drivers/phy/mediatek/phy-mtk-hdmi-mt8173.c | 16 ++++++------ drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c | 10 ++++---- drivers/phy/mediatek/phy-mtk-mipi-dsi-mt8173.c | 10 +++++--- drivers/phy/mediatek/phy-mtk-mipi-dsi-mt8183.c | 10 +++++--- drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 30 ++++++++++++----------- drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c | 14 ++++++----- drivers/phy/ti/phy-j721e-wiz.c | 11 ++++++--- 9 files changed, 68 insertions(+), 54 deletions(-) --- base-commit: df5d79720b152e7ff058f11ed7e88d5b5c8d2a0c change-id: 20251106-phy-clk-route-rate-v2-resend-a86cb210196b Best regards, -- Brian Masney <[email protected]>
