mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
amvecm: add viu2 vsync support for gamma [1/1]
PD#SWPL-14450 Problem: gamma can't support viu2 vsync Solution: add viu2 vsync support for gamma Verify: u202 Conflicts: drivers/amlogic/media/enhancement/amvecm/amve.c Change-Id: I5f490b254f58a130451ff69a456c218e6e4dcc94 Signed-off-by: Evoke Zhang <evoke.zhang@amlogic.com>
This commit is contained in:
@@ -526,6 +526,9 @@
|
||||
cm_en = <0>;/*1:enabel ;0:disable*/
|
||||
/*0: 709/601 1: bt2020*/
|
||||
tx_op_color_primary = <0>;
|
||||
|
||||
interrupts = <0 56 1>;
|
||||
interrupt-names = "vsync2";
|
||||
};
|
||||
|
||||
amdolby_vision {
|
||||
|
||||
@@ -483,6 +483,9 @@
|
||||
gamma_en = <0>;/*1:enabel ;0:disable*/
|
||||
wb_en = <0>;/*1:enabel ;0:disable*/
|
||||
cm_en = <0>;/*1:enabel ;0:disable*/
|
||||
|
||||
interrupts = <0 56 1>;
|
||||
interrupt-names = "vsync2";
|
||||
};
|
||||
amdolby_vision {
|
||||
compatible = "amlogic, dolby_vision_g12a";
|
||||
|
||||
@@ -751,12 +751,200 @@
|
||||
key-device = "normal";
|
||||
key-permit = "read","write","del";
|
||||
};
|
||||
keysn_13:key_13{
|
||||
key-name = "hdcp14_rx";
|
||||
key-device = "normal";
|
||||
key-type = "sha1";
|
||||
keysn_16:key_16{
|
||||
key-name = "netflix_mgkid";
|
||||
key-device = "secure";
|
||||
key-permit = "read","write","del";
|
||||
};
|
||||
};//End unifykey
|
||||
|
||||
efusekey:efusekey{
|
||||
keynum = <4>;
|
||||
key0 = <&key_0>;
|
||||
key1 = <&key_1>;
|
||||
key2 = <&key_2>;
|
||||
key3 = <&key_3>;
|
||||
key_0:key_0{
|
||||
keyname = "mac";
|
||||
offset = <0>;
|
||||
size = <6>;
|
||||
};
|
||||
key_1:key_1{
|
||||
keyname = "mac_bt";
|
||||
offset = <6>;
|
||||
size = <6>;
|
||||
};
|
||||
key_2:key_2{
|
||||
keyname = "mac_wifi";
|
||||
offset = <12>;
|
||||
size = <6>;
|
||||
};
|
||||
key_3:key_3{
|
||||
keyname = "usid";
|
||||
offset = <18>;
|
||||
size = <16>;
|
||||
};
|
||||
};//End efusekey
|
||||
|
||||
amlvecm {
|
||||
compatible = "amlogic, vecm";
|
||||
dev_name = "aml_vecm";
|
||||
status = "okay";
|
||||
gamma_en = <1>;/*1:enabel ;0:disable*/
|
||||
wb_en = <0>;/*1:enabel ;0:disable*/
|
||||
cm_en = <0>;/*1:enabel ;0:disable*/
|
||||
/*0: 709/601 1: bt2020*/
|
||||
tx_op_color_primary = <0>;
|
||||
|
||||
interrupts = <0 56 1>;
|
||||
interrupt-names = "vsync2";
|
||||
};
|
||||
|
||||
amdolby_vision {
|
||||
compatible = "amlogic, dolby_vision_sm1";
|
||||
dev_name = "aml_amdolby_vision_driver";
|
||||
status = "okay";
|
||||
tv_mode = <0>;/*1:enabel ;0:disable*/
|
||||
};
|
||||
|
||||
/* Audio Related start */
|
||||
pdm_codec:dummy{
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "amlogic, pdm_dummy_codec";
|
||||
status = "okay";
|
||||
};
|
||||
dummy_codec:dummy{
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "amlogic, aml_dummy_codec";
|
||||
status = "okay";
|
||||
};
|
||||
amlogic_codec:t9015{
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "amlogic, aml_codec_T9015";
|
||||
reg = <0xFF632000 0x2000>;
|
||||
is_auge_used = <1>; /* meson or auge chipset used */
|
||||
tocodec_inout = <1>;
|
||||
tdmout_index = <1>;
|
||||
ch0_sel = <0>;
|
||||
ch1_sel = <1>;
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
auge_sound {
|
||||
compatible = "amlogic, g12a-sound-card";
|
||||
aml-audio-card,name = "AML-AUGESOUND";
|
||||
|
||||
/*avout mute gpio*/
|
||||
avout_mute-gpios = <&gpio_ao GPIOAO_8 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
aml-audio-card,dai-link@0 {
|
||||
format = "dsp_a";
|
||||
mclk-fs = <512>;
|
||||
//continuous-clock;
|
||||
//bitclock-inversion;
|
||||
//frame-inversion;
|
||||
/* master mode */
|
||||
bitclock-master = <&tdma>;
|
||||
frame-master = <&tdma>;
|
||||
/* slave mode */
|
||||
/*
|
||||
* bitclock-master = <&tdmacodec>;
|
||||
* frame-master = <&tdmacodec>;
|
||||
*/
|
||||
suffix-name = "alsaPORT-pcm";
|
||||
tdmacpu: cpu {
|
||||
sound-dai = <&tdma>;
|
||||
dai-tdm-slot-tx-mask =
|
||||
<1>;
|
||||
dai-tdm-slot-rx-mask =
|
||||
<1>;
|
||||
dai-tdm-slot-num = <2>;
|
||||
dai-tdm-slot-width = <16>;
|
||||
system-clock-frequency = <256000>;
|
||||
};
|
||||
tdmacodec: codec {
|
||||
sound-dai = <&dummy_codec>;
|
||||
};
|
||||
};
|
||||
|
||||
aml-audio-card,dai-link@1 {
|
||||
format = "i2s";// "dsp_a";
|
||||
mclk-fs = <256>;
|
||||
//continuous-clock;
|
||||
//bitclock-inversion;
|
||||
//frame-inversion;
|
||||
/* master mode */
|
||||
bitclock-master = <&tdmb>;
|
||||
frame-master = <&tdmb>;
|
||||
/* slave mode */
|
||||
//bitclock-master = <&tdmbcodec>;
|
||||
//frame-master = <&tdmbcodec>;
|
||||
/* suffix-name, sync with android audio hal
|
||||
* what's the dai link used for
|
||||
*/
|
||||
suffix-name = "alsaPORT-i2s";
|
||||
cpu {
|
||||
sound-dai = <&tdmb>;
|
||||
dai-tdm-slot-tx-mask = <1 1>;
|
||||
dai-tdm-slot-rx-mask = <1 1>;
|
||||
dai-tdm-slot-num = <2>;
|
||||
/*
|
||||
* dai-tdm-slot-tx-mask =
|
||||
* <1 1 1 1 1 1 1 1>;
|
||||
* dai-tdm-slot-rx-mask =
|
||||
* <1 1 1 1 1 1 1 1>;
|
||||
* dai-tdm-slot-num = <8>;
|
||||
*/
|
||||
dai-tdm-slot-width = <32>;
|
||||
system-clock-frequency = <12288000>;
|
||||
};
|
||||
tdmbcodec: codec {
|
||||
sound-dai = <&dummy_codec &dummy_codec
|
||||
&amlogic_codec &ad82584f_62>;
|
||||
};
|
||||
};
|
||||
|
||||
aml-audio-card,dai-link@2 {
|
||||
format = "i2s";
|
||||
mclk-fs = <256>;
|
||||
//continuous-clock;
|
||||
//bitclock-inversion;
|
||||
//frame-inversion;
|
||||
/* master mode */
|
||||
bitclock-master = <&tdmc>;
|
||||
frame-master = <&tdmc>;
|
||||
/* slave mode */
|
||||
//bitclock-master = <&tdmccodec>;
|
||||
//frame-master = <&tdmccodec>;
|
||||
/* suffix-name, sync with android audio hal used for */
|
||||
//suffix-name = "alsaPORT-tdm";
|
||||
cpu {
|
||||
sound-dai = <&tdmc>;
|
||||
dai-tdm-slot-tx-mask = <1 1>;
|
||||
dai-tdm-slot-rx-mask = <1 1>;
|
||||
dai-tdm-slot-num = <2>;
|
||||
dai-tdm-slot-width = <32>;
|
||||
system-clock-frequency = <12288000>;
|
||||
};
|
||||
tdmccodec: codec {
|
||||
sound-dai = <&dummy_codec &dummy_codec>;
|
||||
};
|
||||
};
|
||||
|
||||
aml-audio-card,dai-link@3 {
|
||||
mclk-fs = <64>;
|
||||
/* suffix-name, sync with android audio hal
|
||||
* what's the dai link used for
|
||||
*/
|
||||
suffix-name = "alsaPORT-pdm";
|
||||
cpu {
|
||||
sound-dai = <&pdm>;
|
||||
};
|
||||
codec {
|
||||
sound-dai = <&pdm_codec>;
|
||||
};
|
||||
};
|
||||
keysn_14:key_14{
|
||||
key-name = "prpubkeybox";// PlayReady
|
||||
key-device = "secure";
|
||||
|
||||
@@ -524,6 +524,9 @@
|
||||
cm_en = <0>;/*1:enabel ;0:disable*/
|
||||
/*0: 709/601 1: bt2020*/
|
||||
tx_op_color_primary = <0>;
|
||||
|
||||
interrupts = <0 56 1>;
|
||||
interrupt-names = "vsync2";
|
||||
};
|
||||
|
||||
amdolby_vision {
|
||||
|
||||
@@ -484,6 +484,9 @@
|
||||
gamma_en = <0>;/*1:enabel ;0:disable*/
|
||||
wb_en = <0>;/*1:enabel ;0:disable*/
|
||||
cm_en = <0>;/*1:enabel ;0:disable*/
|
||||
|
||||
interrupts = <0 56 1>;
|
||||
interrupt-names = "vsync2";
|
||||
};
|
||||
amdolby_vision {
|
||||
compatible = "amlogic, dolby_vision_g12a";
|
||||
|
||||
@@ -527,6 +527,9 @@
|
||||
cm_en = <0>;/*1:enabel ;0:disable*/
|
||||
/*0: 709/601 1: bt2020*/
|
||||
tx_op_color_primary = <0>;
|
||||
|
||||
interrupts = <0 56 1>;
|
||||
interrupt-names = "vsync2";
|
||||
};
|
||||
|
||||
amdolby_vision {
|
||||
|
||||
@@ -731,6 +731,184 @@
|
||||
key-device = "secure";
|
||||
key-permit = "read","write","del";
|
||||
};
|
||||
keysn_11:key_11{
|
||||
key-name = "PlayReadykeybox25";
|
||||
key-device = "secure";
|
||||
key-permit = "read","write","del";
|
||||
};
|
||||
keysn_12:key_12{
|
||||
key-name = "prpubkeybox";// PlayReady
|
||||
key-device = "secure";
|
||||
key-permit = "read","write","del";
|
||||
};
|
||||
keysn_13:key_13{
|
||||
key-name = "prprivkeybox";// PlayReady
|
||||
key-device = "secure";
|
||||
key-permit = "read","write","del";
|
||||
};
|
||||
keysn_14:key_14{
|
||||
key-name = "attestationkeybox";// attestation key
|
||||
key-device = "secure";
|
||||
key-permit = "read","write","del";
|
||||
};
|
||||
keysn_15:key_15{
|
||||
key-name = "region_code";
|
||||
key-device = "normal";
|
||||
key-permit = "read","write","del";
|
||||
};
|
||||
keysn_16:key_16{
|
||||
key-name = "netflix_mgkid";
|
||||
key-device = "secure";
|
||||
key-permit = "read","write","del";
|
||||
};
|
||||
};//End unifykey
|
||||
|
||||
efusekey:efusekey{
|
||||
keynum = <4>;
|
||||
key0 = <&key_0>;
|
||||
key1 = <&key_1>;
|
||||
key2 = <&key_2>;
|
||||
key3 = <&key_3>;
|
||||
key_0:key_0{
|
||||
keyname = "mac";
|
||||
offset = <0>;
|
||||
size = <6>;
|
||||
};
|
||||
key_1:key_1{
|
||||
keyname = "mac_bt";
|
||||
offset = <6>;
|
||||
size = <6>;
|
||||
};
|
||||
key_2:key_2{
|
||||
keyname = "mac_wifi";
|
||||
offset = <12>;
|
||||
size = <6>;
|
||||
};
|
||||
key_3:key_3{
|
||||
keyname = "usid";
|
||||
offset = <18>;
|
||||
size = <16>;
|
||||
};
|
||||
};//End efusekey
|
||||
|
||||
amlvecm {
|
||||
compatible = "amlogic, vecm";
|
||||
dev_name = "aml_vecm";
|
||||
status = "okay";
|
||||
gamma_en = <1>;/*1:enabel ;0:disable*/
|
||||
wb_en = <0>;/*1:enabel ;0:disable*/
|
||||
cm_en = <0>;/*1:enabel ;0:disable*/
|
||||
/*0: 709/601 1: bt2020*/
|
||||
tx_op_color_primary = <0>;
|
||||
|
||||
interrupts = <0 56 1>;
|
||||
interrupt-names = "vsync2";
|
||||
};
|
||||
|
||||
amdolby_vision {
|
||||
compatible = "amlogic, dolby_vision_sm1";
|
||||
dev_name = "aml_amdolby_vision_driver";
|
||||
status = "okay";
|
||||
tv_mode = <0>;/*1:enabel ;0:disable*/
|
||||
};
|
||||
|
||||
/* Audio Related start */
|
||||
pdm_codec:dummy{
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "amlogic, pdm_dummy_codec";
|
||||
status = "okay";
|
||||
};
|
||||
dummy_codec:dummy{
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "amlogic, aml_dummy_codec";
|
||||
status = "okay";
|
||||
};
|
||||
amlogic_codec:t9015{
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "amlogic, aml_codec_T9015";
|
||||
reg = <0x0 0xFF632000 0x0 0x2000>;
|
||||
is_auge_used = <1>; /* meson or auge chipset used */
|
||||
tocodec_inout = <1>;
|
||||
tdmout_index = <1>;
|
||||
ch0_sel = <0>;
|
||||
ch1_sel = <1>;
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
auge_sound {
|
||||
compatible = "amlogic, g12a-sound-card";
|
||||
aml-audio-card,name = "AML-AUGESOUND";
|
||||
|
||||
/*avout mute gpio*/
|
||||
avout_mute-gpios = <&gpio_ao GPIOAO_8 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
aml-audio-card,dai-link@0 {
|
||||
format = "dsp_a";
|
||||
mclk-fs = <512>;
|
||||
//continuous-clock;
|
||||
//bitclock-inversion;
|
||||
//frame-inversion;
|
||||
/* master mode */
|
||||
bitclock-master = <&tdma>;
|
||||
frame-master = <&tdma>;
|
||||
/* slave mode */
|
||||
/*
|
||||
* bitclock-master = <&tdmacodec>;
|
||||
* frame-master = <&tdmacodec>;
|
||||
*/
|
||||
suffix-name = "alsaPORT-pcm";
|
||||
tdmacpu: cpu {
|
||||
sound-dai = <&tdma>;
|
||||
dai-tdm-slot-tx-mask =
|
||||
<1>;
|
||||
dai-tdm-slot-rx-mask =
|
||||
<1>;
|
||||
dai-tdm-slot-num = <2>;
|
||||
dai-tdm-slot-width = <16>;
|
||||
system-clock-frequency = <256000>;
|
||||
};
|
||||
tdmacodec: codec {
|
||||
sound-dai = <&dummy_codec>;
|
||||
};
|
||||
};
|
||||
|
||||
aml-audio-card,dai-link@1 {
|
||||
format = "i2s";// "dsp_a";
|
||||
mclk-fs = <256>;
|
||||
//continuous-clock;
|
||||
//bitclock-inversion;
|
||||
//frame-inversion;
|
||||
/* master mode */
|
||||
bitclock-master = <&tdmb>;
|
||||
frame-master = <&tdmb>;
|
||||
/* slave mode */
|
||||
//bitclock-master = <&tdmbcodec>;
|
||||
//frame-master = <&tdmbcodec>;
|
||||
/* suffix-name, sync with android audio hal
|
||||
* what's the dai link used for
|
||||
*/
|
||||
suffix-name = "alsaPORT-i2s";
|
||||
cpu {
|
||||
sound-dai = <&tdmb>;
|
||||
dai-tdm-slot-tx-mask = <1 1>;
|
||||
dai-tdm-slot-rx-mask = <1 1>;
|
||||
dai-tdm-slot-num = <2>;
|
||||
/*
|
||||
* dai-tdm-slot-tx-mask =
|
||||
* <1 1 1 1 1 1 1 1>;
|
||||
* dai-tdm-slot-rx-mask =
|
||||
* <1 1 1 1 1 1 1 1>;
|
||||
* dai-tdm-slot-num = <8>;
|
||||
*/
|
||||
dai-tdm-slot-width = <32>;
|
||||
system-clock-frequency = <12288000>;
|
||||
};
|
||||
tdmbcodec: codec {
|
||||
sound-dai = <&dummy_codec &dummy_codec
|
||||
&amlogic_codec &ad82584f_62>;
|
||||
};
|
||||
};
|
||||
keysn_11:key_11{
|
||||
key-name = "hdcp22_rx_private";
|
||||
key-device = "secure";
|
||||
|
||||
@@ -269,18 +269,36 @@ void ve_on_vs(struct vframe_s *vf)
|
||||
/* *********************************************************************** */
|
||||
/* *** IOCTL-oriented functions ****************************************** */
|
||||
/* *********************************************************************** */
|
||||
|
||||
void vpp_enable_lcd_gamma_table(void)
|
||||
int vpp_get_encl_viu_mux(void)
|
||||
{
|
||||
VSYNC_WR_MPEG_REG_BITS(L_GAMMA_CNTL_PORT, 1, GAMMA_EN, 1);
|
||||
unsigned int temp;
|
||||
|
||||
temp = READ_VPP_REG(VPU_VIU_VENC_MUX_CTRL);
|
||||
if ((temp & 0x3) == 0)
|
||||
return 1;
|
||||
if (((temp >> 2) & 0x3) == 0)
|
||||
return 2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void vpp_disable_lcd_gamma_table(void)
|
||||
void vpp_enable_lcd_gamma_table(int viu_sel)
|
||||
{
|
||||
VSYNC_WR_MPEG_REG_BITS(L_GAMMA_CNTL_PORT, 0, GAMMA_EN, 1);
|
||||
if (viu_sel == 1) /* viu1 vsync rdma */
|
||||
VSYNC_WR_MPEG_REG_BITS(L_GAMMA_CNTL_PORT, 1, GAMMA_EN, 1);
|
||||
else
|
||||
WRITE_VPP_REG_BITS(L_GAMMA_CNTL_PORT, 1, GAMMA_EN, 1);
|
||||
}
|
||||
|
||||
void vpp_set_lcd_gamma_table(u16 *data, u32 rgb_mask)
|
||||
void vpp_disable_lcd_gamma_table(int viu_sel)
|
||||
{
|
||||
if (viu_sel == 1) /* viu1 vsync rdma */
|
||||
VSYNC_WR_MPEG_REG_BITS(L_GAMMA_CNTL_PORT, 0, GAMMA_EN, 1);
|
||||
else
|
||||
WRITE_VPP_REG_BITS(L_GAMMA_CNTL_PORT, 0, GAMMA_EN, 1);
|
||||
}
|
||||
|
||||
void vpp_set_lcd_gamma_table(u16 *data, u32 rgb_mask, int viu_sel)
|
||||
{
|
||||
int i;
|
||||
int cnt = 0;
|
||||
@@ -321,8 +339,13 @@ void vpp_set_lcd_gamma_table(u16 *data, u32 rgb_mask)
|
||||
(0x1 << rgb_mask) |
|
||||
(0x23 << HADR));
|
||||
|
||||
VSYNC_WR_MPEG_REG_BITS(L_GAMMA_CNTL_PORT,
|
||||
gamma_en, GAMMA_EN, 1);
|
||||
if (viu_sel == 1) { /* viu1 vsync rdma */
|
||||
VSYNC_WR_MPEG_REG_BITS(L_GAMMA_CNTL_PORT,
|
||||
gamma_en, GAMMA_EN, 1);
|
||||
} else { /* viu2 directly write, rdma todo */
|
||||
WRITE_VPP_REG_BITS(L_GAMMA_CNTL_PORT,
|
||||
gamma_en, GAMMA_EN, 1);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&vpp_lcd_gamma_lock, flags);
|
||||
}
|
||||
@@ -768,29 +791,36 @@ void ve_dnlp_latch_process(void)
|
||||
|
||||
void ve_lcd_gamma_process(void)
|
||||
{
|
||||
int viu_sel;
|
||||
|
||||
viu_sel = vpp_get_encl_viu_mux();
|
||||
|
||||
if (vecm_latch_flag & FLAG_GAMMA_TABLE_EN) {
|
||||
vecm_latch_flag &= ~FLAG_GAMMA_TABLE_EN;
|
||||
vpp_enable_lcd_gamma_table();
|
||||
vpp_enable_lcd_gamma_table(viu_sel);
|
||||
pr_amve_dbg("\n[amve..] set vpp_enable_lcd_gamma_table OK!!!\n");
|
||||
}
|
||||
if (vecm_latch_flag & FLAG_GAMMA_TABLE_DIS) {
|
||||
vecm_latch_flag &= ~FLAG_GAMMA_TABLE_DIS;
|
||||
vpp_disable_lcd_gamma_table();
|
||||
vpp_disable_lcd_gamma_table(viu_sel);
|
||||
pr_amve_dbg("\n[amve..] set vpp_disable_lcd_gamma_table OK!!!\n");
|
||||
}
|
||||
if (vecm_latch_flag & FLAG_GAMMA_TABLE_R) {
|
||||
vecm_latch_flag &= ~FLAG_GAMMA_TABLE_R;
|
||||
vpp_set_lcd_gamma_table(video_gamma_table_r.data, H_SEL_R);
|
||||
vpp_set_lcd_gamma_table(video_gamma_table_r.data, H_SEL_R,
|
||||
viu_sel);
|
||||
pr_amve_dbg("\n[amve..] set vpp_set_lcd_gamma_table OK!!!\n");
|
||||
}
|
||||
if (vecm_latch_flag & FLAG_GAMMA_TABLE_G) {
|
||||
vecm_latch_flag &= ~FLAG_GAMMA_TABLE_G;
|
||||
vpp_set_lcd_gamma_table(video_gamma_table_g.data, H_SEL_G);
|
||||
vpp_set_lcd_gamma_table(video_gamma_table_g.data, H_SEL_G,
|
||||
viu_sel);
|
||||
pr_amve_dbg("\n[amve..] set vpp_set_lcd_gamma_table OK!!!\n");
|
||||
}
|
||||
if (vecm_latch_flag & FLAG_GAMMA_TABLE_B) {
|
||||
vecm_latch_flag &= ~FLAG_GAMMA_TABLE_B;
|
||||
vpp_set_lcd_gamma_table(video_gamma_table_b.data, H_SEL_B);
|
||||
vpp_set_lcd_gamma_table(video_gamma_table_b.data, H_SEL_B,
|
||||
viu_sel);
|
||||
pr_amve_dbg("\n[amve..] set vpp_set_lcd_gamma_table OK!!!\n");
|
||||
}
|
||||
if (vecm_latch_flag & FLAG_RGB_OGO) {
|
||||
@@ -799,23 +829,23 @@ void ve_lcd_gamma_process(void)
|
||||
if (video_rgb_ogo.en) {
|
||||
vpp_set_lcd_gamma_table(
|
||||
video_gamma_table_r_adj.data,
|
||||
H_SEL_R);
|
||||
H_SEL_R, viu_sel);
|
||||
vpp_set_lcd_gamma_table(
|
||||
video_gamma_table_g_adj.data,
|
||||
H_SEL_G);
|
||||
H_SEL_G, viu_sel);
|
||||
vpp_set_lcd_gamma_table(
|
||||
video_gamma_table_b_adj.data,
|
||||
H_SEL_B);
|
||||
H_SEL_B, viu_sel);
|
||||
} else {
|
||||
vpp_set_lcd_gamma_table(
|
||||
video_gamma_table_r.data,
|
||||
H_SEL_R);
|
||||
H_SEL_R, viu_sel);
|
||||
vpp_set_lcd_gamma_table(
|
||||
video_gamma_table_g.data,
|
||||
H_SEL_G);
|
||||
H_SEL_G, viu_sel);
|
||||
vpp_set_lcd_gamma_table(
|
||||
video_gamma_table_b.data,
|
||||
H_SEL_B);
|
||||
H_SEL_B, viu_sel);
|
||||
}
|
||||
pr_amve_dbg("\n[amve..] set vpp_set_lcd_gamma_table OK!!!\n");
|
||||
} else {
|
||||
@@ -824,6 +854,7 @@ void ve_lcd_gamma_process(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void lvds_freq_process(void)
|
||||
{
|
||||
/* #if ((MESON_CPU_TYPE==MESON_CPU_TYPE_MESON6TV)|| */
|
||||
|
||||
@@ -92,9 +92,10 @@ void ve_set_regmap(struct ve_regmap_s *p);
|
||||
extern void ve_enable_dnlp(void);
|
||||
extern void ve_disable_dnlp(void);
|
||||
|
||||
extern void vpp_enable_lcd_gamma_table(void);
|
||||
extern void vpp_disable_lcd_gamma_table(void);
|
||||
extern void vpp_set_lcd_gamma_table(u16 *data, u32 rgb_mask);
|
||||
int vpp_get_encl_viu_mux(void);
|
||||
void vpp_enable_lcd_gamma_table(int viu_sel);
|
||||
void vpp_disable_lcd_gamma_table(int viu_sel);
|
||||
void vpp_set_lcd_gamma_table(u16 *data, u32 rgb_mask, int viu_sel);
|
||||
extern void amve_write_gamma_table(u16 *data, u32 rgb_mask);
|
||||
extern void vpp_set_rgb_ogo(struct tcon_rgb_ogo_s *p);
|
||||
extern void vpp_phase_lock_on_vs(unsigned int cycle,
|
||||
|
||||
@@ -98,6 +98,7 @@ struct work_struct aml_lcd_vlock_param_work;
|
||||
#endif
|
||||
|
||||
static struct amvecm_dev_s amvecm_dev;
|
||||
static struct resource *res_viu2_vsync_irq;
|
||||
|
||||
spinlock_t vpp_lcd_gamma_lock;
|
||||
|
||||
@@ -1051,7 +1052,8 @@ void amvecm_video_latch(void)
|
||||
cm_latch_process();
|
||||
amvecm_size_patch();
|
||||
ve_dnlp_latch_process();
|
||||
ve_lcd_gamma_process();
|
||||
if (vpp_get_encl_viu_mux() == 1)
|
||||
ve_lcd_gamma_process();
|
||||
lvds_freq_process();
|
||||
/* #if (MESON_CPU_TYPE >= MESON_CPU_TYPE_MESONG9TV) */
|
||||
if (0) {
|
||||
@@ -1150,6 +1152,13 @@ void refresh_on_vs(struct vframe_s *vf)
|
||||
}
|
||||
EXPORT_SYMBOL(refresh_on_vs);
|
||||
|
||||
static irqreturn_t amvecm_viu2_vsync_isr(int irq, void *dev_id)
|
||||
{
|
||||
if (vpp_get_encl_viu_mux() == 2)
|
||||
ve_lcd_gamma_process();
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int amvecm_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct amvecm_dev_s *devp;
|
||||
@@ -5875,6 +5884,9 @@ static void aml_vecm_dt_parse(struct platform_device *pdev)
|
||||
else
|
||||
amcm_disable();
|
||||
/* WRITE_VPP_REG_BITS(VPP_MISC, cm_en, 28, 1); */
|
||||
|
||||
res_viu2_vsync_irq =
|
||||
platform_get_resource_byname(pdev, IORESOURCE_IRQ, "vsync2");
|
||||
}
|
||||
|
||||
#ifdef CONFIG_AMLOGIC_LCD
|
||||
@@ -5885,9 +5897,9 @@ static int aml_lcd_gamma_notifier(struct notifier_block *nb,
|
||||
return NOTIFY_DONE;
|
||||
|
||||
#if 0
|
||||
vpp_set_lcd_gamma_table(video_gamma_table_r.data, H_SEL_R);
|
||||
vpp_set_lcd_gamma_table(video_gamma_table_g.data, H_SEL_G);
|
||||
vpp_set_lcd_gamma_table(video_gamma_table_b.data, H_SEL_B);
|
||||
amve_write_gamma_table(video_gamma_table_r.data, H_SEL_R);
|
||||
amve_write_gamma_table(video_gamma_table_g.data, H_SEL_G);
|
||||
amve_write_gamma_table(video_gamma_table_b.data, H_SEL_B);
|
||||
#else
|
||||
vecm_latch_flag |= FLAG_GAMMA_TABLE_R;
|
||||
vecm_latch_flag |= FLAG_GAMMA_TABLE_G;
|
||||
@@ -5906,6 +5918,21 @@ static struct notifier_block vlock_notifier_nb = {
|
||||
.notifier_call = vlock_notify_callback,
|
||||
};
|
||||
|
||||
static int aml_vecm_viu2_vsync_irq_init(void)
|
||||
{
|
||||
if (res_viu2_vsync_irq) {
|
||||
if (request_irq(res_viu2_vsync_irq->start,
|
||||
amvecm_viu2_vsync_isr, IRQF_SHARED,
|
||||
"amvecm_vsync2", (void *)"amvecm_vsync2")) {
|
||||
pr_err("can't request amvecm_vsync2_irq\n");
|
||||
} else {
|
||||
pr_info("request amvecm_vsync2_irq successful\n");
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int aml_vecm_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -5980,6 +6007,8 @@ static int aml_vecm_probe(struct platform_device *pdev)
|
||||
hdr_init(&amvecm_dev.hdr_d);
|
||||
aml_vecm_dt_parse(pdev);
|
||||
|
||||
aml_vecm_viu2_vsync_irq_init();
|
||||
|
||||
probe_ok = 1;
|
||||
pr_info("%s: ok\n", __func__);
|
||||
return 0;
|
||||
@@ -6009,6 +6038,11 @@ static int __exit aml_vecm_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct amvecm_dev_s *devp = &amvecm_dev;
|
||||
|
||||
if (res_viu2_vsync_irq) {
|
||||
free_irq(res_viu2_vsync_irq->start,
|
||||
(void *)"amvecm_vsync2");
|
||||
}
|
||||
|
||||
hdr_exit();
|
||||
device_destroy(devp->clsp, devp->devno);
|
||||
cdev_del(&devp->cdev);
|
||||
|
||||
Reference in New Issue
Block a user