Commit cdf3e5e1 authored by Samuel Holland's avatar Samuel Holland Committed by Maxime Ripard

drm/sun4i: sun8i-hdmi-phy: Support multiple custom PHY ops

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: default avatarSamuel Holland <samuel@sholland.org>
Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
Link: https://lore.kernel.org/r/20220615045543.62813-5-samuel@sholland.org
parent 94c25fb1
...@@ -151,10 +151,10 @@ struct sun8i_hdmi_phy; ...@@ -151,10 +151,10 @@ struct sun8i_hdmi_phy;
struct sun8i_hdmi_phy_variant { struct sun8i_hdmi_phy_variant {
bool has_phy_clk; bool has_phy_clk;
bool has_second_pll; bool has_second_pll;
unsigned int is_custom_phy : 1;
const struct dw_hdmi_curr_ctrl *cur_ctr; const struct dw_hdmi_curr_ctrl *cur_ctr;
const struct dw_hdmi_mpll_config *mpll_cfg; const struct dw_hdmi_mpll_config *mpll_cfg;
const struct dw_hdmi_phy_config *phy_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_init)(struct sun8i_hdmi_phy *phy);
void (*phy_disable)(struct dw_hdmi *hdmi, void (*phy_disable)(struct dw_hdmi *hdmi,
struct sun8i_hdmi_phy *phy); struct sun8i_hdmi_phy *phy);
......
...@@ -567,8 +567,8 @@ void sun8i_hdmi_phy_set_ops(struct sun8i_hdmi_phy *phy, ...@@ -567,8 +567,8 @@ void sun8i_hdmi_phy_set_ops(struct sun8i_hdmi_phy *phy,
{ {
const struct sun8i_hdmi_phy_variant *variant = phy->variant; const struct sun8i_hdmi_phy_variant *variant = phy->variant;
if (variant->is_custom_phy) { if (variant->phy_ops) {
plat_data->phy_ops = &sun8i_hdmi_phy_ops; plat_data->phy_ops = variant->phy_ops;
plat_data->phy_name = "sun8i_dw_hdmi_phy"; plat_data->phy_name = "sun8i_dw_hdmi_phy";
plat_data->phy_data = phy; plat_data->phy_data = phy;
} else { } else {
...@@ -587,7 +587,7 @@ static const struct regmap_config sun8i_hdmi_phy_regmap_config = { ...@@ -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 = { 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_init = &sun8i_hdmi_phy_init_a83t,
.phy_disable = &sun8i_hdmi_phy_disable_a83t, .phy_disable = &sun8i_hdmi_phy_disable_a83t,
.phy_config = &sun8i_hdmi_phy_config_a83t, .phy_config = &sun8i_hdmi_phy_config_a83t,
...@@ -595,7 +595,7 @@ static const struct sun8i_hdmi_phy_variant sun8i_a83t_hdmi_phy = { ...@@ -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 = { static const struct sun8i_hdmi_phy_variant sun8i_h3_hdmi_phy = {
.has_phy_clk = true, .has_phy_clk = true,
.is_custom_phy = true, .phy_ops = &sun8i_hdmi_phy_ops,
.phy_init = &sun8i_hdmi_phy_init_h3, .phy_init = &sun8i_hdmi_phy_init_h3,
.phy_disable = &sun8i_hdmi_phy_disable_h3, .phy_disable = &sun8i_hdmi_phy_disable_h3,
.phy_config = &sun8i_hdmi_phy_config_h3, .phy_config = &sun8i_hdmi_phy_config_h3,
...@@ -604,7 +604,7 @@ static const struct sun8i_hdmi_phy_variant sun8i_h3_hdmi_phy = { ...@@ -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 = { static const struct sun8i_hdmi_phy_variant sun8i_r40_hdmi_phy = {
.has_phy_clk = true, .has_phy_clk = true,
.has_second_pll = true, .has_second_pll = true,
.is_custom_phy = true, .phy_ops = &sun8i_hdmi_phy_ops,
.phy_init = &sun8i_hdmi_phy_init_h3, .phy_init = &sun8i_hdmi_phy_init_h3,
.phy_disable = &sun8i_hdmi_phy_disable_h3, .phy_disable = &sun8i_hdmi_phy_disable_h3,
.phy_config = &sun8i_hdmi_phy_config_h3, .phy_config = &sun8i_hdmi_phy_config_h3,
...@@ -612,7 +612,7 @@ static const struct sun8i_hdmi_phy_variant sun8i_r40_hdmi_phy = { ...@@ -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 = { static const struct sun8i_hdmi_phy_variant sun50i_a64_hdmi_phy = {
.has_phy_clk = true, .has_phy_clk = true,
.is_custom_phy = true, .phy_ops = &sun8i_hdmi_phy_ops,
.phy_init = &sun8i_hdmi_phy_init_h3, .phy_init = &sun8i_hdmi_phy_init_h3,
.phy_disable = &sun8i_hdmi_phy_disable_h3, .phy_disable = &sun8i_hdmi_phy_disable_h3,
.phy_config = &sun8i_hdmi_phy_config_h3, .phy_config = &sun8i_hdmi_phy_config_h3,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment