milan-avb: using pull and frequency as a union

This commit is contained in:
hackerman-kl 2026-01-08 17:58:29 +01:00 committed by Wim Taymans
parent e7f1a8f55d
commit f70fc7ea28
3 changed files with 21 additions and 8 deletions

View file

@ -94,7 +94,12 @@ struct avb_aem_desc_configuration {
struct avb_aem_desc_descriptor_count descriptor_counts[0];
} __attribute__ ((__packed__));
struct avb_aem_desc_sampling_rate {
union avb_aem_desc_sampling_rate {
struct {
uint32_t frequency:29;
uint32_t pull:3;
};
uint32_t pull_frequency;
} __attribute__ ((__packed__));
@ -134,10 +139,10 @@ struct avb_aem_desc_audio_unit {
uint16_t base_transcoder;
uint16_t number_of_control_blocks;
uint16_t base_control_block;
uint32_t current_sampling_rate;
union avb_aem_desc_sampling_rate current_sampling_rate;
uint16_t sampling_rates_offset;
uint16_t sampling_rates_count;
struct avb_aem_desc_sampling_rate sampling_rates[0];
union avb_aem_desc_sampling_rate sampling_rates[0];
} __attribute__ ((__packed__));
/* IEEE 1722.1-2021, Table 7-28 - AUDIO_CLUSTER format values */

View file

@ -104,10 +104,18 @@ struct avb_packet_aecp_aem_setget_association_id {
uint64_t association_id;
} __attribute__ ((__packed__));
union avb_packet_aecp_aem_pull_frequency {
struct {
uint32_t frequency:29;
uint32_t pull:3;
};
uint32_t pull_frequency;
}__attribute__ ((__packed__));
struct avb_packet_aecp_aem_setget_sampling_rate {
uint16_t descriptor_type;
uint16_t descriptor_id;
uint32_t sampling_rate;
union avb_packet_aecp_aem_pull_frequency sampling_rate;
} __attribute__ ((__packed__));
struct avb_packet_aecp_aem_setget_clock_source {

View file

@ -94,7 +94,7 @@ static void init_descriptor_legacy_avb(struct server *server)
struct {
struct avb_aem_desc_audio_unit desc;
struct avb_aem_desc_sampling_rate sampling_rates[6];
union avb_aem_desc_sampling_rate sampling_rates[6];
} __attribute__ ((__packed__)) audio_unit =
{
{
@ -133,7 +133,7 @@ static void init_descriptor_legacy_avb(struct server *server)
.base_transcoder = htons(0),
.number_of_control_blocks = htons(0),
.base_control_block = htons(0),
.current_sampling_rate = htonl(48000),
.current_sampling_rate.pull_frequency = htonl(48000),
.sampling_rates_offset = htons(
4 + sizeof(struct avb_aem_desc_audio_unit)),
.sampling_rates_count = htons(6),
@ -541,7 +541,7 @@ static void init_descriptor_milan_v12(struct server *server)
struct {
struct avb_aem_desc_audio_unit desc;
struct avb_aem_desc_sampling_rate sampling_rates[DSC_AUDIO_UNIT_SUPPORTED_SAMPLING_RATE_COUNT];
union avb_aem_desc_sampling_rate sampling_rates[DSC_AUDIO_UNIT_SUPPORTED_SAMPLING_RATE_COUNT];
} __attribute__ ((__packed__)) audio_unit =
{
{
@ -580,7 +580,7 @@ static void init_descriptor_milan_v12(struct server *server)
.base_transcoder = htons(DSC_AUDIO_UNIT_BASE_TRANSCODER),
.number_of_control_blocks = htons(DSC_AUDIO_UNIT_NUMBER_OF_CONTROL_BLOCKS),
.base_control_block = htons(DSC_AUDIO_UNIT_BASE_CONTROL_BLOCK),
.current_sampling_rate = htonl(DSC_AUDIO_UNIT_CURRENT_SAMPLING_RATE_IN_HZ),
.current_sampling_rate.pull_frequency = htonl(DSC_AUDIO_UNIT_CURRENT_SAMPLING_RATE_IN_HZ),
.sampling_rates_offset = htons(DSC_AUDIO_UNIT_SAMPLING_RATES_OFFSET),
.sampling_rates_count = htons(DSC_AUDIO_UNIT_SUPPORTED_SAMPLING_RATE_COUNT),
},