diff --git a/arch/arm/boot/dts/amlogic/g12a_s905d2_u200.dts b/arch/arm/boot/dts/amlogic/g12a_s905d2_u200.dts index d97cf2e06ca0..f3609e0f16e2 100644 --- a/arch/arm/boot/dts/amlogic/g12a_s905d2_u200.dts +++ b/arch/arm/boot/dts/amlogic/g12a_s905d2_u200.dts @@ -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 { diff --git a/arch/arm/boot/dts/amlogic/g12b_a311d_w400.dts b/arch/arm/boot/dts/amlogic/g12b_a311d_w400.dts index 97778b7a511d..dceed3ec5ab9 100644 --- a/arch/arm/boot/dts/amlogic/g12b_a311d_w400.dts +++ b/arch/arm/boot/dts/amlogic/g12b_a311d_w400.dts @@ -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"; diff --git a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts index 44d93df9490e..7b1893346d77 100644 --- a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts +++ b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts @@ -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"; diff --git a/arch/arm64/boot/dts/amlogic/g12a_s905d2_u200.dts b/arch/arm64/boot/dts/amlogic/g12a_s905d2_u200.dts index aaaa012b1da3..3f3cd8b34233 100644 --- a/arch/arm64/boot/dts/amlogic/g12a_s905d2_u200.dts +++ b/arch/arm64/boot/dts/amlogic/g12a_s905d2_u200.dts @@ -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 { diff --git a/arch/arm64/boot/dts/amlogic/g12b_a311d_w400.dts b/arch/arm64/boot/dts/amlogic/g12b_a311d_w400.dts index c1aaa8f899cc..7faddcf5b1ed 100644 --- a/arch/arm64/boot/dts/amlogic/g12b_a311d_w400.dts +++ b/arch/arm64/boot/dts/amlogic/g12b_a311d_w400.dts @@ -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"; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200.dts b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200.dts index 95e992d368e7..4c43e080287e 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200.dts @@ -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 { diff --git a/arch/arm64/boot/dts/amlogic/tl1_t962x2_t309.dts b/arch/arm64/boot/dts/amlogic/tl1_t962x2_t309.dts index 0c8977295e6e..e46211c51fc6 100644 --- a/arch/arm64/boot/dts/amlogic/tl1_t962x2_t309.dts +++ b/arch/arm64/boot/dts/amlogic/tl1_t962x2_t309.dts @@ -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"; diff --git a/drivers/amlogic/media/enhancement/amvecm/amve.c b/drivers/amlogic/media/enhancement/amvecm/amve.c index e9e8e07b772d..928c2d71ebe3 100644 --- a/drivers/amlogic/media/enhancement/amvecm/amve.c +++ b/drivers/amlogic/media/enhancement/amvecm/amve.c @@ -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)|| */ diff --git a/drivers/amlogic/media/enhancement/amvecm/amve.h b/drivers/amlogic/media/enhancement/amvecm/amve.h index d90c1e059d68..36bff3735940 100644 --- a/drivers/amlogic/media/enhancement/amvecm/amve.h +++ b/drivers/amlogic/media/enhancement/amvecm/amve.h @@ -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, diff --git a/drivers/amlogic/media/enhancement/amvecm/amvecm.c b/drivers/amlogic/media/enhancement/amvecm/amvecm.c index ce88c5f158dd..8ed6d02a3654 100644 --- a/drivers/amlogic/media/enhancement/amvecm/amvecm.c +++ b/drivers/amlogic/media/enhancement/amvecm/amvecm.c @@ -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);