Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/sti: dvo: convert to devm_drm_bridge_alloc() API

This is the new API for allocating DRM bridges.

This driver allocates the DRM bridge separately from the main driver
private struct, which prevents using the new devm_drm_bridge_alloc()
API. Simplify the code by replacing the struct drm_bridge pointer with an
embedded struct drm_bridge inside the private struct, to make use of the
new API with the same code flow.

Acked-by: Maxime Ripard <mripard@kernel.org>
Link: https://lore.kernel.org/r/20250509-drm-bridge-convert-to-alloc-api-v3-16-b8bc1f16d7aa@bootlin.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>

+11 -18
+11 -18
drivers/gpu/drm/sti/sti_dvo.c
··· 97 97 struct dvo_config *config; 98 98 bool enabled; 99 99 struct drm_encoder *encoder; 100 - struct drm_bridge *bridge; 100 + struct drm_bridge bridge; 101 101 }; 102 102 103 103 struct sti_dvo_connector { ··· 439 439 struct drm_encoder *encoder; 440 440 struct sti_dvo_connector *connector; 441 441 struct drm_connector *drm_connector; 442 - struct drm_bridge *bridge; 443 442 int err; 444 443 445 444 /* Set the drm device handle */ ··· 454 455 455 456 connector->dvo = dvo; 456 457 457 - bridge = devm_kzalloc(dev, sizeof(*bridge), GFP_KERNEL); 458 - if (!bridge) 459 - return -ENOMEM; 458 + dvo->bridge.driver_private = dvo; 459 + dvo->bridge.of_node = dvo->dev.of_node; 460 + drm_bridge_add(&dvo->bridge); 460 461 461 - bridge->driver_private = dvo; 462 - bridge->funcs = &sti_dvo_bridge_funcs; 463 - bridge->of_node = dvo->dev.of_node; 464 - drm_bridge_add(bridge); 465 - 466 - err = drm_bridge_attach(encoder, bridge, NULL, 0); 462 + err = drm_bridge_attach(encoder, &dvo->bridge, NULL, 0); 467 463 if (err) 468 464 return err; 469 465 470 - dvo->bridge = bridge; 471 466 connector->encoder = encoder; 472 467 dvo->encoder = encoder; 473 468 ··· 483 490 return 0; 484 491 485 492 err_sysfs: 486 - drm_bridge_remove(bridge); 493 + drm_bridge_remove(&dvo->bridge); 487 494 return -EINVAL; 488 495 } 489 496 ··· 492 499 { 493 500 struct sti_dvo *dvo = dev_get_drvdata(dev); 494 501 495 - drm_bridge_remove(dvo->bridge); 502 + drm_bridge_remove(&dvo->bridge); 496 503 } 497 504 498 505 static const struct component_ops sti_dvo_ops = { ··· 508 515 509 516 DRM_INFO("%s\n", __func__); 510 517 511 - dvo = devm_kzalloc(dev, sizeof(*dvo), GFP_KERNEL); 512 - if (!dvo) { 513 - DRM_ERROR("Failed to allocate memory for DVO\n"); 514 - return -ENOMEM; 518 + dvo = devm_drm_bridge_alloc(dev, struct sti_dvo, bridge, &sti_dvo_bridge_funcs); 519 + if (IS_ERR(dvo)) { 520 + DRM_ERROR("Failed to allocate DVO\n"); 521 + return PTR_ERR(dvo); 515 522 } 516 523 517 524 dvo->dev = pdev->dev;