aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/platform/davinci/dm644x_ccdc.c13
-rw-r--r--drivers/media/platform/davinci/dm644x_ccdc_regs.h2
-rw-r--r--include/media/davinci/dm644x_ccdc.h24
3 files changed, 27 insertions, 12 deletions
diff --git a/drivers/media/platform/davinci/dm644x_ccdc.c b/drivers/media/platform/davinci/dm644x_ccdc.c
index 318e80512998..971d639b6674 100644
--- a/drivers/media/platform/davinci/dm644x_ccdc.c
+++ b/drivers/media/platform/davinci/dm644x_ccdc.c
@@ -228,9 +228,12 @@ static void ccdc_readregs(void)
228static int validate_ccdc_param(struct ccdc_config_params_raw *ccdcparam) 228static int validate_ccdc_param(struct ccdc_config_params_raw *ccdcparam)
229{ 229{
230 if (ccdcparam->alaw.enable) { 230 if (ccdcparam->alaw.enable) {
231 if ((ccdcparam->alaw.gama_wd > CCDC_GAMMA_BITS_09_0) || 231 u8 max_gamma = ccdc_gamma_width_max_bit(ccdcparam->alaw.gamma_wd);
232 (ccdcparam->alaw.gama_wd < CCDC_GAMMA_BITS_15_6) || 232 u8 max_data = ccdc_data_size_max_bit(ccdcparam->data_sz);
233 (ccdcparam->alaw.gama_wd < ccdcparam->data_sz)) { 233
234 if ((ccdcparam->alaw.gamma_wd > CCDC_GAMMA_BITS_09_0) ||
235 (ccdcparam->alaw.gamma_wd < CCDC_GAMMA_BITS_15_6) ||
236 (max_gamma > max_data)) {
234 dev_dbg(ccdc_cfg.dev, "\nInvalid data line select"); 237 dev_dbg(ccdc_cfg.dev, "\nInvalid data line select");
235 return -1; 238 return -1;
236 } 239 }
@@ -560,8 +563,8 @@ void ccdc_config_raw(void)
560 563
561 /* Enable and configure aLaw register if needed */ 564 /* Enable and configure aLaw register if needed */
562 if (config_params->alaw.enable) { 565 if (config_params->alaw.enable) {
563 val = ((config_params->alaw.gama_wd & 566 val = ((config_params->alaw.gamma_wd &
564 CCDC_ALAW_GAMA_WD_MASK) | CCDC_ALAW_ENABLE); 567 CCDC_ALAW_GAMMA_WD_MASK) | CCDC_ALAW_ENABLE);
565 regw(val, CCDC_ALAW); 568 regw(val, CCDC_ALAW);
566 dev_dbg(ccdc_cfg.dev, "\nWriting 0x%x to ALAW...\n", val); 569 dev_dbg(ccdc_cfg.dev, "\nWriting 0x%x to ALAW...\n", val);
567 } 570 }
diff --git a/drivers/media/platform/davinci/dm644x_ccdc_regs.h b/drivers/media/platform/davinci/dm644x_ccdc_regs.h
index 90370e414e2c..2b0aca5383f0 100644
--- a/drivers/media/platform/davinci/dm644x_ccdc_regs.h
+++ b/drivers/media/platform/davinci/dm644x_ccdc_regs.h
@@ -84,7 +84,7 @@
84#define CCDC_VDHDEN_ENABLE (1 << 16) 84#define CCDC_VDHDEN_ENABLE (1 << 16)
85#define CCDC_LPF_ENABLE (1 << 14) 85#define CCDC_LPF_ENABLE (1 << 14)
86#define CCDC_ALAW_ENABLE (1 << 3) 86#define CCDC_ALAW_ENABLE (1 << 3)
87#define CCDC_ALAW_GAMA_WD_MASK 7 87#define CCDC_ALAW_GAMMA_WD_MASK 7
88#define CCDC_BLK_CLAMP_ENABLE (1 << 31) 88#define CCDC_BLK_CLAMP_ENABLE (1 << 31)
89#define CCDC_BLK_SGAIN_MASK 0x1F 89#define CCDC_BLK_SGAIN_MASK 0x1F
90#define CCDC_BLK_ST_PXL_MASK 0x7FFF 90#define CCDC_BLK_ST_PXL_MASK 0x7FFF
diff --git a/include/media/davinci/dm644x_ccdc.h b/include/media/davinci/dm644x_ccdc.h
index 3e178eb52fb3..852e96c4bb46 100644
--- a/include/media/davinci/dm644x_ccdc.h
+++ b/include/media/davinci/dm644x_ccdc.h
@@ -38,17 +38,23 @@ enum ccdc_sample_line {
38 CCDC_SAMPLE_16LINES 38 CCDC_SAMPLE_16LINES
39}; 39};
40 40
41/* enum for Alaw gama width */ 41/* enum for Alaw gamma width */
42enum ccdc_gama_width { 42enum ccdc_gamma_width {
43 CCDC_GAMMA_BITS_15_6, 43 CCDC_GAMMA_BITS_15_6, /* use bits 15-6 for gamma */
44 CCDC_GAMMA_BITS_14_5, 44 CCDC_GAMMA_BITS_14_5,
45 CCDC_GAMMA_BITS_13_4, 45 CCDC_GAMMA_BITS_13_4,
46 CCDC_GAMMA_BITS_12_3, 46 CCDC_GAMMA_BITS_12_3,
47 CCDC_GAMMA_BITS_11_2, 47 CCDC_GAMMA_BITS_11_2,
48 CCDC_GAMMA_BITS_10_1, 48 CCDC_GAMMA_BITS_10_1,
49 CCDC_GAMMA_BITS_09_0 49 CCDC_GAMMA_BITS_09_0 /* use bits 9-0 for gamma */
50}; 50};
51 51
52/* returns the highest bit used for the gamma */
53static inline u8 ccdc_gamma_width_max_bit(enum ccdc_gamma_width width)
54{
55 return 15 - width;
56}
57
52enum ccdc_data_size { 58enum ccdc_data_size {
53 CCDC_DATA_16BITS, 59 CCDC_DATA_16BITS,
54 CCDC_DATA_15BITS, 60 CCDC_DATA_15BITS,
@@ -60,12 +66,18 @@ enum ccdc_data_size {
60 CCDC_DATA_8BITS 66 CCDC_DATA_8BITS
61}; 67};
62 68
69/* returns the highest bit used for this data size */
70static inline u8 ccdc_data_size_max_bit(enum ccdc_data_size sz)
71{
72 return sz == CCDC_DATA_8BITS ? 7 : 15 - sz;
73}
74
63/* structure for ALaw */ 75/* structure for ALaw */
64struct ccdc_a_law { 76struct ccdc_a_law {
65 /* Enable/disable A-Law */ 77 /* Enable/disable A-Law */
66 unsigned char enable; 78 unsigned char enable;
67 /* Gama Width Input */ 79 /* Gamma Width Input */
68 enum ccdc_gama_width gama_wd; 80 enum ccdc_gamma_width gamma_wd;
69}; 81};
70 82
71/* structure for Black Clamping */ 83/* structure for Black Clamping */