diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 246d6883fbf7..162cc58c7b8f 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -623,8 +623,61 @@ static struct panel_simple *panel_simple_probe(struct device *dev) if (IS_ERR(desc)) return ERR_CAST(desc); + connector_type = desc->connector_type; + /* Catch common mistakes for panels. */ + switch (connector_type) { + case 0: + dev_warn(dev, "Specify missing connector_type\n"); + connector_type = DRM_MODE_CONNECTOR_DPI; + break; + case DRM_MODE_CONNECTOR_LVDS: + WARN_ON(desc->bus_flags & + ~(DRM_BUS_FLAG_DE_LOW | + DRM_BUS_FLAG_DE_HIGH | + DRM_BUS_FLAG_DATA_MSB_TO_LSB | + DRM_BUS_FLAG_DATA_LSB_TO_MSB)); + WARN_ON(desc->bus_format != MEDIA_BUS_FMT_RGB666_1X7X3_SPWG && + desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_SPWG && + desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA); + WARN_ON(desc->bus_format == MEDIA_BUS_FMT_RGB666_1X7X3_SPWG && + desc->bpc != 6); + WARN_ON((desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_SPWG || + desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA) && + desc->bpc != 8); + break; + case DRM_MODE_CONNECTOR_eDP: + dev_warn(dev, "eDP panels moved to panel-edp\n"); + return ERR_PTR(-EINVAL); + case DRM_MODE_CONNECTOR_DSI: + if (desc->bpc != 6 && desc->bpc != 8) + dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc); + break; + case DRM_MODE_CONNECTOR_DPI: + bus_flags = DRM_BUS_FLAG_DE_LOW | + DRM_BUS_FLAG_DE_HIGH | + DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE | + DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE | + DRM_BUS_FLAG_DATA_MSB_TO_LSB | + DRM_BUS_FLAG_DATA_LSB_TO_MSB | + DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE | + DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE; + if (desc->bus_flags & ~bus_flags) + dev_warn(dev, "Unexpected bus_flags(%d)\n", desc->bus_flags & ~bus_flags); + if (!(desc->bus_flags & bus_flags)) + dev_warn(dev, "Specify missing bus_flags\n"); + if (desc->bus_format == 0) + dev_warn(dev, "Specify missing bus_format\n"); + if (desc->bpc != 6 && desc->bpc != 8) + dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc); + break; + default: + dev_warn(dev, "Specify a valid connector_type: %d\n", desc->connector_type); + connector_type = DRM_MODE_CONNECTOR_DPI; + break; + } + panel = devm_drm_panel_alloc(dev, struct panel_simple, base, - &panel_simple_funcs, desc->connector_type); + &panel_simple_funcs, connector_type); if (IS_ERR(panel)) return ERR_CAST(panel); @@ -666,60 +719,6 @@ static struct panel_simple *panel_simple_probe(struct device *dev) goto free_ddc; } - connector_type = desc->connector_type; - /* Catch common mistakes for panels. */ - switch (connector_type) { - case 0: - dev_warn(dev, "Specify missing connector_type\n"); - connector_type = DRM_MODE_CONNECTOR_DPI; - break; - case DRM_MODE_CONNECTOR_LVDS: - WARN_ON(desc->bus_flags & - ~(DRM_BUS_FLAG_DE_LOW | - DRM_BUS_FLAG_DE_HIGH | - DRM_BUS_FLAG_DATA_MSB_TO_LSB | - DRM_BUS_FLAG_DATA_LSB_TO_MSB)); - WARN_ON(desc->bus_format != MEDIA_BUS_FMT_RGB666_1X7X3_SPWG && - desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_SPWG && - desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA); - WARN_ON(desc->bus_format == MEDIA_BUS_FMT_RGB666_1X7X3_SPWG && - desc->bpc != 6); - WARN_ON((desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_SPWG || - desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA) && - desc->bpc != 8); - break; - case DRM_MODE_CONNECTOR_eDP: - dev_warn(dev, "eDP panels moved to panel-edp\n"); - err = -EINVAL; - goto free_ddc; - case DRM_MODE_CONNECTOR_DSI: - if (desc->bpc != 6 && desc->bpc != 8) - dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc); - break; - case DRM_MODE_CONNECTOR_DPI: - bus_flags = DRM_BUS_FLAG_DE_LOW | - DRM_BUS_FLAG_DE_HIGH | - DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE | - DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE | - DRM_BUS_FLAG_DATA_MSB_TO_LSB | - DRM_BUS_FLAG_DATA_LSB_TO_MSB | - DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE | - DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE; - if (desc->bus_flags & ~bus_flags) - dev_warn(dev, "Unexpected bus_flags(%d)\n", desc->bus_flags & ~bus_flags); - if (!(desc->bus_flags & bus_flags)) - dev_warn(dev, "Specify missing bus_flags\n"); - if (desc->bus_format == 0) - dev_warn(dev, "Specify missing bus_format\n"); - if (desc->bpc != 6 && desc->bpc != 8) - dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc); - break; - default: - dev_warn(dev, "Specify a valid connector_type: %d\n", desc->connector_type); - connector_type = DRM_MODE_CONNECTOR_DPI; - break; - } - dev_set_drvdata(dev, panel); /*