Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 261966
b: refs/heads/master
c: aac927c
h: refs/heads/master
v: v3
  • Loading branch information
Tomi Valkeinen committed Jul 25, 2011
1 parent f608740 commit 9b92474
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 28 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b88f58f091f7e771315bc74c28203b5248b96be0
refs/heads/master: aac927c93bb353375c74779491e217427cc4d3a9
2 changes: 1 addition & 1 deletion trunk/arch/arm/mach-omap2/display.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
}

pdata.board_data = board_data;
pdata.board_data->get_last_off_on_transaction_id = NULL;
pdata.board_data->get_context_loss_count = NULL;
pdata.opt_clock_available = opt_clock_available;

for (i = 0; i < oh_count; i++) {
Expand Down
71 changes: 47 additions & 24 deletions trunk/drivers/video/omap2/dss/dss.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ struct dss_reg {
static struct {
struct platform_device *pdev;
void __iomem *base;
int ctx_id;
int ctx_loss_cnt;

struct clk *dpll4_m4_ck;
struct clk *dss_ick;
Expand Down Expand Up @@ -665,34 +665,58 @@ void dss_select_hdmi_venc_clk_source(enum dss_hdmi_venc_clk_source_select hdmi)
}

/* CONTEXT */
static int dss_get_ctx_id(void)
static void dss_init_ctx_loss_count(void)
{
struct omap_display_platform_data *pdata = dss.pdev->dev.platform_data;
int r;
struct device *dev = &dss.pdev->dev;
struct omap_display_platform_data *pdata = dev->platform_data;
struct omap_dss_board_info *board_data = pdata->board_data;
int cnt = 0;

if (!pdata->board_data->get_last_off_on_transaction_id)
return 0;
r = pdata->board_data->get_last_off_on_transaction_id(&dss.pdev->dev);
if (r < 0) {
dev_err(&dss.pdev->dev, "getting transaction ID failed, "
"will force context restore\n");
r = -1;
}
return r;
/*
* get_context_loss_count returns negative on error. We'll ignore the
* error and store the error to ctx_loss_cnt, which will cause
* dss_need_ctx_restore() call to return true.
*/

if (board_data->get_context_loss_count)
cnt = board_data->get_context_loss_count(dev);

WARN_ON(cnt < 0);

dss.ctx_loss_cnt = cnt;

DSSDBG("initial ctx_loss_cnt %u\n", cnt);
}

int dss_need_ctx_restore(void)
static bool dss_need_ctx_restore(void)
{
int id = dss_get_ctx_id();
struct device *dev = &dss.pdev->dev;
struct omap_display_platform_data *pdata = dev->platform_data;
struct omap_dss_board_info *board_data = pdata->board_data;
int cnt;

if (id < 0 || id != dss.ctx_id) {
DSSDBG("ctx id %d -> id %d\n",
dss.ctx_id, id);
dss.ctx_id = id;
return 1;
} else {
return 0;
/*
* If get_context_loss_count is not available, assume that we need
* context restore always.
*/
if (!board_data->get_context_loss_count)
return true;

cnt = board_data->get_context_loss_count(dev);
if (cnt < 0) {
dev_err(dev, "getting context loss count failed, will force "
"context restore\n");
dss.ctx_loss_cnt = cnt;
return true;
}

if (cnt == dss.ctx_loss_cnt)
return false;

DSSDBG("ctx_loss_cnt %d -> %d\n", dss.ctx_loss_cnt, cnt);
dss.ctx_loss_cnt = cnt;

return true;
}

static void save_all_ctx(void)
Expand Down Expand Up @@ -1046,8 +1070,7 @@ static int omap_dsshw_probe(struct platform_device *pdev)

dss_clk_enable_all_no_ctx();

dss.ctx_id = dss_get_ctx_id();
DSSDBG("initial ctx id %u\n", dss.ctx_id);
dss_init_ctx_loss_count();

/* disable LCD and DIGIT output. This seems to fix the synclost
* problem that we get, if the bootloader starts the DSS and
Expand Down
1 change: 0 additions & 1 deletion trunk/drivers/video/omap2/dss/dss.h
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,6 @@ void dss_restore_context(void);
void dss_clk_enable(enum dss_clock clks);
void dss_clk_disable(enum dss_clock clks);
unsigned long dss_clk_get_rate(enum dss_clock clk);
int dss_need_ctx_restore(void);
const char *dss_get_generic_clk_source_name(enum omap_dss_clk_source clk_src);
void dss_dump_clocks(struct seq_file *s);

Expand Down
2 changes: 1 addition & 1 deletion trunk/include/video/omapdss.h
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ int dsi_vc_send_bta_sync(struct omap_dss_device *dssdev, int channel);

/* Board specific data */
struct omap_dss_board_info {
int (*get_last_off_on_transaction_id)(struct device *dev);
int (*get_context_loss_count)(struct device *dev);
int num_devices;
struct omap_dss_device **devices;
struct omap_dss_device *default_device;
Expand Down

0 comments on commit 9b92474

Please sign in to comment.