Hi all,
I've dropped the fun parts of this series since they need more work, but figured drm_bridge_init() as a concept is still valuable on its own (and I think I'll need it to roll out device links for registered bridges), so here goes.
v2: - expanded commit messages and added some extra bridge-related documentation (Daniel) - dropped v1 patches 29 and 30: 29 needs more work, and 30 depends on it - added all remaining drm_bridge implementers, found by searching for drm_bridge_funcs which is mandatory for any bridge; new uses in patches 3, 27, and 28 (Sam) - due to the above, I've decided to squash all analogix changes into one patch
--- v1 [https://patchwork.freedesktop.org/series/70039/] cover text below:
This series adds device links support to drm_bridge. The motivation behind it is that a drm_bridge in a module could get removed under the feet of the bridge user without warning, so we need a way to remove and reprobe the client as needed to avoid peering into the void.
1: Add a drm_bridge_init() function which wraps all initialisation of the structure prior to calling drm_bridge_add().
2-26,28: Apply the drm_bridge_init() refactor to every bridge that uses drm_bridge_add().
27: Minor cleanup in rcar-du.
29: Add of_drm_find_bridge_devlink() which functions the same as of_drm_find_bridge() plus adds a device device link from the owning drm_device to the bridge device.
30: As a motivating example, convert komeda to exclusively use drm_bridge for its pipe outputs; this isn't a regression in usability any more since device links bring the same automatic remove/reprobe feature as components.
Mihail Atanassov (28): drm: Introduce drm_bridge_init() drm/bridge: adv7511: Use drm_bridge_init() drm/bridge/analogix: Use drm_bridge_init() drm/bridge: cdns: Use drm_bridge_init() drm/bridge: dumb-vga-dac: Use drm_bridge_init() drm/bridge: lvds-encoder: Use drm_bridge_init() drm/bridge: megachips-stdpxxxx-ge-b850v3-fw: Use drm_bridge_init() drm/bridge: nxp-ptn3460: Use drm_bridge_init() drm/bridge: panel: Use drm_bridge_init() drm/bridge: ps8622: Use drm_bridge_init() drm/bridge: sii902x: Use drm_bridge_init() gpu: drm: bridge: sii9234: Use drm_bridge_init() drm/bridge: sil_sii8620: Use drm_bridge_init() drm/bridge: dw-hdmi: Use drm_bridge_init() drm/bridge/synopsys: dsi: Use drm_bridge_init() drm/bridge: tc358764: Use drm_bridge_init() drm/bridge: tc358767: Use drm_bridge_init() drm/bridge: thc63: Use drm_bridge_init() drm/bridge: ti-sn65dsi86: Use drm_bridge_init() drm/bridge: ti-tfp410: Use drm_bridge_init() drm/exynos: mic: Use drm_bridge_init() drm/i2c: tda998x: Use drm_bridge_init() drm/mcde: dsi: Use drm_bridge_init() drm/mediatek: hdmi: Use drm_bridge_init() drm: rcar-du: lvds: Use drm_bridge_init() drm: rcar-du: lvds: Don't set drm_bridge private pointer drm/sti: Use drm_bridge_init() drm/msm: Use drm_bridge_init()
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 5 ++- .../drm/bridge/analogix/analogix-anx6345.c | 5 ++- .../drm/bridge/analogix/analogix-anx78xx.c | 8 ++--- .../drm/bridge/analogix/analogix_dp_core.c | 5 ++- drivers/gpu/drm/bridge/cdns-dsi.c | 4 +-- drivers/gpu/drm/bridge/dumb-vga-dac.c | 6 ++-- drivers/gpu/drm/bridge/lvds-encoder.c | 7 ++-- .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 4 +-- drivers/gpu/drm/bridge/nxp-ptn3460.c | 4 +-- drivers/gpu/drm/bridge/panel.c | 7 ++-- drivers/gpu/drm/bridge/parade-ps8622.c | 3 +- drivers/gpu/drm/bridge/sii902x.c | 5 ++- drivers/gpu/drm/bridge/sii9234.c | 3 +- drivers/gpu/drm/bridge/sil-sii8620.c | 3 +- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 7 ++-- drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 7 ++-- drivers/gpu/drm/bridge/tc358764.c | 4 +-- drivers/gpu/drm/bridge/tc358767.c | 3 +- drivers/gpu/drm/bridge/thc63lvd1024.c | 7 ++-- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 5 ++- drivers/gpu/drm/bridge/ti-tfp410.c | 5 ++- drivers/gpu/drm/drm_bridge.c | 34 ++++++++++++++++++- drivers/gpu/drm/exynos/exynos_drm_mic.c | 8 +---- drivers/gpu/drm/i2c/tda998x_drv.c | 6 +--- drivers/gpu/drm/mcde/mcde_dsi.c | 3 +- drivers/gpu/drm/mediatek/mtk_hdmi.c | 4 +-- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 +-- drivers/gpu/drm/msm/edp/edp_bridge.c | 3 +- drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 4 +-- drivers/gpu/drm/rcar-du/rcar_lvds.c | 5 ++- drivers/gpu/drm/sti/sti_dvo.c | 4 +-- drivers/gpu/drm/sti/sti_hda.c | 3 +- drivers/gpu/drm/sti/sti_hdmi.c | 3 +- include/drm/drm_bridge.h | 15 +++++++- 34 files changed, 100 insertions(+), 103 deletions(-)
A simple convenience function to initialize the struct drm_bridge. The goal is to standardize initialization for any bridge registered with drm_bridge_add() so that we can later add device links for consumers of those bridges.
v2: - s/WARN_ON(!funcs)/WARN_ON(!funcs || !dev)/ as suggested by Daniel - expand on some kerneldoc comments as suggested by Daniel - update commit message as suggested by Daniel
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/drm_bridge.c | 34 +++++++++++++++++++++++++++++++++- include/drm/drm_bridge.h | 15 ++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index cba537c99e43..50e1c1b46e20 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -64,7 +64,10 @@ static DEFINE_MUTEX(bridge_lock); static LIST_HEAD(bridge_list);
/** - * drm_bridge_add - add the given bridge to the global bridge list + * drm_bridge_add - add the given bridge to the global bridge list. + * + * Drivers should call drm_bridge_init() prior adding it to the list. + * Drivers should call drm_bridge_remove() to clean up the bridge list. * * @bridge: bridge control structure */ @@ -89,6 +92,35 @@ void drm_bridge_remove(struct drm_bridge *bridge) } EXPORT_SYMBOL(drm_bridge_remove);
+/** + * drm_bridge_init - initialise a drm_bridge structure + * + * @bridge: bridge control structure + * @funcs: control functions + * @dev: device associated with this drm_bridge + * @timings: timing specification for the bridge; optional (may be NULL) + * @driver_private: pointer to the bridge driver internal context (may be NULL) + */ +void drm_bridge_init(struct drm_bridge *bridge, struct device *dev, + const struct drm_bridge_funcs *funcs, + const struct drm_bridge_timings *timings, + void *driver_private) +{ + WARN_ON(!funcs || !dev); + + bridge->dev = NULL; + bridge->encoder = NULL; + bridge->next = NULL; + +#ifdef CONFIG_OF + bridge->of_node = dev->of_node; +#endif + bridge->timings = timings; + bridge->funcs = funcs; + bridge->driver_private = driver_private; +} +EXPORT_SYMBOL(drm_bridge_init); + /** * drm_bridge_attach - attach the bridge to an encoder's chain * diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index c0a2286a81e9..949e4f401a53 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -373,7 +373,16 @@ struct drm_bridge_timings { };
/** - * struct drm_bridge - central DRM bridge control structure + * struct drm_bridge - central DRM bridge control structure. + * + * Bridge drivers should call drm_bridge_init() to initialize a bridge + * driver, and then register it with drm_bridge_add(). + * + * Users of bridges link a bridge driver into their overall display output + * pipeline by calling drm_bridge_attach(). + * + * Modular drivers in OF systems can query the list of registered bridges + * with of_drm_find_bridge(). */ struct drm_bridge { /** @dev: DRM device this bridge belongs to */ @@ -402,6 +411,10 @@ struct drm_bridge {
void drm_bridge_add(struct drm_bridge *bridge); void drm_bridge_remove(struct drm_bridge *bridge); +void drm_bridge_init(struct drm_bridge *bridge, struct device *dev, + const struct drm_bridge_funcs *funcs, + const struct drm_bridge_timings *timings, + void *driver_private); struct drm_bridge *of_drm_find_bridge(struct device_node *np); int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, struct drm_bridge *previous);
On Wed, Dec 04, 2019 at 11:48:02AM +0000, Mihail Atanassov wrote:
A simple convenience function to initialize the struct drm_bridge. The goal is to standardize initialization for any bridge registered with drm_bridge_add() so that we can later add device links for consumers of those bridges.
v2:
- s/WARN_ON(!funcs)/WARN_ON(!funcs || !dev)/ as suggested by Daniel
- expand on some kerneldoc comments as suggested by Daniel
- update commit message as suggested by Daniel
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
Reviewed-by: Daniel Vetter daniel.vetter@ffwll.ch
drivers/gpu/drm/drm_bridge.c | 34 +++++++++++++++++++++++++++++++++- include/drm/drm_bridge.h | 15 ++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index cba537c99e43..50e1c1b46e20 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -64,7 +64,10 @@ static DEFINE_MUTEX(bridge_lock); static LIST_HEAD(bridge_list);
/**
- drm_bridge_add - add the given bridge to the global bridge list
- drm_bridge_add - add the given bridge to the global bridge list.
- Drivers should call drm_bridge_init() prior adding it to the list.
*/
- Drivers should call drm_bridge_remove() to clean up the bridge list.
- @bridge: bridge control structure
@@ -89,6 +92,35 @@ void drm_bridge_remove(struct drm_bridge *bridge) } EXPORT_SYMBOL(drm_bridge_remove);
+/**
- drm_bridge_init - initialise a drm_bridge structure
- @bridge: bridge control structure
- @funcs: control functions
- @dev: device associated with this drm_bridge
- @timings: timing specification for the bridge; optional (may be NULL)
- @driver_private: pointer to the bridge driver internal context (may be NULL)
- */
+void drm_bridge_init(struct drm_bridge *bridge, struct device *dev,
const struct drm_bridge_funcs *funcs,
const struct drm_bridge_timings *timings,
void *driver_private)
+{
- WARN_ON(!funcs || !dev);
- bridge->dev = NULL;
- bridge->encoder = NULL;
- bridge->next = NULL;
+#ifdef CONFIG_OF
- bridge->of_node = dev->of_node;
+#endif
- bridge->timings = timings;
- bridge->funcs = funcs;
- bridge->driver_private = driver_private;
+} +EXPORT_SYMBOL(drm_bridge_init);
/**
- drm_bridge_attach - attach the bridge to an encoder's chain
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index c0a2286a81e9..949e4f401a53 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -373,7 +373,16 @@ struct drm_bridge_timings { };
/**
- struct drm_bridge - central DRM bridge control structure
- struct drm_bridge - central DRM bridge control structure.
- Bridge drivers should call drm_bridge_init() to initialize a bridge
- driver, and then register it with drm_bridge_add().
- Users of bridges link a bridge driver into their overall display output
- pipeline by calling drm_bridge_attach().
- Modular drivers in OF systems can query the list of registered bridges
*/
- with of_drm_find_bridge().
struct drm_bridge { /** @dev: DRM device this bridge belongs to */ @@ -402,6 +411,10 @@ struct drm_bridge {
void drm_bridge_add(struct drm_bridge *bridge); void drm_bridge_remove(struct drm_bridge *bridge); +void drm_bridge_init(struct drm_bridge *bridge, struct device *dev,
const struct drm_bridge_funcs *funcs,
const struct drm_bridge_timings *timings,
void *driver_private);
struct drm_bridge *of_drm_find_bridge(struct device_node *np); int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, struct drm_bridge *previous); -- 2.23.0
Hi Mihail,
Thank you for the patch.
On Wed, Dec 04, 2019 at 11:48:02AM +0000, Mihail Atanassov wrote:
A simple convenience function to initialize the struct drm_bridge. The goal is to standardize initialization for any bridge registered with drm_bridge_add() so that we can later add device links for consumers of those bridges.
v2:
- s/WARN_ON(!funcs)/WARN_ON(!funcs || !dev)/ as suggested by Daniel
- expand on some kerneldoc comments as suggested by Daniel
- update commit message as suggested by Daniel
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
drivers/gpu/drm/drm_bridge.c | 34 +++++++++++++++++++++++++++++++++- include/drm/drm_bridge.h | 15 ++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index cba537c99e43..50e1c1b46e20 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -64,7 +64,10 @@ static DEFINE_MUTEX(bridge_lock); static LIST_HEAD(bridge_list);
/**
- drm_bridge_add - add the given bridge to the global bridge list
- drm_bridge_add - add the given bridge to the global bridge list.
You add a final period here and in the documentation of struct drm_bridge, but the new function you're adding doesn't have one :-) I'd drop the period here and for drm_bridge to be consistent with the rest of the code.
- Drivers should call drm_bridge_init() prior adding it to the list.
s/should/shall/ s/prior adding it/prior to adding the bridge/
- Drivers should call drm_bridge_remove() to clean up the bridge list.
I'd replace this sentence with "Before deleting a bridge (usually when the driver is unbound from the device), drivers shall call drm_bridge_remove() to remove it from the global list."
- @bridge: bridge control structure
*/ @@ -89,6 +92,35 @@ void drm_bridge_remove(struct drm_bridge *bridge) } EXPORT_SYMBOL(drm_bridge_remove);
+/**
- drm_bridge_init - initialise a drm_bridge structure
initialise or initialize ? :-)
- @bridge: bridge control structure
- @funcs: control functions
- @dev: device associated with this drm_bridge
dev goes before funcs
- @timings: timing specification for the bridge; optional (may be NULL)
- @driver_private: pointer to the bridge driver internal context (may be NULL)
I'm not too sure about the last two parameters. Having NULL, NULL in most callers is confusing, and having a void * as one of the parameters means that the compiler won't catch errors if the two parameters are reversed. I think this is quite error prone.
There are very few drivers using driver_private (I count 6 of them, with 2 additional drivers that set driver_private but never use it). How about embedding the bridge structure in those 6 drivers and getting rid of the field altogether ? This could be part of a separate series, but in any case I'd drop driver_private from drm_bridge_init().
- */
+void drm_bridge_init(struct drm_bridge *bridge, struct device *dev,
const struct drm_bridge_funcs *funcs,
const struct drm_bridge_timings *timings,
void *driver_private)
+{
- WARN_ON(!funcs || !dev);
- bridge->dev = NULL;
NULL ? Shouldn't this be dev ?
- bridge->encoder = NULL;
- bridge->next = NULL;
+#ifdef CONFIG_OF
- bridge->of_node = dev->of_node;
+#endif
- bridge->timings = timings;
- bridge->funcs = funcs;
- bridge->driver_private = driver_private;
+} +EXPORT_SYMBOL(drm_bridge_init);
/**
- drm_bridge_attach - attach the bridge to an encoder's chain
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index c0a2286a81e9..949e4f401a53 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -373,7 +373,16 @@ struct drm_bridge_timings { };
/**
- struct drm_bridge - central DRM bridge control structure
- struct drm_bridge - central DRM bridge control structure.
- Bridge drivers should call drm_bridge_init() to initialize a bridge
- driver, and then register it with drm_bridge_add().
s/bridge driver/bridge structure/ (or drm_bridge structure)
- Users of bridges link a bridge driver into their overall display output
- pipeline by calling drm_bridge_attach().
- Modular drivers in OF systems can query the list of registered bridges
*/
- with of_drm_find_bridge().
struct drm_bridge { /** @dev: DRM device this bridge belongs to */ @@ -402,6 +411,10 @@ struct drm_bridge {
void drm_bridge_add(struct drm_bridge *bridge); void drm_bridge_remove(struct drm_bridge *bridge); +void drm_bridge_init(struct drm_bridge *bridge, struct device *dev,
const struct drm_bridge_funcs *funcs,
const struct drm_bridge_timings *timings,
void *driver_private);
struct drm_bridge *of_drm_find_bridge(struct device_node *np); int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, struct drm_bridge *previous);
Hi Laurent,
On Thursday, 5 December 2019 12:40:22 GMT Laurent Pinchart wrote:
Hi Mihail,
Thank you for the patch.
Thanks for the quick reviews :).
On Wed, Dec 04, 2019 at 11:48:02AM +0000, Mihail Atanassov wrote:
A simple convenience function to initialize the struct drm_bridge. The goal is to standardize initialization for any bridge registered with drm_bridge_add() so that we can later add device links for consumers of those bridges.
v2:
- s/WARN_ON(!funcs)/WARN_ON(!funcs || !dev)/ as suggested by Daniel
- expand on some kerneldoc comments as suggested by Daniel
- update commit message as suggested by Daniel
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
drivers/gpu/drm/drm_bridge.c | 34 +++++++++++++++++++++++++++++++++- include/drm/drm_bridge.h | 15 ++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index cba537c99e43..50e1c1b46e20 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -64,7 +64,10 @@ static DEFINE_MUTEX(bridge_lock); static LIST_HEAD(bridge_list);
/**
- drm_bridge_add - add the given bridge to the global bridge list
- drm_bridge_add - add the given bridge to the global bridge list.
You add a final period here and in the documentation of struct drm_bridge, but the new function you're adding doesn't have one :-) I'd drop the period here and for drm_bridge to be consistent with the rest of the code.
- Drivers should call drm_bridge_init() prior adding it to the list.
s/should/shall/ s/prior adding it/prior to adding the bridge/
- Drivers should call drm_bridge_remove() to clean up the bridge list.
I'd replace this sentence with "Before deleting a bridge (usually when the driver is unbound from the device), drivers shall call drm_bridge_remove() to remove it from the global list."
- @bridge: bridge control structure
*/ @@ -89,6 +92,35 @@ void drm_bridge_remove(struct drm_bridge *bridge) } EXPORT_SYMBOL(drm_bridge_remove);
+/**
- drm_bridge_init - initialise a drm_bridge structure
initialise or initialize ? :-)
I have absolutely no clue :). Judging by the question I'm guessing the correct answer for the kernel is US spelling.
- @bridge: bridge control structure
- @funcs: control functions
- @dev: device associated with this drm_bridge
dev goes before funcs
- @timings: timing specification for the bridge; optional (may be NULL)
- @driver_private: pointer to the bridge driver internal context (may be NULL)
I'm not too sure about the last two parameters. Having NULL, NULL in most callers is confusing, and having a void * as one of the parameters means that the compiler won't catch errors if the two parameters are reversed. I think this is quite error prone.
There are very few drivers using driver_private (I count 6 of them, with 2 additional drivers that set driver_private but never use it). How about embedding the bridge structure in those 6 drivers and getting rid of the field altogether ? This could be part of a separate series, but in any case I'd drop driver_private from drm_bridge_init().
Ok, I'll do that first before refreshing this series.
- */
+void drm_bridge_init(struct drm_bridge *bridge, struct device *dev,
const struct drm_bridge_funcs *funcs,
const struct drm_bridge_timings *timings,
void *driver_private)
+{
- WARN_ON(!funcs || !dev);
- bridge->dev = NULL;
NULL ? Shouldn't this be dev ?
Hehe, Daniel got caught on that one, too :). This is the drm_device pointer for the bound consumer, not the struct device that the bridge's lifetime is tied to. I was planning to rename them with my (eventual) device_links addition (some discussion around it here: https://patchwork.freedesktop.org/patch/342472/?series=70039&rev=1).
I guess if I do the drm_device part of the rename first, this patch will look less confusing, so I'll do that too.
- bridge->encoder = NULL;
- bridge->next = NULL;
+#ifdef CONFIG_OF
- bridge->of_node = dev->of_node;
+#endif
- bridge->timings = timings;
- bridge->funcs = funcs;
- bridge->driver_private = driver_private;
+} +EXPORT_SYMBOL(drm_bridge_init);
/**
- drm_bridge_attach - attach the bridge to an encoder's chain
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index c0a2286a81e9..949e4f401a53 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -373,7 +373,16 @@ struct drm_bridge_timings { };
/**
- struct drm_bridge - central DRM bridge control structure
- struct drm_bridge - central DRM bridge control structure.
- Bridge drivers should call drm_bridge_init() to initialize a bridge
- driver, and then register it with drm_bridge_add().
s/bridge driver/bridge structure/ (or drm_bridge structure)
- Users of bridges link a bridge driver into their overall display output
- pipeline by calling drm_bridge_attach().
- Modular drivers in OF systems can query the list of registered bridges
*/
- with of_drm_find_bridge().
struct drm_bridge { /** @dev: DRM device this bridge belongs to */ @@ -402,6 +411,10 @@ struct drm_bridge {
void drm_bridge_add(struct drm_bridge *bridge); void drm_bridge_remove(struct drm_bridge *bridge); +void drm_bridge_init(struct drm_bridge *bridge, struct device *dev,
const struct drm_bridge_funcs *funcs,
const struct drm_bridge_timings *timings,
void *driver_private);
struct drm_bridge *of_drm_find_bridge(struct device_node *np); int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, struct drm_bridge *previous);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c index 9e13e466e72c..73600d8766f8 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c @@ -1216,9 +1216,8 @@ static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id) if (ret) goto err_unregister_cec;
- adv7511->bridge.funcs = &adv7511_bridge_funcs; - adv7511->bridge.of_node = dev->of_node; - + drm_bridge_init(&adv7511->bridge, dev, &adv7511_bridge_funcs, + NULL, NULL); drm_bridge_add(&adv7511->bridge);
adv7511_audio_init(dev, adv7511);
No functional change.
The setting of bridge->of_node by drm_bridge_init() in analogix_dp_core.c is safe, since ->of_node isn't used directly and the bridge isn't published with drm_bridge_add().
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/analogix/analogix-anx6345.c | 5 ++--- drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c | 8 ++------ drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 5 ++--- 3 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c index b4f3a923a52a..130d5c3a07ef 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c @@ -696,8 +696,6 @@ static int anx6345_i2c_probe(struct i2c_client *client,
mutex_init(&anx6345->lock);
- anx6345->bridge.of_node = client->dev.of_node; - anx6345->client = client; i2c_set_clientdata(client, anx6345);
@@ -760,7 +758,8 @@ static int anx6345_i2c_probe(struct i2c_client *client, /* Look for supported chip ID */ anx6345_poweron(anx6345); if (anx6345_get_chip_id(anx6345)) { - anx6345->bridge.funcs = &anx6345_bridge_funcs; + drm_bridge_init(&anx6345->bridge, &client->dev, + &anx6345_bridge_funcs, NULL, NULL); drm_bridge_add(&anx6345->bridge);
return 0; diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c index 41867be03751..e37892cdc9cf 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c @@ -1214,10 +1214,6 @@ static int anx78xx_i2c_probe(struct i2c_client *client,
mutex_init(&anx78xx->lock);
-#if IS_ENABLED(CONFIG_OF) - anx78xx->bridge.of_node = client->dev.of_node; -#endif - anx78xx->client = client; i2c_set_clientdata(client, anx78xx);
@@ -1321,8 +1317,8 @@ static int anx78xx_i2c_probe(struct i2c_client *client, goto err_poweroff; }
- anx78xx->bridge.funcs = &anx78xx_bridge_funcs; - + drm_bridge_init(&anx78xx->bridge, &client->dev, &anx78xx_bridge_funcs, + NULL, NULL); drm_bridge_add(&anx78xx->bridge);
/* If cable is pulled out, just poweroff and wait for HPD event */ diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index bb411fe52ae8..4042ba9a98d8 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -1585,9 +1585,8 @@ static int analogix_dp_create_bridge(struct drm_device *drm_dev,
dp->bridge = bridge;
- bridge->driver_private = dp; - bridge->funcs = &analogix_dp_bridge_funcs; - + drm_bridge_init(bridge, drm_dev->dev, &analogix_dp_bridge_funcs, + NULL, dp); ret = drm_bridge_attach(dp->encoder, bridge, NULL); if (ret) { DRM_ERROR("failed to attach drm bridge\n");
On Wed, Dec 04, 2019 at 11:48:04AM +0000, Mihail Atanassov wrote:
No functional change.
The setting of bridge->of_node by drm_bridge_init() in analogix_dp_core.c is safe, since ->of_node isn't used directly and the bridge isn't published with drm_bridge_add().
Still, it's not the right device, is it ? And if we later extend the usage of dev in drm_bridge_init() it could cause issues. I think you should use the right device pointer.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c | 5 ++--- drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c | 8 ++------ drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 5 ++--- 3 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c index b4f3a923a52a..130d5c3a07ef 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c @@ -696,8 +696,6 @@ static int anx6345_i2c_probe(struct i2c_client *client,
mutex_init(&anx6345->lock);
- anx6345->bridge.of_node = client->dev.of_node;
- anx6345->client = client; i2c_set_clientdata(client, anx6345);
@@ -760,7 +758,8 @@ static int anx6345_i2c_probe(struct i2c_client *client, /* Look for supported chip ID */ anx6345_poweron(anx6345); if (anx6345_get_chip_id(anx6345)) {
anx6345->bridge.funcs = &anx6345_bridge_funcs;
drm_bridge_init(&anx6345->bridge, &client->dev,
&anx6345_bridge_funcs, NULL, NULL);
drm_bridge_add(&anx6345->bridge);
return 0;
diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c index 41867be03751..e37892cdc9cf 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c @@ -1214,10 +1214,6 @@ static int anx78xx_i2c_probe(struct i2c_client *client,
mutex_init(&anx78xx->lock);
-#if IS_ENABLED(CONFIG_OF)
- anx78xx->bridge.of_node = client->dev.of_node;
-#endif
- anx78xx->client = client; i2c_set_clientdata(client, anx78xx);
@@ -1321,8 +1317,8 @@ static int anx78xx_i2c_probe(struct i2c_client *client, goto err_poweroff; }
- anx78xx->bridge.funcs = &anx78xx_bridge_funcs;
drm_bridge_init(&anx78xx->bridge, &client->dev, &anx78xx_bridge_funcs,
NULL, NULL);
drm_bridge_add(&anx78xx->bridge);
/* If cable is pulled out, just poweroff and wait for HPD event */
diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index bb411fe52ae8..4042ba9a98d8 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -1585,9 +1585,8 @@ static int analogix_dp_create_bridge(struct drm_device *drm_dev,
dp->bridge = bridge;
- bridge->driver_private = dp;
- bridge->funcs = &analogix_dp_bridge_funcs;
- drm_bridge_init(bridge, drm_dev->dev, &analogix_dp_bridge_funcs,
ret = drm_bridge_attach(dp->encoder, bridge, NULL); if (ret) { DRM_ERROR("failed to attach drm bridge\n");NULL, dp);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/cdns-dsi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/cdns-dsi.c b/drivers/gpu/drm/bridge/cdns-dsi.c index 3a5bd4e7fd1e..58b2aa8b6c24 100644 --- a/drivers/gpu/drm/bridge/cdns-dsi.c +++ b/drivers/gpu/drm/bridge/cdns-dsi.c @@ -1233,8 +1233,8 @@ static int cdns_dsi_drm_probe(struct platform_device *pdev) * CDNS_DPI_INPUT. */ input->id = CDNS_DPI_INPUT; - input->bridge.funcs = &cdns_dsi_bridge_funcs; - input->bridge.of_node = pdev->dev.of_node; + drm_bridge_init(&input->bridge, &pdev->dev, &cdns_dsi_bridge_funcs, + NULL, NULL);
/* Mask all interrupts before registering the IRQ handler. */ writel(0, dsi->regs + MCTL_MAIN_STS_CTL);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/dumb-vga-dac.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/bridge/dumb-vga-dac.c b/drivers/gpu/drm/bridge/dumb-vga-dac.c index cc33dc411b9e..896f27272e38 100644 --- a/drivers/gpu/drm/bridge/dumb-vga-dac.c +++ b/drivers/gpu/drm/bridge/dumb-vga-dac.c @@ -205,10 +205,8 @@ static int dumb_vga_probe(struct platform_device *pdev) } }
- vga->bridge.funcs = &dumb_vga_bridge_funcs; - vga->bridge.of_node = pdev->dev.of_node; - vga->bridge.timings = of_device_get_match_data(&pdev->dev); - + drm_bridge_init(&vga->bridge, &pdev->dev, &dumb_vga_bridge_funcs, + of_device_get_match_data(&pdev->dev), NULL); drm_bridge_add(&vga->bridge);
return 0;
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/lvds-encoder.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/bridge/lvds-encoder.c b/drivers/gpu/drm/bridge/lvds-encoder.c index e2132a8d5106..155406510416 100644 --- a/drivers/gpu/drm/bridge/lvds-encoder.c +++ b/drivers/gpu/drm/bridge/lvds-encoder.c @@ -112,11 +112,10 @@ static int lvds_encoder_probe(struct platform_device *pdev) return PTR_ERR(lvds_encoder->panel_bridge);
/* The panel_bridge bridge is attached to the panel's of_node, - * but we need a bridge attached to our of_node for our user - * to look up. + * but we need a bridge attached to our of_node (in dev->of_node) + * for our user to look up. */ - lvds_encoder->bridge.of_node = dev->of_node; - lvds_encoder->bridge.funcs = &funcs; + drm_bridge_init(&lvds_encoder->bridge, dev, &funcs, NULL, NULL); drm_bridge_add(&lvds_encoder->bridge);
platform_set_drvdata(pdev, lvds_encoder);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c index e8a49f6146c6..d567cd63810f 100644 --- a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c +++ b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c @@ -303,8 +303,8 @@ static int stdp4028_ge_b850v3_fw_probe(struct i2c_client *stdp4028_i2c, i2c_set_clientdata(stdp4028_i2c, ge_b850v3_lvds_ptr);
/* drm bridge initialization */ - ge_b850v3_lvds_ptr->bridge.funcs = &ge_b850v3_lvds_funcs; - ge_b850v3_lvds_ptr->bridge.of_node = dev->of_node; + drm_bridge_init(&ge_b850v3_lvds_ptr->bridge, dev, &ge_b850v3_lvds_funcs, + NULL, NULL); drm_bridge_add(&ge_b850v3_lvds_ptr->bridge);
/* Clear pending interrupts since power up. */
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/nxp-ptn3460.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c b/drivers/gpu/drm/bridge/nxp-ptn3460.c index 57ff01339559..2656a188b434 100644 --- a/drivers/gpu/drm/bridge/nxp-ptn3460.c +++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c @@ -320,8 +320,8 @@ static int ptn3460_probe(struct i2c_client *client, return ret; }
- ptn_bridge->bridge.funcs = &ptn3460_bridge_funcs; - ptn_bridge->bridge.of_node = dev->of_node; + drm_bridge_init(&ptn_bridge->bridge, dev, &ptn3460_bridge_funcs, + NULL, NULL); drm_bridge_add(&ptn_bridge->bridge);
i2c_set_clientdata(client, ptn_bridge);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/panel.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c index f4e293e7cf64..91d68d0337cc 100644 --- a/drivers/gpu/drm/bridge/panel.c +++ b/drivers/gpu/drm/bridge/panel.c @@ -192,11 +192,8 @@ struct drm_bridge *drm_panel_bridge_add_typed(struct drm_panel *panel, panel_bridge->connector_type = connector_type; panel_bridge->panel = panel;
- panel_bridge->bridge.funcs = &panel_bridge_bridge_funcs; -#ifdef CONFIG_OF - panel_bridge->bridge.of_node = panel->dev->of_node; -#endif - + drm_bridge_init(&panel_bridge->bridge, panel->dev, + &panel_bridge_bridge_funcs, NULL, NULL); drm_bridge_add(&panel_bridge->bridge);
return &panel_bridge->bridge;
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/parade-ps8622.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c index b7a72dfdcac3..8454dbb238bb 100644 --- a/drivers/gpu/drm/bridge/parade-ps8622.c +++ b/drivers/gpu/drm/bridge/parade-ps8622.c @@ -588,8 +588,7 @@ static int ps8622_probe(struct i2c_client *client, ps8622->bl->props.brightness = PS8622_MAX_BRIGHTNESS; }
- ps8622->bridge.funcs = &ps8622_bridge_funcs; - ps8622->bridge.of_node = dev->of_node; + drm_bridge_init(&ps8622->bridge, dev, &ps8622_bridge_funcs, NULL, NULL); drm_bridge_add(&ps8622->bridge);
i2c_set_clientdata(client, ps8622);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/sii902x.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c index b70e8c5cf2e1..2a9db621484d 100644 --- a/drivers/gpu/drm/bridge/sii902x.c +++ b/drivers/gpu/drm/bridge/sii902x.c @@ -1017,9 +1017,8 @@ static int sii902x_probe(struct i2c_client *client, return ret; }
- sii902x->bridge.funcs = &sii902x_bridge_funcs; - sii902x->bridge.of_node = dev->of_node; - sii902x->bridge.timings = &default_sii902x_timings; + drm_bridge_init(&sii902x->bridge, dev, &sii902x_bridge_funcs, + &default_sii902x_timings, NULL); drm_bridge_add(&sii902x->bridge);
sii902x_audio_codec_init(sii902x, dev);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/sii9234.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/sii9234.c b/drivers/gpu/drm/bridge/sii9234.c index f81f81b7051f..bfd3832baa1a 100644 --- a/drivers/gpu/drm/bridge/sii9234.c +++ b/drivers/gpu/drm/bridge/sii9234.c @@ -925,8 +925,7 @@ static int sii9234_probe(struct i2c_client *client,
i2c_set_clientdata(client, ctx);
- ctx->bridge.funcs = &sii9234_bridge_funcs; - ctx->bridge.of_node = dev->of_node; + drm_bridge_init(&ctx->bridge, dev, &sii9234_bridge_funcs, NULL, NULL); drm_bridge_add(&ctx->bridge);
sii9234_cable_in(ctx);
Hi,
On 04/12/2019 12:48, Mihail Atanassov wrote:
No functional change.
Why this particular one has "gpu: drm: bridge" unlike the other patches of the serie ?
Neil
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
drivers/gpu/drm/bridge/sii9234.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/sii9234.c b/drivers/gpu/drm/bridge/sii9234.c index f81f81b7051f..bfd3832baa1a 100644 --- a/drivers/gpu/drm/bridge/sii9234.c +++ b/drivers/gpu/drm/bridge/sii9234.c @@ -925,8 +925,7 @@ static int sii9234_probe(struct i2c_client *client,
i2c_set_clientdata(client, ctx);
- ctx->bridge.funcs = &sii9234_bridge_funcs;
- ctx->bridge.of_node = dev->of_node;
drm_bridge_init(&ctx->bridge, dev, &sii9234_bridge_funcs, NULL, NULL); drm_bridge_add(&ctx->bridge);
sii9234_cable_in(ctx);
Hi Neil,
On Thursday, 5 December 2019 12:10:37 GMT Neil Armstrong wrote:
Hi,
On 04/12/2019 12:48, Mihail Atanassov wrote:
No functional change.
Why this particular one has "gpu: drm: bridge" unlike the other patches of the serie ?
I took the "look at the file's git log" approach to determining the prefix. I can change it if you prefer a "drm/bridge: sii9234" prefix instead.
Neil
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
drivers/gpu/drm/bridge/sii9234.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/sii9234.c b/drivers/gpu/drm/bridge/sii9234.c index f81f81b7051f..bfd3832baa1a 100644 --- a/drivers/gpu/drm/bridge/sii9234.c +++ b/drivers/gpu/drm/bridge/sii9234.c @@ -925,8 +925,7 @@ static int sii9234_probe(struct i2c_client *client,
i2c_set_clientdata(client, ctx);
- ctx->bridge.funcs = &sii9234_bridge_funcs;
- ctx->bridge.of_node = dev->of_node;
drm_bridge_init(&ctx->bridge, dev, &sii9234_bridge_funcs, NULL, NULL); drm_bridge_add(&ctx->bridge);
sii9234_cable_in(ctx);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/sil-sii8620.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/sil-sii8620.c b/drivers/gpu/drm/bridge/sil-sii8620.c index 4c0eef406eb1..482dc2291350 100644 --- a/drivers/gpu/drm/bridge/sil-sii8620.c +++ b/drivers/gpu/drm/bridge/sil-sii8620.c @@ -2337,8 +2337,7 @@ static int sii8620_probe(struct i2c_client *client,
i2c_set_clientdata(client, ctx);
- ctx->bridge.funcs = &sii8620_bridge_funcs; - ctx->bridge.of_node = dev->of_node; + drm_bridge_init(&ctx->bridge, dev, &sii8620_bridge_funcs, NULL, NULL); drm_bridge_add(&ctx->bridge);
if (!ctx->extcon)
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index dbe38a54870b..6c71ffc9df5a 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2898,11 +2898,8 @@ __dw_hdmi_probe(struct platform_device *pdev, hdmi->ddc = NULL; }
- hdmi->bridge.driver_private = hdmi; - hdmi->bridge.funcs = &dw_hdmi_bridge_funcs; -#ifdef CONFIG_OF - hdmi->bridge.of_node = pdev->dev.of_node; -#endif + drm_bridge_init(&hdmi->bridge, &pdev->dev, &dw_hdmi_bridge_funcs, + NULL, hdmi);
memset(&pdevinfo, 0, sizeof(pdevinfo)); pdevinfo.parent = dev;
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c index b6e793bb653c..051f9aaf5867 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c @@ -1052,11 +1052,8 @@ __dw_mipi_dsi_probe(struct platform_device *pdev, return ERR_PTR(ret); }
- dsi->bridge.driver_private = dsi; - dsi->bridge.funcs = &dw_mipi_dsi_bridge_funcs; -#ifdef CONFIG_OF - dsi->bridge.of_node = pdev->dev.of_node; -#endif + drm_bridge_init(&dsi->bridge, &pdev->dev, &dw_mipi_dsi_bridge_funcs, + NULL, dsi);
return dsi; }
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/tc358764.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c index db298f550a5a..861d4df687ee 100644 --- a/drivers/gpu/drm/bridge/tc358764.c +++ b/drivers/gpu/drm/bridge/tc358764.c @@ -457,9 +457,7 @@ static int tc358764_probe(struct mipi_dsi_device *dsi) if (ret < 0) return ret;
- ctx->bridge.funcs = &tc358764_bridge_funcs; - ctx->bridge.of_node = dev->of_node; - + drm_bridge_init(&ctx->bridge, dev, &tc358764_bridge_funcs, NULL, NULL); drm_bridge_add(&ctx->bridge);
ret = mipi_dsi_attach(dsi);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/tc358767.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c index 8029478ffebb..7846c1925cbb 100644 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c @@ -1671,8 +1671,7 @@ static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id) if (ret) return ret;
- tc->bridge.funcs = &tc_bridge_funcs; - tc->bridge.of_node = dev->of_node; + drm_bridge_init(&tc->bridge, dev, &tc_bridge_funcs, NULL, NULL); drm_bridge_add(&tc->bridge);
i2c_set_clientdata(client, tc);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/thc63lvd1024.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/bridge/thc63lvd1024.c b/drivers/gpu/drm/bridge/thc63lvd1024.c index 3d74129b2995..abe806db5f4d 100644 --- a/drivers/gpu/drm/bridge/thc63lvd1024.c +++ b/drivers/gpu/drm/bridge/thc63lvd1024.c @@ -218,11 +218,8 @@ static int thc63_probe(struct platform_device *pdev) if (ret) return ret;
- thc63->bridge.driver_private = thc63; - thc63->bridge.of_node = pdev->dev.of_node; - thc63->bridge.funcs = &thc63_bridge_func; - thc63->bridge.timings = &thc63->timings; - + drm_bridge_init(&thc63->bridge, &pdev->dev, &thc63_bridge_func, + &thc63->timings, thc63); drm_bridge_add(&thc63->bridge);
return 0;
Hi Mihail,
Thank you for the patch.
On Wed, Dec 04, 2019 at 11:48:18AM +0000, Mihail Atanassov wrote:
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
drivers/gpu/drm/bridge/thc63lvd1024.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/bridge/thc63lvd1024.c b/drivers/gpu/drm/bridge/thc63lvd1024.c index 3d74129b2995..abe806db5f4d 100644 --- a/drivers/gpu/drm/bridge/thc63lvd1024.c +++ b/drivers/gpu/drm/bridge/thc63lvd1024.c @@ -218,11 +218,8 @@ static int thc63_probe(struct platform_device *pdev) if (ret) return ret;
- thc63->bridge.driver_private = thc63;
- thc63->bridge.of_node = pdev->dev.of_node;
- thc63->bridge.funcs = &thc63_bridge_func;
- thc63->bridge.timings = &thc63->timings;
- drm_bridge_init(&thc63->bridge, &pdev->dev, &thc63_bridge_func,
&thc63->timings, thc63);
I think driver_private is unused, so the last argument can be NULL.
drm_bridge_add(&thc63->bridge);
return 0;
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c index 43abf01ebd4c..4e236b46f913 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c @@ -765,9 +765,8 @@ static int ti_sn_bridge_probe(struct i2c_client *client, pdata->aux.transfer = ti_sn_aux_transfer; drm_dp_aux_register(&pdata->aux);
- pdata->bridge.funcs = &ti_sn_bridge_funcs; - pdata->bridge.of_node = client->dev.of_node; - + drm_bridge_init(&pdata->bridge, &client->dev, &ti_sn_bridge_funcs, + NULL, NULL); drm_bridge_add(&pdata->bridge);
ti_sn_debugfs_init(pdata);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/bridge/ti-tfp410.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c index aa3198dc9903..377eca989ff3 100644 --- a/drivers/gpu/drm/bridge/ti-tfp410.c +++ b/drivers/gpu/drm/bridge/ti-tfp410.c @@ -328,9 +328,8 @@ static int tfp410_init(struct device *dev, bool i2c) return -ENOMEM; dev_set_drvdata(dev, dvi);
- dvi->bridge.funcs = &tfp410_bridge_funcs; - dvi->bridge.of_node = dev->of_node; - dvi->bridge.timings = &dvi->timings; + drm_bridge_init(&dvi->bridge, dev, &tfp410_bridge_funcs, &dvi->timings, + NULL); dvi->dev = dev;
ret = tfp410_parse_timings(dvi, i2c);
No functional change: no logic depends on driver_private being NULL, so it's safe to set it earlier in exynos_mic_probe.
Acked-by: Inki Dae inki.dae@samsung.com Tested-by: Inki Dae inki.dae@samsung.com Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/exynos/exynos_drm_mic.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_mic.c b/drivers/gpu/drm/exynos/exynos_drm_mic.c index f41d75923557..caad348a5646 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_mic.c +++ b/drivers/gpu/drm/exynos/exynos_drm_mic.c @@ -309,10 +309,6 @@ static const struct drm_bridge_funcs mic_bridge_funcs = { static int exynos_mic_bind(struct device *dev, struct device *master, void *data) { - struct exynos_mic *mic = dev_get_drvdata(dev); - - mic->bridge.driver_private = mic; - return 0; }
@@ -422,9 +418,7 @@ static int exynos_mic_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, mic);
- mic->bridge.funcs = &mic_bridge_funcs; - mic->bridge.of_node = dev->of_node; - + drm_bridge_init(&mic->bridge, dev, &mic_bridge_funcs, NULL, mic); drm_bridge_add(&mic->bridge);
pm_runtime_enable(dev);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/i2c/tda998x_drv.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c index a63790d32d75..f7dfa694aff7 100644 --- a/drivers/gpu/drm/i2c/tda998x_drv.c +++ b/drivers/gpu/drm/i2c/tda998x_drv.c @@ -1974,11 +1974,7 @@ static int tda998x_create(struct device *dev) goto fail; }
- priv->bridge.funcs = &tda998x_bridge_funcs; -#ifdef CONFIG_OF - priv->bridge.of_node = dev->of_node; -#endif - + drm_bridge_init(&priv->bridge, dev, &tda998x_bridge_funcs, NULL, NULL); drm_bridge_add(&priv->bridge);
return 0;
No functional change.
Acked-by: Linus Walleij linus.walleij@linaro.org Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/mcde/mcde_dsi.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/mcde/mcde_dsi.c b/drivers/gpu/drm/mcde/mcde_dsi.c index 42fff811653e..d9b9253acccf 100644 --- a/drivers/gpu/drm/mcde/mcde_dsi.c +++ b/drivers/gpu/drm/mcde/mcde_dsi.c @@ -955,8 +955,7 @@ static int mcde_dsi_bind(struct device *dev, struct device *master, d->bridge_out = bridge;
/* Create a bridge for this DSI channel */ - d->bridge.funcs = &mcde_dsi_bridge_funcs; - d->bridge.of_node = dev->of_node; + drm_bridge_init(&d->bridge, dev, &mcde_dsi_bridge_funcs, NULL, NULL); drm_bridge_add(&d->bridge);
/* TODO: first come first serve, use a list */
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/rcar-du/rcar_lvds.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c index 8c6c172bbf2e..ac1f29bacfcb 100644 --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c @@ -881,9 +881,8 @@ static int rcar_lvds_probe(struct platform_device *pdev) if (ret < 0) return ret;
- lvds->bridge.driver_private = lvds; - lvds->bridge.funcs = &rcar_lvds_bridge_ops; - lvds->bridge.of_node = pdev->dev.of_node; + drm_bridge_init(&lvds->bridge, &pdev->dev, &rcar_lvds_bridge_ops, + NULL, lvds);
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); lvds->mmio = devm_ioremap_resource(&pdev->dev, mem);
Hi Mihail,
Thank you for the patch.
On Wed, Dec 04, 2019 at 11:48:23AM +0000, Mihail Atanassov wrote:
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
If you squash this with 26/28,
Reviewed-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
drivers/gpu/drm/rcar-du/rcar_lvds.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c index 8c6c172bbf2e..ac1f29bacfcb 100644 --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c @@ -881,9 +881,8 @@ static int rcar_lvds_probe(struct platform_device *pdev) if (ret < 0) return ret;
- lvds->bridge.driver_private = lvds;
- lvds->bridge.funcs = &rcar_lvds_bridge_ops;
- lvds->bridge.of_node = pdev->dev.of_node;
drm_bridge_init(&lvds->bridge, &pdev->dev, &rcar_lvds_bridge_ops,
NULL, lvds);
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); lvds->mmio = devm_ioremap_resource(&pdev->dev, mem);
No functional change.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/mediatek/mtk_hdmi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c index f684947c5243..9761a80674d9 100644 --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c @@ -1708,8 +1708,8 @@ static int mtk_drm_hdmi_probe(struct platform_device *pdev)
mtk_hdmi_register_audio_driver(dev);
- hdmi->bridge.funcs = &mtk_hdmi_bridge_funcs; - hdmi->bridge.of_node = pdev->dev.of_node; + drm_bridge_init(&hdmi->bridge, &pdev->dev, &mtk_hdmi_bridge_funcs, + NULL, NULL); drm_bridge_add(&hdmi->bridge);
ret = mtk_hdmi_clk_enable_audio(hdmi);
Hi, Mihail:
On Wed, 2019-12-04 at 11:48 +0000, Mihail Atanassov wrote:
No functional change.
Acked-by: CK Hu ck.hu@mediatek.com
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
drivers/gpu/drm/mediatek/mtk_hdmi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c index f684947c5243..9761a80674d9 100644 --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c @@ -1708,8 +1708,8 @@ static int mtk_drm_hdmi_probe(struct platform_device *pdev)
mtk_hdmi_register_audio_driver(dev);
- hdmi->bridge.funcs = &mtk_hdmi_bridge_funcs;
- hdmi->bridge.of_node = pdev->dev.of_node;
drm_bridge_init(&hdmi->bridge, &pdev->dev, &mtk_hdmi_bridge_funcs,
NULL, NULL);
drm_bridge_add(&hdmi->bridge);
ret = mtk_hdmi_clk_enable_audio(hdmi);
No functional change: it's not used anywhere.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/rcar-du/rcar_lvds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c index ac1f29bacfcb..168a718cbcbd 100644 --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c @@ -882,7 +882,7 @@ static int rcar_lvds_probe(struct platform_device *pdev) return ret;
drm_bridge_init(&lvds->bridge, &pdev->dev, &rcar_lvds_bridge_ops, - NULL, lvds); + NULL, NULL);
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); lvds->mmio = devm_ioremap_resource(&pdev->dev, mem);
Hi Mihail,
Thank you for the patch.
On Wed, Dec 04, 2019 at 11:48:24AM +0000, Mihail Atanassov wrote:
No functional change: it's not used anywhere.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
drivers/gpu/drm/rcar-du/rcar_lvds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c index ac1f29bacfcb..168a718cbcbd 100644 --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c @@ -882,7 +882,7 @@ static int rcar_lvds_probe(struct platform_device *pdev) return ret;
drm_bridge_init(&lvds->bridge, &pdev->dev, &rcar_lvds_bridge_ops,
NULL, lvds);
NULL, NULL);
You can squash this with 25/28.
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); lvds->mmio = devm_ioremap_resource(&pdev->dev, mem);
No functional change: drm_bridge_init() sets bridge->of_node, but that's not used by msm anywhere, and the bridges aren't published with drm_bridge_add() for it to matter.
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++-- drivers/gpu/drm/msm/edp/edp_bridge.c | 3 +-- drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index 271aa7bbca92..ba54049a6338 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -662,8 +662,8 @@ struct drm_bridge *msm_dsi_manager_bridge_init(u8 id) encoder = msm_dsi->encoder;
bridge = &dsi_bridge->base; - bridge->funcs = &dsi_mgr_bridge_funcs; - + drm_bridge_init(bridge, msm_dsi->dev->dev, &dsi_mgr_bridge_funcs, + NULL, NULL); ret = drm_bridge_attach(encoder, bridge, NULL); if (ret) goto fail; diff --git a/drivers/gpu/drm/msm/edp/edp_bridge.c b/drivers/gpu/drm/msm/edp/edp_bridge.c index 2950bba4aca9..53d4dc591bd2 100644 --- a/drivers/gpu/drm/msm/edp/edp_bridge.c +++ b/drivers/gpu/drm/msm/edp/edp_bridge.c @@ -89,8 +89,7 @@ struct drm_bridge *msm_edp_bridge_init(struct msm_edp *edp) edp_bridge->edp = edp;
bridge = &edp_bridge->base; - bridge->funcs = &edp_bridge_funcs; - + drm_bridge_init(bridge, edp->dev->dev, &edp_bridge_funcs, NULL, NULL); ret = drm_bridge_attach(edp->encoder, bridge, NULL); if (ret) goto fail; diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c index ba81338a9bf8..d038599279bc 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c @@ -285,8 +285,8 @@ struct drm_bridge *msm_hdmi_bridge_init(struct hdmi *hdmi) hdmi_bridge->hdmi = hdmi;
bridge = &hdmi_bridge->base; - bridge->funcs = &msm_hdmi_bridge_funcs; - + drm_bridge_init(bridge, hdmi->dev->dev, &msm_hdmi_bridge_funcs, + NULL, NULL); ret = drm_bridge_attach(hdmi->encoder, bridge, NULL); if (ret) goto fail;
No functional change.
v2: - Also apply drm_bridge_init() in sti_hdmi.c and sti_hda.c (Sam, Benjamin)
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com --- drivers/gpu/drm/sti/sti_dvo.c | 4 +--- drivers/gpu/drm/sti/sti_hda.c | 3 +-- drivers/gpu/drm/sti/sti_hdmi.c | 3 +-- 3 files changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c index 68289b0b063a..20a3956b33bc 100644 --- a/drivers/gpu/drm/sti/sti_dvo.c +++ b/drivers/gpu/drm/sti/sti_dvo.c @@ -462,9 +462,7 @@ static int sti_dvo_bind(struct device *dev, struct device *master, void *data) if (!bridge) return -ENOMEM;
- bridge->driver_private = dvo; - bridge->funcs = &sti_dvo_bridge_funcs; - bridge->of_node = dvo->dev.of_node; + drm_bridge_init(bridge, &dvo->dev, &sti_dvo_bridge_funcs, NULL, dvo); drm_bridge_add(bridge);
err = drm_bridge_attach(encoder, bridge, NULL); diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c index 8f7bf33815fd..c7296e354a34 100644 --- a/drivers/gpu/drm/sti/sti_hda.c +++ b/drivers/gpu/drm/sti/sti_hda.c @@ -699,8 +699,7 @@ static int sti_hda_bind(struct device *dev, struct device *master, void *data) if (!bridge) return -ENOMEM;
- bridge->driver_private = hda; - bridge->funcs = &sti_hda_bridge_funcs; + drm_bridge_init(bridge, dev, &sti_hda_bridge_funcs, NULL, hda); drm_bridge_attach(encoder, bridge, NULL);
connector->encoder = encoder; diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c index 814560ead4e1..c9ae3e18fa5d 100644 --- a/drivers/gpu/drm/sti/sti_hdmi.c +++ b/drivers/gpu/drm/sti/sti_hdmi.c @@ -1279,8 +1279,7 @@ static int sti_hdmi_bind(struct device *dev, struct device *master, void *data) if (!bridge) return -EINVAL;
- bridge->driver_private = hdmi; - bridge->funcs = &sti_hdmi_bridge_funcs; + drm_bridge_init(bridge, dev, &sti_hdmi_bridge_funcs, NULL, hdmi); drm_bridge_attach(encoder, bridge, NULL);
connector->encoder = encoder;
Le mer. 4 déc. 2019 à 12:48, Mihail Atanassov Mihail.Atanassov@arm.com a écrit :
No functional change.
v2:
- Also apply drm_bridge_init() in sti_hdmi.c and sti_hda.c (Sam, Benjamin)
Signed-off-by: Mihail Atanassov mihail.atanassov@arm.com
Reviewed-by: Benjamin Gaignard benjamin.gaignard@linaro.org
drivers/gpu/drm/sti/sti_dvo.c | 4 +--- drivers/gpu/drm/sti/sti_hda.c | 3 +-- drivers/gpu/drm/sti/sti_hdmi.c | 3 +-- 3 files changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c index 68289b0b063a..20a3956b33bc 100644 --- a/drivers/gpu/drm/sti/sti_dvo.c +++ b/drivers/gpu/drm/sti/sti_dvo.c @@ -462,9 +462,7 @@ static int sti_dvo_bind(struct device *dev, struct device *master, void *data) if (!bridge) return -ENOMEM;
bridge->driver_private = dvo;
bridge->funcs = &sti_dvo_bridge_funcs;
bridge->of_node = dvo->dev.of_node;
drm_bridge_init(bridge, &dvo->dev, &sti_dvo_bridge_funcs, NULL, dvo); drm_bridge_add(bridge); err = drm_bridge_attach(encoder, bridge, NULL);
diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c index 8f7bf33815fd..c7296e354a34 100644 --- a/drivers/gpu/drm/sti/sti_hda.c +++ b/drivers/gpu/drm/sti/sti_hda.c @@ -699,8 +699,7 @@ static int sti_hda_bind(struct device *dev, struct device *master, void *data) if (!bridge) return -ENOMEM;
bridge->driver_private = hda;
bridge->funcs = &sti_hda_bridge_funcs;
drm_bridge_init(bridge, dev, &sti_hda_bridge_funcs, NULL, hda); drm_bridge_attach(encoder, bridge, NULL); connector->encoder = encoder;
diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c index 814560ead4e1..c9ae3e18fa5d 100644 --- a/drivers/gpu/drm/sti/sti_hdmi.c +++ b/drivers/gpu/drm/sti/sti_hdmi.c @@ -1279,8 +1279,7 @@ static int sti_hdmi_bind(struct device *dev, struct device *master, void *data) if (!bridge) return -EINVAL;
bridge->driver_private = hdmi;
bridge->funcs = &sti_hdmi_bridge_funcs;
drm_bridge_init(bridge, dev, &sti_hdmi_bridge_funcs, NULL, hdmi); drm_bridge_attach(encoder, bridge, NULL); connector->encoder = encoder;
-- 2.23.0
Hi Mihail,
Thank you for the patches.
On Wed, Dec 04, 2019 at 11:48:01AM +0000, Mihail Atanassov wrote:
Hi all,
I've dropped the fun parts of this series since they need more work, but figured drm_bridge_init() as a concept is still valuable on its own (and I think I'll need it to roll out device links for registered bridges), so here goes.
v2:
- expanded commit messages and added some extra bridge-related documentation (Daniel)
- dropped v1 patches 29 and 30: 29 needs more work, and 30 depends on it
- added all remaining drm_bridge implementers, found by searching for drm_bridge_funcs which is mandatory for any bridge; new uses in patches 3, 27, and 28 (Sam)
- due to the above, I've decided to squash all analogix changes into one patch
For patches 02, 04 to 11 and 13 to 17, 19 to 24, and 27 to 28,
Reviewed-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
v1 [https://patchwork.freedesktop.org/series/70039/] cover text below:
This series adds device links support to drm_bridge. The motivation behind it is that a drm_bridge in a module could get removed under the feet of the bridge user without warning, so we need a way to remove and reprobe the client as needed to avoid peering into the void.
1: Add a drm_bridge_init() function which wraps all initialisation of the structure prior to calling drm_bridge_add().
2-26,28: Apply the drm_bridge_init() refactor to every bridge that uses drm_bridge_add().
27: Minor cleanup in rcar-du.
29: Add of_drm_find_bridge_devlink() which functions the same as of_drm_find_bridge() plus adds a device device link from the owning drm_device to the bridge device.
30: As a motivating example, convert komeda to exclusively use drm_bridge for its pipe outputs; this isn't a regression in usability any more since device links bring the same automatic remove/reprobe feature as components.
Mihail Atanassov (28): drm: Introduce drm_bridge_init() drm/bridge: adv7511: Use drm_bridge_init() drm/bridge/analogix: Use drm_bridge_init() drm/bridge: cdns: Use drm_bridge_init() drm/bridge: dumb-vga-dac: Use drm_bridge_init() drm/bridge: lvds-encoder: Use drm_bridge_init() drm/bridge: megachips-stdpxxxx-ge-b850v3-fw: Use drm_bridge_init() drm/bridge: nxp-ptn3460: Use drm_bridge_init() drm/bridge: panel: Use drm_bridge_init() drm/bridge: ps8622: Use drm_bridge_init() drm/bridge: sii902x: Use drm_bridge_init() gpu: drm: bridge: sii9234: Use drm_bridge_init() drm/bridge: sil_sii8620: Use drm_bridge_init() drm/bridge: dw-hdmi: Use drm_bridge_init() drm/bridge/synopsys: dsi: Use drm_bridge_init() drm/bridge: tc358764: Use drm_bridge_init() drm/bridge: tc358767: Use drm_bridge_init() drm/bridge: thc63: Use drm_bridge_init() drm/bridge: ti-sn65dsi86: Use drm_bridge_init() drm/bridge: ti-tfp410: Use drm_bridge_init() drm/exynos: mic: Use drm_bridge_init() drm/i2c: tda998x: Use drm_bridge_init() drm/mcde: dsi: Use drm_bridge_init() drm/mediatek: hdmi: Use drm_bridge_init() drm: rcar-du: lvds: Use drm_bridge_init() drm: rcar-du: lvds: Don't set drm_bridge private pointer drm/sti: Use drm_bridge_init() drm/msm: Use drm_bridge_init()
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 5 ++- .../drm/bridge/analogix/analogix-anx6345.c | 5 ++- .../drm/bridge/analogix/analogix-anx78xx.c | 8 ++--- .../drm/bridge/analogix/analogix_dp_core.c | 5 ++- drivers/gpu/drm/bridge/cdns-dsi.c | 4 +-- drivers/gpu/drm/bridge/dumb-vga-dac.c | 6 ++-- drivers/gpu/drm/bridge/lvds-encoder.c | 7 ++-- .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 4 +-- drivers/gpu/drm/bridge/nxp-ptn3460.c | 4 +-- drivers/gpu/drm/bridge/panel.c | 7 ++-- drivers/gpu/drm/bridge/parade-ps8622.c | 3 +- drivers/gpu/drm/bridge/sii902x.c | 5 ++- drivers/gpu/drm/bridge/sii9234.c | 3 +- drivers/gpu/drm/bridge/sil-sii8620.c | 3 +- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 7 ++-- drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 7 ++-- drivers/gpu/drm/bridge/tc358764.c | 4 +-- drivers/gpu/drm/bridge/tc358767.c | 3 +- drivers/gpu/drm/bridge/thc63lvd1024.c | 7 ++-- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 5 ++- drivers/gpu/drm/bridge/ti-tfp410.c | 5 ++- drivers/gpu/drm/drm_bridge.c | 34 ++++++++++++++++++- drivers/gpu/drm/exynos/exynos_drm_mic.c | 8 +---- drivers/gpu/drm/i2c/tda998x_drv.c | 6 +--- drivers/gpu/drm/mcde/mcde_dsi.c | 3 +- drivers/gpu/drm/mediatek/mtk_hdmi.c | 4 +-- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 +-- drivers/gpu/drm/msm/edp/edp_bridge.c | 3 +- drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 4 +-- drivers/gpu/drm/rcar-du/rcar_lvds.c | 5 ++- drivers/gpu/drm/sti/sti_dvo.c | 4 +-- drivers/gpu/drm/sti/sti_hda.c | 3 +- drivers/gpu/drm/sti/sti_hdmi.c | 3 +- include/drm/drm_bridge.h | 15 +++++++- 34 files changed, 100 insertions(+), 103 deletions(-)
Hi Mihail,
On 04/12/2019 12:48, Mihail Atanassov wrote:
Hi all,
I've dropped the fun parts of this series since they need more work, but figured drm_bridge_init() as a concept is still valuable on its own (and I think I'll need it to roll out device links for registered bridges), so here goes.
v2:
- expanded commit messages and added some extra bridge-related documentation (Daniel)
- dropped v1 patches 29 and 30: 29 needs more work, and 30 depends on it
- added all remaining drm_bridge implementers, found by searching for drm_bridge_funcs which is mandatory for any bridge; new uses in patches 3, 27, and 28 (Sam)
- due to the above, I've decided to squash all analogix changes into one patch
v1 [https://patchwork.freedesktop.org/series/70039/] cover text below:
This series adds device links support to drm_bridge. The motivation behind it is that a drm_bridge in a module could get removed under the feet of the bridge user without warning, so we need a way to remove and reprobe the client as needed to avoid peering into the void.
1: Add a drm_bridge_init() function which wraps all initialisation of the structure prior to calling drm_bridge_add().
2-26,28: Apply the drm_bridge_init() refactor to every bridge that uses drm_bridge_add().
27: Minor cleanup in rcar-du.
29: Add of_drm_find_bridge_devlink() which functions the same as of_drm_find_bridge() plus adds a device device link from the owning drm_device to the bridge device.
30: As a motivating example, convert komeda to exclusively use drm_bridge for its pipe outputs; this isn't a regression in usability any more since device links bring the same automatic remove/reprobe feature as components.
Mihail Atanassov (28): drm: Introduce drm_bridge_init() drm/bridge: adv7511: Use drm_bridge_init() drm/bridge/analogix: Use drm_bridge_init() drm/bridge: cdns: Use drm_bridge_init() drm/bridge: dumb-vga-dac: Use drm_bridge_init() drm/bridge: lvds-encoder: Use drm_bridge_init() drm/bridge: megachips-stdpxxxx-ge-b850v3-fw: Use drm_bridge_init() drm/bridge: nxp-ptn3460: Use drm_bridge_init() drm/bridge: panel: Use drm_bridge_init() drm/bridge: ps8622: Use drm_bridge_init() drm/bridge: sii902x: Use drm_bridge_init() gpu: drm: bridge: sii9234: Use drm_bridge_init() drm/bridge: sil_sii8620: Use drm_bridge_init() drm/bridge: dw-hdmi: Use drm_bridge_init() drm/bridge/synopsys: dsi: Use drm_bridge_init() drm/bridge: tc358764: Use drm_bridge_init() drm/bridge: tc358767: Use drm_bridge_init() drm/bridge: thc63: Use drm_bridge_init() drm/bridge: ti-sn65dsi86: Use drm_bridge_init() drm/bridge: ti-tfp410: Use drm_bridge_init() drm/exynos: mic: Use drm_bridge_init() drm/i2c: tda998x: Use drm_bridge_init() drm/mcde: dsi: Use drm_bridge_init() drm/mediatek: hdmi: Use drm_bridge_init() drm: rcar-du: lvds: Use drm_bridge_init() drm: rcar-du: lvds: Don't set drm_bridge private pointer drm/sti: Use drm_bridge_init() drm/msm: Use drm_bridge_init()
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 5 ++- .../drm/bridge/analogix/analogix-anx6345.c | 5 ++- .../drm/bridge/analogix/analogix-anx78xx.c | 8 ++--- .../drm/bridge/analogix/analogix_dp_core.c | 5 ++- drivers/gpu/drm/bridge/cdns-dsi.c | 4 +-- drivers/gpu/drm/bridge/dumb-vga-dac.c | 6 ++-- drivers/gpu/drm/bridge/lvds-encoder.c | 7 ++-- .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 4 +-- drivers/gpu/drm/bridge/nxp-ptn3460.c | 4 +-- drivers/gpu/drm/bridge/panel.c | 7 ++-- drivers/gpu/drm/bridge/parade-ps8622.c | 3 +- drivers/gpu/drm/bridge/sii902x.c | 5 ++- drivers/gpu/drm/bridge/sii9234.c | 3 +- drivers/gpu/drm/bridge/sil-sii8620.c | 3 +- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 7 ++-- drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 7 ++-- drivers/gpu/drm/bridge/tc358764.c | 4 +-- drivers/gpu/drm/bridge/tc358767.c | 3 +- drivers/gpu/drm/bridge/thc63lvd1024.c | 7 ++-- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 5 ++- drivers/gpu/drm/bridge/ti-tfp410.c | 5 ++- drivers/gpu/drm/drm_bridge.c | 34 ++++++++++++++++++- drivers/gpu/drm/exynos/exynos_drm_mic.c | 8 +---- drivers/gpu/drm/i2c/tda998x_drv.c | 6 +--- drivers/gpu/drm/mcde/mcde_dsi.c | 3 +- drivers/gpu/drm/mediatek/mtk_hdmi.c | 4 +-- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 +-- drivers/gpu/drm/msm/edp/edp_bridge.c | 3 +- drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 4 +-- drivers/gpu/drm/rcar-du/rcar_lvds.c | 5 ++- drivers/gpu/drm/sti/sti_dvo.c | 4 +-- drivers/gpu/drm/sti/sti_hda.c | 3 +- drivers/gpu/drm/sti/sti_hdmi.c | 3 +- include/drm/drm_bridge.h | 15 +++++++- 34 files changed, 100 insertions(+), 103 deletions(-)
Can you check it doesn't collides with Boris 1-7 of "drm: Add support for bus-format negotiation" patches he just pushed on drm-misc-next ?
Neil
On Monday, 9 December 2019 10:39:07 GMT Neil Armstrong wrote:
Hi Mihail,
Hi Neil,
On 04/12/2019 12:48, Mihail Atanassov wrote:
Hi all,
I've dropped the fun parts of this series since they need more work, but figured drm_bridge_init() as a concept is still valuable on its own (and I think I'll need it to roll out device links for registered bridges), so here goes.
v2:
- expanded commit messages and added some extra bridge-related documentation (Daniel)
- dropped v1 patches 29 and 30: 29 needs more work, and 30 depends on it
- added all remaining drm_bridge implementers, found by searching for drm_bridge_funcs which is mandatory for any bridge; new uses in patches 3, 27, and 28 (Sam)
- due to the above, I've decided to squash all analogix changes into one patch
v1 [https://patchwork.freedesktop.org/series/70039/] cover text below:
This series adds device links support to drm_bridge. The motivation behind it is that a drm_bridge in a module could get removed under the feet of the bridge user without warning, so we need a way to remove and reprobe the client as needed to avoid peering into the void.
1: Add a drm_bridge_init() function which wraps all initialisation of the structure prior to calling drm_bridge_add().
2-26,28: Apply the drm_bridge_init() refactor to every bridge that uses drm_bridge_add().
27: Minor cleanup in rcar-du.
29: Add of_drm_find_bridge_devlink() which functions the same as of_drm_find_bridge() plus adds a device device link from the owning drm_device to the bridge device.
30: As a motivating example, convert komeda to exclusively use drm_bridge for its pipe outputs; this isn't a regression in usability any more since device links bring the same automatic remove/reprobe feature as components.
Mihail Atanassov (28): drm: Introduce drm_bridge_init() drm/bridge: adv7511: Use drm_bridge_init() drm/bridge/analogix: Use drm_bridge_init() drm/bridge: cdns: Use drm_bridge_init() drm/bridge: dumb-vga-dac: Use drm_bridge_init() drm/bridge: lvds-encoder: Use drm_bridge_init() drm/bridge: megachips-stdpxxxx-ge-b850v3-fw: Use drm_bridge_init() drm/bridge: nxp-ptn3460: Use drm_bridge_init() drm/bridge: panel: Use drm_bridge_init() drm/bridge: ps8622: Use drm_bridge_init() drm/bridge: sii902x: Use drm_bridge_init() gpu: drm: bridge: sii9234: Use drm_bridge_init() drm/bridge: sil_sii8620: Use drm_bridge_init() drm/bridge: dw-hdmi: Use drm_bridge_init() drm/bridge/synopsys: dsi: Use drm_bridge_init() drm/bridge: tc358764: Use drm_bridge_init() drm/bridge: tc358767: Use drm_bridge_init() drm/bridge: thc63: Use drm_bridge_init() drm/bridge: ti-sn65dsi86: Use drm_bridge_init() drm/bridge: ti-tfp410: Use drm_bridge_init() drm/exynos: mic: Use drm_bridge_init() drm/i2c: tda998x: Use drm_bridge_init() drm/mcde: dsi: Use drm_bridge_init() drm/mediatek: hdmi: Use drm_bridge_init() drm: rcar-du: lvds: Use drm_bridge_init() drm: rcar-du: lvds: Don't set drm_bridge private pointer drm/sti: Use drm_bridge_init() drm/msm: Use drm_bridge_init()
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 5 ++- .../drm/bridge/analogix/analogix-anx6345.c | 5 ++- .../drm/bridge/analogix/analogix-anx78xx.c | 8 ++--- .../drm/bridge/analogix/analogix_dp_core.c | 5 ++- drivers/gpu/drm/bridge/cdns-dsi.c | 4 +-- drivers/gpu/drm/bridge/dumb-vga-dac.c | 6 ++-- drivers/gpu/drm/bridge/lvds-encoder.c | 7 ++-- .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 4 +-- drivers/gpu/drm/bridge/nxp-ptn3460.c | 4 +-- drivers/gpu/drm/bridge/panel.c | 7 ++-- drivers/gpu/drm/bridge/parade-ps8622.c | 3 +- drivers/gpu/drm/bridge/sii902x.c | 5 ++- drivers/gpu/drm/bridge/sii9234.c | 3 +- drivers/gpu/drm/bridge/sil-sii8620.c | 3 +- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 7 ++-- drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 7 ++-- drivers/gpu/drm/bridge/tc358764.c | 4 +-- drivers/gpu/drm/bridge/tc358767.c | 3 +- drivers/gpu/drm/bridge/thc63lvd1024.c | 7 ++-- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 5 ++- drivers/gpu/drm/bridge/ti-tfp410.c | 5 ++- drivers/gpu/drm/drm_bridge.c | 34 ++++++++++++++++++- drivers/gpu/drm/exynos/exynos_drm_mic.c | 8 +---- drivers/gpu/drm/i2c/tda998x_drv.c | 6 +--- drivers/gpu/drm/mcde/mcde_dsi.c | 3 +- drivers/gpu/drm/mediatek/mtk_hdmi.c | 4 +-- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 +-- drivers/gpu/drm/msm/edp/edp_bridge.c | 3 +- drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 4 +-- drivers/gpu/drm/rcar-du/rcar_lvds.c | 5 ++- drivers/gpu/drm/sti/sti_dvo.c | 4 +-- drivers/gpu/drm/sti/sti_hda.c | 3 +- drivers/gpu/drm/sti/sti_hdmi.c | 3 +- include/drm/drm_bridge.h | 15 +++++++- 34 files changed, 100 insertions(+), 103 deletions(-)
Can you check it doesn't collides with Boris 1-7 of "drm: Add support for bus-format negotiation" patches he just pushed on drm-misc-next ?
Thanks for the heads-up. There's no technical conflict but the build fails. I'll fix it for v3 after I get the de-midlayering of drm_bridge done (see https://patchwork.freedesktop.org/patch/343643/?series=70432&rev=1 for context) and the s/bridge->dev/bridge->drm/ patch merged (https://patchwork.freedesktop.org/patch/343824/).
Neil
dri-devel@lists.freedesktop.org