Skip to content

Commit

Permalink
Merge branch '3.8/dss-version'
Browse files Browse the repository at this point in the history
Merge omapdss code to remove cpu_is_* checks from the driver.
  • Loading branch information
Tomi Valkeinen committed Oct 18, 2012
2 parents da6c568 + 97fbd0f commit 9253d2d
Show file tree
Hide file tree
Showing 10 changed files with 162 additions and 59 deletions.
38 changes: 38 additions & 0 deletions arch/arm/mach-omap2/display.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,16 +284,54 @@ 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;
struct platform_device *pdev;
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;
Expand Down
5 changes: 0 additions & 5 deletions drivers/video/omap2/dss/Kconfig
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
menuconfig OMAP2_DSS
tristate "OMAP2+ Display Subsystem support"
depends on ARCH_OMAP2PLUS
help
OMAP2+ Display Subsystem support.

Expand Down Expand Up @@ -72,19 +71,16 @@ 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.
See http://www.hdmi.org/ for HDMI specification.

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.
Expand All @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion drivers/video/omap2/dss/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
48 changes: 31 additions & 17 deletions drivers/video/omap2/dss/dispc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 */
Expand Down Expand Up @@ -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;
}

Expand All @@ -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;

Expand Down
40 changes: 28 additions & 12 deletions drivers/video/omap2/dss/dss.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down Expand Up @@ -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;
Expand All @@ -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;

Expand Down
64 changes: 44 additions & 20 deletions drivers/video/omap2/dss/dss_features.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#include <linux/slab.h>

#include <video/omapdss.h>
#include <plat/cpu.h>

#include "dss.h"
#include "dss_features.h"
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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;
}
}
5 changes: 3 additions & 2 deletions drivers/video/omap2/dss/dss_features.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 2 additions & 1 deletion drivers/video/omap2/dss/hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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[] = {
Expand All @@ -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;
Expand Down
Loading

0 comments on commit 9253d2d

Please sign in to comment.