[PATCH v6 22/24] drm/amdgpu: Provide ddc symlink in connector sysfs directory

Alex Deucher alexdeucher at gmail.com
Fri Jul 26 19:28:42 UTC 2019


On Fri, Jul 26, 2019 at 1:28 PM Andrzej Pietrasiewicz
<andrzej.p at collabora.com> wrote:
>
> Use the ddc pointer provided by the generic connector.
>
> Signed-off-by: Andrzej Pietrasiewicz <andrzej.p at collabora.com>

Note that this only covers the legacy display code.  The new DC
display code also needs to be converted.  See:
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
With those updated as well:
Acked-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  .../gpu/drm/amd/amdgpu/amdgpu_connectors.c    | 96 ++++++++++++++-----
>  1 file changed, 70 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> index 73b2ede773d3..ece55c8fa673 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> @@ -1505,6 +1505,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>         struct amdgpu_connector_atom_dig *amdgpu_dig_connector;
>         struct drm_encoder *encoder;
>         struct amdgpu_encoder *amdgpu_encoder;
> +       struct i2c_adapter *ddc = NULL;
>         uint32_t subpixel_order = SubPixelNone;
>         bool shared_ddc = false;
>         bool is_dp_bridge = false;
> @@ -1574,17 +1575,21 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>                 amdgpu_connector->con_priv = amdgpu_dig_connector;
>                 if (i2c_bus->valid) {
>                         amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
> -                       if (amdgpu_connector->ddc_bus)
> +                       if (amdgpu_connector->ddc_bus) {
>                                 has_aux = true;
> -                       else
> +                               ddc = &amdgpu_connector->ddc_bus->adapter;
> +                       } else {
>                                 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
> +                       }
>                 }
>                 switch (connector_type) {
>                 case DRM_MODE_CONNECTOR_VGA:
>                 case DRM_MODE_CONNECTOR_DVIA:
>                 default:
> -                       drm_connector_init(dev, &amdgpu_connector->base,
> -                                          &amdgpu_connector_dp_funcs, connector_type);
> +                       drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
> +                                                   &amdgpu_connector_dp_funcs,
> +                                                   connector_type,
> +                                                   ddc);
>                         drm_connector_helper_add(&amdgpu_connector->base,
>                                                  &amdgpu_connector_dp_helper_funcs);
>                         connector->interlace_allowed = true;
> @@ -1602,8 +1607,10 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>                 case DRM_MODE_CONNECTOR_HDMIA:
>                 case DRM_MODE_CONNECTOR_HDMIB:
>                 case DRM_MODE_CONNECTOR_DisplayPort:
> -                       drm_connector_init(dev, &amdgpu_connector->base,
> -                                          &amdgpu_connector_dp_funcs, connector_type);
> +                       drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
> +                                                   &amdgpu_connector_dp_funcs,
> +                                                   connector_type,
> +                                                   ddc);
>                         drm_connector_helper_add(&amdgpu_connector->base,
>                                                  &amdgpu_connector_dp_helper_funcs);
>                         drm_object_attach_property(&amdgpu_connector->base.base,
> @@ -1644,8 +1651,10 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>                         break;
>                 case DRM_MODE_CONNECTOR_LVDS:
>                 case DRM_MODE_CONNECTOR_eDP:
> -                       drm_connector_init(dev, &amdgpu_connector->base,
> -                                          &amdgpu_connector_edp_funcs, connector_type);
> +                       drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
> +                                                   &amdgpu_connector_edp_funcs,
> +                                                   connector_type,
> +                                                   ddc);
>                         drm_connector_helper_add(&amdgpu_connector->base,
>                                                  &amdgpu_connector_dp_helper_funcs);
>                         drm_object_attach_property(&amdgpu_connector->base.base,
> @@ -1659,13 +1668,18 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>         } else {
>                 switch (connector_type) {
>                 case DRM_MODE_CONNECTOR_VGA:
> -                       drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_vga_funcs, connector_type);
> -                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_vga_helper_funcs);
>                         if (i2c_bus->valid) {
>                                 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
>                                 if (!amdgpu_connector->ddc_bus)
>                                         DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
> +                               else
> +                                       ddc = &amdgpu_connector->ddc_bus->adapter;
>                         }
> +                       drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
> +                                                   &amdgpu_connector_vga_funcs,
> +                                                   connector_type,
> +                                                   ddc);
> +                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_vga_helper_funcs);
>                         amdgpu_connector->dac_load_detect = true;
>                         drm_object_attach_property(&amdgpu_connector->base.base,
>                                                       adev->mode_info.load_detect_property,
> @@ -1679,13 +1693,18 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>                         connector->doublescan_allowed = true;
>                         break;
>                 case DRM_MODE_CONNECTOR_DVIA:
> -                       drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_vga_funcs, connector_type);
> -                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_vga_helper_funcs);
>                         if (i2c_bus->valid) {
>                                 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
>                                 if (!amdgpu_connector->ddc_bus)
>                                         DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
> +                               else
> +                                       ddc = &amdgpu_connector->ddc_bus->adapter;
>                         }
> +                       drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
> +                                                   &amdgpu_connector_vga_funcs,
> +                                                   connector_type,
> +                                                   ddc);
> +                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_vga_helper_funcs);
>                         amdgpu_connector->dac_load_detect = true;
>                         drm_object_attach_property(&amdgpu_connector->base.base,
>                                                       adev->mode_info.load_detect_property,
> @@ -1704,13 +1723,18 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>                         if (!amdgpu_dig_connector)
>                                 goto failed;
>                         amdgpu_connector->con_priv = amdgpu_dig_connector;
> -                       drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_dvi_funcs, connector_type);
> -                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dvi_helper_funcs);
>                         if (i2c_bus->valid) {
>                                 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
>                                 if (!amdgpu_connector->ddc_bus)
>                                         DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
> +                               else
> +                                       ddc = &amdgpu_connector->ddc_bus->adapter;
>                         }
> +                       drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
> +                                                   &amdgpu_connector_dvi_funcs,
> +                                                   connector_type,
> +                                                   ddc);
> +                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dvi_helper_funcs);
>                         subpixel_order = SubPixelHorizontalRGB;
>                         drm_object_attach_property(&amdgpu_connector->base.base,
>                                                       adev->mode_info.coherent_mode_property,
> @@ -1754,13 +1778,18 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>                         if (!amdgpu_dig_connector)
>                                 goto failed;
>                         amdgpu_connector->con_priv = amdgpu_dig_connector;
> -                       drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_dvi_funcs, connector_type);
> -                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dvi_helper_funcs);
>                         if (i2c_bus->valid) {
>                                 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
>                                 if (!amdgpu_connector->ddc_bus)
>                                         DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
> +                               else
> +                                       ddc = &amdgpu_connector->ddc_bus->adapter;
>                         }
> +                       drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
> +                                                   &amdgpu_connector_dvi_funcs,
> +                                                   connector_type,
> +                                                   ddc);
> +                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dvi_helper_funcs);
>                         drm_object_attach_property(&amdgpu_connector->base.base,
>                                                       adev->mode_info.coherent_mode_property,
>                                                       1);
> @@ -1796,15 +1825,20 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>                         if (!amdgpu_dig_connector)
>                                 goto failed;
>                         amdgpu_connector->con_priv = amdgpu_dig_connector;
> -                       drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_dp_funcs, connector_type);
> -                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dp_helper_funcs);
>                         if (i2c_bus->valid) {
>                                 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
> -                               if (amdgpu_connector->ddc_bus)
> +                               if (amdgpu_connector->ddc_bus) {
>                                         has_aux = true;
> -                               else
> +                                       ddc = &amdgpu_connector->ddc_bus->adapter;
> +                               } else {
>                                         DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
> +                               }
>                         }
> +                       drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
> +                                                   &amdgpu_connector_dp_funcs,
> +                                                   connector_type,
> +                                                   ddc);
> +                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dp_helper_funcs);
>                         subpixel_order = SubPixelHorizontalRGB;
>                         drm_object_attach_property(&amdgpu_connector->base.base,
>                                                       adev->mode_info.coherent_mode_property,
> @@ -1838,15 +1872,20 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>                         if (!amdgpu_dig_connector)
>                                 goto failed;
>                         amdgpu_connector->con_priv = amdgpu_dig_connector;
> -                       drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_edp_funcs, connector_type);
> -                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dp_helper_funcs);
>                         if (i2c_bus->valid) {
>                                 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
> -                               if (amdgpu_connector->ddc_bus)
> +                               if (amdgpu_connector->ddc_bus) {
>                                         has_aux = true;
> -                               else
> +                                       ddc = &amdgpu_connector->ddc_bus->adapter;
> +                               } else {
>                                         DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
> +                               }
>                         }
> +                       drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
> +                                                   &amdgpu_connector_edp_funcs,
> +                                                   connector_type,
> +                                                   ddc);
> +                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dp_helper_funcs);
>                         drm_object_attach_property(&amdgpu_connector->base.base,
>                                                       dev->mode_config.scaling_mode_property,
>                                                       DRM_MODE_SCALE_FULLSCREEN);
> @@ -1859,13 +1898,18 @@ amdgpu_connector_add(struct amdgpu_device *adev,
>                         if (!amdgpu_dig_connector)
>                                 goto failed;
>                         amdgpu_connector->con_priv = amdgpu_dig_connector;
> -                       drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_lvds_funcs, connector_type);
> -                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_lvds_helper_funcs);
>                         if (i2c_bus->valid) {
>                                 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
>                                 if (!amdgpu_connector->ddc_bus)
>                                         DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
> +                               else
> +                                       ddc = &amdgpu_connector->ddc_bus->adapter;
>                         }
> +                       drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
> +                                                   &amdgpu_connector_lvds_funcs,
> +                                                   connector_type,
> +                                                   ddc);
> +                       drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_lvds_helper_funcs);
>                         drm_object_attach_property(&amdgpu_connector->base.base,
>                                                       dev->mode_config.scaling_mode_property,
>                                                       DRM_MODE_SCALE_FULLSCREEN);
> --
> 2.17.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list