mirror of https://gitee.com/openkylin/linux.git
Merge branch '3.8/dss-version'
Merge omapdss code to remove cpu_is_* checks from the driver.
This commit is contained in:
commit
9253d2d861
|
@ -284,6 +284,35 @@ static struct platform_device *create_simple_dss_pdev(const char *pdev_name,
|
|||
return ERR_PTR(r);
|
||||
}
|
||||
|
||||
static enum omapdss_version __init omap_display_get_version(void)
|
||||
{
|
||||
if (cpu_is_omap24xx())
|
||||
return OMAPDSS_VER_OMAP24xx;
|
||||
else if (cpu_is_omap3630())
|
||||
return OMAPDSS_VER_OMAP3630;
|
||||
else if (cpu_is_omap34xx()) {
|
||||
if (soc_is_am35xx()) {
|
||||
return OMAPDSS_VER_AM35xx;
|
||||
} else {
|
||||
if (omap_rev() < OMAP3430_REV_ES3_0)
|
||||
return OMAPDSS_VER_OMAP34xx_ES1;
|
||||
else
|
||||
return OMAPDSS_VER_OMAP34xx_ES3;
|
||||
}
|
||||
} else if (omap_rev() == OMAP4430_REV_ES1_0)
|
||||
return OMAPDSS_VER_OMAP4430_ES1;
|
||||
else if (omap_rev() == OMAP4430_REV_ES2_0 ||
|
||||
omap_rev() == OMAP4430_REV_ES2_1 ||
|
||||
omap_rev() == OMAP4430_REV_ES2_2)
|
||||
return OMAPDSS_VER_OMAP4430_ES2;
|
||||
else if (cpu_is_omap44xx())
|
||||
return OMAPDSS_VER_OMAP4;
|
||||
else if (soc_is_omap54xx())
|
||||
return OMAPDSS_VER_OMAP5;
|
||||
else
|
||||
return OMAPDSS_VER_UNKNOWN;
|
||||
}
|
||||
|
||||
int __init omap_display_init(struct omap_dss_board_info *board_data)
|
||||
{
|
||||
int r = 0;
|
||||
|
@ -291,9 +320,18 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
|
|||
int i, oh_count;
|
||||
const struct omap_dss_hwmod_data *curr_dss_hwmod;
|
||||
struct platform_device *dss_pdev;
|
||||
enum omapdss_version ver;
|
||||
|
||||
/* create omapdss device */
|
||||
|
||||
ver = omap_display_get_version();
|
||||
|
||||
if (ver == OMAPDSS_VER_UNKNOWN) {
|
||||
pr_err("DSS not supported on this SoC\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
board_data->version = ver;
|
||||
board_data->dsi_enable_pads = omap_dsi_enable_pads;
|
||||
board_data->dsi_disable_pads = omap_dsi_disable_pads;
|
||||
board_data->get_context_loss_count = omap_pm_get_dev_context_loss_count;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
menuconfig OMAP2_DSS
|
||||
tristate "OMAP2+ Display Subsystem support"
|
||||
depends on ARCH_OMAP2PLUS
|
||||
help
|
||||
OMAP2+ Display Subsystem support.
|
||||
|
||||
|
@ -72,7 +71,6 @@ config OMAP2_DSS_VENC
|
|||
|
||||
config OMAP4_DSS_HDMI
|
||||
bool "HDMI support"
|
||||
depends on ARCH_OMAP4
|
||||
default y
|
||||
help
|
||||
HDMI Interface. This adds the High Definition Multimedia Interface.
|
||||
|
@ -80,11 +78,9 @@ config OMAP4_DSS_HDMI
|
|||
|
||||
config OMAP4_DSS_HDMI_AUDIO
|
||||
bool
|
||||
depends on OMAP4_DSS_HDMI
|
||||
|
||||
config OMAP2_DSS_SDI
|
||||
bool "SDI support"
|
||||
depends on ARCH_OMAP3
|
||||
default n
|
||||
help
|
||||
SDI (Serial Display Interface) support.
|
||||
|
@ -94,7 +90,6 @@ config OMAP2_DSS_SDI
|
|||
|
||||
config OMAP2_DSS_DSI
|
||||
bool "DSI support"
|
||||
depends on ARCH_OMAP3 || ARCH_OMAP4 || ARCH_OMAP5
|
||||
default n
|
||||
help
|
||||
MIPI DSI (Display Serial Interface) support.
|
||||
|
|
|
@ -232,7 +232,7 @@ static int __init omap_dss_probe(struct platform_device *pdev)
|
|||
|
||||
core.pdev = pdev;
|
||||
|
||||
dss_features_init();
|
||||
dss_features_init(pdata->version);
|
||||
|
||||
dss_apply_init();
|
||||
|
||||
|
|
|
@ -36,8 +36,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
|
||||
#include <plat/cpu.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <video/omapdss.h>
|
||||
|
||||
|
@ -3353,7 +3352,7 @@ static void dispc_dump_regs(struct seq_file *s)
|
|||
|
||||
#define DISPC_REG(i, name) name(i)
|
||||
#define DUMPREG(i, r) seq_printf(s, "%s(%s)%*s %08x\n", #r, p_names[i], \
|
||||
48 - strlen(#r) - strlen(p_names[i]), " ", \
|
||||
(int)(48 - strlen(#r) - strlen(p_names[i])), " ", \
|
||||
dispc_read_reg(DISPC_REG(i, r)))
|
||||
|
||||
p_names = mgr_names;
|
||||
|
@ -3430,7 +3429,7 @@ static void dispc_dump_regs(struct seq_file *s)
|
|||
#define DISPC_REG(plane, name, i) name(plane, i)
|
||||
#define DUMPREG(plane, name, i) \
|
||||
seq_printf(s, "%s_%d(%s)%*s %08x\n", #name, i, p_names[plane], \
|
||||
46 - strlen(#name) - strlen(p_names[plane]), " ", \
|
||||
(int)(46 - strlen(#name) - strlen(p_names[plane])), " ", \
|
||||
dispc_read_reg(DISPC_REG(plane, name, i)))
|
||||
|
||||
/* Video pipeline coefficient registers */
|
||||
|
@ -4032,29 +4031,44 @@ static const struct dispc_features omap44xx_dispc_feats __initconst = {
|
|||
.gfx_fifo_workaround = true,
|
||||
};
|
||||
|
||||
static int __init dispc_init_features(struct device *dev)
|
||||
static int __init dispc_init_features(struct platform_device *pdev)
|
||||
{
|
||||
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
|
||||
const struct dispc_features *src;
|
||||
struct dispc_features *dst;
|
||||
|
||||
dst = devm_kzalloc(dev, sizeof(*dst), GFP_KERNEL);
|
||||
dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
|
||||
if (!dst) {
|
||||
dev_err(dev, "Failed to allocate DISPC Features\n");
|
||||
dev_err(&pdev->dev, "Failed to allocate DISPC Features\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (cpu_is_omap24xx()) {
|
||||
switch (pdata->version) {
|
||||
case OMAPDSS_VER_OMAP24xx:
|
||||
src = &omap24xx_dispc_feats;
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
if (omap_rev() < OMAP3430_REV_ES3_0)
|
||||
src = &omap34xx_rev1_0_dispc_feats;
|
||||
else
|
||||
src = &omap34xx_rev3_0_dispc_feats;
|
||||
} else if (cpu_is_omap44xx()) {
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP34xx_ES1:
|
||||
src = &omap34xx_rev1_0_dispc_feats;
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP34xx_ES3:
|
||||
case OMAPDSS_VER_OMAP3630:
|
||||
case OMAPDSS_VER_AM35xx:
|
||||
src = &omap34xx_rev3_0_dispc_feats;
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP4430_ES1:
|
||||
case OMAPDSS_VER_OMAP4430_ES2:
|
||||
case OMAPDSS_VER_OMAP4:
|
||||
src = &omap44xx_dispc_feats;
|
||||
} else if (soc_is_omap54xx()) {
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP5:
|
||||
src = &omap44xx_dispc_feats;
|
||||
} else {
|
||||
break;
|
||||
|
||||
default:
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -4074,7 +4088,7 @@ static int __init omap_dispchw_probe(struct platform_device *pdev)
|
|||
|
||||
dispc.pdev = pdev;
|
||||
|
||||
r = dispc_init_features(&dispc.pdev->dev);
|
||||
r = dispc_init_features(dispc.pdev);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
|
|
|
@ -32,11 +32,10 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <video/omapdss.h>
|
||||
|
||||
#include <plat/cpu.h>
|
||||
|
||||
#include "dss.h"
|
||||
#include "dss_features.h"
|
||||
|
||||
|
@ -792,29 +791,46 @@ static const struct dss_features omap54xx_dss_feats __initconst = {
|
|||
.dpi_select_source = &dss_dpi_select_source_omap5,
|
||||
};
|
||||
|
||||
static int __init dss_init_features(struct device *dev)
|
||||
static int __init dss_init_features(struct platform_device *pdev)
|
||||
{
|
||||
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
|
||||
const struct dss_features *src;
|
||||
struct dss_features *dst;
|
||||
|
||||
dst = devm_kzalloc(dev, sizeof(*dst), GFP_KERNEL);
|
||||
dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
|
||||
if (!dst) {
|
||||
dev_err(dev, "Failed to allocate local DSS Features\n");
|
||||
dev_err(&pdev->dev, "Failed to allocate local DSS Features\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (cpu_is_omap24xx())
|
||||
switch (pdata->version) {
|
||||
case OMAPDSS_VER_OMAP24xx:
|
||||
src = &omap24xx_dss_feats;
|
||||
else if (cpu_is_omap34xx())
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP34xx_ES1:
|
||||
case OMAPDSS_VER_OMAP34xx_ES3:
|
||||
case OMAPDSS_VER_AM35xx:
|
||||
src = &omap34xx_dss_feats;
|
||||
else if (cpu_is_omap3630())
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP3630:
|
||||
src = &omap3630_dss_feats;
|
||||
else if (cpu_is_omap44xx())
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP4430_ES1:
|
||||
case OMAPDSS_VER_OMAP4430_ES2:
|
||||
case OMAPDSS_VER_OMAP4:
|
||||
src = &omap44xx_dss_feats;
|
||||
else if (soc_is_omap54xx())
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP5:
|
||||
src = &omap54xx_dss_feats;
|
||||
else
|
||||
break;
|
||||
|
||||
default:
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
memcpy(dst, src, sizeof(*dst));
|
||||
dss.feat = dst;
|
||||
|
@ -831,7 +847,7 @@ static int __init omap_dsshw_probe(struct platform_device *pdev)
|
|||
|
||||
dss.pdev = pdev;
|
||||
|
||||
r = dss_init_features(&dss.pdev->dev);
|
||||
r = dss_init_features(dss.pdev);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#include <linux/slab.h>
|
||||
|
||||
#include <video/omapdss.h>
|
||||
#include <plat/cpu.h>
|
||||
|
||||
#include "dss.h"
|
||||
#include "dss_features.h"
|
||||
|
@ -825,10 +824,20 @@ static const struct ti_hdmi_ip_ops omap4_hdmi_functions = {
|
|||
|
||||
};
|
||||
|
||||
void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data)
|
||||
void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data,
|
||||
enum omapdss_version version)
|
||||
{
|
||||
if (cpu_is_omap44xx())
|
||||
switch (version) {
|
||||
case OMAPDSS_VER_OMAP4430_ES1:
|
||||
case OMAPDSS_VER_OMAP4430_ES2:
|
||||
case OMAPDSS_VER_OMAP4:
|
||||
ip_data->ops = &omap4_hdmi_functions;
|
||||
break;
|
||||
default:
|
||||
ip_data->ops = NULL;
|
||||
}
|
||||
|
||||
WARN_ON(ip_data->ops == NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -929,29 +938,44 @@ bool dss_feat_rotation_type_supported(enum omap_dss_rotation_type rot_type)
|
|||
return omap_current_dss_features->supported_rotation_types & rot_type;
|
||||
}
|
||||
|
||||
void dss_features_init(void)
|
||||
void dss_features_init(enum omapdss_version version)
|
||||
{
|
||||
if (cpu_is_omap24xx())
|
||||
switch (version) {
|
||||
case OMAPDSS_VER_OMAP24xx:
|
||||
omap_current_dss_features = &omap2_dss_features;
|
||||
else if (cpu_is_omap3630())
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP34xx_ES1:
|
||||
case OMAPDSS_VER_OMAP34xx_ES3:
|
||||
omap_current_dss_features = &omap3430_dss_features;
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP3630:
|
||||
omap_current_dss_features = &omap3630_dss_features;
|
||||
else if (cpu_is_omap34xx()) {
|
||||
if (soc_is_am35xx()) {
|
||||
omap_current_dss_features = &am35xx_dss_features;
|
||||
} else {
|
||||
omap_current_dss_features = &omap3430_dss_features;
|
||||
}
|
||||
}
|
||||
else if (omap_rev() == OMAP4430_REV_ES1_0)
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP4430_ES1:
|
||||
omap_current_dss_features = &omap4430_es1_0_dss_features;
|
||||
else if (omap_rev() == OMAP4430_REV_ES2_0 ||
|
||||
omap_rev() == OMAP4430_REV_ES2_1 ||
|
||||
omap_rev() == OMAP4430_REV_ES2_2)
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP4430_ES2:
|
||||
omap_current_dss_features = &omap4430_es2_0_1_2_dss_features;
|
||||
else if (cpu_is_omap44xx())
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP4:
|
||||
omap_current_dss_features = &omap4_dss_features;
|
||||
else if (soc_is_omap54xx())
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_OMAP5:
|
||||
omap_current_dss_features = &omap5_dss_features;
|
||||
else
|
||||
break;
|
||||
|
||||
case OMAPDSS_VER_AM35xx:
|
||||
omap_current_dss_features = &am35xx_dss_features;
|
||||
break;
|
||||
|
||||
default:
|
||||
DSSWARN("Unsupported OMAP version");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -123,8 +123,9 @@ bool dss_feat_rotation_type_supported(enum omap_dss_rotation_type rot_type);
|
|||
|
||||
bool dss_has_feature(enum dss_feat_id id);
|
||||
void dss_feat_get_reg_field(enum dss_feat_reg_field id, u8 *start, u8 *end);
|
||||
void dss_features_init(void);
|
||||
void dss_features_init(enum omapdss_version version);
|
||||
#if defined(CONFIG_OMAP4_DSS_HDMI)
|
||||
void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data);
|
||||
void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data,
|
||||
enum omapdss_version version);
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -323,6 +323,7 @@ static void hdmi_runtime_put(void)
|
|||
|
||||
static int __init hdmi_init_display(struct omap_dss_device *dssdev)
|
||||
{
|
||||
struct omap_dss_board_info *pdata = hdmi.pdev->dev.platform_data;
|
||||
int r;
|
||||
|
||||
struct gpio gpios[] = {
|
||||
|
@ -333,7 +334,7 @@ static int __init hdmi_init_display(struct omap_dss_device *dssdev)
|
|||
|
||||
DSSDBG("init_display\n");
|
||||
|
||||
dss_init_hdmi_ip_ops(&hdmi.ip_data);
|
||||
dss_init_hdmi_ip_ops(&hdmi.ip_data, pdata->version);
|
||||
|
||||
if (hdmi.vdda_hdmi_dac_reg == NULL) {
|
||||
struct regulator *reg;
|
||||
|
|
|
@ -899,7 +899,7 @@ void ti_hdmi_4xxx_core_dump(struct hdmi_ip_data *ip_data, struct seq_file *s)
|
|||
#define DUMPCOREAV(r) seq_printf(s, "%-35s %08x\n", #r,\
|
||||
hdmi_read_reg(hdmi_av_base(ip_data), r))
|
||||
#define DUMPCOREAV2(i, r) seq_printf(s, "%s[%d]%*s %08x\n", #r, i, \
|
||||
(i < 10) ? 32 - strlen(#r) : 31 - strlen(#r), " ", \
|
||||
(i < 10) ? 32 - (int)strlen(#r) : 31 - (int)strlen(#r), " ", \
|
||||
hdmi_read_reg(hdmi_av_base(ip_data), CORE_REG(i, r)))
|
||||
|
||||
DUMPCORE(HDMI_CORE_SYS_VND_IDL);
|
||||
|
|
|
@ -314,6 +314,19 @@ int dsi_vc_send_bta_sync(struct omap_dss_device *dssdev, int channel);
|
|||
int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel);
|
||||
void dsi_disable_video_output(struct omap_dss_device *dssdev, int channel);
|
||||
|
||||
enum omapdss_version {
|
||||
OMAPDSS_VER_UNKNOWN = 0,
|
||||
OMAPDSS_VER_OMAP24xx,
|
||||
OMAPDSS_VER_OMAP34xx_ES1, /* OMAP3430 ES1.0, 2.0 */
|
||||
OMAPDSS_VER_OMAP34xx_ES3, /* OMAP3430 ES3.0+ */
|
||||
OMAPDSS_VER_OMAP3630,
|
||||
OMAPDSS_VER_AM35xx,
|
||||
OMAPDSS_VER_OMAP4430_ES1, /* OMAP4430 ES1.0 */
|
||||
OMAPDSS_VER_OMAP4430_ES2, /* OMAP4430 ES2.0, 2.1, 2.2 */
|
||||
OMAPDSS_VER_OMAP4, /* All other OMAP4s */
|
||||
OMAPDSS_VER_OMAP5,
|
||||
};
|
||||
|
||||
/* Board specific data */
|
||||
struct omap_dss_board_info {
|
||||
int (*get_context_loss_count)(struct device *dev);
|
||||
|
@ -323,6 +336,7 @@ struct omap_dss_board_info {
|
|||
int (*dsi_enable_pads)(int dsi_id, unsigned lane_mask);
|
||||
void (*dsi_disable_pads)(int dsi_id, unsigned lane_mask);
|
||||
int (*set_min_bus_tput)(struct device *dev, unsigned long r);
|
||||
enum omapdss_version version;
|
||||
};
|
||||
|
||||
/* Init with the board info */
|
||||
|
|
Loading…
Reference in New Issue