diff mbox

[U-Boot,1/2] i.MX: mxc_ipuv3_fb: add ipuv3_fb_shutdown() routine to stop IPU before bootm

Message ID 1348261019-9624-2-git-send-email-eric.nelson@boundarydevices.com
State Superseded
Delegated to: Anatolij Gustschin
Headers show

Commit Message

Eric Nelson Sept. 21, 2012, 8:56 p.m. UTC
Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com>
---
 drivers/video/mxc_ipuv3_fb.c |   20 ++++++++++++++++++++
 include/ipu_pixfmt.h         |    1 +
 2 files changed, 21 insertions(+), 0 deletions(-)

Comments

Eric Nelson Sept. 21, 2012, 9 p.m. UTC | #1
On 09/21/2012 01:56 PM, Eric Nelson wrote:
> Signed-off-by: Eric Nelson<eric.nelson@boundarydevices.com>
> ---
>   drivers/video/mxc_ipuv3_fb.c |   20 ++++++++++++++++++++
>   include/ipu_pixfmt.h         |    1 +
>   2 files changed, 21 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/video/mxc_ipuv3_fb.c b/drivers/video/mxc_ipuv3_fb.c
> index c38e22d..47b336e 100644
> --- a/drivers/video/mxc_ipuv3_fb.c
> +++ b/drivers/video/mxc_ipuv3_fb.c
> @@ -38,6 +38,7 @@
>   #include "videomodes.h"
>   #include "ipu.h"
>   #include "mxcfb.h"
> +#include "ipu_regs.h"
>
>   static int mxcfb_map_video_memory(struct fb_info *fbi);
>   static int mxcfb_unmap_video_memory(struct fb_info *fbi);
> @@ -576,6 +577,25 @@ err0:
>   	return ret;
>   }
>
> +void ipuv3_fb_shutdown(void)
> +{
> +	int i;
> +	struct ipu_stat *stat = (struct ipu_stat *)IPU_STAT;
> +
> +	for (i = 0; i<  ARRAY_SIZE(mxcfb_info); i++) {
> +		struct fb_info *fbi = mxcfb_info[i];
> +		if (fbi) {
> +			struct mxcfb_info *mxc_fbi = fbi->par;
> +			ipu_disable_channel(mxc_fbi->ipu_ch);
> +			ipu_uninit_channel(mxc_fbi->ipu_ch);
> +		}
> +	}
> +	for (i = 0; i<  ARRAY_SIZE(stat->int_stat); i++) {
> +		__raw_writel(__raw_readl(&stat->int_stat[i]),
> +			&stat->int_stat[i]);
> +	}
> +}
> +
>   void *video_hw_init(void)
>   {
>   	int ret;
> diff --git a/include/ipu_pixfmt.h b/include/ipu_pixfmt.h
> index 0019898..4baa711 100644
> --- a/include/ipu_pixfmt.h
> +++ b/include/ipu_pixfmt.h
> @@ -77,5 +77,6 @@
>   #define IPU_PIX_FMT_YUV422P fourcc('4', '2', '2', 'P')	/*<  16 YUV 4:2:2 */
>
>   int ipuv3_fb_init(struct fb_videomode *mode, uint8_t disp, uint32_t pixfmt);
> +void ipuv3_fb_shutdown(void);
>
>   #endif

Sorry. This is a duplicate of a prior e-mail.
diff mbox

Patch

diff --git a/drivers/video/mxc_ipuv3_fb.c b/drivers/video/mxc_ipuv3_fb.c
index c38e22d..47b336e 100644
--- a/drivers/video/mxc_ipuv3_fb.c
+++ b/drivers/video/mxc_ipuv3_fb.c
@@ -38,6 +38,7 @@ 
 #include "videomodes.h"
 #include "ipu.h"
 #include "mxcfb.h"
+#include "ipu_regs.h"
 
 static int mxcfb_map_video_memory(struct fb_info *fbi);
 static int mxcfb_unmap_video_memory(struct fb_info *fbi);
@@ -576,6 +577,25 @@  err0:
 	return ret;
 }
 
+void ipuv3_fb_shutdown(void)
+{
+	int i;
+	struct ipu_stat *stat = (struct ipu_stat *)IPU_STAT;
+
+	for (i = 0; i < ARRAY_SIZE(mxcfb_info); i++) {
+		struct fb_info *fbi = mxcfb_info[i];
+		if (fbi) {
+			struct mxcfb_info *mxc_fbi = fbi->par;
+			ipu_disable_channel(mxc_fbi->ipu_ch);
+			ipu_uninit_channel(mxc_fbi->ipu_ch);
+		}
+	}
+	for (i = 0; i < ARRAY_SIZE(stat->int_stat); i++) {
+		__raw_writel(__raw_readl(&stat->int_stat[i]),
+			     &stat->int_stat[i]);
+	}
+}
+
 void *video_hw_init(void)
 {
 	int ret;
diff --git a/include/ipu_pixfmt.h b/include/ipu_pixfmt.h
index 0019898..4baa711 100644
--- a/include/ipu_pixfmt.h
+++ b/include/ipu_pixfmt.h
@@ -77,5 +77,6 @@ 
 #define IPU_PIX_FMT_YUV422P fourcc('4', '2', '2', 'P')	/*< 16 YUV 4:2:2 */
 
 int ipuv3_fb_init(struct fb_videomode *mode, uint8_t disp, uint32_t pixfmt);
+void ipuv3_fb_shutdown(void);
 
 #endif