mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-10-26 10:57:38 +08:00
drm: of: move drm_of_find_panel_or_bridge() from drm_of.c to drm_panel.c
We want to move drm_panel.o from the main drm module to a new drm_panel
module, but there is one function in the drm module that calls into
drm_panel.c code:
drm_of_find_panel_or_bridge() (drm_of.c, drm module)
-> calls of_drm_find_panel (drm_panel.c, future drm_panel module)
Avoid this issue by moving drm_of_find_panel_or_bridge() to drm_panel.c.
Update Kconfig symbols of drivers calling drm_of_find_panel_or_bridge() to
select DRM_PANEL when this is not done already.
No functional changes, just moving code around.
Suggested-by: Maxime Ripard <mripard@kernel.org>
Acked-by: Maxime Ripard <mripard@kernel.org>
Link: https://patch.msgid.link/20260916-drm-bridge-every-panel-v3-1-83afb4f1a707@bootlin.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
This commit is contained in:
1 parent
139e3d9cb4
commit
bf30039e4b
15 files changed
+90
-75
No files matched your search
@@ -151,6 +151,7 @@ config DRM_LONTIUM_LT8912B
|
||||
config DRM_LONTIUM_LT9211
|
||||
tristate "Lontium LT9211 DSI/LVDS/DPI bridge"
|
||||
depends on OF
|
||||
select DRM_PANEL
|
||||
select DRM_PANEL_BRIDGE
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_MIPI_DSI
|
||||
@@ -498,6 +499,7 @@ config DRM_WAVESHARE_BRIDGE
|
||||
tristate "Waveshare DSI bridge"
|
||||
depends on OF
|
||||
depends on BACKLIGHT_CLASS_DEVICE
|
||||
select DRM_PANEL
|
||||
select DRM_PANEL_BRIDGE
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_MIPI_DSI
|
||||
|
||||
@@ -6,6 +6,7 @@ config DRM_ANALOGIX_ANX6345
|
||||
select DRM_DISPLAY_DP_HELPER
|
||||
select DRM_DISPLAY_HELPER
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_PANEL
|
||||
select REGMAP_I2C
|
||||
help
|
||||
ANX6345 is an ultra-low power Full-HD DisplayPort/eDP
|
||||
@@ -32,6 +33,7 @@ config DRM_ANALOGIX_DP
|
||||
depends on DRM
|
||||
depends on OF
|
||||
select DRM_DISPLAY_DP_AUX_BUS
|
||||
select DRM_PANEL
|
||||
|
||||
config DRM_ANALOGIX_ANX7625
|
||||
tristate "Analogix Anx7625 MIPI to DP interface support"
|
||||
|
||||
@@ -264,69 +264,6 @@ int drm_of_get_panel_orientation(const struct device_node *np,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(drm_of_get_panel_orientation);
|
||||
|
||||
/**
|
||||
* drm_of_find_panel_or_bridge - return connected panel or bridge device
|
||||
* @np: device tree node containing encoder output ports
|
||||
* @port: port in the device tree node
|
||||
* @endpoint: endpoint in the device tree node
|
||||
* @panel: pointer to hold returned drm_panel, must not be NULL. On success
|
||||
* the caller must call drm_panel_put() when done with the panel
|
||||
* @bridge: pointer to hold returned drm_bridge
|
||||
*
|
||||
* Given a DT node's port and endpoint number, find the connected node and
|
||||
* return either the associated struct drm_panel or drm_bridge device.
|
||||
*
|
||||
* This function is deprecated and should not be used in new drivers. Use
|
||||
* of_drm_get_bridge_by_endpoint() instead when not looking for a panel, or
|
||||
* devm_drm_of_get_bridge() otherwise.
|
||||
*
|
||||
* Returns zero if successful, or one of the standard error codes if it fails.
|
||||
*/
|
||||
int drm_of_find_panel_or_bridge(const struct device_node *np,
|
||||
int port, int endpoint,
|
||||
struct drm_panel **panel,
|
||||
struct drm_bridge **bridge)
|
||||
{
|
||||
if (WARN_ON(!panel))
|
||||
return -EINVAL;
|
||||
|
||||
*panel = NULL;
|
||||
if (bridge)
|
||||
*bridge = NULL;
|
||||
|
||||
/*
|
||||
* of_graph_get_remote_node() produces a noisy error message if port
|
||||
* node isn't found and the absence of the port is a legit case here,
|
||||
* so at first we silently check whether a graph is present in the
|
||||
* device-tree node.
|
||||
*/
|
||||
if (!of_graph_is_present(np))
|
||||
return -ENODEV;
|
||||
|
||||
struct device_node *remote __free(device_node) =
|
||||
of_graph_get_remote_node(np, port, endpoint);
|
||||
if (!remote)
|
||||
return -ENODEV;
|
||||
|
||||
*panel = of_drm_find_panel(remote);
|
||||
if (!IS_ERR(*panel))
|
||||
return 0;
|
||||
|
||||
*panel = NULL;
|
||||
|
||||
if (bridge) {
|
||||
/* No panel found yet, check for a bridge next. */
|
||||
*bridge = of_drm_find_bridge(remote);
|
||||
if (*bridge)
|
||||
return 0;
|
||||
|
||||
*bridge = NULL;
|
||||
}
|
||||
|
||||
return -EPROBE_DEFER;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge);
|
||||
|
||||
enum drm_of_lvds_pixels {
|
||||
DRM_OF_LVDS_EVEN = BIT(0),
|
||||
DRM_OF_LVDS_ODD = BIT(1),
|
||||
|
||||
@@ -498,6 +498,69 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np)
|
||||
return ERR_PTR(-EPROBE_DEFER);
|
||||
}
|
||||
EXPORT_SYMBOL(of_drm_find_panel);
|
||||
|
||||
/**
|
||||
* drm_of_find_panel_or_bridge - return connected panel or bridge device
|
||||
* @np: device tree node containing encoder output ports
|
||||
* @port: port in the device tree node
|
||||
* @endpoint: endpoint in the device tree node
|
||||
* @panel: pointer to hold returned drm_panel, must not be NULL. On success
|
||||
* the caller must call drm_panel_put() when done with the panel
|
||||
* @bridge: pointer to hold returned drm_bridge
|
||||
*
|
||||
* Given a DT node's port and endpoint number, find the connected node and
|
||||
* return either the associated struct drm_panel or drm_bridge device.
|
||||
*
|
||||
* This function is deprecated and should not be used in new drivers. Use
|
||||
* of_drm_get_bridge_by_endpoint() instead when not looking for a panel, or
|
||||
* devm_drm_of_get_bridge() otherwise.
|
||||
*
|
||||
* Returns zero if successful, or one of the standard error codes if it fails.
|
||||
*/
|
||||
int drm_of_find_panel_or_bridge(const struct device_node *np,
|
||||
int port, int endpoint,
|
||||
struct drm_panel **panel,
|
||||
struct drm_bridge **bridge)
|
||||
{
|
||||
if (WARN_ON(!panel))
|
||||
return -EINVAL;
|
||||
|
||||
*panel = NULL;
|
||||
if (bridge)
|
||||
*bridge = NULL;
|
||||
|
||||
/*
|
||||
* of_graph_get_remote_node() produces a noisy error message if port
|
||||
* node isn't found and the absence of the port is a legit case here,
|
||||
* so at first we silently check whether a graph is present in the
|
||||
* device-tree node.
|
||||
*/
|
||||
if (!of_graph_is_present(np))
|
||||
return -ENODEV;
|
||||
|
||||
struct device_node *remote __free(device_node) =
|
||||
of_graph_get_remote_node(np, port, endpoint);
|
||||
if (!remote)
|
||||
return -ENODEV;
|
||||
|
||||
*panel = of_drm_find_panel(remote);
|
||||
if (!IS_ERR(*panel))
|
||||
return 0;
|
||||
|
||||
*panel = NULL;
|
||||
|
||||
if (bridge) {
|
||||
/* No panel found yet, check for a bridge next. */
|
||||
*bridge = of_drm_find_bridge(remote);
|
||||
if (*bridge)
|
||||
return 0;
|
||||
|
||||
*bridge = NULL;
|
||||
}
|
||||
|
||||
return -EPROBE_DEFER;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -6,6 +6,7 @@ config DRM_IMX_DCSS
|
||||
select DRM_DISPLAY_HELPER
|
||||
select DRM_BRIDGE_CONNECTOR
|
||||
select DRM_GEM_DMA_HELPER
|
||||
select DRM_PANEL
|
||||
select VIDEOMODE_HELPERS
|
||||
depends on DRM && ((ARCH_MXC && ARM64) || COMPILE_TEST)
|
||||
help
|
||||
|
||||
@@ -7,6 +7,7 @@ config DRM_INGENIC
|
||||
depends on COMMON_CLK
|
||||
select DRM_BRIDGE
|
||||
select DRM_CLIENT_SELECTION
|
||||
select DRM_PANEL
|
||||
select DRM_PANEL_BRIDGE
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_DISPLAY_HELPER
|
||||
|
||||
@@ -5,6 +5,7 @@ config DRM_LOGICVC
|
||||
select DRM_CLIENT_SELECTION
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_GEM_DMA_HELPER
|
||||
select DRM_PANEL
|
||||
select REGMAP
|
||||
select REGMAP_MMIO
|
||||
help
|
||||
|
||||
@@ -9,6 +9,7 @@ config DRM_MCDE
|
||||
select DRM_CLIENT_SELECTION
|
||||
select DRM_MIPI_DSI
|
||||
select DRM_BRIDGE
|
||||
select DRM_PANEL
|
||||
select DRM_PANEL_BRIDGE
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_GEM_DMA_HELPER
|
||||
|
||||
@@ -9,6 +9,7 @@ config DRM_PL111
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_GEM_DMA_HELPER
|
||||
select DRM_BRIDGE
|
||||
select DRM_PANEL
|
||||
select DRM_PANEL_BRIDGE
|
||||
help
|
||||
Choose this option for DRM support for the PL111 CLCD controller.
|
||||
|
||||
@@ -125,6 +125,7 @@ config ROCKCHIP_LVDS
|
||||
depends on PINCTRL && OF
|
||||
select DRM_DISPLAY_HELPER
|
||||
select DRM_BRIDGE_CONNECTOR
|
||||
select DRM_PANEL
|
||||
help
|
||||
Choose this option to enable support for Rockchip LVDS controllers.
|
||||
Rockchip rk3288 SoC has LVDS TX Controller can be used, and it
|
||||
@@ -137,6 +138,7 @@ config ROCKCHIP_RGB
|
||||
depends on PINCTRL
|
||||
select DRM_DISPLAY_HELPER
|
||||
select DRM_BRIDGE_CONNECTOR
|
||||
select DRM_PANEL
|
||||
help
|
||||
Choose this option to enable support for Rockchip RGB output.
|
||||
Some Rockchip CRTCs, like rv1108, can directly output parallel
|
||||
|
||||
@@ -6,6 +6,7 @@ config DRM_STM
|
||||
select DRM_CLIENT_SELECTION
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_GEM_DMA_HELPER
|
||||
select DRM_PANEL
|
||||
select DRM_PANEL_BRIDGE
|
||||
select VIDEOMODE_HELPERS
|
||||
select FB_PROVIDE_GET_FB_UNMAPPED_AREA if FB
|
||||
|
||||
@@ -7,6 +7,7 @@ config DRM_TIDSS
|
||||
select DRM_DISPLAY_HELPER
|
||||
select DRM_BRIDGE_CONNECTOR
|
||||
select DRM_GEM_DMA_HELPER
|
||||
select DRM_PANEL
|
||||
help
|
||||
The TI Keystone family SoCs introduced a new generation of
|
||||
Display SubSystem. There is currently three Keystone family
|
||||
|
||||
@@ -7,6 +7,7 @@ config DRM_TVE200
|
||||
depends on OF
|
||||
select DRM_BRIDGE
|
||||
select DRM_CLIENT_SELECTION
|
||||
select DRM_PANEL
|
||||
select DRM_PANEL_BRIDGE
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_GEM_DMA_HELPER
|
||||
|
||||
@@ -51,10 +51,6 @@ int drm_of_encoder_active_endpoint(struct device_node *node,
|
||||
struct of_endpoint *endpoint);
|
||||
int drm_of_get_panel_orientation(const struct device_node *np,
|
||||
enum drm_panel_orientation *orientation);
|
||||
int drm_of_find_panel_or_bridge(const struct device_node *np,
|
||||
int port, int endpoint,
|
||||
struct drm_panel **panel,
|
||||
struct drm_bridge **bridge);
|
||||
int drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
|
||||
const struct device_node *port2);
|
||||
int drm_of_lvds_get_dual_link_pixel_order_sink(struct device_node *port1,
|
||||
@@ -112,14 +108,6 @@ static inline int drm_of_get_panel_orientation(const struct device_node *np,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int drm_of_find_panel_or_bridge(const struct device_node *np,
|
||||
int port, int endpoint,
|
||||
struct drm_panel **panel,
|
||||
struct drm_bridge **bridge)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int
|
||||
drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
|
||||
const struct device_node *port2)
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
struct backlight_device;
|
||||
struct dentry;
|
||||
struct device_node;
|
||||
struct drm_bridge;
|
||||
struct drm_connector;
|
||||
struct drm_panel_follower;
|
||||
struct drm_panel;
|
||||
@@ -337,11 +338,23 @@ int drm_panel_get_modes(struct drm_panel *panel, struct drm_connector *connector
|
||||
|
||||
#if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL)
|
||||
struct drm_panel *of_drm_find_panel(const struct device_node *np);
|
||||
int drm_of_find_panel_or_bridge(const struct device_node *np,
|
||||
int port, int endpoint,
|
||||
struct drm_panel **panel,
|
||||
struct drm_bridge **bridge);
|
||||
#else
|
||||
static inline struct drm_panel *of_drm_find_panel(const struct device_node *np)
|
||||
{
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
static inline int drm_of_find_panel_or_bridge(const struct device_node *np,
|
||||
int port, int endpoint,
|
||||
struct drm_panel **panel,
|
||||
struct drm_bridge **bridge)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_DRM_PANEL)
|
||||
|
||||
Reference in new issue
Block a user