]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/vc4: hdmi: Remove redundant variables
authorMaxime Ripard <maxime@cerno.tech>
Wed, 7 Jul 2021 09:36:31 +0000 (11:36 +0200)
committerMaxime Ripard <maxime@cerno.tech>
Thu, 29 Jul 2021 08:41:16 +0000 (10:41 +0200)
The vc4_hdmi_audio_prepare function and the functions it's calling have
in several occurences multiple dereferences of either the sample rate or
the number of channels.

It turns out that these variables are also passed through the hdmi codec
parameters structure. Convert all the users to use this structure, and
if it's used multiple times use a variable to store it instead of
dereferencing it every time.

Reviewed-by: Nicolas Saenz Julienne <nsaenz@kernel.org>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20210707093632.1468127-1-maxime@cerno.tech
drivers/gpu/drm/vc4/vc4_hdmi.c
drivers/gpu/drm/vc4/vc4_hdmi.h

index b20530cf6a238880c7cf13b5723ff95e09b758c6..8321238b3fe7cf9f4b7d6c271fe1084c04b0b069 100644 (file)
@@ -1184,12 +1184,13 @@ static u32 vc5_hdmi_channel_map(struct vc4_hdmi *vc4_hdmi, u32 channel_mask)
 }
 
 /* HDMI audio codec callbacks */
-static void vc4_hdmi_audio_set_mai_clock(struct vc4_hdmi *vc4_hdmi)
+static void vc4_hdmi_audio_set_mai_clock(struct vc4_hdmi *vc4_hdmi,
+                                        unsigned int samplerate)
 {
        u32 hsm_clock = clk_get_rate(vc4_hdmi->audio_clock);
        unsigned long n, m;
 
-       rational_best_approximation(hsm_clock, vc4_hdmi->audio.samplerate,
+       rational_best_approximation(hsm_clock, samplerate,
                                    VC4_HD_MAI_SMP_N_MASK >>
                                    VC4_HD_MAI_SMP_N_SHIFT,
                                    (VC4_HD_MAI_SMP_M_MASK >>
@@ -1201,12 +1202,11 @@ static void vc4_hdmi_audio_set_mai_clock(struct vc4_hdmi *vc4_hdmi)
                   VC4_SET_FIELD(m - 1, VC4_HD_MAI_SMP_M));
 }
 
-static void vc4_hdmi_set_n_cts(struct vc4_hdmi *vc4_hdmi)
+static void vc4_hdmi_set_n_cts(struct vc4_hdmi *vc4_hdmi, unsigned int samplerate)
 {
        struct drm_connector *connector = &vc4_hdmi->connector;
        struct drm_crtc *crtc = connector->state->crtc;
        const struct drm_display_mode *mode = &crtc->state->adjusted_mode;
-       u32 samplerate = vc4_hdmi->audio.samplerate;
        u32 n, cts;
        u64 tmp;
 
@@ -1340,27 +1340,25 @@ static int vc4_hdmi_audio_prepare(struct device *dev, void *data,
 {
        struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
        struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
+       unsigned int sample_rate = params->sample_rate;
+       unsigned int channels = params->channels;
        u32 audio_packet_config, channel_mask;
        u32 channel_map;
        u32 mai_audio_format;
        u32 mai_sample_rate;
 
        dev_dbg(dev, "%s: %u Hz, %d bit, %d channels\n", __func__,
-               params->sample_rate, params->sample_width,
-               params->channels);
-
-       vc4_hdmi->audio.channels = params->channels;
-       vc4_hdmi->audio.samplerate = params->sample_rate;
+               sample_rate, params->sample_width, channels);
 
        HDMI_WRITE(HDMI_MAI_CTL,
-                  VC4_SET_FIELD(params->channels, VC4_HD_MAI_CTL_CHNUM) |
+                  VC4_SET_FIELD(channels, VC4_HD_MAI_CTL_CHNUM) |
                   VC4_HD_MAI_CTL_WHOLSMP |
                   VC4_HD_MAI_CTL_CHALIGN |
                   VC4_HD_MAI_CTL_ENABLE);
 
-       vc4_hdmi_audio_set_mai_clock(vc4_hdmi);
+       vc4_hdmi_audio_set_mai_clock(vc4_hdmi, sample_rate);
 
-       mai_sample_rate = sample_rate_to_mai_fmt(vc4_hdmi->audio.samplerate);
+       mai_sample_rate = sample_rate_to_mai_fmt(sample_rate);
        if (params->iec.status[0] & IEC958_AES0_NONAUDIO &&
            params->channels == 8)
                mai_audio_format = VC4_HDMI_MAI_FORMAT_HBR;
@@ -1378,7 +1376,7 @@ static int vc4_hdmi_audio_prepare(struct device *dev, void *data,
                VC4_HDMI_AUDIO_PACKET_ZERO_DATA_ON_INACTIVE_CHANNELS |
                VC4_SET_FIELD(0x8, VC4_HDMI_AUDIO_PACKET_B_FRAME_IDENTIFIER);
 
-       channel_mask = GENMASK(vc4_hdmi->audio.channels - 1, 0);
+       channel_mask = GENMASK(channels - 1, 0);
        audio_packet_config |= VC4_SET_FIELD(channel_mask,
                                             VC4_HDMI_AUDIO_PACKET_CEA_MASK);
 
@@ -1397,7 +1395,7 @@ static int vc4_hdmi_audio_prepare(struct device *dev, void *data,
        channel_map = vc4_hdmi->variant->channel_map(vc4_hdmi, channel_mask);
        HDMI_WRITE(HDMI_MAI_CHANNEL_MAP, channel_map);
        HDMI_WRITE(HDMI_AUDIO_PACKET_CONFIG, audio_packet_config);
-       vc4_hdmi_set_n_cts(vc4_hdmi);
+       vc4_hdmi_set_n_cts(vc4_hdmi, sample_rate);
 
        memcpy(&vc4_hdmi->audio.infoframe, &params->cea, sizeof(params->cea));
        vc4_hdmi_set_audio_infoframe(encoder);
index b6697b695f71744922f6eba0039a07c0d649a1fe..33e9f665ab8e42fe473f06587515caeb9382f566 100644 (file)
@@ -111,8 +111,6 @@ struct vc4_hdmi_audio {
        struct snd_soc_dai_link_component cpu;
        struct snd_soc_dai_link_component codec;
        struct snd_soc_dai_link_component platform;
-       int samplerate;
-       int channels;
        struct snd_dmaengine_dai_dma_data dma_data;
        struct hdmi_audio_infoframe infoframe;
        bool streaming;