aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorRobert Fekete <robert.fekete@stericsson.com>2010-06-10 08:20:35 +0200
committerJohn Rigby <john.rigby@linaro.org>2010-09-02 22:45:39 -0600
commit91f49ecb8818a1456c26cd461a140483373d1604 (patch)
tree0157b58fb2218af5423767d68938d6e7a56b3b73 /drivers
parent8381b7eff5c568098e360a8123f8c95fc2eafdfa (diff)
B2R2: Fix for yuv to bgr format conversions
The VMX values were calculated wrongly and needed a fix. Colors now looks fine, HW optimized yuv -> bgr is enabled, and some garbled debugprints are now removed as well. ST-Ericsson Change ID: ER 262853 Signed-off-by: Robert Fekete <robert.fekete@stericsson.com> Signed-off-by: Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com> Change-Id: Iec648e6d2797a73d8c2aa89e1611ec6ae6b9e40c Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/2527 Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/b2r2/b2r2_blt_main.c4
-rw-r--r--drivers/video/b2r2/b2r2_core.c15
-rw-r--r--drivers/video/b2r2/b2r2_hw.h73
-rw-r--r--drivers/video/b2r2/b2r2_node_split.c15
4 files changed, 43 insertions, 64 deletions
diff --git a/drivers/video/b2r2/b2r2_blt_main.c b/drivers/video/b2r2/b2r2_blt_main.c
index 81f3545e373..35454bb1229 100644
--- a/drivers/video/b2r2/b2r2_blt_main.c
+++ b/drivers/video/b2r2/b2r2_blt_main.c
@@ -712,7 +712,7 @@ static int b2r2_blt(struct b2r2_blt_instance *instance,
/* Check structure size (sanity check) */
if (request->user_req.size != sizeof(request->user_req)) {
- dev_err(b2r2_blt_device(),
+ b2r2_log_warn(
"%s: Wrong request size %d, should be %d\n",
__func__, request->user_req.size,
sizeof(request->user_req));
@@ -726,7 +726,7 @@ static int b2r2_blt(struct b2r2_blt_instance *instance,
ret = wait_event_interruptible(instance->synch_done_waitq,
!is_synching(instance));
if (ret) {
- dev_warn(b2r2_blt_device(),
+ b2r2_log_warn(
"%s: Sync wait interrupted, %d\n",
__func__, ret);
ret = -EAGAIN;
diff --git a/drivers/video/b2r2/b2r2_core.c b/drivers/video/b2r2/b2r2_core.c
index 385eda3de92..de11dde0c00 100644
--- a/drivers/video/b2r2/b2r2_core.c
+++ b/drivers/video/b2r2/b2r2_core.c
@@ -1506,7 +1506,7 @@ static void handle_queue_event(enum b2r2_core_queue queue)
if (job->job_state != B2R2_CORE_JOB_RUNNING)
/* Should be running
Severe error. TBD */
- dev_warn(b2r2_core.log_dev,
+ b2r2_log_warn(
"%s: Job is not running", __func__);
stop_hw_timer(job);
@@ -1519,7 +1519,7 @@ static void handle_queue_event(enum b2r2_core_queue queue)
if (!job) {
/* No job, error? */
- dev_warn(b2r2_core.log_dev, "%s: No job", __func__);
+ b2r2_log_warn( "%s: No job", __func__);
return;
}
@@ -1551,8 +1551,8 @@ static void process_events(u32 status)
u32 mask = 0xF;
u32 disable_itm_mask = 0;
- dev_dbg(b2r2_core.log_dev, "Enters process_events \n");
- dev_dbg(b2r2_core.log_dev, "status 0x%x \n", status);
+ b2r2_log_info("Enters process_events \n");
+ b2r2_log_info("status 0x%x \n", status);
/* Composition queue 1 */
if (status & mask) {
@@ -1601,7 +1601,7 @@ static void process_events(u32 status)
writel(readl(&b2r2_core.hw->BLT_ITM0) & ~disable_itm_mask,
&b2r2_core.hw->BLT_ITM0);
- dev_dbg(b2r2_core.log_dev, "Returns process_events \n");
+ b2r2_log_info("Returns process_events \n");
}
/**
@@ -2484,7 +2484,7 @@ static int b2r2_remove(struct platform_device *pdev)
BUG_ON(pdev == NULL);
- dev_dbg(b2r2_core.log_dev, "%s started\n", __func__);
+ b2r2_log_info("%s started\n", __func__);
/* Flush B2R2 work queue (call all callbacks) */
flush_workqueue(b2r2_core.work_queue);
@@ -2513,6 +2513,9 @@ static int b2r2_remove(struct platform_device *pdev)
while (timer_pending(&b2r2_core.clock_off_timer))
mdelay(10);
+ /* Return the clock */
+ clk_put(b2r2_core.b2r2_clock);
+
b2r2_log_info("%s ended\n", __func__);
b2r2_core.log_dev = NULL;
diff --git a/drivers/video/b2r2/b2r2_hw.h b/drivers/video/b2r2/b2r2_hw.h
index ba1cbbd3d65..95683ea2468 100644
--- a/drivers/video/b2r2/b2r2_hw.h
+++ b/drivers/video/b2r2/b2r2_hw.h
@@ -1,21 +1,12 @@
/*
- * Copyright (C) ST-Ericsson AB 2009
+ * Copyright (C) ST-Ericsson AB 2010
*
- * Author: Fredrik Allansson <fredrik.allansson@stericsson.com> for ST-Ericsson
+ * ST-Ericsson B2R2 Hw parameters
*
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
+ * Author: Fredrik Allansson <fredrik.allansson@stericsson.com>
+ * for ST-Ericsson.
*
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
+ * License terms: GNU General Public License (GPL), version 2.
*/
#ifndef B2R2_HW_H__
@@ -75,7 +66,7 @@ enum b2r2_cic {
B2R2_CIC_XYL = 0x00001000,
B2R2_CIC_SAU = 0x00002000,
B2R2_CIC_IVMX = 0x00004000,
- B2R2_CIC_OMVX = 0x00008000,
+ B2R2_CIC_OVMX = 0x00008000,
B2R2_CIC_PACEDOT = 0x00010000,
B2R2_CIC_VC1 = 0x00020000,
};
@@ -416,53 +407,53 @@ enum b2r2_fctl {
/* 601 Video Matrix (standard 601 conversion) */
#define B2R2_VMX0_BGR_TO_YUV_601_VIDEO 0xfd7e4883
-#define B2R2_VMX1_BGR_TO_YUV_601_VIDEO 0x03220442
+#define B2R2_VMX1_BGR_TO_YUV_601_VIDEO 0x03a2584c
#define B2R2_VMX2_BGR_TO_YUV_601_VIDEO 0x107ea7d4
#define B2R2_VMX3_BGR_TO_YUV_601_VIDEO 0x08000080
/* 601 Gfx Matrix (full range conversion) */
-#define B2R2_VMX0_BGR_TO_YUV_601_GFX 0xFDDE8870
-#define B2R2_VMX1_BGR_TO_YUV_601_GFX 0x08420419
-#define B2R2_VMX2_BGR_TO_YUV_601_GFX 0xFA9EA483
+#define B2R2_VMX0_BGR_TO_YUV_601_GFX 0xfdde8870
+#define B2R2_VMX1_BGR_TO_YUV_601_GFX 0x03220442
+#define B2R2_VMX2_BGR_TO_YUV_601_GFX 0x0e3ed7da
#define B2R2_VMX3_BGR_TO_YUV_601_GFX 0x08004080
/* 709 Video Matrix (standard 709 conversion) */
-#define B2R2_VMX0_BGR_TO_YUV_709_VIDEO 0xFE9E2483
-#define B2R2_VMX1_BGR_TO_YUV_709_VIDEO 0x0262DC37
-#define B2R2_VMX2_BGR_TO_YUV_709_VIDEO 0x107E6FE2
+#define B2R2_VMX0_BGR_TO_YUV_709_VIDEO 0xfe9e2483
+#define B2R2_VMX1_BGR_TO_YUV_709_VIDEO 0x0262dc37
+#define B2R2_VMX2_BGR_TO_YUV_709_VIDEO 0x107e6fe2
#define B2R2_VMX3_BGR_TO_YUV_709_VIDEO 0x08000080
/* 709 Gfx Matrix (standard 709 conversion) */
-#define B2R2_VMX0_BGR_TO_YUV_709_GFX 0xFEBE6871
-#define B2R2_VMX1_BGR_TO_YUV_709_GFX 0x0202742F
-#define B2R2_VMX2_BGR_TO_YUV_709_GFX 0x0E3EA7E6
+#define B2R2_VMX0_BGR_TO_YUV_709_GFX 0xfebe6871
+#define B2R2_VMX1_BGR_TO_YUV_709_GFX 0x0202742f
+#define B2R2_VMX2_BGR_TO_YUV_709_GFX 0x0e3ea7e6
#define B2R2_VMX3_BGR_TO_YUV_709_GFX 0x08004080
/* VMX register values for YUV to BGR conversion */
/* 601 Video Matrix (standard 601 conversion) */
-#define B2R2_VMX0_YUV_TO_BGR_601_VIDEO 0x00040162
-#define B2R2_VMX1_YUV_TO_BGR_601_VIDEO 0xF544034D
-#define B2R2_VMX2_YUV_TO_BGR_601_VIDEO 0x27E40000
-#define B2R2_VMX3_YUV_TO_BGR_601_VIDEO 0x34f21322
+#define B2R2_VMX0_YUV_TO_BGR_601_VIDEO 0x0004013f
+#define B2R2_VMX1_YUV_TO_BGR_601_VIDEO 0xe9a403aa
+#define B2R2_VMX2_YUV_TO_BGR_601_VIDEO 0x2c440000
+#define B2R2_VMX3_YUV_TO_BGR_601_VIDEO 0x3222134f
/* 601 Gfx Matrix (full range conversion) */
-#define B2R2_VMX0_YUV_TO_BGR_601_GFX 0x0004A999
-#define B2R2_VMX1_YUV_TO_BGR_601_GFX 0xF384AB30
-#define B2R2_VMX2_YUV_TO_BGR_601_GFX 0x2AE4A800
-#define B2R2_VMX3_YUV_TO_BGR_601_GFX 0x32121eeb
+#define B2R2_VMX0_YUV_TO_BGR_601_GFX 0x0004a957
+#define B2R2_VMX1_YUV_TO_BGR_601_GFX 0xe604ab9c
+#define B2R2_VMX2_YUV_TO_BGR_601_GFX 0x3324a800
+#define B2R2_VMX3_YUV_TO_BGR_601_GFX 0x2eb21f21
/* 709 Video Matrix (standard 709 conversion) */
-#define B2R2_VMX0_YUV_TO_BGR_709_VIDEO 0x0004038A
-#define B2R2_VMX1_YUV_TO_BGR_709_VIDEO 0xFA24038B
-#define B2R2_VMX2_YUV_TO_BGR_709_VIDEO 0x28A40000
-#define B2R2_VMX3_YUV_TO_BGR_709_VIDEO 0x33b14b18
+#define B2R2_VMX0_YUV_TO_BGR_709_VIDEO 0x00040145
+#define B2R2_VMX1_YUV_TO_BGR_709_VIDEO 0xf16403d1
+#define B2R2_VMX2_YUV_TO_BGR_709_VIDEO 0x31440000
+#define B2R2_VMX3_YUV_TO_BGR_709_VIDEO 0x31814b3b
/* 709 Gfx Matrix (standard 709 conversion) */
-#define B2R2_VMX0_YUV_TO_BGR_709_GFX 0x0004ABCB
-#define B2R2_VMX1_YUV_TO_BGR_709_GFX 0xF924AB78
-#define B2R2_VMX2_YUV_TO_BGR_709_GFX 0x2BE4A800
-#define B2R2_VMX3_YUV_TO_BGR_709_GFX 0x307132df
+#define B2R2_VMX0_YUV_TO_BGR_709_GFX 0x0004a95f
+#define B2R2_VMX1_YUV_TO_BGR_709_GFX 0xef04abc9
+#define B2R2_VMX2_YUV_TO_BGR_709_GFX 0x3964a800
+#define B2R2_VMX3_YUV_TO_BGR_709_GFX 0x2df13307
#endif /* B2R2_HW_H__ */
diff --git a/drivers/video/b2r2/b2r2_node_split.c b/drivers/video/b2r2/b2r2_node_split.c
index eaff94c57b1..4772e8cd594 100644
--- a/drivers/video/b2r2/b2r2_node_split.c
+++ b/drivers/video/b2r2/b2r2_node_split.c
@@ -331,21 +331,6 @@ int b2r2_node_split_analyze(const struct b2r2_blt_request *req,
goto error;
}
- /* YUV <==> BGR is unsupported
- TODO: Implement support */
- if (!color_fill) {
- if ((is_yuv_fmt(this->src.fmt) &&
- is_bgr_fmt(this->dst.fmt)) ||
- (is_bgr_fmt(this->src.fmt) &&
- is_yuv_fmt(this->dst.fmt))) {
- printk(KERN_DEBUG LOG_TAG "::%s: "
- "Unsupported operation %s\n",
- "YUV <==> BGR", __func__);
- ret = -ENOSYS;
- goto unsupported;
- }
- }
-
/* Do the analysis depending on the type of operation */
if (color_fill) {
ret = analyze_color_fill(this, req, &this->node_count);