forked from Minki/linux
6c4f4cbb58
The CSC block can be used for color space conversion between YUV and RGB formats. It is configurable via a programmable set of coefficients. Add functionality to choose the appropriate CSC coefficients and program them in the CSC registers. We take the source and destination colorspace formats as the arguments, and choose the coefficient table accordingly. YUV to RGB coefficients are provided for standard and high definition colorspaces. The coefficients can also be limited or full range. For now, only full range coefficients are chosen. We would need some sort of control ioctl for the user to specify the range needed. Not sure if there is a generic control ioctl for this already? Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
69 lines
1.6 KiB
C
69 lines
1.6 KiB
C
/*
|
|
* Copyright (c) 2013 Texas Instruments Inc.
|
|
*
|
|
* David Griego, <dagriego@biglakesoftware.com>
|
|
* Dale Farnsworth, <dale@farnsworth.org>
|
|
* Archit Taneja, <archit@ti.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 as published by
|
|
* the Free Software Foundation.
|
|
*/
|
|
#ifndef TI_CSC_H
|
|
#define TI_CSC_H
|
|
|
|
/* VPE color space converter regs */
|
|
#define CSC_CSC00 0x00
|
|
#define CSC_A0_MASK 0x1fff
|
|
#define CSC_A0_SHIFT 0
|
|
#define CSC_B0_MASK 0x1fff
|
|
#define CSC_B0_SHIFT 16
|
|
|
|
#define CSC_CSC01 0x04
|
|
#define CSC_C0_MASK 0x1fff
|
|
#define CSC_C0_SHIFT 0
|
|
#define CSC_A1_MASK 0x1fff
|
|
#define CSC_A1_SHIFT 16
|
|
|
|
#define CSC_CSC02 0x08
|
|
#define CSC_B1_MASK 0x1fff
|
|
#define CSC_B1_SHIFT 0
|
|
#define CSC_C1_MASK 0x1fff
|
|
#define CSC_C1_SHIFT 16
|
|
|
|
#define CSC_CSC03 0x0c
|
|
#define CSC_A2_MASK 0x1fff
|
|
#define CSC_A2_SHIFT 0
|
|
#define CSC_B2_MASK 0x1fff
|
|
#define CSC_B2_SHIFT 16
|
|
|
|
#define CSC_CSC04 0x10
|
|
#define CSC_C2_MASK 0x1fff
|
|
#define CSC_C2_SHIFT 0
|
|
#define CSC_D0_MASK 0x0fff
|
|
#define CSC_D0_SHIFT 16
|
|
|
|
#define CSC_CSC05 0x14
|
|
#define CSC_D1_MASK 0x0fff
|
|
#define CSC_D1_SHIFT 0
|
|
#define CSC_D2_MASK 0x0fff
|
|
#define CSC_D2_SHIFT 16
|
|
|
|
#define CSC_BYPASS (1 << 28)
|
|
|
|
struct csc_data {
|
|
void __iomem *base;
|
|
struct resource *res;
|
|
|
|
struct platform_device *pdev;
|
|
};
|
|
|
|
void csc_dump_regs(struct csc_data *csc);
|
|
void csc_set_coeff_bypass(struct csc_data *csc, u32 *csc_reg5);
|
|
void csc_set_coeff(struct csc_data *csc, u32 *csc_reg0,
|
|
enum v4l2_colorspace src_colorspace,
|
|
enum v4l2_colorspace dst_colorspace);
|
|
struct csc_data *csc_create(struct platform_device *pdev);
|
|
|
|
#endif
|