* [PATCH 59/65] OMAPDSS: APPLY: remove runtime_get
From: Tomi Valkeinen @ 2011-11-22 9:21 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: archit, Tomi Valkeinen
In-Reply-To: <1321953724-6350-1-git-send-email-tomi.valkeinen@ti.com>
apply.c no longer touches any registers if an output is not enabled.
This means that we don't need to do dispc_runtime_get() anymore, and the
calls can be removed.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/apply.c | 9 +--------
1 files changed, 1 insertions(+), 8 deletions(-)
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c
index 75db522..6a50ee0 100644
--- a/drivers/video/omap2/dss/apply.c
+++ b/drivers/video/omap2/dss/apply.c
@@ -688,16 +688,11 @@ static void omap_dss_mgr_apply_mgr(struct omap_overlay_manager *mgr)
int omap_dss_mgr_apply(struct omap_overlay_manager *mgr)
{
- int r;
unsigned long flags;
struct omap_overlay *ovl;
DSSDBG("omap_dss_mgr_apply(%s)\n", mgr->name);
- r = dispc_runtime_get();
- if (r)
- return r;
-
spin_lock_irqsave(&data_lock, flags);
/* Configure overlays */
@@ -711,9 +706,7 @@ int omap_dss_mgr_apply(struct omap_overlay_manager *mgr)
spin_unlock_irqrestore(&data_lock, flags);
- dispc_runtime_put();
-
- return r;
+ return 0;
}
static void dss_apply_ovl_enable(struct omap_overlay *ovl, bool enable)
--
1.7.4.1
^ permalink raw reply related
* [PATCH 60/65] OMAPDSS: Add comments about blocking of ovl/mgr functions
From: Tomi Valkeinen @ 2011-11-22 9:21 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: archit, Tomi Valkeinen
In-Reply-To: <1321953724-6350-1-git-send-email-tomi.valkeinen@ti.com>
Add comments specifying what ovl/mgr functions may block.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
include/video/omapdss.h | 22 ++++++++++++++++++++++
1 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index 98fc026..39862b8 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -384,6 +384,17 @@ struct omap_overlay {
/* dynamic fields */
struct omap_overlay_manager *manager;
+ /*
+ * The following functions do not block:
+ *
+ * is_enabled
+ * set_overlay_info
+ * get_overlay_info
+ *
+ * The rest of the functions may block and cannot be called from
+ * interrupt context
+ */
+
int (*enable)(struct omap_overlay *ovl);
int (*disable)(struct omap_overlay *ovl);
bool (*is_enabled)(struct omap_overlay *ovl);
@@ -426,6 +437,17 @@ struct omap_overlay_manager {
/* dynamic fields */
struct omap_dss_device *device;
+ /*
+ * The following functions do not block:
+ *
+ * set_manager_info
+ * get_manager_info
+ * apply
+ *
+ * The rest of the functions may block and cannot be called from
+ * interrupt context
+ */
+
int (*set_device)(struct omap_overlay_manager *mgr,
struct omap_dss_device *dssdev);
int (*unset_device)(struct omap_overlay_manager *mgr);
--
1.7.4.1
^ permalink raw reply related
* [PATCH 61/65] OMAPDSS: APPLY: add dss_ovl_simple_check()
From: Tomi Valkeinen @ 2011-11-22 9:22 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: archit, Tomi Valkeinen
In-Reply-To: <1321953724-6350-1-git-send-email-tomi.valkeinen@ti.com>
Add dss_ovl_simple_check() which is used to check the validity of
certain overlay attributes. Only attributes that can be checked
independently, without knowing the display being used, is done here
(thus "simple").
We can use this function in dss_ovl_set_info().
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/apply.c | 40 +++++++++++++++++++++++++++++++++++++++
1 files changed, 40 insertions(+), 0 deletions(-)
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c
index 6a50ee0..c1c4597 100644
--- a/drivers/video/omap2/dss/apply.c
+++ b/drivers/video/omap2/dss/apply.c
@@ -928,12 +928,52 @@ err:
}
+static int dss_ovl_simple_check(struct omap_overlay *ovl,
+ const struct omap_overlay_info *info)
+{
+ if (info->paddr = 0) {
+ DSSERR("check_overlay: paddr cannot be 0\n");
+ return -EINVAL;
+ }
+
+ if ((ovl->caps & OMAP_DSS_OVL_CAP_SCALE) = 0) {
+ if (info->out_width != 0 && info->width != info->out_width) {
+ DSSERR("check_overlay: overlay %d doesn't support "
+ "scaling\n", ovl->id);
+ return -EINVAL;
+ }
+
+ if (info->out_height != 0 && info->height != info->out_height) {
+ DSSERR("check_overlay: overlay %d doesn't support "
+ "scaling\n", ovl->id);
+ return -EINVAL;
+ }
+ }
+
+ if ((ovl->supported_modes & info->color_mode) = 0) {
+ DSSERR("check_overlay: overlay %d doesn't support mode %d\n",
+ ovl->id, info->color_mode);
+ return -EINVAL;
+ }
+
+ if (info->zorder >= omap_dss_get_num_overlays()) {
+ DSSERR("check_overlay: zorder %d too high\n", info->zorder);
+ return -EINVAL;
+ }
+
+ return 0;
+}
int dss_ovl_set_info(struct omap_overlay *ovl,
struct omap_overlay_info *info)
{
struct ovl_priv_data *op = get_ovl_priv(ovl);
unsigned long flags;
+ int r;
+
+ r = dss_ovl_simple_check(ovl, info);
+ if (r)
+ return r;
spin_lock_irqsave(&data_lock, flags);
--
1.7.4.1
^ permalink raw reply related
* [PATCH 62/65] OMAPDSS: APPLY: add dss_mgr_simple_check()
From: Tomi Valkeinen @ 2011-11-22 9:22 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: archit, Tomi Valkeinen
In-Reply-To: <1321953724-6350-1-git-send-email-tomi.valkeinen@ti.com>
Add dss_mgr_simple_check() which is used to check the validity of
certain manager attributes. Only attributes that can be checked
independently, without knowing the display being used, is done here
(thus "simple").
We can use this function in dss_mgr_set_info().
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/apply.c | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c
index c1c4597..5d933b9 100644
--- a/drivers/video/omap2/dss/apply.c
+++ b/drivers/video/omap2/dss/apply.c
@@ -834,11 +834,35 @@ out:
mutex_unlock(&apply_lock);
}
+static int dss_mgr_simple_check(struct omap_overlay_manager *mgr,
+ const struct omap_overlay_manager_info *info)
+{
+ if (dss_has_feature(FEAT_ALPHA_FIXED_ZORDER)) {
+ /*
+ * OMAP3 supports only graphics source transparency color key
+ * and alpha blending simultaneously. See TRM 15.4.2.4.2.2
+ * Alpha Mode.
+ */
+ if (info->partial_alpha_enabled && info->trans_enabled
+ && info->trans_key_type != OMAP_DSS_COLOR_KEY_GFX_DST) {
+ DSSERR("check_manager: illegal transparency key\n");
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
int dss_mgr_set_info(struct omap_overlay_manager *mgr,
struct omap_overlay_manager_info *info)
{
struct mgr_priv_data *mp = get_mgr_priv(mgr);
unsigned long flags;
+ int r;
+
+ r = dss_mgr_simple_check(mgr, info);
+ if (r)
+ return r;
spin_lock_irqsave(&data_lock, flags);
--
1.7.4.1
^ permalink raw reply related
* [PATCH 63/65] OMAPDSS: APPLY: add checking of ovls/mgrs settings
From: Tomi Valkeinen @ 2011-11-22 9:22 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: archit, Tomi Valkeinen
In-Reply-To: <1321953724-6350-1-git-send-email-tomi.valkeinen@ti.com>
Add checks for overlay and manager settings. The checks are a bit
complex, as we need to observe the bigger picture instead of overlays
and managers independently. Things like the used display and the zorder
of other overlays affect the validity of the settings.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/apply.c | 215 ++++++++++++++++++++++++++++++++++++++-
1 files changed, 212 insertions(+), 3 deletions(-)
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c
index 5d933b9..72afa85 100644
--- a/drivers/video/omap2/dss/apply.c
+++ b/drivers/video/omap2/dss/apply.c
@@ -166,6 +166,169 @@ static bool mgr_manual_update(struct omap_overlay_manager *mgr)
return mgr->device->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE;
}
+/* Check if overlay parameters are compatible with display */
+static int dss_ovl_check(struct omap_overlay *ovl,
+ struct omap_overlay_info *info, struct omap_dss_device *dssdev)
+{
+ u16 outw, outh;
+ u16 dw, dh;
+
+ if (dssdev = NULL)
+ return 0;
+
+ dssdev->driver->get_resolution(dssdev, &dw, &dh);
+
+ if ((ovl->caps & OMAP_DSS_OVL_CAP_SCALE) = 0) {
+ outw = info->width;
+ outh = info->height;
+ } else {
+ if (info->out_width = 0)
+ outw = info->width;
+ else
+ outw = info->out_width;
+
+ if (info->out_height = 0)
+ outh = info->height;
+ else
+ outh = info->out_height;
+ }
+
+ if (dw < info->pos_x + outw) {
+ DSSERR("overlay %d horizontally not inside the display area "
+ "(%d + %d >= %d)\n",
+ ovl->id, info->pos_x, outw, dw);
+ return -EINVAL;
+ }
+
+ if (dh < info->pos_y + outh) {
+ DSSERR("overlay %d vertically not inside the display area "
+ "(%d + %d >= %d)\n",
+ ovl->id, info->pos_y, outh, dh);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int dss_mgr_check_zorder(struct omap_overlay_manager *mgr,
+ struct omap_overlay_info **overlay_infos)
+{
+ struct omap_overlay *ovl1, *ovl2;
+ struct ovl_priv_data *op1, *op2;
+ struct omap_overlay_info *info1, *info2;
+
+ list_for_each_entry(ovl1, &mgr->overlays, list) {
+ op1 = get_ovl_priv(ovl1);
+ info1 = overlay_infos[ovl1->id];
+
+ if (info1 = NULL)
+ continue;
+
+ list_for_each_entry(ovl2, &mgr->overlays, list) {
+ if (ovl1 = ovl2)
+ continue;
+
+ op2 = get_ovl_priv(ovl2);
+ info2 = overlay_infos[ovl2->id];
+
+ if (info2 = NULL)
+ continue;
+
+ if (info1->zorder = info2->zorder) {
+ DSSERR("overlays %d and %d have the same "
+ "zorder %d\n",
+ ovl1->id, ovl2->id, info1->zorder);
+ return -EINVAL;
+ }
+ }
+ }
+
+ return 0;
+}
+
+static int dss_mgr_check(struct omap_overlay_manager *mgr,
+ struct omap_dss_device *dssdev,
+ struct omap_overlay_manager_info *info,
+ struct omap_overlay_info **overlay_infos)
+{
+ struct omap_overlay *ovl;
+ int r;
+
+ if (dss_has_feature(FEAT_ALPHA_FREE_ZORDER)) {
+ r = dss_mgr_check_zorder(mgr, overlay_infos);
+ if (r)
+ return r;
+ }
+
+ list_for_each_entry(ovl, &mgr->overlays, list) {
+ struct omap_overlay_info *oi;
+ int r;
+
+ oi = overlay_infos[ovl->id];
+
+ if (oi = NULL)
+ continue;
+
+ r = dss_ovl_check(ovl, oi, dssdev);
+ if (r)
+ return r;
+ }
+
+ return 0;
+}
+static int dss_check_settings_low(struct omap_overlay_manager *mgr,
+ struct omap_dss_device *dssdev, bool applying)
+{
+ struct omap_overlay_info *oi;
+ struct omap_overlay_manager_info *mi;
+ struct omap_overlay *ovl;
+ struct omap_overlay_info *ois[MAX_DSS_OVERLAYS];
+ struct ovl_priv_data *op;
+ struct mgr_priv_data *mp;
+
+ mp = get_mgr_priv(mgr);
+
+ if (applying && mp->user_info_dirty)
+ mi = &mp->user_info;
+ else
+ mi = &mp->info;
+
+ /* collect the infos to be tested into the array */
+ list_for_each_entry(ovl, &mgr->overlays, list) {
+ op = get_ovl_priv(ovl);
+
+ if (!op->enabled)
+ oi = NULL;
+ else if (applying && op->user_info_dirty)
+ oi = &op->user_info;
+ else
+ oi = &op->info;
+
+ ois[ovl->id] = oi;
+ }
+
+ return dss_mgr_check(mgr, dssdev, mi, ois);
+}
+
+/*
+ * check manager and overlay settings using overlay_info from data->info
+ */
+static int dss_check_settings(struct omap_overlay_manager *mgr,
+ struct omap_dss_device *dssdev)
+{
+ return dss_check_settings_low(mgr, dssdev, false);
+}
+
+/*
+ * check manager and overlay settings using overlay_info from ovl->info if
+ * dirty and from data->info otherwise
+ */
+static int dss_check_settings_apply(struct omap_overlay_manager *mgr,
+ struct omap_dss_device *dssdev)
+{
+ return dss_check_settings_low(mgr, dssdev, true);
+}
+
static bool need_isr(void)
{
const int num_mgrs = dss_feat_get_num_mgrs();
@@ -517,6 +680,7 @@ static void dss_write_regs(void)
for (i = 0; i < num_mgrs; ++i) {
struct omap_overlay_manager *mgr;
struct mgr_priv_data *mp;
+ int r;
mgr = omap_dss_get_overlay_manager(i);
mp = get_mgr_priv(mgr);
@@ -524,6 +688,13 @@ static void dss_write_regs(void)
if (!mp->enabled || mgr_manual_update(mgr) || mp->busy)
continue;
+ r = dss_check_settings(mgr, mgr->device);
+ if (r) {
+ DSSERR("cannot write registers for manager %s: "
+ "illegal configuration\n", mgr->name);
+ continue;
+ }
+
dss_mgr_write_regs(mgr);
if (need_go(mgr)) {
@@ -541,11 +712,19 @@ void dss_start_update(struct omap_overlay_manager *mgr)
{
struct mgr_priv_data *mp = get_mgr_priv(mgr);
unsigned long flags;
+ int r;
spin_lock_irqsave(&data_lock, flags);
WARN_ON(mp->updating);
+ r = dss_check_settings(mgr, mgr->device);
+ if (r) {
+ DSSERR("cannot start manual update: illegal configuration\n");
+ spin_unlock_irqrestore(&data_lock, flags);
+ return;
+ }
+
dss_mgr_write_regs(mgr);
mp->updating = true;
@@ -690,11 +869,19 @@ int omap_dss_mgr_apply(struct omap_overlay_manager *mgr)
{
unsigned long flags;
struct omap_overlay *ovl;
+ int r;
DSSDBG("omap_dss_mgr_apply(%s)\n", mgr->name);
spin_lock_irqsave(&data_lock, flags);
+ r = dss_check_settings_apply(mgr, mgr->device);
+ if (r) {
+ spin_unlock_irqrestore(&data_lock, flags);
+ DSSERR("failed to apply settings: illegal configuration.\n");
+ return r;
+ }
+
/* Configure overlays */
list_for_each_entry(ovl, &mgr->overlays, list)
omap_dss_mgr_apply_ovl(ovl);
@@ -784,6 +971,7 @@ void dss_mgr_enable(struct omap_overlay_manager *mgr)
{
struct mgr_priv_data *mp = get_mgr_priv(mgr);
unsigned long flags;
+ int r;
mutex_lock(&apply_lock);
@@ -793,6 +981,16 @@ void dss_mgr_enable(struct omap_overlay_manager *mgr)
spin_lock_irqsave(&data_lock, flags);
mp->enabled = true;
+ r = dss_check_settings(mgr, mgr->device);
+ mp->enabled = false;
+ if (r) {
+ DSSERR("failed to enable manager %d: check_settings failed\n",
+ mgr->id);
+ spin_unlock_irqrestore(&data_lock, flags);
+ goto out;
+ }
+
+ mp->enabled = true;
dss_mgr_setup_fifos(mgr);
@@ -1142,16 +1340,25 @@ int dss_ovl_enable(struct omap_overlay *ovl)
if (op->enabled) {
r = 0;
- goto err;
+ goto err1;
}
if (ovl->manager = NULL || ovl->manager->device = NULL) {
r = -EINVAL;
- goto err;
+ goto err1;
}
spin_lock_irqsave(&data_lock, flags);
+ op->enabled = true;
+ r = dss_check_settings(ovl->manager, ovl->manager->device);
+ op->enabled = false;
+ if (r) {
+ DSSERR("failed to enable overlay %d: check_settings failed\n",
+ ovl->id);
+ goto err2;
+ }
+
dss_apply_ovl_enable(ovl, true);
dss_ovl_setup_fifo(ovl);
@@ -1163,7 +1370,9 @@ int dss_ovl_enable(struct omap_overlay *ovl)
mutex_unlock(&apply_lock);
return 0;
-err:
+err2:
+ spin_unlock_irqrestore(&data_lock, flags);
+err1:
mutex_unlock(&apply_lock);
return r;
}
--
1.7.4.1
^ permalink raw reply related
* [PATCH 64/65] OMAPDSS: APPLY: add return value to dss_mgr_enable()
From: Tomi Valkeinen @ 2011-11-22 9:22 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: archit, Tomi Valkeinen
In-Reply-To: <1321953724-6350-1-git-send-email-tomi.valkeinen@ti.com>
Now that dss_mgr_enable() can fail due to checks, make it return the
error value.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/apply.c | 12 +++++++++---
drivers/video/omap2/dss/dss.h | 2 +-
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c
index 72afa85..1ce4c00 100644
--- a/drivers/video/omap2/dss/apply.c
+++ b/drivers/video/omap2/dss/apply.c
@@ -967,7 +967,7 @@ static void dss_mgr_setup_fifos(struct omap_overlay_manager *mgr)
}
}
-void dss_mgr_enable(struct omap_overlay_manager *mgr)
+int dss_mgr_enable(struct omap_overlay_manager *mgr)
{
struct mgr_priv_data *mp = get_mgr_priv(mgr);
unsigned long flags;
@@ -986,8 +986,7 @@ void dss_mgr_enable(struct omap_overlay_manager *mgr)
if (r) {
DSSERR("failed to enable manager %d: check_settings failed\n",
mgr->id);
- spin_unlock_irqrestore(&data_lock, flags);
- goto out;
+ goto err;
}
mp->enabled = true;
@@ -1006,6 +1005,13 @@ void dss_mgr_enable(struct omap_overlay_manager *mgr)
out:
mutex_unlock(&apply_lock);
+
+ return 0;
+
+err:
+ spin_unlock_irqrestore(&data_lock, flags);
+ mutex_unlock(&apply_lock);
+ return r;
}
void dss_mgr_disable(struct omap_overlay_manager *mgr)
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index c6caf2f..f91eba3 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -170,7 +170,7 @@ int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl);
void dss_start_update(struct omap_overlay_manager *mgr);
int omap_dss_mgr_apply(struct omap_overlay_manager *mgr);
-void dss_mgr_enable(struct omap_overlay_manager *mgr);
+int dss_mgr_enable(struct omap_overlay_manager *mgr);
void dss_mgr_disable(struct omap_overlay_manager *mgr);
int dss_mgr_set_info(struct omap_overlay_manager *mgr,
struct omap_overlay_manager_info *info);
--
1.7.4.1
^ permalink raw reply related
* [PATCH 65/65] OMAPDSS: check the return value of dss_mgr_enable()
From: Tomi Valkeinen @ 2011-11-22 9:22 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: archit, Tomi Valkeinen
In-Reply-To: <1321953724-6350-1-git-send-email-tomi.valkeinen@ti.com>
Now that dss_mgr_enable returns an error value, check it in all the
places dss_mgr_enable is used, and bail out properly.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dpi.c | 5 ++++-
drivers/video/omap2/dss/dsi.c | 11 ++++++++++-
drivers/video/omap2/dss/hdmi.c | 9 ++++++++-
drivers/video/omap2/dss/sdi.c | 6 +++++-
drivers/video/omap2/dss/venc.c | 26 +++++++++++++++++++++++---
5 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index 79c4df3..395d658 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -223,10 +223,13 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
mdelay(2);
- dss_mgr_enable(dssdev->manager);
+ r = dss_mgr_enable(dssdev->manager);
+ if (r)
+ goto err_mgr_enable;
return 0;
+err_mgr_enable:
err_set_mode:
if (dpi_use_dsi_pll(dssdev))
dsi_pll_uninit(dpi.dsidev, true);
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index a35f3fb..57fda24 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -3945,6 +3945,7 @@ int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
int bpp = dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt);
u8 data_type;
u16 word_count;
+ int r;
if (dssdev->panel.dsi_mode = OMAP_DSS_DSI_VIDEO_MODE) {
switch (dssdev->panel.dsi_pix_fmt) {
@@ -3979,7 +3980,15 @@ int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
dsi_if_enable(dsidev, true);
}
- dss_mgr_enable(dssdev->manager);
+ r = dss_mgr_enable(dssdev->manager);
+ if (r) {
+ if (dssdev->panel.dsi_mode = OMAP_DSS_DSI_VIDEO_MODE) {
+ dsi_if_enable(dsidev, false);
+ dsi_vc_enable(dsidev, channel, false);
+ }
+
+ return r;
+ }
return 0;
}
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index e245a2b..b064762 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -387,9 +387,16 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)
hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 1);
- dss_mgr_enable(dssdev->manager);
+ r = dss_mgr_enable(dssdev->manager);
+ if (r)
+ goto err_mgr_enable;
return 0;
+
+err_mgr_enable:
+ hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 0);
+ hdmi.ip_data.ops->phy_disable(&hdmi.ip_data);
+ hdmi.ip_data.ops->pll_disable(&hdmi.ip_data);
err:
hdmi_runtime_put();
return -EIO;
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
index 02da8be..8266ca0 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/omap2/dss/sdi.c
@@ -123,10 +123,14 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
goto err_sdi_enable;
mdelay(2);
- dss_mgr_enable(dssdev->manager);
+ r = dss_mgr_enable(dssdev->manager);
+ if (r)
+ goto err_mgr_enable;
return 0;
+err_mgr_enable:
+ dss_sdi_disable();
err_sdi_enable:
err_set_dispc_clock_div:
err_set_dss_clock_div:
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index 101fcd7..b3e9f90 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -417,9 +417,10 @@ static const struct venc_config *venc_timings_to_config(
BUG();
}
-static void venc_power_on(struct omap_dss_device *dssdev)
+static int venc_power_on(struct omap_dss_device *dssdev)
{
u32 l;
+ int r;
venc_reset();
venc_write_config(venc_timings_to_config(&dssdev->panel.timings));
@@ -447,7 +448,22 @@ static void venc_power_on(struct omap_dss_device *dssdev)
if (dssdev->platform_enable)
dssdev->platform_enable(dssdev);
- dss_mgr_enable(dssdev->manager);
+ r = dss_mgr_enable(dssdev->manager);
+ if (r)
+ goto err;
+
+ return 0;
+
+err:
+ venc_write_reg(VENC_OUTPUT_CONTROL, 0);
+ dss_set_dac_pwrdn_bgz(0);
+
+ if (dssdev->platform_disable)
+ dssdev->platform_disable(dssdev);
+
+ regulator_disable(venc.vdda_dac_reg);
+
+ return r;
}
static void venc_power_off(struct omap_dss_device *dssdev)
@@ -504,7 +520,9 @@ static int venc_panel_enable(struct omap_dss_device *dssdev)
if (r)
goto err1;
- venc_power_on(dssdev);
+ r = venc_power_on(dssdev);
+ if (r)
+ goto err2;
venc.wss_data = 0;
@@ -512,6 +530,8 @@ static int venc_panel_enable(struct omap_dss_device *dssdev)
mutex_unlock(&venc.venc_lock);
return 0;
+err2:
+ venc_runtime_put();
err1:
omap_dss_stop_device(dssdev);
err0:
--
1.7.4.1
^ permalink raw reply related
* [GIT PULL] ARM: amba: Enable module alias autogeneration for AMBA drivers
From: Dave Martin @ 2011-11-22 11:32 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: patches, linux-kernel, linux-arm-kernel, Alan Cox,
Alessandro Rubini, Alessandro Zummo, alsa-devel, Chris Ball,
Dan Williams, Dmitry Torokhov, Grant Likely, Jaroslav Kysela,
Jassi Brar, Julia Lawall, Linus Walleij, linux-fbdev, linux-input,
linux-mmc, linux-serial, linux-watchdog, Paul Mundt,
Paweł Moll, rtc-linux, spi-devel-general, Takashi Iwai
Hi Russell,
This series enables the general infrastructure for modalias
generation to work for AMBA devices, and enables it in the affected
drivers.
Since there are several patches here, I though it better to send a
pull request.
The first two patches (subject lines "ARM: amba: ...") are the core
patches; the remainder of the patches are the driver changes --
each is trivial and simply adds a MODULE_DEVICE_ALIAS() entry.
I have Acks on some of the driver patches and no comments on the
rest. I've been circulating these for some time, so if you're
happy to pull those driver patches via your tree, please go ahead.
Otherwise, let me know and I can continue trying to push the driver
patches via other routes.
Cheers
---Dave
The following changes since commit cfcfc9eca2bcbd26a8e206baeb005b055dbf8e37:
Linux 3.2-rc2 (2011-11-15 15:02:59 -0200)
are available in the git repository at:
git://git.linaro.org/people/dmart/linux-2.6-arm.git arm/amba-modalias+for-rmk
Dave Martin (16):
ARM: amba: Move definition of struct amba_id to mod_devicetable.h
ARM: amba: Auto-generate AMBA driver module aliases during modpost
hwrng: nomadik: Enable module alias autogeneration for AMBA drivers
dmaengine: pl08x: Enable module alias autogeneration for AMBA drivers
dmaengine: pl330: Enable module alias autogeneration for AMBA drivers
gpio: pl061: Enable module alias autogeneration for AMBA drivers
input: ambakmi: Enable module alias autogeneration for AMBA drivers
mmc: mmci: Enable module alias autogeneration for AMBA drivers
rtc: pl030: Enable module alias autogeneration for AMBA drivers
rtc: pl031: Enable module alias autogeneration for AMBA drivers
spi: pl022: Enable module alias autogeneration for AMBA drivers
serial: pl010: Enable module alias autogeneration for AMBA drivers
serial: pl011: Enable module alias autogeneration for AMBA drivers
fbdev: amba: Enable module alias autogeneration for AMBA drivers
watchdog: sp805: Enable module alias autogeneration for AMBA drivers
sound: aaci: Enable module alias autogeneration for AMBA drivers
drivers/amba/bus.c | 4 ++
drivers/char/hw_random/nomadik-rng.c | 2 +
drivers/dma/amba-pl08x.c | 2 +
drivers/dma/pl330.c | 2 +
drivers/gpio/gpio-pl061.c | 2 +
drivers/input/serio/ambakmi.c | 2 +
drivers/mmc/host/mmci.c | 2 +
drivers/rtc/rtc-pl030.c | 2 +
drivers/rtc/rtc-pl031.c | 2 +
drivers/spi/spi-pl022.c | 2 +
drivers/tty/serial/amba-pl010.c | 2 +
drivers/tty/serial/amba-pl011.c | 2 +
drivers/video/amba-clcd.c | 2 +
drivers/watchdog/sp805_wdt.c | 2 +
include/linux/amba/bus.h | 7 +---
include/linux/mod_devicetable.h | 18 ++++++++
scripts/mod/file2alias.c | 72 ++++++++++++++++++++++++++++++++++
sound/arm/aaci.c | 2 +
18 files changed, 123 insertions(+), 6 deletions(-)
^ permalink raw reply
* Re: [PATCH 06/65] OMAPDSS: remove partial update from the overlay
From: Archit Taneja @ 2011-11-22 11:53 UTC (permalink / raw)
To: Tomi Valkeinen; +Cc: linux-fbdev, linux-omap, archit
In-Reply-To: <1321953724-6350-7-git-send-email-tomi.valkeinen@ti.com>
On Tuesday 22 November 2011 02:51 PM, Tomi Valkeinen wrote:
> Partial update for manual update displays has never worked quite well:
> * The HW has limitations on the update area, and the x and width need to
> be even.
There are also some issues with partial update on OMAP4 even when 'x and
width are even'. There seems to be DISPC timeouts when the update area
is too small. Its easy to reproduce it by running the 'rect' test for a
while. For those who are interested, the rect testcase can be found in:
git://gitorious.org/linux-omap-dss2/omapfb-tests.git
Archit
> * Showing a part of a scaled overlay causes artifacts.
> * Makes the management of dispc very complex
>
> Considering the above points and the fact that partial update is not
> used anywhere, this and the following patches remove the partial update
> support. This will greatly simplify the following re-write of the apply
> mechanism to get proper locking and additional features like fifo-merge.
>
> This patch removes the partial update from the manager.c.
>
> Signed-off-by: Tomi Valkeinen<tomi.valkeinen@ti.com>
> ---
> drivers/video/omap2/dss/dsi.c | 2 -
> drivers/video/omap2/dss/dss.h | 3 -
> drivers/video/omap2/dss/manager.c | 333 +------------------------------------
> drivers/video/omap2/dss/rfbi.c | 1 -
> 4 files changed, 6 insertions(+), 333 deletions(-)
>
> diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
> index 5abf8e7..787cebd 100644
> --- a/drivers/video/omap2/dss/dsi.c
> +++ b/drivers/video/omap2/dss/dsi.c
> @@ -4172,8 +4172,6 @@ int omap_dsi_prepare_update(struct omap_dss_device *dssdev,
>
> dsi_perf_mark_setup(dsidev);
>
> - dss_setup_partial_planes(dssdev, x, y, w, h,
> - enlarge_update_area);
> dispc_mgr_set_lcd_size(dssdev->manager->id, *w, *h);
>
> return 0;
> diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
> index 313a7ca..7f6a612 100644
> --- a/drivers/video/omap2/dss/dss.h
> +++ b/drivers/video/omap2/dss/dss.h
> @@ -182,9 +182,6 @@ void default_get_overlay_fifo_thresholds(enum omap_plane plane,
> int dss_init_overlay_managers(struct platform_device *pdev);
> void dss_uninit_overlay_managers(struct platform_device *pdev);
> int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl);
> -void dss_setup_partial_planes(struct omap_dss_device *dssdev,
> - u16 *x, u16 *y, u16 *w, u16 *h,
> - bool enlarge_update_area);
> void dss_start_update(struct omap_dss_device *dssdev);
>
> /* overlay */
> diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/omap2/dss/manager.c
> index 1be5f47..c616f85 100644
> --- a/drivers/video/omap2/dss/manager.c
> +++ b/drivers/video/omap2/dss/manager.c
> @@ -530,13 +530,6 @@ struct manager_cache_data {
>
> bool manual_update;
> bool do_manual_update;
> -
> - /* manual update region */
> - u16 x, y, w, h;
> -
> - /* enlarge the update area if the update area contains scaled
> - * overlays */
> - bool enlarge_update_area;
> };
>
> static struct {
> @@ -762,65 +755,11 @@ static int overlay_enabled(struct omap_overlay *ovl)
> return ovl->info.enabled&& ovl->manager&& ovl->manager->device;
> }
>
> -/* Is rect1 a subset of rect2? */
> -static bool rectangle_subset(int x1, int y1, int w1, int h1,
> - int x2, int y2, int w2, int h2)
> -{
> - if (x1< x2 || y1< y2)
> - return false;
> -
> - if (x1 + w1> x2 + w2)
> - return false;
> -
> - if (y1 + h1> y2 + h2)
> - return false;
> -
> - return true;
> -}
> -
> -/* Do rect1 and rect2 overlap? */
> -static bool rectangle_intersects(int x1, int y1, int w1, int h1,
> - int x2, int y2, int w2, int h2)
> -{
> - if (x1>= x2 + w2)
> - return false;
> -
> - if (x2>= x1 + w1)
> - return false;
> -
> - if (y1>= y2 + h2)
> - return false;
> -
> - if (y2>= y1 + h1)
> - return false;
> -
> - return true;
> -}
> -
> -static bool dispc_is_overlay_scaled(struct overlay_cache_data *oc)
> -{
> - struct omap_overlay_info *oi =&oc->info;
> -
> - if (oi->out_width != 0&& oi->width != oi->out_width)
> - return true;
> -
> - if (oi->out_height != 0&& oi->height != oi->out_height)
> - return true;
> -
> - return false;
> -}
> -
> static int configure_overlay(enum omap_plane plane)
> {
> struct overlay_cache_data *c;
> - struct manager_cache_data *mc;
> - struct omap_overlay_info *oi, new_oi;
> - struct omap_overlay_manager_info *mi;
> - u16 outw, outh;
> - u16 x, y, w, h;
> - u32 paddr;
> + struct omap_overlay_info *oi;
> int r;
> - u16 orig_w, orig_h, orig_outw, orig_outh;
>
> DSSDBGF("%d", plane);
>
> @@ -832,120 +771,7 @@ static int configure_overlay(enum omap_plane plane)
> return 0;
> }
>
> - mc =&dss_cache.manager_cache[c->channel];
> - mi =&mc->info;
> -
> - x = oi->pos_x;
> - y = oi->pos_y;
> - w = oi->width;
> - h = oi->height;
> - outw = oi->out_width = 0 ? oi->width : oi->out_width;
> - outh = oi->out_height = 0 ? oi->height : oi->out_height;
> - paddr = oi->paddr;
> -
> - orig_w = w;
> - orig_h = h;
> - orig_outw = outw;
> - orig_outh = outh;
> -
> - if (mc->manual_update&& mc->do_manual_update) {
> - unsigned bpp;
> - unsigned scale_x_m = w, scale_x_d = outw;
> - unsigned scale_y_m = h, scale_y_d = outh;
> -
> - /* If the overlay is outside the update region, disable it */
> - if (!rectangle_intersects(mc->x, mc->y, mc->w, mc->h,
> - x, y, outw, outh)) {
> - dispc_ovl_enable(plane, 0);
> - return 0;
> - }
> -
> - switch (oi->color_mode) {
> - case OMAP_DSS_COLOR_NV12:
> - bpp = 8;
> - break;
> - case OMAP_DSS_COLOR_RGB16:
> - case OMAP_DSS_COLOR_ARGB16:
> - case OMAP_DSS_COLOR_YUV2:
> - case OMAP_DSS_COLOR_UYVY:
> - case OMAP_DSS_COLOR_RGBA16:
> - case OMAP_DSS_COLOR_RGBX16:
> - case OMAP_DSS_COLOR_ARGB16_1555:
> - case OMAP_DSS_COLOR_XRGB16_1555:
> - bpp = 16;
> - break;
> -
> - case OMAP_DSS_COLOR_RGB24P:
> - bpp = 24;
> - break;
> -
> - case OMAP_DSS_COLOR_RGB24U:
> - case OMAP_DSS_COLOR_ARGB32:
> - case OMAP_DSS_COLOR_RGBA32:
> - case OMAP_DSS_COLOR_RGBX32:
> - bpp = 32;
> - break;
> -
> - default:
> - BUG();
> - }
> -
> - if (mc->x> oi->pos_x) {
> - x = 0;
> - outw -= (mc->x - oi->pos_x);
> - paddr += (mc->x - oi->pos_x) *
> - scale_x_m / scale_x_d * bpp / 8;
> - } else {
> - x = oi->pos_x - mc->x;
> - }
> -
> - if (mc->y> oi->pos_y) {
> - y = 0;
> - outh -= (mc->y - oi->pos_y);
> - paddr += (mc->y - oi->pos_y) *
> - scale_y_m / scale_y_d *
> - oi->screen_width * bpp / 8;
> - } else {
> - y = oi->pos_y - mc->y;
> - }
> -
> - if (mc->w< (x + outw))
> - outw -= (x + outw) - (mc->w);
> -
> - if (mc->h< (y + outh))
> - outh -= (y + outh) - (mc->h);
> -
> - w = w * outw / orig_outw;
> - h = h * outh / orig_outh;
> -
> - /* YUV mode overlay's input width has to be even and the
> - * algorithm above may adjust the width to be odd.
> - *
> - * Here we adjust the width if needed, preferring to increase
> - * the width if the original width was bigger.
> - */
> - if ((w& 1)&&
> - (oi->color_mode = OMAP_DSS_COLOR_YUV2 ||
> - oi->color_mode = OMAP_DSS_COLOR_UYVY)) {
> - if (orig_w> w)
> - w += 1;
> - else
> - w -= 1;
> - }
> - }
> -
> - new_oi = *oi;
> -
> - /* update new_oi members which could have been possibly updated */
> - new_oi.pos_x = x;
> - new_oi.pos_y = y;
> - new_oi.width = w;
> - new_oi.height = h;
> - new_oi.out_width = outw;
> - new_oi.out_height = outh;
> - new_oi.paddr = paddr;
> -
> - r = dispc_ovl_setup(plane,&new_oi, c->ilace, c->channel,
> + r = dispc_ovl_setup(plane, oi, c->ilace, c->channel,
> c->replication, c->fifo_low, c->fifo_high);
> if (r) {
> /* this shouldn't happen */
> @@ -1070,170 +896,23 @@ static int configure_dispc(void)
> return r;
> }
>
> -/* Make the coordinates even. There are some strange problems with OMAP and
> - * partial DSI update when the update widths are odd. */
> -static void make_even(u16 *x, u16 *w)
> -{
> - u16 x1, x2;
> -
> - x1 = *x;
> - x2 = *x + *w;
> -
> - x1&= ~1;
> - x2 = ALIGN(x2, 2);
> -
> - *x = x1;
> - *w = x2 - x1;
> -}
> -
> -/* Configure dispc for partial update. Return possibly modified update
> - * area */
> -void dss_setup_partial_planes(struct omap_dss_device *dssdev,
> - u16 *xi, u16 *yi, u16 *wi, u16 *hi, bool enlarge_update_area)
> +void dss_start_update(struct omap_dss_device *dssdev)
> {
> - struct overlay_cache_data *oc;
> struct manager_cache_data *mc;
> - struct omap_overlay_info *oi;
> + struct overlay_cache_data *oc;
> const int num_ovls = dss_feat_get_num_ovls();
> + const int num_mgrs = dss_feat_get_num_mgrs();
> struct omap_overlay_manager *mgr;
> int i;
> - u16 x, y, w, h;
> - unsigned long flags;
> - bool area_changed;
> -
> - x = *xi;
> - y = *yi;
> - w = *wi;
> - h = *hi;
> -
> - DSSDBG("dispc_setup_partial_planes %d,%d %dx%d\n",
> - *xi, *yi, *wi, *hi);
>
> mgr = dssdev->manager;
>
> - if (!mgr) {
> - DSSDBG("no manager\n");
> - return;
> - }
> -
> - make_even(&x,&w);
> -
> - spin_lock_irqsave(&dss_cache.lock, flags);
> -
> - /*
> - * Execute the outer loop until the inner loop has completed
> - * once without increasing the update area. This will ensure that
> - * all scaled overlays end up completely within the update area.
> - */
> - do {
> - area_changed = false;
> -
> - /* We need to show the whole overlay if it is scaled. So look
> - * for those, and make the update area larger if found.
> - * Also mark the overlay cache dirty */
> - for (i = 0; i< num_ovls; ++i) {
> - unsigned x1, y1, x2, y2;
> - unsigned outw, outh;
> -
> - oc =&dss_cache.overlay_cache[i];
> - oi =&oc->info;
> -
> - if (oc->channel != mgr->id)
> - continue;
> -
> - oc->dirty = true;
> -
> - if (!enlarge_update_area)
> - continue;
> -
> - if (!oc->enabled)
> - continue;
> -
> - if (!dispc_is_overlay_scaled(oc))
> - continue;
> -
> - outw = oi->out_width = 0 ?
> - oi->width : oi->out_width;
> - outh = oi->out_height = 0 ?
> - oi->height : oi->out_height;
> -
> - /* is the overlay outside the update region? */
> - if (!rectangle_intersects(x, y, w, h,
> - oi->pos_x, oi->pos_y,
> - outw, outh))
> - continue;
> -
> - /* if the overlay totally inside the update region? */
> - if (rectangle_subset(oi->pos_x, oi->pos_y, outw, outh,
> - x, y, w, h))
> - continue;
> -
> - if (x> oi->pos_x)
> - x1 = oi->pos_x;
> - else
> - x1 = x;
> -
> - if (y> oi->pos_y)
> - y1 = oi->pos_y;
> - else
> - y1 = y;
> -
> - if ((x + w)< (oi->pos_x + outw))
> - x2 = oi->pos_x + outw;
> - else
> - x2 = x + w;
> -
> - if ((y + h)< (oi->pos_y + outh))
> - y2 = oi->pos_y + outh;
> - else
> - y2 = y + h;
> -
> - x = x1;
> - y = y1;
> - w = x2 - x1;
> - h = y2 - y1;
> -
> - make_even(&x,&w);
> -
> - DSSDBG("changing upd area due to ovl(%d) "
> - "scaling %d,%d %dx%d\n",
> - i, x, y, w, h);
> -
> - area_changed = true;
> - }
> - } while (area_changed);
> -
> mc =&dss_cache.manager_cache[mgr->id];
> - mc->do_manual_update = true;
> - mc->enlarge_update_area = enlarge_update_area;
> - mc->x = x;
> - mc->y = y;
> - mc->w = w;
> - mc->h = h;
>
> + mc->do_manual_update = true;
> configure_dispc();
> -
> mc->do_manual_update = false;
>
> - spin_unlock_irqrestore(&dss_cache.lock, flags);
> -
> - *xi = x;
> - *yi = y;
> - *wi = w;
> - *hi = h;
> -}
> -
> -void dss_start_update(struct omap_dss_device *dssdev)
> -{
> - struct manager_cache_data *mc;
> - struct overlay_cache_data *oc;
> - const int num_ovls = dss_feat_get_num_ovls();
> - const int num_mgrs = dss_feat_get_num_mgrs();
> - struct omap_overlay_manager *mgr;
> - int i;
> -
> - mgr = dssdev->manager;
> -
> for (i = 0; i< num_ovls; ++i) {
> oc =&dss_cache.overlay_cache[i];
> if (oc->channel != mgr->id)
> diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
> index 1130c60..814bb95 100644
> --- a/drivers/video/omap2/dss/rfbi.c
> +++ b/drivers/video/omap2/dss/rfbi.c
> @@ -784,7 +784,6 @@ int omap_rfbi_prepare_update(struct omap_dss_device *dssdev,
> if (*w = 0 || *h = 0)
> return -EINVAL;
>
> - dss_setup_partial_planes(dssdev, x, y, w, h, true);
> dispc_mgr_set_lcd_size(dssdev->manager->id, *w, *h);
>
> return 0;
^ permalink raw reply
* Re: [PATCH 08/65] OMAPDSS: remove partial update from panel-taal
From: Archit Taneja @ 2011-11-22 11:55 UTC (permalink / raw)
To: Tomi Valkeinen; +Cc: linux-fbdev, linux-omap, archit
In-Reply-To: <1321953724-6350-9-git-send-email-tomi.valkeinen@ti.com>
On Tuesday 22 November 2011 02:51 PM, Tomi Valkeinen wrote:
> Partial update for manual update displays has never worked quite well:
> * The HW has limitations on the update area, and the x and width need to
> be even.
> * Showing a part of a scaled overlay causes artifacts.
> * Makes the management of dispc very complex
>
> Considering the above points and the fact that partial update is not
> used anywhere, this and the following patches remove the partial update
> support. This will greatly simplify the following re-write of the apply
> mechanism to get proper locking and additional features like fifo-merge.
>
> This patch removes the partial update from the panel-taal.c.
>
> Signed-off-by: Tomi Valkeinen<tomi.valkeinen@ti.com>
> ---
> drivers/video/omap2/displays/panel-taal.c | 16 ++++------------
> 1 files changed, 4 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/video/omap2/displays/panel-taal.c b/drivers/video/omap2/displays/panel-taal.c
> index 0aa6c5d..dd64bd1 100644
> --- a/drivers/video/omap2/displays/panel-taal.c
> +++ b/drivers/video/omap2/displays/panel-taal.c
> @@ -198,12 +198,6 @@ struct taal_data {
> bool te_enabled;
>
> atomic_t do_update;
> - struct {
> - u16 x;
> - u16 y;
> - u16 w;
> - u16 h;
> - } update_region;
> int channel;
>
> struct delayed_work te_timeout_work;
> @@ -1440,16 +1434,14 @@ static int taal_update(struct omap_dss_device *dssdev,
> goto err;
> }
>
> - r = taal_set_update_window(td, x, y, w, h);
> + /* XXX no need to send this every frame, but dsi break if not done */
> + r = taal_set_update_window(td, 0, 0,
> + td->panel_config->timings.x_res,
> + td->panel_config->timings.y_res);
How about sending a null short packet, and a BTA after that. This will
keep automatic TE mode in place, and we'll need to send 1 short packet
instead of 2 long packets every frame.
We should of course do this if we aren't planning to get partial update
back in the near future.
Archit
> if (r)
> goto err;
>
> if (td->te_enabled&& panel_data->use_ext_te) {
> - td->update_region.x = x;
> - td->update_region.y = y;
> - td->update_region.w = w;
> - td->update_region.h = h;
> - barrier();
> schedule_delayed_work(&td->te_timeout_work,
> msecs_to_jiffies(250));
> atomic_set(&td->do_update, 1);
^ permalink raw reply
* Re: [GIT PULL] ARM: amba: Enable module alias autogeneration for
From: Alessandro Rubini @ 2011-11-22 11:56 UTC (permalink / raw)
To: dave.martin
Cc: alsa-devel, tiwai, linus.walleij, linux-fbdev, perex,
grant.likely, wim, julia, linux, rtc-linux, vinod.koul,
jassisinghbrar, linux-serial, linux-input, cjb, linux-watchdog,
Pawel.Moll, patches, dan.j.williams, linux-arm-kernel, alan,
a.zummo, dmitry.torokhov, linux-mmc, linux-kernel, lethal,
spi-devel-general
In-Reply-To: <1321961573-4562-1-git-send-email-dave.martin@linaro.org>
> I have Acks on some of the driver patches and no comments on the
> rest. I've been circulating these for some time, so if you're
> happy to pull those driver patches via your tree, please go ahead.
Sure I have no problem with the nomadik-rng.c, (so please have my
Acked-by: -- sorry for not noting it earlier) but I think this
file2alias thing needs a serious rework to split each bus in a
different file, using ELF sections like we do elsewhere.
I posted a patch last week but I got no comment at all. Maybe this
is the time to ask for comments? I can rebase and repost if needed.
lkml.org/lkml/2011/11/4/125 (0/2: description of the work)
lkml.org/lkml/2011/11/4/126 (1/2: turn the if plethora to table lookup)
lkml.org/lkml/2011/11/4/127 (2/2: partial split to type-specific files).
thanks
/alessandro
^ permalink raw reply
* Re: [GIT PULL] ARM: amba: Enable module alias autogeneration for
From: Dave Martin @ 2011-11-22 12:07 UTC (permalink / raw)
To: Alessandro Rubini
Cc: linux, patches, linux-kernel, linux-arm-kernel, alan, a.zummo,
alsa-devel, cjb, dan.j.williams, dmitry.torokhov, grant.likely,
perex, jassisinghbrar, julia, linus.walleij, linux-fbdev,
linux-input, linux-mmc, linux-serial, linux-watchdog, lethal,
Pawel.Moll, rtc-linux, spi-devel-general, tiwai, vinod.koul, wim
In-Reply-To: <20111122115632.GA5165@mail.gnudd.com>
On Tue, Nov 22, 2011 at 12:56:32PM +0100, Alessandro Rubini wrote:
> > I have Acks on some of the driver patches and no comments on the
> > rest. I've been circulating these for some time, so if you're
> > happy to pull those driver patches via your tree, please go ahead.
>
> Sure I have no problem with the nomadik-rng.c, (so please have my
> Acked-by: -- sorry for not noting it earlier) but I think this
thanks
> file2alias thing needs a serious rework to split each bus in a
> different file, using ELF sections like we do elsewhere.
>
> I posted a patch last week but I got no comment at all. Maybe this
> is the time to ask for comments? I can rebase and repost if needed.
>
> lkml.org/lkml/2011/11/4/125 (0/2: description of the work)
> lkml.org/lkml/2011/11/4/126 (1/2: turn the if plethora to table lookup)
> lkml.org/lkml/2011/11/4/127 (2/2: partial split to type-specific files).
Splitting this up doesn't look like a silly idea -- I thought it was
unfortunate to have to patch a core file just to add a bus type.
I guess the question is how many new buses we get over time. If they
only get added gradually, people might not be too concerned. Of course,
this is one of those maintenance issues which can only get worse as time
goes on.
Cheers
---Dave
^ permalink raw reply
* Re: [PATCH 08/65] OMAPDSS: remove partial update from panel-taal
From: Tomi Valkeinen @ 2011-11-22 12:32 UTC (permalink / raw)
To: Archit Taneja; +Cc: linux-fbdev, linux-omap, archit
In-Reply-To: <4ECB8D39.4000005@ti.com>
[-- Attachment #1: Type: text/plain, Size: 803 bytes --]
On Tue, 2011-11-22 at 17:23 +0530, Archit Taneja wrote:
> > - r = taal_set_update_window(td, x, y, w, h);
> > + /* XXX no need to send this every frame, but dsi break if not
> done */
> > + r = taal_set_update_window(td, 0, 0,
> > + td->panel_config->timings.x_res,
> > + td->panel_config->timings.y_res);
>
> How about sending a null short packet, and a BTA after that. This
> will
> keep automatic TE mode in place, and we'll need to send 1 short
> packet
> instead of 2 long packets every frame.
To be honest, I didn't spend any time with this. True, sending a null
packet and BTA instead of the 2 long packets is possible. But probably
even better would be to track the TE status, and send a BTA only when
needed.
Tomi
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
* Re: QVGA on a hardware which supports only >= VGA
From: Christian Gmeiner @ 2011-11-22 13:52 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <CAH9NwWdUZHfhqpNwcfxK_EnsMLeEazB50rQ=m65U3+tjhpwGJQ@mail.gmail.com>
ping
--
Christian Gmeiner, MSc
2011/11/18 Christian Gmeiner <christian.gmeiner@gmail.com>:
> Hi all,
>
> I am currently in the process to get some local patches into mainline
> and/or fix my
> problems the right way. At the moment I am stuck with this problem:
>
> I am on a device (x86), which is Geode lx800 based and there is a
> panel connected to
> it. The problem is that two different screen resolutions are used. QVGA and VGA.
> Should not sound like a problem, but the lx800 can only do VGA. So get
> it working,
> I need to pass the correct resolution via kernel cmd to the lxfb
> driver and I am using
> this patch (based on 2.6.36.4 kernel):
>
> --- a/drivers/video/fbmem.c
> +++ b/drivers/video/fbmem.c
> @@ -1050,6 +1050,7 @@ static long do_fb_ioctl(struct fb_info *info,
> unsigned int cmd,
> ret = copy_to_user(argp, &var, sizeof(var)) ? -EFAULT : 0;
> break;
> case FBIOPUT_VSCREENINFO:
> +#if 0
> if (copy_from_user(&var, argp, sizeof(var)))
> return -EFAULT;
> if (!lock_fb_info(info))
> @@ -1062,6 +1063,8 @@ static long do_fb_ioctl(struct fb_info *info,
> unsigned int cmd,
> unlock_fb_info(info);
> if (!ret && copy_to_user(argp, &var, sizeof(var)))
> ret = -EFAULT;
> +#endif
> + ret = 0;
> break;
> case FBIOGET_FSCREENINFO:
> if (!lock_fb_info(info))
> @@ -1086,6 +1089,7 @@ static long do_fb_ioctl(struct fb_info *info,
> unsigned int cmd,
> ret = fb_cmap_to_user(&cmap_from, &cmap);
> break;
> case FBIOPAN_DISPLAY:
> +#if 0
> if (copy_from_user(&var, argp, sizeof(var)))
> return -EFAULT;
> if (!lock_fb_info(info))
> @@ -1096,6 +1100,8 @@ static long do_fb_ioctl(struct fb_info *info,
> unsigned int cmd,
> unlock_fb_info(info);
> if (ret = 0 && copy_to_user(argp, &var, sizeof(var)))
> return -EFAULT;
> +#endif
> + ret = 0;
> break;
> case FBIO_CURSOR:
> ret = -EINVAL;
>
> I need to mention that I am using a custom BIOS and Linux based
> bootloader (kexec) in the
> boot process. At the moment I am looking into coreboot, but I wanted
> to know how to
> solve this "problem" the correct way.
>
> To sum it up: I want to use a QVGA panel with a hardware that only
> supports >= VGA.
>
> Thanks
> --
> Christian Gmeiner, MSc
>
^ permalink raw reply
* Re: [GIT PULL] ARM: amba: Enable module alias autogeneration for
From: Alessandro Rubini @ 2011-11-22 15:19 UTC (permalink / raw)
To: dave.martin-QSEj5FYQhm4dnm+yROfE0A
Cc: alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw, Pawel.Moll-5wv7dgnIgG8,
tiwai-l3A5Bk7waGM, linus.walleij-QSEj5FYQhm4dnm+yROfE0A,
linux-fbdev-u79uwXL29TY76Z2rM5mHXA, perex-/Fr2/VpizcU,
wim-IQzOog9fTRqzQB+pC5nmwQ, julia-dAYI7NvHqcQ,
linux-lFZ/pmaqli7XmaaqVzeoHQ, vinod.koul-ral2JQCrhuEAvxtiuMwx3w,
linux-serial-u79uwXL29TY76Z2rM5mHXA,
linux-input-u79uwXL29TY76Z2rM5mHXA, cjb-2X9k7bc8m7Mdnm+yROfE0A,
linux-watchdog-u79uwXL29TY76Z2rM5mHXA,
rtc-linux-/JYPxA39Uh5TLH3MbocFFw, patches-QSEj5FYQhm4dnm+yROfE0A,
dan.j.williams-ral2JQCrhuEAvxtiuMwx3w,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
alan-VuQAYsv1563Yd54FQh9/CA, a.zummo-BfzFCNDTiLLj+vYz1yj4TQ,
dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w,
linux-mmc-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
lethal-M7jkjyW5wf5g9hUCZPvPmw,
spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
In-Reply-To: <20111122120756.GF2066-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
>> lkml.org/lkml/2011/11/4/125 (0/2: description of the work)
>> lkml.org/lkml/2011/11/4/126 (1/2: turn the if plethora to table lookup)
>> lkml.org/lkml/2011/11/4/127 (2/2: partial split to type-specific files).
>
> Splitting this up doesn't look like a silly idea -- I thought it was
> unfortunate to have to patch a core file just to add a bus type.
>
> I guess the question is how many new buses we get over time.
Well, CERN will have 2 in a short time. And I'm sure the bus concept
is so good that a number of them exists as external patches. Being
forced to patch a core file is not good, with conflicts that accumulate
over time.
I'd better be able to drop in my own file and add a kconfig-aware line
in Makefile. I think the implementation is straightforward. Who should
I send it to?
thanks
/alessandro
^ permalink raw reply
* Re: [GIT PULL] ARM: amba: Enable module alias autogeneration for
From: Greg KH @ 2011-11-22 19:20 UTC (permalink / raw)
To: Alessandro Rubini
Cc: dave.martin, Pawel.Moll, tiwai, linus.walleij, alsa-devel,
grant.likely, wim, julia, linux, vinod.koul, jassisinghbrar,
linux-serial, linux-input, cjb, linux-watchdog, rtc-linux,
patches, linux-fbdev, dan.j.williams, linux-arm-kernel, alan,
a.zummo, dmitry.torokhov, linux-mmc, linux-kernel, lethal,
spi-devel-general
In-Reply-To: <20111122115632.GA5165@mail.gnudd.com>
On Tue, Nov 22, 2011 at 12:56:32PM +0100, Alessandro Rubini wrote:
> > I have Acks on some of the driver patches and no comments on the
> > rest. I've been circulating these for some time, so if you're
> > happy to pull those driver patches via your tree, please go ahead.
>
> Sure I have no problem with the nomadik-rng.c, (so please have my
> Acked-by: -- sorry for not noting it earlier) but I think this
> file2alias thing needs a serious rework to split each bus in a
> different file, using ELF sections like we do elsewhere.
>
> I posted a patch last week but I got no comment at all. Maybe this
> is the time to ask for comments? I can rebase and repost if needed.
>
> lkml.org/lkml/2011/11/4/125 (0/2: description of the work)
> lkml.org/lkml/2011/11/4/126 (1/2: turn the if plethora to table lookup)
> lkml.org/lkml/2011/11/4/127 (2/2: partial split to type-specific files).
Ah, I missed that, yes, this would be a good thing to have, we've been
wanting it for _years_.
greg k-h
^ permalink raw reply
* Re: [PATCH 08/65] OMAPDSS: remove partial update from panel-taal
From: Archit Taneja @ 2011-11-23 5:51 UTC (permalink / raw)
To: Tomi Valkeinen; +Cc: linux-fbdev, linux-omap, archit
In-Reply-To: <1321965130.1887.46.camel@deskari>
On Tuesday 22 November 2011 06:02 PM, Tomi Valkeinen wrote:
> On Tue, 2011-11-22 at 17:23 +0530, Archit Taneja wrote:
>>> - r = taal_set_update_window(td, x, y, w, h);
>>> + /* XXX no need to send this every frame, but dsi break if not
>> done */
>>> + r = taal_set_update_window(td, 0, 0,
>>> + td->panel_config->timings.x_res,
>>> + td->panel_config->timings.y_res);
>>
>> How about sending a null short packet, and a BTA after that. This
>> will
>> keep automatic TE mode in place, and we'll need to send 1 short
>> packet
>> instead of 2 long packets every frame.
>
> To be honest, I didn't spend any time with this. True, sending a null
> packet and BTA instead of the 2 long packets is possible. But probably
> even better would be to track the TE status, and send a BTA only when
> needed.
Right, if we maintain the TE status, we may not need to send a packet at
all, so I guess we could stick with this for now, and remove it once we
start maintaining the number of BTAs we have sent to the panel.
Archit
>
> Tomi
>
^ permalink raw reply
* Re: [PATCH 09/65] OMAPDSS: pass ovl manager to dss_start_update
From: Archit Taneja @ 2011-11-23 5:55 UTC (permalink / raw)
To: Tomi Valkeinen; +Cc: linux-fbdev, linux-omap, archit
In-Reply-To: <1321953724-6350-10-git-send-email-tomi.valkeinen@ti.com>
On Tuesday 22 November 2011 02:51 PM, Tomi Valkeinen wrote:
> dss_start_update() takes currently the dss device as a parameter. Change
> the parameter to ovl manager, as that is what the dss_start_update()
> actually needs.
Minor comment: We could rename dss_start_update() to
dss_mgr_start_update() to stick to the new way of telling if this
function is meant for an overlay or a manager.
Archit
>
> Signed-off-by: Tomi Valkeinen<tomi.valkeinen@ti.com>
> ---
> drivers/video/omap2/dss/dsi.c | 2 +-
> drivers/video/omap2/dss/dss.h | 2 +-
> drivers/video/omap2/dss/manager.c | 7 ++-----
> 3 files changed, 4 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
> index 9ef04ff..e5a2dcc 100644
> --- a/drivers/video/omap2/dss/dsi.c
> +++ b/drivers/video/omap2/dss/dsi.c
> @@ -4063,7 +4063,7 @@ static void dsi_update_screen_dispc(struct omap_dss_device *dssdev,
> msecs_to_jiffies(250));
> BUG_ON(r = 0);
>
> - dss_start_update(dssdev);
> + dss_start_update(dssdev->manager);
>
> if (dsi->te_enabled) {
> /* disable LP_RX_TO, so that we can receive TE. Time to wait
> diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
> index 7f6a612..0937bd8 100644
> --- a/drivers/video/omap2/dss/dss.h
> +++ b/drivers/video/omap2/dss/dss.h
> @@ -182,7 +182,7 @@ void default_get_overlay_fifo_thresholds(enum omap_plane plane,
> int dss_init_overlay_managers(struct platform_device *pdev);
> void dss_uninit_overlay_managers(struct platform_device *pdev);
> int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl);
> -void dss_start_update(struct omap_dss_device *dssdev);
> +void dss_start_update(struct omap_overlay_manager *mgr);
>
> /* overlay */
> void dss_init_overlays(struct platform_device *pdev);
> diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/omap2/dss/manager.c
> index c616f85..bc28bfa 100644
> --- a/drivers/video/omap2/dss/manager.c
> +++ b/drivers/video/omap2/dss/manager.c
> @@ -896,17 +896,14 @@ static int configure_dispc(void)
> return r;
> }
>
> -void dss_start_update(struct omap_dss_device *dssdev)
> +void dss_start_update(struct omap_overlay_manager *mgr)
> {
> struct manager_cache_data *mc;
> struct overlay_cache_data *oc;
> const int num_ovls = dss_feat_get_num_ovls();
> const int num_mgrs = dss_feat_get_num_mgrs();
> - struct omap_overlay_manager *mgr;
> int i;
>
> - mgr = dssdev->manager;
> -
> mc =&dss_cache.manager_cache[mgr->id];
>
> mc->do_manual_update = true;
> @@ -929,7 +926,7 @@ void dss_start_update(struct omap_dss_device *dssdev)
> mc->shadow_dirty = false;
> }
>
> - dssdev->manager->enable(dssdev->manager);
> + mgr->enable(mgr);
> }
>
> static void dss_apply_irq_handler(void *data, u32 mask)
^ permalink raw reply
* Re: [PATCH] video:da8xx-fb: Disable and reset sequence on version2
From: Florian Tobias Schandinat @ 2011-11-23 6:51 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1321358543-23124-1-git-send-email-prakash.pm@ti.com>
On 11/15/2011 12:02 PM, Manjunathappa, Prakash wrote:
> Patch follows the disable and software reset sequence specified
> in version2 to LCDC functional specification.
> Without this flicker is observed on re-enabling the LCDC.
>
> Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
Applied.
Thanks,
Florian Tobias Schandinat
> ---
> drivers/video/da8xx-fb.c | 15 ++++++++++++++-
> 1 files changed, 14 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
> index e111971..6b27751 100644
> --- a/drivers/video/da8xx-fb.c
> +++ b/drivers/video/da8xx-fb.c
> @@ -118,6 +118,7 @@
> /* Clock registers available only on Version 2 */
> #define LCD_CLK_ENABLE_REG 0x6c
> #define LCD_CLK_RESET_REG 0x70
> +#define LCD_CLK_MAIN_RESET BIT(3)
>
> #define LCD_NUM_BUFFERS 2
>
> @@ -246,6 +247,10 @@ static inline void lcd_enable_raster(void)
> {
> u32 reg;
>
> + /* Bring LCDC out of reset */
> + if (lcd_revision = LCD_VERSION_2)
> + lcdc_write(0, LCD_CLK_RESET_REG);
> +
> reg = lcdc_read(LCD_RASTER_CTRL_REG);
> if (!(reg & LCD_RASTER_ENABLE))
> lcdc_write(reg | LCD_RASTER_ENABLE, LCD_RASTER_CTRL_REG);
> @@ -259,6 +264,10 @@ static inline void lcd_disable_raster(void)
> reg = lcdc_read(LCD_RASTER_CTRL_REG);
> if (reg & LCD_RASTER_ENABLE)
> lcdc_write(reg & ~LCD_RASTER_ENABLE, LCD_RASTER_CTRL_REG);
> +
> + if (lcd_revision = LCD_VERSION_2)
> + /* Write 1 to reset LCDC */
> + lcdc_write(LCD_CLK_MAIN_RESET, LCD_CLK_RESET_REG);
> }
>
> static void lcd_blit(int load_mode, struct da8xx_fb_par *par)
> @@ -618,8 +627,12 @@ static void lcd_reset(struct da8xx_fb_par *par)
> lcdc_write(0, LCD_DMA_CTRL_REG);
> lcdc_write(0, LCD_RASTER_CTRL_REG);
>
> - if (lcd_revision = LCD_VERSION_2)
> + if (lcd_revision = LCD_VERSION_2) {
> lcdc_write(0, LCD_INT_ENABLE_SET_REG);
> + /* Write 1 to reset */
> + lcdc_write(LCD_CLK_MAIN_RESET, LCD_CLK_RESET_REG);
> + lcdc_write(0, LCD_CLK_RESET_REG);
> + }
> }
>
> static void lcd_calc_clk_divider(struct da8xx_fb_par *par)
^ permalink raw reply
* Re: [PATCH 3/3] Drivers: video: controlfb: fixed a brace coding style
From: Florian Tobias Schandinat @ 2011-11-23 6:52 UTC (permalink / raw)
To: Zac Storer; +Cc: linux-fbdev, linux-kernel
In-Reply-To: <1321590896-8249-1-git-send-email-zac.3.14159@gmail.com>
On 11/18/2011 04:34 AM, Zac Storer wrote:
> Fixed a brace coding style issue.
>
> Signed-off-by: Zac Storer <zac.3.14159@gmail.com>
Applied.
Thanks,
Florian Tobias Schandinat
> ---
> drivers/video/controlfb.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/video/controlfb.c b/drivers/video/controlfb.c
> index 7b2c40a..0c189b3 100644
> --- a/drivers/video/controlfb.c
> +++ b/drivers/video/controlfb.c
> @@ -420,7 +420,7 @@ static int __init init_control(struct fb_info_control *p)
>
> /* Try to pick a video mode out of NVRAM if we have one. */
> #ifdef CONFIG_NVRAM
> - if (default_cmode = CMODE_NVRAM){
> + if (default_cmode = CMODE_NVRAM) {
> cmode = nvram_read_byte(NV_CMODE);
> if(cmode < CMODE_8 || cmode > CMODE_32)
> cmode = CMODE_8;
^ permalink raw reply
* Re: [PATCH 4/4] Drivers: video: sbuslib: fixed a brace coding style
From: Florian Tobias Schandinat @ 2011-11-23 6:52 UTC (permalink / raw)
To: Zac Storer; +Cc: linux-fbdev, linux-kernel
In-Reply-To: <1321591138-8334-1-git-send-email-zac.3.14159@gmail.com>
On 11/18/2011 04:38 AM, Zac Storer wrote:
> Fixed a brace coding style issue.
>
> Signed-off-by: Zac Storer <zac.3.14159@gmail.com>
Applied.
Thanks,
Florian Tobias Schandinat
> ---
> drivers/video/sbuslib.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/video/sbuslib.c b/drivers/video/sbuslib.c
> index 37d764a..3c1de98 100644
> --- a/drivers/video/sbuslib.c
> +++ b/drivers/video/sbuslib.c
> @@ -76,7 +76,7 @@ int sbusfb_mmap_helper(struct sbus_mmap_map *map,
> map_offset = (physbase + map[i].poff) & POFF_MASK;
> break;
> }
> - if (!map_size){
> + if (!map_size) {
> page += PAGE_SIZE;
> continue;
> }
^ permalink raw reply
* Re: [PATCH] viafb: correct sync polarity for OLPC DCON
From: Florian Tobias Schandinat @ 2011-11-23 6:53 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <20111121150557.9EB9D9D401E@zog.reactivated.net>
On 11/21/2011 03:05 PM, Daniel Drake wrote:
> While the OLPC display appears to be able to handle either positive
> or negative sync, the Display Controller only recognises positive sync.
>
> This brings viafb (for XO-1.5) in line with lxfb (for XO-1) and
> fixes a recent regression where the XO-1.5 DCON could no longer be
> frozen. Thanks to Florian Tobias Schandinat for helping identify
> the fix.
>
> Test case: from a vt,
> echo 1 > /sys/devices/platform/dcon/freeze
> should cause the current screen contents to freeze, rather than garbage being
> displayed.
>
> Signed-off-by: Daniel Drake <dsd@laptop.org>
Applied.
Thanks,
Florian Tobias Schandinat
> ---
> drivers/video/via/share.h | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/video/via/share.h b/drivers/video/via/share.h
> index 69d882c..c01c1c1 100644
> --- a/drivers/video/via/share.h
> +++ b/drivers/video/via/share.h
> @@ -559,8 +559,8 @@
> #define M1200X720_R60_VSP POSITIVE
>
> /* 1200x900@60 Sync Polarity (DCON) */
> -#define M1200X900_R60_HSP NEGATIVE
> -#define M1200X900_R60_VSP NEGATIVE
> +#define M1200X900_R60_HSP POSITIVE
> +#define M1200X900_R60_VSP POSITIVE
>
> /* 1280x600@60 Sync Polarity (GTF Mode) */
> #define M1280x600_R60_HSP NEGATIVE
^ permalink raw reply
* Re: [PATCH 0/15] fbdev: sh_mipi_dsi: care un-explained register settings
From: Florian Tobias Schandinat @ 2011-11-23 6:59 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <874nydc3vz.wl%kuninori.morimoto.gx@renesas.com>
Hi Magnus, Kuninori,
On 11/21/2011 10:34 AM, Magnus Damm wrote:
> Hi Florian,
>
> On Sat, Nov 12, 2011 at 12:37 AM, Florian Tobias Schandinat
> <FlorianSchandinat@gmx.de> wrote:
>> Hi Guennadi, Magnus,
>>
>> On 11/09/2011 04:32 AM, kuninori.morimoto.gx@renesas.com wrote:
>>> Dear Florian, Paul
>>>
>>> These are sh_mipi_dsi update patches.
>>>
>>> Kuninori Morimoto (15):
>>> fbdev: sh_mobile_lcdcfb: fixup LDHAJR :: HSYNPAJ needs mask
>>> fbdev: sh_mipi_dsi: tidyup dsip_clk
>>> fbdev: sh_mipi_dsi: typo fix of SH_MIPI_DSI_HBPBM
>>> fbdev: sh_mipi_dsi: tidyup VMCTR2 parameter expression
>>> fbdev: sh_mipi_dsi: add SH_MIPI_DSI_HFPBM flag
>>> fbdev: sh_mipi_dsi: add SH_MIPI_DSI_BL2E flag
>>> fbdev: sh_mipi_dsi: add lane control support
>>> fbdev: sh_mipi_dsi: add sync_pulses/sync_events/burst mode
>>> fbdev: sh_mipi_dsi: add VMLEN1/VMLEN2 calculation
>>> fbdev: sh_mipi_dsi: add set_dot_clock() for each platform
>>> fbdev: sh_mipi_dsi: add HSxxCLK support
>>> fbdev: sh_mipi_dsi: sh_mipi has pdata instead of dev
>>> fbdev: sh_mipi_dsi: fixup setup timing of sh_mipi_setup()
>>> fbdev: sh_mipi_dsi: fixup setup timing of SYSCONF
>>> fbdev: sh_mipi_dsi: fixup setup timing DSICTRL
>>
>> can you have a look at these patches?
>> After a quick glance they look okay to me, but as this is all about hardware
>> (which I don't know) I'd be happier if someone more qualified could have a look
>> at it.
>
> They all look fine to me. Please add:
>
> Acked-by: Magnus Damm <damm@opensource.se>
Thanks for having a look. I've added it to all patches and applied them to my tree.
Thanks,
Florian Tobias Schandinat
^ permalink raw reply
* Re: [GIT PULL] OMAP DSS fixes for 3.2-rc
From: Florian Tobias Schandinat @ 2011-11-23 7:15 UTC (permalink / raw)
To: Tomi Valkeinen; +Cc: linux-fbdev, linux-omap mailing list
In-Reply-To: <1321604174.1814.41.camel@deskari>
Hi Tomi,
On 11/18/2011 08:16 AM, Tomi Valkeinen wrote:
> Hi Florian,
>
> Here are a few OMAP display subsystem fixes for 3.2-rc.
>
> One for the old omapfb, which was missing include module.h, and two for
> the omapdss fixing issues related to HDMI.
Pulled, but...
> The following changes since commit cfcfc9eca2bcbd26a8e206baeb005b055dbf8e37:
>
> Linux 3.2-rc2 (2011-11-15 15:02:59 -0200)
...could you please try to base on something that is already in my tree, perhaps
just add patches on top of the last pull request you sent me. If you need
something more recent, that is okay, but don't force me to needlessly update my
tree.
Thanks,
Florian Tobias Schandinat
>
> are available in the git repository at:
> git://gitorious.org/linux-omap-dss2/linux.git for-3.2-rc
>
> Tomi Valkeinen (3):
> OMAPDSS: HDMI: fix returned HDMI pixel clock
> OMAPFB: fix compilation warnings due to missing include
> OMAPDSS: DISPC: skip scaling calculations when not scaling
>
> drivers/video/omap/dispc.c | 1 +
> drivers/video/omap2/dss/dispc.c | 11 +++++------
> drivers/video/omap2/dss/hdmi.c | 2 +-
> 3 files changed, 7 insertions(+), 7 deletions(-)
>
^ permalink raw reply
* Re: [GIT PULL] OMAP DSS fixes for 3.2-rc
From: Tomi Valkeinen @ 2011-11-23 7:31 UTC (permalink / raw)
To: Florian Tobias Schandinat; +Cc: linux-fbdev, linux-omap mailing list
In-Reply-To: <4ECC9DAF.3000005@gmx.de>
[-- Attachment #1: Type: text/plain, Size: 887 bytes --]
On Wed, 2011-11-23 at 07:15 +0000, Florian Tobias Schandinat wrote:
> Hi Tomi,
>
> On 11/18/2011 08:16 AM, Tomi Valkeinen wrote:
> > Hi Florian,
> >
> > Here are a few OMAP display subsystem fixes for 3.2-rc.
> >
> > One for the old omapfb, which was missing include module.h, and two for
> > the omapdss fixing issues related to HDMI.
>
> Pulled, but...
Thanks!
> > The following changes since commit cfcfc9eca2bcbd26a8e206baeb005b055dbf8e37:
> >
> > Linux 3.2-rc2 (2011-11-15 15:02:59 -0200)
>
> ...could you please try to base on something that is already in my tree, perhaps
> just add patches on top of the last pull request you sent me. If you need
> something more recent, that is okay, but don't force me to needlessly update my
> tree.
Ah, of course. I didn't think of that. I'll base the patches on top of
your tree from now on.
Tomi
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox