Hi Cristian,

a few drive-by comments below.

        Sam


> +
> +static const struct drm_connector_funcs dw_hdmi_qp_connector_funcs = {
> +     .fill_modes = drm_helper_probe_single_connector_modes,
> +     .detect = dw_hdmi_connector_detect,
> +     .destroy = drm_connector_cleanup,
> +     .force = dw_hdmi_qp_connector_force,
> +     .reset = drm_atomic_helper_connector_reset,
> +     .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
> +     .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> +};
> +
> +static int dw_hdmi_qp_bridge_attach(struct drm_bridge *bridge,
> +                                 enum drm_bridge_attach_flags flags)
> +{
> +     struct dw_hdmi *hdmi = bridge->driver_private;
> +
> +     if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)
> +             return drm_bridge_attach(bridge->encoder, hdmi->next_bridge,
> +                                      bridge, flags);
> +
> +     return dw_hdmi_connector_create(hdmi, &dw_hdmi_qp_connector_funcs);
> +}

Are there any users left that requires the display driver to create the
connector?
In other words - could this driver fail if DRM_BRIDGE_ATTACH_NO_CONNECTOR
is not passed and drop dw_hdmi_connector_create()?

I did not try to verify this - just a naive question.

> +
> +static enum drm_mode_status
> +dw_hdmi_qp_bridge_mode_valid(struct drm_bridge *bridge,
> +                          const struct drm_display_info *info,
> +                          const struct drm_display_mode *mode)
> +{
> +     struct dw_hdmi *hdmi = bridge->driver_private;
> +     const struct dw_hdmi_plat_data *pdata = hdmi->plat_data;
> +     enum drm_mode_status mode_status = MODE_OK;
> +
> +     if (pdata->mode_valid)
> +             mode_status = pdata->mode_valid(hdmi, pdata->priv_data, info,
> +                                             mode);
> +
> +     return mode_status;
> +}
> +
> +static void dw_hdmi_qp_bridge_atomic_disable(struct drm_bridge *bridge,
> +                                          struct drm_bridge_state *old_state)
> +{
> +     struct dw_hdmi *hdmi = bridge->driver_private;
> +
> +     mutex_lock(&hdmi->mutex);
> +     hdmi->disabled = true;
> +     hdmi->curr_conn = NULL;
> +     dw_hdmi_qp_update_power(hdmi);
> +     dw_handle_plugged_change(hdmi, false);
> +     mutex_unlock(&hdmi->mutex);
> +}
> +
> +static void dw_hdmi_qp_bridge_atomic_enable(struct drm_bridge *bridge,
> +                                         struct drm_bridge_state *old_state)
> +{
> +     struct dw_hdmi *hdmi = bridge->driver_private;
> +     struct drm_atomic_state *state = old_state->base.state;
> +     struct drm_connector *connector;
> +
> +     connector = drm_atomic_get_new_connector_for_encoder(state,
> +                                                          bridge->encoder);
> +
> +     mutex_lock(&hdmi->mutex);
> +     hdmi->disabled = false;
> +     hdmi->curr_conn = connector;
> +     dw_hdmi_qp_update_power(hdmi);
> +     dw_handle_plugged_change(hdmi, true);
> +     mutex_unlock(&hdmi->mutex);
> +}
> +
> +static const struct drm_bridge_funcs dw_hdmi_qp_bridge_funcs = {
> +     .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
> +     .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
> +     .atomic_reset = drm_atomic_helper_bridge_reset,
> +     .attach = dw_hdmi_qp_bridge_attach,
> +     .detach = dw_hdmi_bridge_detach,
> +     .atomic_check = dw_hdmi_bridge_atomic_check,
> +     .atomic_enable = dw_hdmi_qp_bridge_atomic_enable,
> +     .atomic_disable = dw_hdmi_qp_bridge_atomic_disable,
> +     .mode_set = dw_hdmi_bridge_mode_set,

The use of mode_set is deprecated - see drm_bridge.h

Reply via email to