Commit cd240cde authored by Andrzej Hajda's avatar Andrzej Hajda Committed by Inki Dae

drm/exynos/hdmi: add driver data pointer to private context

The patch replaces duplicated driver data fields in private context with
pointer to driver data. It also simplifies driver data lookup code.
Signed-off-by: default avatarAndrzej Hajda <a.hajda@samsung.com>
Reviewed-by: default avatarJoonyoung Shim <jy0922.shim@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
parent 882a0644
...@@ -32,8 +32,8 @@ ...@@ -32,8 +32,8 @@
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/regulator/consumer.h> #include <linux/regulator/consumer.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_device.h>
#include <linux/of_gpio.h> #include <linux/of_gpio.h>
#include <linux/hdmi.h> #include <linux/hdmi.h>
#include <linux/component.h> #include <linux/component.h>
...@@ -200,14 +200,12 @@ struct hdmi_context { ...@@ -200,14 +200,12 @@ struct hdmi_context {
struct hdmi_conf_regs mode_conf; struct hdmi_conf_regs mode_conf;
struct hdmi_resources res; struct hdmi_resources res;
const struct hdmi_driver_data *drv_data;
int hpd_gpio; int hpd_gpio;
void __iomem *regs_hdmiphy; void __iomem *regs_hdmiphy;
const struct hdmiphy_config *phy_confs;
unsigned int phy_conf_count;
struct regmap *pmureg; struct regmap *pmureg;
enum hdmi_type type;
}; };
static inline struct hdmi_context *display_to_hdmi(struct exynos_drm_display *d) static inline struct hdmi_context *display_to_hdmi(struct exynos_drm_display *d)
...@@ -926,7 +924,7 @@ static void hdmi_v14_regs_dump(struct hdmi_context *hdata, char *prefix) ...@@ -926,7 +924,7 @@ static void hdmi_v14_regs_dump(struct hdmi_context *hdata, char *prefix)
static void hdmi_regs_dump(struct hdmi_context *hdata, char *prefix) static void hdmi_regs_dump(struct hdmi_context *hdata, char *prefix)
{ {
if (hdata->type == HDMI_TYPE13) if (hdata->drv_data->type == HDMI_TYPE13)
hdmi_v13_regs_dump(hdata, prefix); hdmi_v13_regs_dump(hdata, prefix);
else else
hdmi_v14_regs_dump(hdata, prefix); hdmi_v14_regs_dump(hdata, prefix);
...@@ -1087,8 +1085,8 @@ static int hdmi_find_phy_conf(struct hdmi_context *hdata, u32 pixel_clock) ...@@ -1087,8 +1085,8 @@ static int hdmi_find_phy_conf(struct hdmi_context *hdata, u32 pixel_clock)
{ {
int i; int i;
for (i = 0; i < hdata->phy_conf_count; i++) for (i = 0; i < hdata->drv_data->phy_conf_count; i++)
if (hdata->phy_confs[i].pixel_clock == pixel_clock) if (hdata->drv_data->phy_confs[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);
...@@ -1253,7 +1251,7 @@ static void hdmi_reg_acr(struct hdmi_context *hdata, u8 *acr) ...@@ -1253,7 +1251,7 @@ static void hdmi_reg_acr(struct hdmi_context *hdata, u8 *acr)
hdmi_reg_writeb(hdata, HDMI_ACR_CTS1, acr[2]); hdmi_reg_writeb(hdata, HDMI_ACR_CTS1, acr[2]);
hdmi_reg_writeb(hdata, HDMI_ACR_CTS2, acr[1]); hdmi_reg_writeb(hdata, HDMI_ACR_CTS2, acr[1]);
if (hdata->type == HDMI_TYPE13) if (hdata->drv_data->type == HDMI_TYPE13)
hdmi_reg_writeb(hdata, HDMI_V13_ACR_CON, 4); hdmi_reg_writeb(hdata, HDMI_V13_ACR_CON, 4);
else else
hdmi_reg_writeb(hdata, HDMI_ACR_CON, 4); hdmi_reg_writeb(hdata, HDMI_ACR_CON, 4);
...@@ -1387,7 +1385,7 @@ static void hdmi_conf_init(struct hdmi_context *hdata) ...@@ -1387,7 +1385,7 @@ static void hdmi_conf_init(struct hdmi_context *hdata)
HDMI_VID_PREAMBLE_DIS | HDMI_GUARD_BAND_DIS); HDMI_VID_PREAMBLE_DIS | HDMI_GUARD_BAND_DIS);
} }
if (hdata->type == HDMI_TYPE13) { if (hdata->drv_data->type == HDMI_TYPE13) {
/* choose bluescreen (fecal) color */ /* choose bluescreen (fecal) color */
hdmi_reg_writeb(hdata, HDMI_V13_BLUE_SCREEN_0, 0x12); hdmi_reg_writeb(hdata, HDMI_V13_BLUE_SCREEN_0, 0x12);
hdmi_reg_writeb(hdata, HDMI_V13_BLUE_SCREEN_1, 0x34); hdmi_reg_writeb(hdata, HDMI_V13_BLUE_SCREEN_1, 0x34);
...@@ -1666,7 +1664,7 @@ static void hdmi_v14_mode_apply(struct hdmi_context *hdata) ...@@ -1666,7 +1664,7 @@ static void hdmi_v14_mode_apply(struct hdmi_context *hdata)
static void hdmi_mode_apply(struct hdmi_context *hdata) static void hdmi_mode_apply(struct hdmi_context *hdata)
{ {
if (hdata->type == HDMI_TYPE13) if (hdata->drv_data->type == HDMI_TYPE13)
hdmi_v13_mode_apply(hdata); hdmi_v13_mode_apply(hdata);
else else
hdmi_v14_mode_apply(hdata); hdmi_v14_mode_apply(hdata);
...@@ -1684,7 +1682,7 @@ static void hdmiphy_conf_reset(struct hdmi_context *hdata) ...@@ -1684,7 +1682,7 @@ static void hdmiphy_conf_reset(struct hdmi_context *hdata)
hdmiphy_reg_writeb(hdata, HDMIPHY_MODE_SET_DONE, hdmiphy_reg_writeb(hdata, HDMIPHY_MODE_SET_DONE,
HDMI_PHY_ENABLE_MODE_SET); HDMI_PHY_ENABLE_MODE_SET);
if (hdata->type == HDMI_TYPE13) if (hdata->drv_data->type == HDMI_TYPE13)
reg = HDMI_V13_PHY_RSTOUT; reg = HDMI_V13_PHY_RSTOUT;
else else
reg = HDMI_PHY_RSTOUT; reg = HDMI_PHY_RSTOUT;
...@@ -1698,7 +1696,7 @@ static void hdmiphy_conf_reset(struct hdmi_context *hdata) ...@@ -1698,7 +1696,7 @@ static void hdmiphy_conf_reset(struct hdmi_context *hdata)
static void hdmiphy_poweron(struct hdmi_context *hdata) static void hdmiphy_poweron(struct hdmi_context *hdata)
{ {
if (hdata->type != HDMI_TYPE14) if (hdata->drv_data->type != HDMI_TYPE14)
return; return;
DRM_DEBUG_KMS("\n"); DRM_DEBUG_KMS("\n");
...@@ -1718,7 +1716,7 @@ static void hdmiphy_poweron(struct hdmi_context *hdata) ...@@ -1718,7 +1716,7 @@ static void hdmiphy_poweron(struct hdmi_context *hdata)
static void hdmiphy_poweroff(struct hdmi_context *hdata) static void hdmiphy_poweroff(struct hdmi_context *hdata)
{ {
if (hdata->type != HDMI_TYPE14) if (hdata->drv_data->type != HDMI_TYPE14)
return; return;
DRM_DEBUG_KMS("\n"); DRM_DEBUG_KMS("\n");
...@@ -1750,7 +1748,8 @@ static void hdmiphy_conf_apply(struct hdmi_context *hdata) ...@@ -1750,7 +1748,8 @@ static void hdmiphy_conf_apply(struct hdmi_context *hdata)
return; return;
} }
ret = hdmiphy_reg_write_buf(hdata, 0, hdata->phy_confs[i].conf, 32); ret = hdmiphy_reg_write_buf(hdata, 0,
hdata->drv_data->phy_confs[i].conf, 32);
if (ret) { if (ret) {
DRM_ERROR("failed to configure hdmiphy\n"); DRM_ERROR("failed to configure hdmiphy\n");
return; return;
...@@ -2015,7 +2014,7 @@ static void hdmi_mode_set(struct exynos_drm_display *display, ...@@ -2015,7 +2014,7 @@ static void hdmi_mode_set(struct exynos_drm_display *display,
/* preserve mode information for later use. */ /* preserve mode information for later use. */
drm_mode_copy(&hdata->current_mode, mode); drm_mode_copy(&hdata->current_mode, mode);
if (hdata->type == HDMI_TYPE13) if (hdata->drv_data->type == HDMI_TYPE13)
hdmi_v13_mode_set(hdata, mode); hdmi_v13_mode_set(hdata, mode);
else else
hdmi_v14_mode_set(hdata, mode); hdmi_v14_mode_set(hdata, mode);
...@@ -2294,34 +2293,26 @@ static struct device_node *hdmi_legacy_phy_dt_binding(struct device *dev) ...@@ -2294,34 +2293,26 @@ static struct device_node *hdmi_legacy_phy_dt_binding(struct device *dev)
static int hdmi_probe(struct platform_device *pdev) static int hdmi_probe(struct platform_device *pdev)
{ {
struct device_node *ddc_node, *phy_node; struct device_node *ddc_node, *phy_node;
struct hdmi_driver_data *drv_data;
const struct of_device_id *match; const struct of_device_id *match;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct hdmi_context *hdata; struct hdmi_context *hdata;
struct resource *res; struct resource *res;
int ret; int ret;
if (!dev->of_node)
return -ENODEV;
hdata = devm_kzalloc(dev, sizeof(struct hdmi_context), GFP_KERNEL); hdata = devm_kzalloc(dev, sizeof(struct hdmi_context), GFP_KERNEL);
if (!hdata) if (!hdata)
return -ENOMEM; return -ENOMEM;
match = of_match_device(hdmi_match_types, dev);
if (!match)
return -ENODEV;
hdata->drv_data = match->data;
hdata->display.type = EXYNOS_DISPLAY_TYPE_HDMI; hdata->display.type = EXYNOS_DISPLAY_TYPE_HDMI;
hdata->display.ops = &hdmi_display_ops; hdata->display.ops = &hdmi_display_ops;
platform_set_drvdata(pdev, hdata); platform_set_drvdata(pdev, hdata);
match = of_match_node(hdmi_match_types, dev->of_node);
if (!match)
return -ENODEV;
drv_data = (struct hdmi_driver_data *)match->data;
hdata->type = drv_data->type;
hdata->phy_confs = drv_data->phy_confs;
hdata->phy_conf_count = drv_data->phy_conf_count;
hdata->dev = dev; hdata->dev = dev;
hdata->hpd_gpio = of_get_named_gpio(dev->of_node, "hpd-gpio", 0); hdata->hpd_gpio = of_get_named_gpio(dev->of_node, "hpd-gpio", 0);
if (hdata->hpd_gpio < 0) { if (hdata->hpd_gpio < 0) {
...@@ -2379,7 +2370,7 @@ static int hdmi_probe(struct platform_device *pdev) ...@@ -2379,7 +2370,7 @@ static int hdmi_probe(struct platform_device *pdev)
} }
out_get_phy_port: out_get_phy_port:
if (drv_data->is_apb_phy) { if (hdata->drv_data->is_apb_phy) {
hdata->regs_hdmiphy = of_iomap(phy_node, 0); hdata->regs_hdmiphy = of_iomap(phy_node, 0);
if (!hdata->regs_hdmiphy) { if (!hdata->regs_hdmiphy) {
DRM_ERROR("failed to ioremap hdmi phy\n"); DRM_ERROR("failed to ioremap hdmi phy\n");
......
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