return 0;
 }
 
+static void mmpfb_set_win(struct fb_info *info)
+{
+       struct mmpfb_info *fbi = info->par;
+       struct mmp_win win;
+
+       memset(&win, 0, sizeof(win));
+       win.xsrc = win.xdst = fbi->mode.xres;
+       win.ysrc = win.ydst = fbi->mode.yres;
+       win.pix_fmt = fbi->pix_fmt;
+       mmp_overlay_set_win(fbi->overlay, &win);
+}
+
 static int mmpfb_set_par(struct fb_info *info)
 {
        struct mmpfb_info *fbi = info->par;
        struct fb_var_screeninfo *var = &info->var;
        struct mmp_addr addr;
-       struct mmp_win win;
        struct mmp_mode mode;
        int ret;
 
        fbmode_to_mmpmode(&mode, &fbi->mode, fbi->output_fmt);
        mmp_path_set_mode(fbi->path, &mode);
 
-       memset(&win, 0, sizeof(win));
-       win.xsrc = win.xdst = fbi->mode.xres;
-       win.ysrc = win.ydst = fbi->mode.yres;
-       win.pix_fmt = fbi->pix_fmt;
-       mmp_overlay_set_win(fbi->overlay, &win);
+       /* set window related info */
+       mmpfb_set_win(info);
 
        /* set address always */
        memset(&addr, 0, sizeof(addr));
 static void mmpfb_power(struct mmpfb_info *fbi, int power)
 {
        struct mmp_addr addr;
-       struct mmp_win win;
        struct fb_var_screeninfo *var = &fbi->fb_info->var;
 
        /* for power on, always set address/window again */
        if (power) {
-               memset(&win, 0, sizeof(win));
-               win.xsrc = win.xdst = fbi->mode.xres;
-               win.ysrc = win.ydst = fbi->mode.yres;
-               win.pix_fmt = fbi->pix_fmt;
-               mmp_overlay_set_win(fbi->overlay, &win);
+               /* set window related info */
+               mmpfb_set_win(fbi->fb_info);
 
                /* set address always */
                memset(&addr, 0, sizeof(addr));