diff options
Diffstat (limited to 'drivers/gpu/drm/tests/drm_connector_test.c')
| -rw-r--r-- | drivers/gpu/drm/tests/drm_connector_test.c | 60 | 
1 files changed, 60 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/tests/drm_connector_test.c b/drivers/gpu/drm/tests/drm_connector_test.c index 6bba97d0be88..3d48d676e001 100644 --- a/drivers/gpu/drm/tests/drm_connector_test.c +++ b/drivers/gpu/drm/tests/drm_connector_test.c @@ -635,6 +635,64 @@ static void drm_test_connector_hdmi_init_formats_no_rgb(struct kunit *test)  	KUNIT_EXPECT_LT(test, ret, 0);  } +struct drm_connector_hdmi_init_formats_yuv420_allowed_test { +	unsigned long supported_formats; +	bool yuv420_allowed; +	int expected_result; +}; + +#define YUV420_ALLOWED_TEST(_formats, _allowed, _result)			\ +	{									\ +		.supported_formats = BIT(HDMI_COLORSPACE_RGB) | (_formats),	\ +		.yuv420_allowed = _allowed,					\ +		.expected_result = _result,					\ +	} + +static const struct drm_connector_hdmi_init_formats_yuv420_allowed_test +drm_connector_hdmi_init_formats_yuv420_allowed_tests[] = { +	YUV420_ALLOWED_TEST(BIT(HDMI_COLORSPACE_YUV420), true, 0), +	YUV420_ALLOWED_TEST(BIT(HDMI_COLORSPACE_YUV420), false, -EINVAL), +	YUV420_ALLOWED_TEST(BIT(HDMI_COLORSPACE_YUV422), true, -EINVAL), +	YUV420_ALLOWED_TEST(BIT(HDMI_COLORSPACE_YUV422), false, 0), +}; + +static void +drm_connector_hdmi_init_formats_yuv420_allowed_desc(const struct drm_connector_hdmi_init_formats_yuv420_allowed_test *t, +						    char *desc) +{ +	sprintf(desc, "supported_formats=0x%lx yuv420_allowed=%d", +		t->supported_formats, t->yuv420_allowed); +} + +KUNIT_ARRAY_PARAM(drm_connector_hdmi_init_formats_yuv420_allowed, +		  drm_connector_hdmi_init_formats_yuv420_allowed_tests, +		  drm_connector_hdmi_init_formats_yuv420_allowed_desc); + +/* + * Test that the registration of an HDMI connector succeeds only when + * the presence of YUV420 in the supported formats matches the value + * of the ycbcr_420_allowed flag. + */ +static void drm_test_connector_hdmi_init_formats_yuv420_allowed(struct kunit *test) +{ +	const struct drm_connector_hdmi_init_formats_yuv420_allowed_test *params; +	struct drm_connector_init_priv *priv = test->priv; +	int ret; + +	params = test->param_value; +	priv->connector.ycbcr_420_allowed = params->yuv420_allowed; + +	ret = drmm_connector_hdmi_init(&priv->drm, &priv->connector, +				       "Vendor", "Product", +				       &dummy_funcs, +				       &dummy_hdmi_funcs, +				       DRM_MODE_CONNECTOR_HDMIA, +				       &priv->ddc, +				       params->supported_formats, +				       8); +	KUNIT_EXPECT_EQ(test, ret, params->expected_result); +} +  /*   * Test that the registration of an HDMI connector with an HDMI   * connector type succeeds. @@ -726,6 +784,8 @@ static struct kunit_case drmm_connector_hdmi_init_tests[] = {  	KUNIT_CASE(drm_test_connector_hdmi_init_bpc_null),  	KUNIT_CASE(drm_test_connector_hdmi_init_formats_empty),  	KUNIT_CASE(drm_test_connector_hdmi_init_formats_no_rgb), +	KUNIT_CASE_PARAM(drm_test_connector_hdmi_init_formats_yuv420_allowed, +			 drm_connector_hdmi_init_formats_yuv420_allowed_gen_params),  	KUNIT_CASE(drm_test_connector_hdmi_init_null_ddc),  	KUNIT_CASE(drm_test_connector_hdmi_init_null_product),  	KUNIT_CASE(drm_test_connector_hdmi_init_null_vendor), | 
