Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/bridge: adv7511: use update latch for AVI infoframes

Instead of disabling and then reenabling AVI infoframe, use the
recommended way of updating it on the fly: latch current values using
the ADV7511_REG_INFOFRAME_UPDATE register.

Acked-by: Maxime Ripard <mripard@kernel.org>
Link: https://lore.kernel.org/r/20250903-adv7511-audio-infoframe-v1-1-05b24459b9a4@oss.qualcomm.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>

+13 -2
+13 -2
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
··· 916 916 { 917 917 struct adv7511 *adv7511 = bridge_to_adv7511(bridge); 918 918 919 - adv7511_bridge_hdmi_clear_infoframe(bridge, type); 920 - 921 919 switch (type) { 922 920 case HDMI_INFOFRAME_TYPE_AVI: 921 + /* send current AVI infoframe values while updating */ 922 + regmap_update_bits(adv7511->regmap, ADV7511_REG_INFOFRAME_UPDATE, 923 + BIT(6), BIT(6)); 924 + 923 925 /* The AVI infoframe id is not configurable */ 924 926 regmap_bulk_write(adv7511->regmap, ADV7511_REG_AVI_INFOFRAME_VERSION, 925 927 buffer + 1, len - 1); 926 928 929 + regmap_write(adv7511->regmap, ADV7511_REG_AUDIO_INFOFRAME_LENGTH, 0x2); 930 + regmap_write(adv7511->regmap, ADV7511_REG_AUDIO_INFOFRAME(1), 0x1); 931 + 932 + /* use AVI infoframe updated info */ 933 + regmap_update_bits(adv7511->regmap, ADV7511_REG_INFOFRAME_UPDATE, 934 + BIT(6), 0); 935 + 927 936 adv7511_packet_enable(adv7511, ADV7511_PACKET_ENABLE_AVI_INFOFRAME); 928 937 break; 929 938 case HDMI_INFOFRAME_TYPE_SPD: 939 + adv7511_packet_disable(adv7511, ADV7511_PACKET_ENABLE_SPD); 930 940 regmap_bulk_write(adv7511->regmap_packet, ADV7511_PACKET_SPD(0), 931 941 buffer, len); 932 942 adv7511_packet_enable(adv7511, ADV7511_PACKET_ENABLE_SPD); 933 943 break; 934 944 case HDMI_INFOFRAME_TYPE_VENDOR: 945 + adv7511_packet_disable(adv7511, ADV7511_PACKET_ENABLE_SPARE1); 935 946 regmap_bulk_write(adv7511->regmap_packet, ADV7511_PACKET_SPARE1(0), 936 947 buffer, len); 937 948 adv7511_packet_enable(adv7511, ADV7511_PACKET_ENABLE_SPARE1);