diff options
author | Robert Fekete <robert.fekete@stericsson.com> | 2010-06-10 08:20:35 +0200 |
---|---|---|
committer | John Rigby <john.rigby@linaro.org> | 2010-09-02 22:45:39 -0600 |
commit | 91f49ecb8818a1456c26cd461a140483373d1604 (patch) | |
tree | 0157b58fb2218af5423767d68938d6e7a56b3b73 /drivers | |
parent | 8381b7eff5c568098e360a8123f8c95fc2eafdfa (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.c | 4 | ||||
-rw-r--r-- | drivers/video/b2r2/b2r2_core.c | 15 | ||||
-rw-r--r-- | drivers/video/b2r2/b2r2_hw.h | 73 | ||||
-rw-r--r-- | drivers/video/b2r2/b2r2_node_split.c | 15 |
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); |