Commit 65e98030 authored by Andrzej Hajda's avatar Andrzej Hajda Committed by Inki Dae

drm/exynos/hdmi: use array specifier for HDMI-PHY configurations

HDMI-PHY configurations are stored as array pointer and count pair,
we can re-use existing helpers to simplify their initialization.
Signed-off-by: default avatarAndrzej Hajda <a.hajda@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
parent 190a3c61
...@@ -90,6 +90,16 @@ static const char * const supply[] = { ...@@ -90,6 +90,16 @@ static const char * const supply[] = {
"vdd_pll", "vdd_pll",
}; };
struct hdmiphy_config {
int pixel_clock;
u8 conf[32];
};
struct hdmiphy_configs {
int count;
const struct hdmiphy_config *data;
};
struct string_array_spec { struct string_array_spec {
int count; int count;
const char * const *data; const char * const *data;
...@@ -99,9 +109,8 @@ struct string_array_spec { ...@@ -99,9 +109,8 @@ struct string_array_spec {
struct hdmi_driver_data { struct hdmi_driver_data {
unsigned int type; unsigned int type;
const struct hdmiphy_config *phy_confs;
unsigned int phy_conf_count;
unsigned int is_apb_phy:1; unsigned int is_apb_phy:1;
struct hdmiphy_configs phy_confs;
struct string_array_spec clk_gates; struct string_array_spec clk_gates;
/* /*
* Array of triplets (p_off, p_on, clock), where p_off and p_on are * Array of triplets (p_off, p_on, clock), where p_off and p_on are
...@@ -145,11 +154,6 @@ static inline struct hdmi_context *connector_to_hdmi(struct drm_connector *c) ...@@ -145,11 +154,6 @@ static inline struct hdmi_context *connector_to_hdmi(struct drm_connector *c)
return container_of(c, struct hdmi_context, connector); return container_of(c, struct hdmi_context, connector);
} }
struct hdmiphy_config {
int pixel_clock;
u8 conf[32];
};
/* list of phy config settings */ /* list of phy config settings */
static const struct hdmiphy_config hdmiphy_v13_configs[] = { static const struct hdmiphy_config hdmiphy_v13_configs[] = {
{ {
...@@ -521,27 +525,24 @@ static const char * const hdmi_clk_muxes4[] = { ...@@ -521,27 +525,24 @@ static const char * const hdmi_clk_muxes4[] = {
static const struct hdmi_driver_data exynos5420_hdmi_driver_data = { static const struct hdmi_driver_data exynos5420_hdmi_driver_data = {
.type = HDMI_TYPE14, .type = HDMI_TYPE14,
.phy_confs = hdmiphy_5420_configs,
.phy_conf_count = ARRAY_SIZE(hdmiphy_5420_configs),
.is_apb_phy = 1, .is_apb_phy = 1,
.phy_confs = INIT_ARRAY_SPEC(hdmiphy_5420_configs),
.clk_gates = INIT_ARRAY_SPEC(hdmi_clk_gates4), .clk_gates = INIT_ARRAY_SPEC(hdmi_clk_gates4),
.clk_muxes = INIT_ARRAY_SPEC(hdmi_clk_muxes4), .clk_muxes = INIT_ARRAY_SPEC(hdmi_clk_muxes4),
}; };
static const struct hdmi_driver_data exynos4212_hdmi_driver_data = { static const struct hdmi_driver_data exynos4212_hdmi_driver_data = {
.type = HDMI_TYPE14, .type = HDMI_TYPE14,
.phy_confs = hdmiphy_v14_configs,
.phy_conf_count = ARRAY_SIZE(hdmiphy_v14_configs),
.is_apb_phy = 0, .is_apb_phy = 0,
.phy_confs = INIT_ARRAY_SPEC(hdmiphy_v14_configs),
.clk_gates = INIT_ARRAY_SPEC(hdmi_clk_gates4), .clk_gates = INIT_ARRAY_SPEC(hdmi_clk_gates4),
.clk_muxes = INIT_ARRAY_SPEC(hdmi_clk_muxes4), .clk_muxes = INIT_ARRAY_SPEC(hdmi_clk_muxes4),
}; };
static const struct hdmi_driver_data exynos4210_hdmi_driver_data = { static const struct hdmi_driver_data exynos4210_hdmi_driver_data = {
.type = HDMI_TYPE13, .type = HDMI_TYPE13,
.phy_confs = hdmiphy_v13_configs,
.phy_conf_count = ARRAY_SIZE(hdmiphy_v13_configs),
.is_apb_phy = 0, .is_apb_phy = 0,
.phy_confs = INIT_ARRAY_SPEC(hdmiphy_v13_configs),
.clk_gates = INIT_ARRAY_SPEC(hdmi_clk_gates4), .clk_gates = INIT_ARRAY_SPEC(hdmi_clk_gates4),
.clk_muxes = INIT_ARRAY_SPEC(hdmi_clk_muxes4), .clk_muxes = INIT_ARRAY_SPEC(hdmi_clk_muxes4),
}; };
...@@ -1065,10 +1066,11 @@ static int hdmi_get_modes(struct drm_connector *connector) ...@@ -1065,10 +1066,11 @@ static int hdmi_get_modes(struct drm_connector *connector)
static int hdmi_find_phy_conf(struct hdmi_context *hdata, u32 pixel_clock) static int hdmi_find_phy_conf(struct hdmi_context *hdata, u32 pixel_clock)
{ {
const struct hdmiphy_configs *confs = &hdata->drv_data->phy_confs;
int i; int i;
for (i = 0; i < hdata->drv_data->phy_conf_count; i++) for (i = 0; i < confs->count; i++)
if (hdata->drv_data->phy_confs[i].pixel_clock == pixel_clock) if (confs->data[i].pixel_clock == pixel_clock)
return i; return i;
DRM_DEBUG_KMS("Could not find phy config for %d\n", pixel_clock); DRM_DEBUG_KMS("Could not find phy config for %d\n", pixel_clock);
...@@ -1609,7 +1611,7 @@ static void hdmiphy_conf_apply(struct hdmi_context *hdata) ...@@ -1609,7 +1611,7 @@ static void hdmiphy_conf_apply(struct hdmi_context *hdata)
} }
ret = hdmiphy_reg_write_buf(hdata, 0, ret = hdmiphy_reg_write_buf(hdata, 0,
hdata->drv_data->phy_confs[i].conf, 32); hdata->drv_data->phy_confs.data[i].conf, 32);
if (ret) { if (ret) {
DRM_ERROR("failed to configure hdmiphy\n"); DRM_ERROR("failed to configure hdmiphy\n");
return; return;
......
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