Commit cc219afa authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Tomi Valkeinen

drm: omapdrm: hdmi: Store PHY features in PHY data structure

PHY features are stored in a global variable, while they should be
properties of the PHY object. As existing OMAP platforms have a single
HDMI PHY this doesn't cause any issue, but doesn't follow the driver
model.

Move the PHY features to the HDMI PHY data structure to follow the
driver model and pave the road for multiple HDMI PHYs support.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent d6964307
...@@ -245,9 +245,16 @@ struct hdmi_pll_data { ...@@ -245,9 +245,16 @@ struct hdmi_pll_data {
struct hdmi_wp_data *wp; struct hdmi_wp_data *wp;
}; };
struct hdmi_phy_features {
bool bist_ctrl;
bool ldo_voltage;
unsigned long max_phy;
};
struct hdmi_phy_data { struct hdmi_phy_data {
void __iomem *base; void __iomem *base;
const struct hdmi_phy_features *features;
u8 lane_function[4]; u8 lane_function[4];
u8 lane_polarity[4]; u8 lane_polarity[4];
}; };
......
...@@ -19,14 +19,6 @@ ...@@ -19,14 +19,6 @@
#include "dss.h" #include "dss.h"
#include "hdmi.h" #include "hdmi.h"
struct hdmi_phy_features {
bool bist_ctrl;
bool ldo_voltage;
unsigned long max_phy;
};
static const struct hdmi_phy_features *phy_feat;
void hdmi_phy_dump(struct hdmi_phy_data *phy, struct seq_file *s) void hdmi_phy_dump(struct hdmi_phy_data *phy, struct seq_file *s)
{ {
#define DUMPPHY(r) seq_printf(s, "%-35s %08x\n", #r,\ #define DUMPPHY(r) seq_printf(s, "%-35s %08x\n", #r,\
...@@ -36,7 +28,7 @@ void hdmi_phy_dump(struct hdmi_phy_data *phy, struct seq_file *s) ...@@ -36,7 +28,7 @@ void hdmi_phy_dump(struct hdmi_phy_data *phy, struct seq_file *s)
DUMPPHY(HDMI_TXPHY_DIGITAL_CTRL); DUMPPHY(HDMI_TXPHY_DIGITAL_CTRL);
DUMPPHY(HDMI_TXPHY_POWER_CTRL); DUMPPHY(HDMI_TXPHY_POWER_CTRL);
DUMPPHY(HDMI_TXPHY_PAD_CFG_CTRL); DUMPPHY(HDMI_TXPHY_PAD_CFG_CTRL);
if (phy_feat->bist_ctrl) if (phy->features->bist_ctrl)
DUMPPHY(HDMI_TXPHY_BIST_CONTROL); DUMPPHY(HDMI_TXPHY_BIST_CONTROL);
} }
...@@ -146,7 +138,7 @@ int hdmi_phy_configure(struct hdmi_phy_data *phy, unsigned long hfbitclk, ...@@ -146,7 +138,7 @@ int hdmi_phy_configure(struct hdmi_phy_data *phy, unsigned long hfbitclk,
* In OMAP5+, the HFBITCLK must be divided by 2 before issuing the * In OMAP5+, the HFBITCLK must be divided by 2 before issuing the
* HDMI_PHYPWRCMD_LDOON command. * HDMI_PHYPWRCMD_LDOON command.
*/ */
if (phy_feat->bist_ctrl) if (phy->features->bist_ctrl)
REG_FLD_MOD(phy->base, HDMI_TXPHY_BIST_CONTROL, 1, 11, 11); REG_FLD_MOD(phy->base, HDMI_TXPHY_BIST_CONTROL, 1, 11, 11);
/* /*
...@@ -155,7 +147,7 @@ int hdmi_phy_configure(struct hdmi_phy_data *phy, unsigned long hfbitclk, ...@@ -155,7 +147,7 @@ int hdmi_phy_configure(struct hdmi_phy_data *phy, unsigned long hfbitclk,
*/ */
if (hfbitclk != lfbitclk) if (hfbitclk != lfbitclk)
freqout = 0; freqout = 0;
else if (hfbitclk / 10 < phy_feat->max_phy) else if (hfbitclk / 10 < phy->features->max_phy)
freqout = 1; freqout = 1;
else else
freqout = 2; freqout = 2;
...@@ -170,7 +162,7 @@ int hdmi_phy_configure(struct hdmi_phy_data *phy, unsigned long hfbitclk, ...@@ -170,7 +162,7 @@ int hdmi_phy_configure(struct hdmi_phy_data *phy, unsigned long hfbitclk,
hdmi_write_reg(phy->base, HDMI_TXPHY_DIGITAL_CTRL, 0xF0000000); hdmi_write_reg(phy->base, HDMI_TXPHY_DIGITAL_CTRL, 0xF0000000);
/* Setup max LDO voltage */ /* Setup max LDO voltage */
if (phy_feat->ldo_voltage) if (phy->features->ldo_voltage)
REG_FLD_MOD(phy->base, HDMI_TXPHY_POWER_CTRL, 0xB, 3, 0); REG_FLD_MOD(phy->base, HDMI_TXPHY_POWER_CTRL, 0xB, 3, 0);
hdmi_phy_configure_lanes(phy); hdmi_phy_configure_lanes(phy);
...@@ -190,7 +182,8 @@ static const struct hdmi_phy_features omap54xx_phy_feats = { ...@@ -190,7 +182,8 @@ static const struct hdmi_phy_features omap54xx_phy_feats = {
.max_phy = 186000000, .max_phy = 186000000,
}; };
static int hdmi_phy_init_features(struct platform_device *pdev) static int hdmi_phy_init_features(struct platform_device *pdev,
struct hdmi_phy_data *phy)
{ {
struct hdmi_phy_features *dst; struct hdmi_phy_features *dst;
const struct hdmi_phy_features *src; const struct hdmi_phy_features *src;
...@@ -218,7 +211,7 @@ static int hdmi_phy_init_features(struct platform_device *pdev) ...@@ -218,7 +211,7 @@ static int hdmi_phy_init_features(struct platform_device *pdev)
} }
memcpy(dst, src, sizeof(*dst)); memcpy(dst, src, sizeof(*dst));
phy_feat = dst; phy->features = dst;
return 0; return 0;
} }
...@@ -228,7 +221,7 @@ int hdmi_phy_init(struct platform_device *pdev, struct hdmi_phy_data *phy) ...@@ -228,7 +221,7 @@ int hdmi_phy_init(struct platform_device *pdev, struct hdmi_phy_data *phy)
int r; int r;
struct resource *res; struct resource *res;
r = hdmi_phy_init_features(pdev); r = hdmi_phy_init_features(pdev, phy);
if (r) if (r)
return r; return r;
......
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