media: cec: add support for Absolute Volume Control
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Tue, 30 Aug 2022 10:37:24 +0000 (12:37 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sat, 24 Sep 2022 06:50:04 +0000 (08:50 +0200)
Add support for this new CEC message. This was added in HDMI 2.1a.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Documentation/userspace-api/media/cec.h.rst.exceptions
drivers/media/cec/core/cec-adap.c
include/uapi/linux/cec-funcs.h
include/uapi/linux/cec.h

index 13de01d9555eb555501d485aaee2952764888284..15fa1752d4ef8df72e4498d170f2731c68ed46cc 100644 (file)
@@ -239,6 +239,7 @@ ignore define CEC_OP_FEAT_DEV_HAS_DECK_CONTROL
 ignore define CEC_OP_FEAT_DEV_HAS_SET_AUDIO_RATE
 ignore define CEC_OP_FEAT_DEV_SINK_HAS_ARC_TX
 ignore define CEC_OP_FEAT_DEV_SOURCE_HAS_ARC_RX
+ignore define CEC_OP_FEAT_DEV_HAS_SET_AUDIO_VOLUME_LEVEL
 
 ignore define CEC_MSG_GIVE_FEATURES
 
@@ -487,6 +488,7 @@ ignore define CEC_OP_SYS_AUD_STATUS_ON
 
 ignore define CEC_MSG_SYSTEM_AUDIO_MODE_REQUEST
 ignore define CEC_MSG_SYSTEM_AUDIO_MODE_STATUS
+ignore define CEC_MSG_SET_AUDIO_VOLUME_LEVEL
 
 ignore define CEC_OP_AUD_FMT_ID_CEA861
 ignore define CEC_OP_AUD_FMT_ID_CEA861_CXT
index 41a79293ee02dccc2e3891b0d0bd8527968958cd..4f5ab3cae8a71dbbf8b4b8b2b8eaa40ac4d5b61b 100644 (file)
@@ -1027,6 +1027,7 @@ static const u8 cec_msg_size[256] = {
        [CEC_MSG_REPORT_SHORT_AUDIO_DESCRIPTOR] = 2 | DIRECTED,
        [CEC_MSG_REQUEST_SHORT_AUDIO_DESCRIPTOR] = 2 | DIRECTED,
        [CEC_MSG_SET_SYSTEM_AUDIO_MODE] = 3 | BOTH,
+       [CEC_MSG_SET_AUDIO_VOLUME_LEVEL] = 3 | DIRECTED,
        [CEC_MSG_SYSTEM_AUDIO_MODE_REQUEST] = 2 | DIRECTED,
        [CEC_MSG_SYSTEM_AUDIO_MODE_STATUS] = 3 | DIRECTED,
        [CEC_MSG_SET_AUDIO_RATE] = 3 | DIRECTED,
index c3baaea0b8ef6024518f2eb4c729d02975e8af48..d58fa1cdcb084e960c49e31cc632c01864e0bc88 100644 (file)
@@ -1568,6 +1568,20 @@ static inline void cec_ops_request_short_audio_descriptor(const struct cec_msg *
        }
 }
 
+static inline void cec_msg_set_audio_volume_level(struct cec_msg *msg,
+                                                 __u8 audio_volume_level)
+{
+       msg->len = 3;
+       msg->msg[1] = CEC_MSG_SET_AUDIO_VOLUME_LEVEL;
+       msg->msg[2] = audio_volume_level;
+}
+
+static inline void cec_ops_set_audio_volume_level(const struct cec_msg *msg,
+                                                 __u8 *audio_volume_level)
+{
+       *audio_volume_level = msg->msg[2];
+}
+
 
 /* Audio Rate Control Feature */
 static inline void cec_msg_set_audio_rate(struct cec_msg *msg,
index 1d48da92621637f1cb86bdf1779d2d535ae6194f..b8e071abaea5acfa6d2fde13bb1ec6fb286fc1a0 100644 (file)
@@ -768,6 +768,7 @@ struct cec_event {
 #define CEC_OP_FEAT_DEV_HAS_SET_AUDIO_RATE             0x08
 #define CEC_OP_FEAT_DEV_SINK_HAS_ARC_TX                        0x04
 #define CEC_OP_FEAT_DEV_SOURCE_HAS_ARC_RX              0x02
+#define CEC_OP_FEAT_DEV_HAS_SET_AUDIO_VOLUME_LEVEL     0x01
 
 #define CEC_MSG_GIVE_FEATURES                          0xa5    /* HDMI 2.0 */
 
@@ -1059,6 +1060,7 @@ struct cec_event {
 #define CEC_OP_AUD_FMT_ID_CEA861                       0
 #define CEC_OP_AUD_FMT_ID_CEA861_CXT                   1
 
+#define CEC_MSG_SET_AUDIO_VOLUME_LEVEL                 0x73
 
 /* Audio Rate Control Feature */
 #define CEC_MSG_SET_AUDIO_RATE                         0x9a