phy: fsl-imx8-mipi-dphy: Hook into runtime pm
Subsystems (2)
cover phy: fsl-imx8-mipi-dphy: Hook into runtime pm
This allows us to shut down the mipi power domain on the SOC. The alternative would be to drop the dphy from the mipi power domain in the SOCs device tree and only have the DSI host controller visible there (and rely on the phy layer's built in runtime pm handling) but this makes the power domain dependency less explicit.
Currently the pm domain can't be shut off when blanking the panel:
pm_genpd_summary
domain status slaves
/device runtime status
----------------------------------------------------------------------
mipi on
/devices/platform/soc@0/soc@0:bus@30800000/30a00300.dphy unsupported
/devices/platform/soc@0/soc@0:bus@30800000/30a00000.mipi_dsi suspendedwhile with this we can shut down the power domain on panel blank:
mipi off-0
/devices/platform/soc@0/soc@0:bus@30800000/30a00300.dphy suspended
/devices/platform/soc@0/soc@0:bus@30800000/30a00000.mipi_dsi suspendedThis is similar to what drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c does.
Patch is against next-20200217
Guido Günther (1):
phy: fsl-imx8-mipi-dphy: Hook into runtime pm
.../phy/freescale/phy-fsl-imx8-mipi-dphy.c | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-)
Signature · 1 line
2.23.0
PATCH 1/1 phy: fsl-imx8-mipi-dphy: Hook into runtime pm
This allows us to shut down the mipi power domain on the SOC. The alternative would be to drop the dphy from the mipi power domain in the SOCs device tree and only have the DSI host controller visible there (and rely on the phy layer's built in runtime pm handling) but this would make the power domain dependency less explicit.
Currently the pm domain can't be shut off when blanking the panel:
pm_genpd_summary
domain status slaves
/device runtime status
----------------------------------------------------------------------
mipi on
/devices/platform/soc@0/soc@0:bus@30800000/30a00300.dphy unsupported
/devices/platform/soc@0/soc@0:bus@30800000/30a00000.mipi_dsi suspendedwhile with this change we can shut down the power domain on panel blank:
mipi off-0
/devices/platform/soc@0/soc@0:bus@30800000/30a00300.dphy suspended
/devices/platform/soc@0/soc@0:bus@30800000/30a00000.mipi_dsi suspended--- .../phy/freescale/phy-fsl-imx8-mipi-dphy.c | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-)
drivers/phy/freescale/phy-fsl-imx8-mipi-dphy.c +21 -1
@@ -14,6 +14,7 @@#include <linux/of_platform.h> #include <linux/phy/phy.h> #include <linux/platform_device.h> +#include <linux/pm_runtime.h> #include <linux/regmap.h> /* DPHY registers */
@@ -93,6 +94,7 @@ struct mixel_dphy_cfg { };struct mixel_dphy_priv { +struct device *dev;struct mixel_dphy_cfg cfg;struct regmap *regmap;struct clk *phy_ref_clk;
@@ -382,6 +384,7 @@ static int mixel_dphy_power_on(struct phy *phy) ret =clk_prepare_enable (priv->phy_ref_clk);if (ret <0 )return ret; +pm_runtime_get_sync (priv->dev);phy_write (phy,PWR_ON ,DPHY_PD_PLL ); ret = regmap_read_poll_timeout(priv->regmap, DPHY_LOCK, locked,
@@ -395,6 +398,7 @@ static int mixel_dphy_power_on(struct phy *phy)return 0 ; clock_disable: +pm_runtime_put (priv->dev);clk_disable_unprepare (priv->phy_ref_clk);return ret; }
@@ -406,6 +410,7 @@ static int mixel_dphy_power_off(struct phy *phy)phy_write (phy,PWR_OFF ,DPHY_PD_PLL );phy_write (phy,PWR_OFF ,DPHY_PD_DPHY ); +pm_runtime_put (priv->dev);clk_disable_unprepare (priv->phy_ref_clk);return 0 ;
@@ -469,6 +474,7 @@ static int mixel_dphy_probe(struct platform_device *pdev)dev_dbg (dev,"phy_ref clock rate: %lu\n" ,clk_get_rate (priv->phy_ref_clk)); + priv->dev = dev;dev_set_drvdata (dev, priv); phy =devm_phy_create (dev, np, &mixel_dphy_phy_ops);
@@ -479,12 +485,26 @@ static int mixel_dphy_probe(struct platform_device *pdev)phy_set_drvdata (phy, priv); phy_provider =devm_of_phy_provider_register (dev, of_phy_simple_xlate); +if (IS_ERR (phy_provider)) +return PTR_ERR (phy_provider); -return PTR_ERR_OR_ZERO (phy_provider); +pm_runtime_enable (dev); + +return 0 ; +} + +static int mixel_dphy_remove (struct platform_device *pdev) +{ +struct mixel_dphy_priv *priv =platform_get_drvdata (pdev); + +pm_runtime_disable (priv->dev); + +return 0 ; }static struct platform_driver mixel_dphy_driver = { .probe = mixel_dphy_probe, + .remove = mixel_dphy_remove, .driver = { .name ="mixel-mipi-dphy" , .of_match_table = mixel_dphy_of_match,
Signature · 1 line
2.23.0
Hi,
Quoted 7 lines · Guido Günther
This allows us to shut down the mipi power domain on the SOC. The alternative would be to drop the dphy from the mipi power domain in the SOCs device tree and only have the DSI host controller visible there (and rely on the phy layer's built in runtime pm handling) but this makes the power domain dependency less explicit.
Currently the pm domain can't be shut off when blanking the panel:
Anything I can do to get this applied?
Cheers,
-- Guido
Quoted 34 lines
pm_genpd_summary
domain status slaves
/device runtime status
----------------------------------------------------------------------
mipi on/devices/platform/soc@0/soc@0:bus@30800000/30a00300.dphy unsupported /devices/platform/soc@0/soc@0:bus@30800000/30a00000.mipi_dsi suspendedwhile with this we can shut down the power domain on panel blank:
mipi off-0
/devices/platform/soc@0/soc@0:bus@30800000/30a00300.dphy suspended /devices/platform/soc@0/soc@0:bus@30800000/30a00000.mipi_dsi suspendedThis is similar to what
drivers/phy/rockchip/phy-rockchip-inno-dsidphy.cdoes.Patch is against next-20200217
Guido Günther (1):
phy: fsl-imx8-mipi-dphy: Hook into runtime pm.../phy/freescale/phy-fsl-imx8-mipi-dphy.c | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-)Signature · 7 lines
2.23.0 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel