On Tue, 20 Aug 2019 04:16:39 +0300 Laurent Pinchart laurent.pinchart@ideasonboard.com wrote:
Create a new simple_bridge_info structure that stores information about the bridge model, and store the bridge timings in there, along with the connector type. Use that new structure for of_device_id data. This enables support for non-VGA bridges.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com Reviewed-by: Andrzej Hajda a.hajda@samsung.com Reviewed-by: Stefan Agner stefan@agner.ch
Reviewed-by: Boris Brezillon boris.brezillon@collabora.com
Changes since v1:
- Renamed simple_bridge_info.type field to connector_type
drivers/gpu/drm/bridge/simple-bridge.c | 41 ++++++++++++++++++-------- 1 file changed, 29 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/bridge/simple-bridge.c b/drivers/gpu/drm/bridge/simple-bridge.c index 7551a361f22e..85aa852eafb4 100644 --- a/drivers/gpu/drm/bridge/simple-bridge.c +++ b/drivers/gpu/drm/bridge/simple-bridge.c @@ -16,10 +16,17 @@ #include <drm/drm_print.h> #include <drm/drm_probe_helper.h>
+struct simple_bridge_info {
- const struct drm_bridge_timings *timings;
- unsigned int connector_type;
+};
struct simple_bridge { struct drm_bridge bridge; struct drm_connector connector;
- const struct simple_bridge_info *info;
- struct i2c_adapter *ddc; struct regulator *vdd;
}; @@ -117,7 +124,7 @@ static int simple_bridge_attach(struct drm_bridge *bridge, &simple_bridge_con_helper_funcs); ret = drm_connector_init_with_ddc(bridge->dev, &sbridge->connector, &simple_bridge_con_funcs,
DRM_MODE_CONNECTOR_VGA,
if (ret) { DRM_ERROR("Failed to initialize connector\n");sbridge->info->connector_type, sbridge->ddc);
@@ -187,6 +194,8 @@ static int simple_bridge_probe(struct platform_device *pdev) return -ENOMEM; platform_set_drvdata(pdev, sbridge);
- sbridge->info = of_device_get_match_data(&pdev->dev);
- sbridge->vdd = devm_regulator_get_optional(&pdev->dev, "vdd"); if (IS_ERR(sbridge->vdd)) { int ret = PTR_ERR(sbridge->vdd);
@@ -210,7 +219,7 @@ static int simple_bridge_probe(struct platform_device *pdev)
sbridge->bridge.funcs = &simple_bridge_bridge_funcs; sbridge->bridge.of_node = pdev->dev.of_node;
- sbridge->bridge.timings = of_device_get_match_data(&pdev->dev);
sbridge->bridge.timings = sbridge->info->timings;
drm_bridge_add(&sbridge->bridge);
@@ -270,19 +279,27 @@ static const struct drm_bridge_timings ti_ths8135_bridge_timings = { static const struct of_device_id simple_bridge_match[] = { { .compatible = "dumb-vga-dac",
.data = NULL,
- },
- {
.data = &(const struct simple_bridge_info) {
.connector_type = DRM_MODE_CONNECTOR_VGA,
},
- }, { .compatible = "adi,adv7123",
.data = &default_bridge_timings,
- },
- {
.data = &(const struct simple_bridge_info) {
.timings = &default_bridge_timings,
.connector_type = DRM_MODE_CONNECTOR_VGA,
},
- }, { .compatible = "ti,ths8135",
.data = &ti_ths8135_bridge_timings,
- },
- {
.data = &(const struct simple_bridge_info) {
.timings = &ti_ths8135_bridge_timings,
.connector_type = DRM_MODE_CONNECTOR_VGA,
},
- }, { .compatible = "ti,ths8134",
.data = &ti_ths8134_bridge_timings,
.data = &(const struct simple_bridge_info) {
.timings = &ti_ths8134_bridge_timings,
.connector_type = DRM_MODE_CONNECTOR_VGA,
}, {},},
};