On 8/20/26 2:24 PM, Maxime Ripard wrote:
> On Fri, Jul 31, 2026 at 07:19:52PM +0300, Cristian Ciocaltea wrote:
>> Replace driver local scrambling logic with the newly introduced common
>> HDMI 2.0 scrambling support:
>>
>> - Advertise source-side scrambling capability by setting supported HDMI
>>   version based on the variant's max_pixel_clock.
>>
>> - Provide minimal .scrambler_{enable,disable} connector callbacks that
>>   only toggle the VC5 HDMI_SCRAMBLER_CTL register, while delegating
>>   sink-side SCDC programming and periodic status monitoring to
>>   drm_connector_hdmi_{enable,disable}_scrambling().
>>
>> - Drop vc4_hdmi_reset_link() and vc4_hdmi_handle_hotplug(), switching
>>   the .detect_ctx() path to drm_atomic_helper_connector_hdmi_hotplug()
>>   which internally calls drm_connector_hdmi_sync_scdc() to trigger a
>>   CRTC reset on reconnection.
>>
>> - Drop the local scrambling_work delayed workqueue and scdc_enabled
>>   flag, now tracked by the common drm_connector_hdmi layer, as well as
>>   the now unused output_{bpc,color_format} driver data members.
>>
>> No functional change intended.
>>
>> Signed-off-by: Cristian Ciocaltea <[email protected]>
>> ---

[...]

>> +static int vc4_hdmi_scrambler_enable(struct drm_connector *connector)
>>  {
>> -    struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
>> -    struct drm_connector *connector = &vc4_hdmi->connector;
>> +    struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector);
>>      struct drm_device *drm = connector->dev;
>> -    const struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
>>      unsigned long flags;
>>      int idx;
>>  
>> -    lockdep_assert_held(&vc4_hdmi->mutex);
>> -
>> -    if (!vc4_hdmi_supports_scrambling(vc4_hdmi))
>> -            return;
>> -
>> -    if (!drm_hdmi_mode_needs_scrambling(mode,
>> -                                        vc4_hdmi->output_bpc,
>> -                                        vc4_hdmi->output_format))
>> -            return;
>> -
>>      if (!drm_dev_enter(drm, &idx))
>> -            return;
>> -
>> -    drm_scdc_set_high_tmds_clock_ratio(connector, true);
>> -    drm_scdc_set_scrambling(connector, true);
>> +            return -ENODEV;
> 
> Not being able to acquire the device isn't an error, it's something we should 
> ignore.

Ack, will return 0 in both cases.

> 
>>  
>>      spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
>>      HDMI_WRITE(HDMI_SCRAMBLER_CTL, HDMI_READ(HDMI_SCRAMBLER_CTL) |
>> @@ -793,59 +659,27 @@ static void vc4_hdmi_enable_scrambling(struct 
>> drm_encoder *encoder)
>>  
>>      drm_dev_exit(idx);
>>  
>> -    vc4_hdmi->scdc_enabled = true;
>> -
>> -    queue_delayed_work(system_percpu_wq, &vc4_hdmi->scrambling_work,
>> -                       msecs_to_jiffies(SCRAMBLING_POLLING_DELAY_MS));
>> +    return 0;
>>  }
>>  
>> -static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
>> +static int vc4_hdmi_scrambler_disable(struct drm_connector *connector)
>>  {
>> -    struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
>> -    struct drm_connector *connector = &vc4_hdmi->connector;
>> +    struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector);
>>      struct drm_device *drm = connector->dev;
>>      unsigned long flags;
>>      int idx;
>>  
>> -    lockdep_assert_held(&vc4_hdmi->mutex);
>> -
>> -    if (!vc4_hdmi->scdc_enabled)
>> -            return;
>> -
>> -    vc4_hdmi->scdc_enabled = false;
>> -
>> -    if (delayed_work_pending(&vc4_hdmi->scrambling_work))
>> -            cancel_delayed_work_sync(&vc4_hdmi->scrambling_work);
>> -
>>      if (!drm_dev_enter(drm, &idx))
>> -            return;
>> +            return -ENODEV;
> 
> Ditto
> 
> Maxime

Reply via email to