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

drm: rcar-du: Simplify encoder registration

Before the driver fully moved to drm_bridge and drm_panel, it was
necessary to parse DT and locate encoder and connector nodes. The
connector node is now unused and can be removed as a parameter to
rcar_du_encoder_init(). As a consequence rcar_du_encoders_init_one() can
be greatly simplified, removing most of the DT parsing.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

+6 -52
+1 -2
drivers/gpu/drm/rcar-du/rcar_du_encoder.c
··· 30 30 31 31 int rcar_du_encoder_init(struct rcar_du_device *rcdu, 32 32 enum rcar_du_output output, 33 - struct device_node *enc_node, 34 - struct device_node *con_node) 33 + struct device_node *enc_node) 35 34 { 36 35 struct rcar_du_encoder *renc; 37 36 struct drm_encoder *encoder;
+1 -2
drivers/gpu/drm/rcar-du/rcar_du_encoder.h
··· 26 26 27 27 int rcar_du_encoder_init(struct rcar_du_device *rcdu, 28 28 enum rcar_du_output output, 29 - struct device_node *enc_node, 30 - struct device_node *con_node); 29 + struct device_node *enc_node); 31 30 32 31 #endif /* __RCAR_DU_ENCODER_H__ */
+4 -48
drivers/gpu/drm/rcar-du/rcar_du_kms.c
··· 330 330 enum rcar_du_output output, 331 331 struct of_endpoint *ep) 332 332 { 333 - struct device_node *connector = NULL; 334 - struct device_node *encoder = NULL; 335 - struct device_node *ep_node = NULL; 336 - struct device_node *entity_ep_node; 337 333 struct device_node *entity; 338 334 int ret; 339 335 340 - /* 341 - * Locate the connected entity and infer its type from the number of 342 - * endpoints. 343 - */ 336 + /* Locate the connected entity and initialize the encoder. */ 344 337 entity = of_graph_get_remote_port_parent(ep->local_node); 345 338 if (!entity) { 346 339 dev_dbg(rcdu->dev, "unconnected endpoint %pOF, skipping\n", ··· 349 356 return -ENODEV; 350 357 } 351 358 352 - entity_ep_node = of_graph_get_remote_endpoint(ep->local_node); 353 - 354 - for_each_endpoint_of_node(entity, ep_node) { 355 - if (ep_node == entity_ep_node) 356 - continue; 357 - 358 - /* 359 - * We've found one endpoint other than the input, this must 360 - * be an encoder. Locate the connector. 361 - */ 362 - encoder = entity; 363 - connector = of_graph_get_remote_port_parent(ep_node); 364 - of_node_put(ep_node); 365 - 366 - if (!connector) { 367 - dev_warn(rcdu->dev, 368 - "no connector for encoder %pOF, skipping\n", 369 - encoder); 370 - of_node_put(entity_ep_node); 371 - of_node_put(encoder); 372 - return -ENODEV; 373 - } 374 - 375 - break; 376 - } 377 - 378 - of_node_put(entity_ep_node); 379 - 380 - if (!encoder) { 381 - dev_warn(rcdu->dev, 382 - "no encoder found for endpoint %pOF, skipping\n", 383 - ep->local_node); 384 - of_node_put(entity); 385 - return -ENODEV; 386 - } 387 - 388 - ret = rcar_du_encoder_init(rcdu, output, encoder, connector); 359 + ret = rcar_du_encoder_init(rcdu, output, entity); 389 360 if (ret && ret != -EPROBE_DEFER) 390 361 dev_warn(rcdu->dev, 391 362 "failed to initialize encoder %pOF on output %u (%d), skipping\n", 392 - encoder, output, ret); 363 + entity, output, ret); 393 364 394 - of_node_put(encoder); 395 - of_node_put(connector); 365 + of_node_put(entity); 396 366 397 367 return ret; 398 368 }