-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
drm/bridge: make bridge registration independent of drm flow
Currently, third party bridge drivers(ptn3460) are dependent on the corresponding encoder driver init, since bridge driver needs a drm_device pointer to finish drm initializations. The encoder driver passes the drm_device pointer to the bridge driver. Because of this dependency, third party drivers like ptn3460 doesn't adhere to the driver model. In this patch, we reframe the bridge registration framework so that bridge initialization is split into 2 steps, and bridge registration happens independent of drm flow: --Step 1: gather all the bridge settings independent of drm and add the bridge onto a global list of bridges. --Step 2: when the encoder driver is probed, call drm_bridge_attach for the corresponding bridge so that the bridge receives drm_device pointer and continues with connector and other drm initializations. The old set of bridge helpers are removed, and a set of new helpers are added to accomplish the 2 step initialization. The bridge devices register themselves onto global list of bridges when they get probed by calling "drm_bridge_add". The parent encoder driver waits till the bridge is available in the lookup table(by calling "of_drm_find_bridge") and then continues with its initialization. The encoder driver should also call "drm_bridge_attach" to pass on the drm_device to the bridge object. drm_bridge_attach inturn calls "bridge->funcs->attach" so that bridge can continue with drm related initializations. Signed-off-by: Ajay Kumar <ajaykumar.rs@samsung.com> Acked-by: Inki Dae <inki.dae@samsung.com> Tested-by: Rahul Sharma <rahul.sharma@samsung.com> Tested-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk> Tested-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Tested-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk> Signed-off-by: Thierry Reding <treding@nvidia.com>
- Loading branch information
1 parent
b07b90f
commit 3d3f8b1
Showing
11 changed files
with
133 additions
and
119 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
/* | ||
* Copyright (c) 2014 Samsung Electronics Co., Ltd | ||
* | ||
* Permission is hereby granted, free of charge, to any person obtaining a | ||
* copy of this software and associated documentation files (the "Software"), | ||
* to deal in the Software without restriction, including without limitation | ||
* the rights to use, copy, modify, merge, publish, distribute, sub license, | ||
* and/or sell copies of the Software, and to permit persons to whom the | ||
* Software is furnished to do so, subject to the following conditions: | ||
* | ||
* The above copyright notice and this permission notice (including the | ||
* next paragraph) shall be included in all copies or substantial portions | ||
* of the Software. | ||
* | ||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL | ||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
* DEALINGS IN THE SOFTWARE. | ||
*/ | ||
|
||
#include <linux/err.h> | ||
#include <linux/module.h> | ||
|
||
#include <drm/drm_crtc.h> | ||
|
||
#include "drm/drmP.h" | ||
|
||
static DEFINE_MUTEX(bridge_lock); | ||
static LIST_HEAD(bridge_list); | ||
|
||
int drm_bridge_add(struct drm_bridge *bridge) | ||
{ | ||
mutex_lock(&bridge_lock); | ||
list_add_tail(&bridge->list, &bridge_list); | ||
mutex_unlock(&bridge_lock); | ||
|
||
return 0; | ||
} | ||
EXPORT_SYMBOL(drm_bridge_add); | ||
|
||
void drm_bridge_remove(struct drm_bridge *bridge) | ||
{ | ||
mutex_lock(&bridge_lock); | ||
list_del_init(&bridge->list); | ||
mutex_unlock(&bridge_lock); | ||
} | ||
EXPORT_SYMBOL(drm_bridge_remove); | ||
|
||
extern int drm_bridge_attach(struct drm_device *dev, struct drm_bridge *bridge) | ||
{ | ||
if (!dev || !bridge) | ||
return -EINVAL; | ||
|
||
if (bridge->dev) | ||
return -EBUSY; | ||
|
||
bridge->dev = dev; | ||
|
||
if (bridge->funcs->attach) | ||
return bridge->funcs->attach(bridge); | ||
|
||
return 0; | ||
} | ||
EXPORT_SYMBOL(drm_bridge_attach); | ||
|
||
#ifdef CONFIG_OF | ||
struct drm_bridge *of_drm_find_bridge(struct device_node *np) | ||
{ | ||
struct drm_bridge *bridge; | ||
|
||
mutex_lock(&bridge_lock); | ||
|
||
list_for_each_entry(bridge, &bridge_list, list) { | ||
if (bridge->of_node == np) { | ||
mutex_unlock(&bridge_lock); | ||
return bridge; | ||
} | ||
} | ||
|
||
mutex_unlock(&bridge_lock); | ||
return NULL; | ||
} | ||
EXPORT_SYMBOL(of_drm_find_bridge); | ||
#endif | ||
|
||
MODULE_AUTHOR("Ajay Kumar <ajaykumar.rs@samsung.com>"); | ||
MODULE_DESCRIPTION("DRM bridge infrastructure"); | ||
MODULE_LICENSE("GPL and additional rights"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.