diff options
author | Philipp Zabel <p.zabel@pengutronix.de> | 2013-03-28 12:35:21 -0400 |
---|---|---|
committer | Shawn Guo <shawn.guo@linaro.org> | 2013-04-12 07:28:13 -0400 |
commit | 6c64155de972e8c42750340c21e225a2f8b78f26 (patch) | |
tree | e1cf842bb4109ffb22d73862f5a3dcc455f5f12c /drivers/staging | |
parent | 02985b94638b4de3ef9f2eb2ac5befe5bab12c26 (diff) |
staging: drm/imx: Use SRC to reset IPU
Request the System Reset Controller to reset the IPU if
specified via device tree phandle.
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
Reviewed-by: Marek Vasut <marex@denx.de>
Reviewed-by: Pavel Machek <pavel@ucw.cz>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/imx-drm/ipu-v3/ipu-common.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-common.c b/drivers/staging/imx-drm/ipu-v3/ipu-common.c index 366f259e3756..04b8320d6579 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-common.c +++ b/drivers/staging/imx-drm/ipu-v3/ipu-common.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/export.h> | 16 | #include <linux/export.h> |
17 | #include <linux/types.h> | 17 | #include <linux/types.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/reset.h> | ||
19 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
20 | #include <linux/err.h> | 21 | #include <linux/err.h> |
21 | #include <linux/spinlock.h> | 22 | #include <linux/spinlock.h> |
@@ -660,7 +661,7 @@ int ipu_idmac_disable_channel(struct ipuv3_channel *channel) | |||
660 | } | 661 | } |
661 | EXPORT_SYMBOL_GPL(ipu_idmac_disable_channel); | 662 | EXPORT_SYMBOL_GPL(ipu_idmac_disable_channel); |
662 | 663 | ||
663 | static int ipu_reset(struct ipu_soc *ipu) | 664 | static int ipu_memory_reset(struct ipu_soc *ipu) |
664 | { | 665 | { |
665 | unsigned long timeout; | 666 | unsigned long timeout; |
666 | 667 | ||
@@ -1104,7 +1105,12 @@ static int ipu_probe(struct platform_device *pdev) | |||
1104 | if (ret) | 1105 | if (ret) |
1105 | goto out_failed_irq; | 1106 | goto out_failed_irq; |
1106 | 1107 | ||
1107 | ret = ipu_reset(ipu); | 1108 | ret = device_reset(&pdev->dev); |
1109 | if (ret) { | ||
1110 | dev_err(&pdev->dev, "failed to reset: %d\n", ret); | ||
1111 | goto out_failed_reset; | ||
1112 | } | ||
1113 | ret = ipu_memory_reset(ipu); | ||
1108 | if (ret) | 1114 | if (ret) |
1109 | goto out_failed_reset; | 1115 | goto out_failed_reset; |
1110 | 1116 | ||
@@ -1130,8 +1136,8 @@ static int ipu_probe(struct platform_device *pdev) | |||
1130 | failed_add_clients: | 1136 | failed_add_clients: |
1131 | ipu_submodules_exit(ipu); | 1137 | ipu_submodules_exit(ipu); |
1132 | failed_submodules_init: | 1138 | failed_submodules_init: |
1133 | ipu_irq_exit(ipu); | ||
1134 | out_failed_reset: | 1139 | out_failed_reset: |
1140 | ipu_irq_exit(ipu); | ||
1135 | out_failed_irq: | 1141 | out_failed_irq: |
1136 | clk_disable_unprepare(ipu->clk); | 1142 | clk_disable_unprepare(ipu->clk); |
1137 | failed_clk_get: | 1143 | failed_clk_get: |