| From 17e0521750399205f432966e602e125294879cdd Mon Sep 17 00:00:00 2001 |
| From: Philipp Zabel <p.zabel@pengutronix.de> |
| Date: Mon, 4 Jan 2016 17:32:26 +0100 |
| Subject: gpu: ipu-v3: Do not bail out on missing optional port nodes |
| |
| From: Philipp Zabel <p.zabel@pengutronix.de> |
| |
| commit 17e0521750399205f432966e602e125294879cdd upstream. |
| |
| The port nodes are documented as optional, treat them accordingly. |
| |
| Reported-by: Martin Fuzzey <mfuzzey@parkeon.com> |
| Reported-by: Chris Healy <Chris.Healy@zii.aero> |
| Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> |
| Fixes: 304e6be652e2 ("gpu: ipu-v3: Assign of_node of child platform devices to corresponding ports") |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/ipu-v3/ipu-common.c | 21 ++++++++++++--------- |
| 1 file changed, 12 insertions(+), 9 deletions(-) |
| |
| --- a/drivers/gpu/ipu-v3/ipu-common.c |
| +++ b/drivers/gpu/ipu-v3/ipu-common.c |
| @@ -1050,6 +1050,17 @@ static int ipu_add_client_devices(struct |
| for (i = 0; i < ARRAY_SIZE(client_reg); i++) { |
| const struct ipu_platform_reg *reg = &client_reg[i]; |
| struct platform_device *pdev; |
| + struct device_node *of_node; |
| + |
| + /* Associate subdevice with the corresponding port node */ |
| + of_node = of_graph_get_port_by_id(dev->of_node, i); |
| + if (!of_node) { |
| + dev_info(dev, |
| + "no port@%d node in %s, not using %s%d\n", |
| + i, dev->of_node->full_name, |
| + (i / 2) ? "DI" : "CSI", i % 2); |
| + continue; |
| + } |
| |
| pdev = platform_device_alloc(reg->name, id++); |
| if (!pdev) { |
| @@ -1057,17 +1068,9 @@ static int ipu_add_client_devices(struct |
| goto err_register; |
| } |
| |
| + pdev->dev.of_node = of_node; |
| pdev->dev.parent = dev; |
| |
| - /* Associate subdevice with the corresponding port node */ |
| - pdev->dev.of_node = of_graph_get_port_by_id(dev->of_node, i); |
| - if (!pdev->dev.of_node) { |
| - dev_err(dev, "missing port@%d node in %s\n", i, |
| - dev->of_node->full_name); |
| - ret = -ENODEV; |
| - goto err_register; |
| - } |
| - |
| ret = platform_device_add_data(pdev, ®->pdata, |
| sizeof(reg->pdata)); |
| if (!ret) |