drm/sun4i: sun8i-hdmi-phy: Support multiple custom PHY ops
authorSamuel Holland <samuel@sholland.org>
Wed, 15 Jun 2022 04:55:41 +0000 (23:55 -0500)
committerMaxime Ripard <maxime@cerno.tech>
Thu, 16 Jun 2022 07:27:46 +0000 (09:27 +0200)
The D1 SoC comes with a new custom HDMI PHY, which does not share any
registers with the existing custom PHY. So it needs a new set of ops.
Instead of providing a flag in the variant structure, provide the ops
themselves.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://lore.kernel.org/r/20220615045543.62813-5-samuel@sholland.org
drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h
drivers/gpu/drm/sun4i/sun8i_hdmi_phy.c

index 0adbfac6eb314c9b974f42b2619a4828c92de3d3..f0b1aaad27d9669ce5448f5c71777cbf53550a49 100644 (file)
@@ -151,10 +151,10 @@ struct sun8i_hdmi_phy;
 struct sun8i_hdmi_phy_variant {
        bool has_phy_clk;
        bool has_second_pll;
-       unsigned int is_custom_phy : 1;
        const struct dw_hdmi_curr_ctrl *cur_ctr;
        const struct dw_hdmi_mpll_config *mpll_cfg;
        const struct dw_hdmi_phy_config *phy_cfg;
+       const struct dw_hdmi_phy_ops *phy_ops;
        void (*phy_init)(struct sun8i_hdmi_phy *phy);
        void (*phy_disable)(struct dw_hdmi *hdmi,
                            struct sun8i_hdmi_phy *phy);
index 9086ce547fad89736b4a3ae4c3a2c581d1a47287..e6d25bbe3d2f3c097c06849db9726ea896e8a76b 100644 (file)
@@ -567,8 +567,8 @@ void sun8i_hdmi_phy_set_ops(struct sun8i_hdmi_phy *phy,
 {
        const struct sun8i_hdmi_phy_variant *variant = phy->variant;
 
-       if (variant->is_custom_phy) {
-               plat_data->phy_ops = &sun8i_hdmi_phy_ops;
+       if (variant->phy_ops) {
+               plat_data->phy_ops = variant->phy_ops;
                plat_data->phy_name = "sun8i_dw_hdmi_phy";
                plat_data->phy_data = phy;
        } else {
@@ -587,7 +587,7 @@ static const struct regmap_config sun8i_hdmi_phy_regmap_config = {
 };
 
 static const struct sun8i_hdmi_phy_variant sun8i_a83t_hdmi_phy = {
-       .is_custom_phy = true,
+       .phy_ops = &sun8i_hdmi_phy_ops,
        .phy_init = &sun8i_hdmi_phy_init_a83t,
        .phy_disable = &sun8i_hdmi_phy_disable_a83t,
        .phy_config = &sun8i_hdmi_phy_config_a83t,
@@ -595,7 +595,7 @@ static const struct sun8i_hdmi_phy_variant sun8i_a83t_hdmi_phy = {
 
 static const struct sun8i_hdmi_phy_variant sun8i_h3_hdmi_phy = {
        .has_phy_clk = true,
-       .is_custom_phy = true,
+       .phy_ops = &sun8i_hdmi_phy_ops,
        .phy_init = &sun8i_hdmi_phy_init_h3,
        .phy_disable = &sun8i_hdmi_phy_disable_h3,
        .phy_config = &sun8i_hdmi_phy_config_h3,
@@ -604,7 +604,7 @@ static const struct sun8i_hdmi_phy_variant sun8i_h3_hdmi_phy = {
 static const struct sun8i_hdmi_phy_variant sun8i_r40_hdmi_phy = {
        .has_phy_clk = true,
        .has_second_pll = true,
-       .is_custom_phy = true,
+       .phy_ops = &sun8i_hdmi_phy_ops,
        .phy_init = &sun8i_hdmi_phy_init_h3,
        .phy_disable = &sun8i_hdmi_phy_disable_h3,
        .phy_config = &sun8i_hdmi_phy_config_h3,
@@ -612,7 +612,7 @@ static const struct sun8i_hdmi_phy_variant sun8i_r40_hdmi_phy = {
 
 static const struct sun8i_hdmi_phy_variant sun50i_a64_hdmi_phy = {
        .has_phy_clk = true,
-       .is_custom_phy = true,
+       .phy_ops = &sun8i_hdmi_phy_ops,
        .phy_init = &sun8i_hdmi_phy_init_h3,
        .phy_disable = &sun8i_hdmi_phy_disable_h3,
        .phy_config = &sun8i_hdmi_phy_config_h3,