blob: 5721e0b9b93607f1b3e2c28fabeb3764a360fc92 [file] [log] [blame]
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#include "tvafe_regs.h"
#include "tvafe_general.h"
#include "tvafe_debug.h"
#include "tvafe.h"
/* ******************************************************
* tl1 pq table
********************************************************
*/
/* ************* cvbs(avin, port1/2) *************** */
static struct tvafe_reg_table_s cvbs_ntscm_table_tl1[] = {
/* reg, val, mask */
{CVD2_VSYNC_SIGNAL_THRESHOLD, 0x7d, 0xff},
{CVD2_VSYNC_NO_SIGNAL_THRESHOLD, 0xf0, 0xff},
{CVD2_CONTROL1, 0x08, 0xff},
{CVD2_2DCOMB_NOISE_TH, 0x84, 0xff},
{CVD2_REG_B0, 0x00, 0xff},
{CVD2_3DCOMB_FILTER, 0x0f, 0xff},
{CVD2_REG_B2, 0x08, 0x18},
{CVD2_CHROMA_EDGE_ENHANCEMENT, 0x22, 0xff},
{CVD2_REG_87, 0xc0, 0xc0},
{CVD2_REG_FA, 0x00, 0xa0},
/*set for wipe off vertical stripes*/
{ACD_REG_25, 0x00e941a8, 0xffffffff},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s cvbs_ntsc443_table_tl1[] = {
/* reg, val, mask */
{CVD2_VSYNC_NO_SIGNAL_THRESHOLD, 0xf0, 0xff},
{CVD2_REG_87, 0xc0, 0xc0},
{CVD2_REG_FA, 0x00, 0xa0},
/*set for wipe off vertical stripes*/
{ACD_REG_25, 0xeafb4e8e, 0xffffffff},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s cvbs_pali_table_tl1[] = {
/* reg, val, mask */
{CVD2_VSYNC_NO_SIGNAL_THRESHOLD, 0xf0, 0xff},
/*chroma state adjust dynamicly*/
{CVD2_CHROMA_LOOPFILTER_STATE, 0x0a, 0xff},
{CVD2_REG_87, 0xc0, 0xc0},
{CVD2_REG_FA, 0x00, 0xa0},
{ACD_REG_89, 0x80010004, 0xffffffff},
{ACD_REG_8A, 0x100004, 0xffffffff},
{ACD_REG_8C, 0x38000, 0xffffffff},
/*set for wipe off vertical stripes*/
{ACD_REG_25, 0x00e941a8, 0xffffffff},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s cvbs_palm_table_tl1[] = {
/* reg, val, mask */
{CVD2_VSYNC_NO_SIGNAL_THRESHOLD, 0xf0, 0xff},
{CVD2_REG_B2, 0x08, 0x18},
{CVD2_CHROMA_EDGE_ENHANCEMENT, 0x22, 0xff},
{CVD2_REG_87, 0xc0, 0xc0},
{CVD2_REG_FA, 0x00, 0xa0},
/*for moonoscope pattern color flash*/
{ACD_REG_22, 0x2020000, 0xffffffff},
{CVD2_NOISE_THRESHOLD, 0xff, 0xff},
{CVD2_NON_STANDARD_SIGNAL_THRESHOLD, 0x20, 0xff},
/*set for wipe off vertical stripes*/
{ACD_REG_25, 0xeafb4e8e, 0xffffffff},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s cvbs_pal60_table_tl1[] = {
/* reg, val, mask */
{CVD2_VSYNC_NO_SIGNAL_THRESHOLD, 0xf0, 0xff},
{CVD2_REG_87, 0xc0, 0xc0},
{CVD2_REG_FA, 0x00, 0xa0},
/*set for wipe off vertical stripes*/
{ACD_REG_25, 0xeafb4e8e, 0xffffffff},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s cvbs_palcn_table_tl1[] = {
/* reg, val, mask */
{CVD2_VSYNC_NO_SIGNAL_THRESHOLD, 0xf0, 0xff},
{CVD2_REG_87, 0xc0, 0xc0},
{CVD2_REG_FA, 0x00, 0xa0},
/*set for wipe off vertical stripes*/
{ACD_REG_25, 0xeafb4e8e, 0xffffffff},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s cvbs_secam_table_tl1[] = {
/* reg, val, mask */
{CVD2_VSYNC_NO_SIGNAL_THRESHOLD, 0xf0, 0xff},
{CVD2_REG_B2, 0x08, 0x18},
{CVD2_CHROMA_EDGE_ENHANCEMENT, 0x22, 0xff},
{CVD2_REG_87, 0xc0, 0xc0},
{CVD2_REG_FA, 0x00, 0xa0},
/*set for wipe off vertical stripes*/
{ACD_REG_25, 0xeafb4e8e, 0xffffffff},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s cvbs_ntsc50_table_tl1[] = {
/* reg, val, mask */
{CVD2_VSYNC_NO_SIGNAL_THRESHOLD, 0xf0, 0xff},
{CVD2_REG_87, 0xc0, 0xc0},
{CVD2_REG_FA, 0x00, 0xa0},
/*set for wipe off vertical stripes*/
{ACD_REG_25, 0xeafb4e8e, 0xffffffff},
{0xffffffff, 0, 0},
};
/* *************** rf(atv, port0/3) ********************* */
static struct tvafe_reg_table_s rf_ntscm_table_tl1[] = {
/* reg, val, mask */
{CVD2_REG_B0, 0xf0, 0xff},
{CVD2_REG_B2, 0x00, 0x18},
{CVD2_CONTROL1, 0x00, 0x0c},
{CVD2_REG_87, 0xc0, 0xc0},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s rf_ntsc443_table_tl1[] = {
/* reg, val, mask */
{CVD2_REG_B0, 0xf0, 0xff},
{CVD2_REG_B2, 0x00, 0x18},
{CVD2_CONTROL1, 0x00, 0x0c},
{CVD2_REG_87, 0xc0, 0xc0},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s rf_pali_table_tl1[] = {
/* reg, val, mask */
{CVD2_REG_B0, 0xf0, 0xff},
{CVD2_REG_B2, 0x00, 0x18},
{CVD2_CONTROL1, 0x00, 0x0c},
{CVD2_REG_87, 0xc0, 0xc0},
{CVD2_REG_FA, 0x00, 0xa0},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s rf_palm_table_tl1[] = {
/* reg, val, mask */
{CVD2_REG_B0, 0xf0, 0xff},
{CVD2_REG_B2, 0x00, 0x18},
{CVD2_CONTROL1, 0x00, 0x0c},
/*for moonoscope pattern color flash*/
{ACD_REG_22, 0x2020000, 0xffffffff},
{CVD2_NOISE_THRESHOLD, 0xff, 0xff},
{CVD2_NON_STANDARD_SIGNAL_THRESHOLD, 0x20, 0xff},
{CVD2_REG_87, 0xc0, 0xc0},
{CVD2_REG_FA, 0x00, 0xa0},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s rf_pal60_table_tl1[] = {
/* reg, val, mask */
{CVD2_REG_B0, 0xf0, 0xff},
{CVD2_REG_B2, 0x00, 0x18},
{CVD2_CONTROL1, 0x00, 0x0c},
{CVD2_REG_87, 0xc0, 0xc0},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s rf_palcn_table_tl1[] = {
/* reg, val, mask */
{CVD2_REG_B0, 0xf0, 0xff},
{CVD2_REG_B2, 0x00, 0x18},
{CVD2_CONTROL1, 0x00, 0x0c},
{CVD2_REG_87, 0xc0, 0xc0},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s rf_secam_table_tl1[] = {
/* reg, val, mask */
{CVD2_REG_B0, 0xf0, 0xff},
{CVD2_REG_B2, 0x00, 0x18},
{CVD2_CONTROL1, 0x00, 0x0c},
{CVD2_REG_87, 0xc0, 0xc0},
{0xffffffff, 0, 0},
};
static struct tvafe_reg_table_s rf_ntsc50_table_tl1[] = {
/* reg, val, mask */
{CVD2_REG_B0, 0xf0, 0xff},
{CVD2_REG_B2, 0x00, 0x18},
{CVD2_CONTROL1, 0x00, 0x0c},
{CVD2_REG_87, 0xc0, 0xc0},
{0xffffffff, 0, 0},
};
/* ******************************************************
* pq table assemble
********************************************************
*/
static struct tvafe_reg_table_s *cvbs_pq_config_tl1[] = {
cvbs_ntscm_table_tl1,
cvbs_ntsc443_table_tl1,
cvbs_pali_table_tl1,
cvbs_palm_table_tl1,
cvbs_pal60_table_tl1,
cvbs_palcn_table_tl1,
cvbs_secam_table_tl1,
cvbs_ntsc50_table_tl1,
};
static struct tvafe_reg_table_s *rf_pq_config_tl1[] = {
rf_ntscm_table_tl1,
rf_ntsc443_table_tl1,
rf_pali_table_tl1,
rf_palm_table_tl1,
rf_pal60_table_tl1,
rf_palcn_table_tl1,
rf_secam_table_tl1,
rf_ntsc50_table_tl1,
};
int tvafe_pq_config_probe(struct meson_tvafe_data *tvafe_data)
{
if (!tvafe_data) {
tvafe_pr_err("%s: tvafe_data is null\n", __func__);
return -1;
}
switch (tvafe_data->cpu_id) {
case TVAFE_CPU_TYPE_TL1:
case TVAFE_CPU_TYPE_TM2:
case TVAFE_CPU_TYPE_TM2_B:
case TVAFE_CPU_TYPE_T5:
case TVAFE_CPU_TYPE_T5D:
case TVAFE_CPU_TYPE_T3:
case TVAFE_CPU_TYPE_T5W:
tvafe_data->cvbs_pq_conf = cvbs_pq_config_tl1;
tvafe_data->rf_pq_conf = rf_pq_config_tl1;
break;
default:
break;
}
return 0;
}