Lines Matching refs:fb_info

267 		struct fb_info *fb_info)  in mxsfb_check_var()  argument
269 struct mxsfb_info *host = fb_info->par; in mxsfb_check_var()
328 static void mxsfb_enable_controller(struct fb_info *fb_info) in mxsfb_enable_controller() argument
330 struct mxsfb_info *host = fb_info->par; in mxsfb_enable_controller()
348 clk_set_rate(host->clk, PICOS2KHZ(fb_info->var.pixclock) * 1000U); in mxsfb_enable_controller()
365 static void mxsfb_disable_controller(struct fb_info *fb_info) in mxsfb_disable_controller() argument
367 struct mxsfb_info *host = fb_info->par; in mxsfb_disable_controller()
407 static int mxsfb_set_par(struct fb_info *fb_info) in mxsfb_set_par() argument
409 struct mxsfb_info *host = fb_info->par; in mxsfb_set_par()
414 line_size = fb_info->var.xres * (fb_info->var.bits_per_pixel >> 3); in mxsfb_set_par()
415 fb_size = fb_info->var.yres_virtual * line_size; in mxsfb_set_par()
417 if (fb_size > fb_info->fix.smem_len) in mxsfb_set_par()
420 fb_info->fix.line_length = line_size; in mxsfb_set_par()
429 mxsfb_disable_controller(fb_info); in mxsfb_set_par()
440 switch (fb_info->var.bits_per_pixel) { in mxsfb_set_par()
467 fb_info->var.bits_per_pixel); in mxsfb_set_par()
473 writel(TRANSFER_COUNT_SET_VCOUNT(fb_info->var.yres) | in mxsfb_set_par()
474 TRANSFER_COUNT_SET_HCOUNT(fb_info->var.xres), in mxsfb_set_par()
480 VDCTRL0_SET_VSYNC_PULSE_WIDTH(fb_info->var.vsync_len); in mxsfb_set_par()
481 if (fb_info->var.sync & FB_SYNC_HOR_HIGH_ACT) in mxsfb_set_par()
483 if (fb_info->var.sync & FB_SYNC_VERT_HIGH_ACT) in mxsfb_set_par()
493 writel(fb_info->var.upper_margin + fb_info->var.vsync_len + in mxsfb_set_par()
494 fb_info->var.lower_margin + fb_info->var.yres, in mxsfb_set_par()
498 writel(set_hsync_pulse_width(host, fb_info->var.hsync_len) | in mxsfb_set_par()
499 VDCTRL2_SET_HSYNC_PERIOD(fb_info->var.left_margin + in mxsfb_set_par()
500 fb_info->var.hsync_len + fb_info->var.right_margin + in mxsfb_set_par()
501 fb_info->var.xres), in mxsfb_set_par()
504 writel(SET_HOR_WAIT_CNT(fb_info->var.left_margin + in mxsfb_set_par()
505 fb_info->var.hsync_len) | in mxsfb_set_par()
506 SET_VERT_WAIT_CNT(fb_info->var.upper_margin + in mxsfb_set_par()
507 fb_info->var.vsync_len), in mxsfb_set_par()
510 vdctrl4 = SET_DOTCLK_H_VALID_DATA_CNT(fb_info->var.xres); in mxsfb_set_par()
515 writel(fb_info->fix.smem_start + in mxsfb_set_par()
516 fb_info->fix.line_length * fb_info->var.yoffset, in mxsfb_set_par()
522 mxsfb_enable_controller(fb_info); in mxsfb_set_par()
528 u_int transp, struct fb_info *fb_info) in mxsfb_setcolreg() argument
537 if (fb_info->var.grayscale) in mxsfb_setcolreg()
541 switch (fb_info->fix.visual) { in mxsfb_setcolreg()
548 u32 *pal = fb_info->pseudo_palette; in mxsfb_setcolreg()
550 val = chan_to_field(red, &fb_info->var.red); in mxsfb_setcolreg()
551 val |= chan_to_field(green, &fb_info->var.green); in mxsfb_setcolreg()
552 val |= chan_to_field(blue, &fb_info->var.blue); in mxsfb_setcolreg()
567 static int mxsfb_blank(int blank, struct fb_info *fb_info) in mxsfb_blank() argument
569 struct mxsfb_info *host = fb_info->par; in mxsfb_blank()
577 mxsfb_disable_controller(fb_info); in mxsfb_blank()
582 mxsfb_enable_controller(fb_info); in mxsfb_blank()
589 struct fb_info *fb_info) in mxsfb_pan_display() argument
591 struct mxsfb_info *host = fb_info->par; in mxsfb_pan_display()
597 offset = fb_info->fix.line_length * var->yoffset; in mxsfb_pan_display()
602 writel(fb_info->fix.smem_start + offset, in mxsfb_pan_display()
622 static int mxsfb_restore_mode(struct fb_info *fb_info, in mxsfb_restore_mode() argument
625 struct mxsfb_info *host = fb_info->par; in mxsfb_restore_mode()
664 fb_info->var.bits_per_pixel = bits_per_pixel; in mxsfb_restore_mode()
695 fb_info->fix.line_length = vmode->xres * (bits_per_pixel >> 3); in mxsfb_restore_mode()
698 fbsize = fb_info->fix.line_length * vmode->yres; in mxsfb_restore_mode()
699 if (pa < fb_info->fix.smem_start) { in mxsfb_restore_mode()
703 if (pa + fbsize > fb_info->fix.smem_start + fb_info->fix.smem_len) { in mxsfb_restore_mode()
707 ofs = pa - fb_info->fix.smem_start; in mxsfb_restore_mode()
709 memmove(fb_info->screen_base, fb_info->screen_base + ofs, fbsize); in mxsfb_restore_mode()
710 writel(fb_info->fix.smem_start, host->base + host->devdata->next_buf); in mxsfb_restore_mode()
713 line_count = fb_info->fix.smem_len / fb_info->fix.line_length; in mxsfb_restore_mode()
714 fb_info->fix.ypanstep = 1; in mxsfb_restore_mode()
726 static int mxsfb_init_fbinfo_dt(struct fb_info *fb_info, in mxsfb_init_fbinfo_dt() argument
729 struct mxsfb_info *host = fb_info->par; in mxsfb_init_fbinfo_dt()
730 struct fb_var_screeninfo *var = &fb_info->var; in mxsfb_init_fbinfo_dt()
805 static int mxsfb_init_fbinfo(struct fb_info *fb_info, in mxsfb_init_fbinfo() argument
809 struct mxsfb_info *host = fb_info->par; in mxsfb_init_fbinfo()
811 struct fb_var_screeninfo *var = &fb_info->var; in mxsfb_init_fbinfo()
816 fb_info->fbops = &mxsfb_ops; in mxsfb_init_fbinfo()
817 fb_info->flags = FBINFO_FLAG_DEFAULT | FBINFO_READS_FAST; in mxsfb_init_fbinfo()
818 strlcpy(fb_info->fix.id, "mxs", sizeof(fb_info->fix.id)); in mxsfb_init_fbinfo()
819 fb_info->fix.type = FB_TYPE_PACKED_PIXELS; in mxsfb_init_fbinfo()
820 fb_info->fix.ypanstep = 1; in mxsfb_init_fbinfo()
821 fb_info->fix.visual = FB_VISUAL_TRUECOLOR, in mxsfb_init_fbinfo()
822 fb_info->fix.accel = FB_ACCEL_NONE; in mxsfb_init_fbinfo()
824 ret = mxsfb_init_fbinfo_dt(fb_info, vmode); in mxsfb_init_fbinfo()
839 fb_info->fix.smem_start = fb_phys; in mxsfb_init_fbinfo()
840 fb_info->screen_base = fb_virt; in mxsfb_init_fbinfo()
841 fb_info->screen_size = fb_info->fix.smem_len = fb_size; in mxsfb_init_fbinfo()
843 if (mxsfb_restore_mode(fb_info, vmode)) in mxsfb_init_fbinfo()
849 static void mxsfb_free_videomem(struct fb_info *fb_info) in mxsfb_free_videomem() argument
851 struct mxsfb_info *host = fb_info->par; in mxsfb_free_videomem()
854 dma_free_wc(dev, fb_info->screen_size, fb_info->screen_base, in mxsfb_free_videomem()
855 fb_info->fix.smem_start); in mxsfb_free_videomem()
884 struct fb_info *fb_info; in mxsfb_probe() local
891 fb_info = framebuffer_alloc(sizeof(struct mxsfb_info), &pdev->dev); in mxsfb_probe()
892 if (!fb_info) { in mxsfb_probe()
902 host = fb_info->par; in mxsfb_probe()
934 fb_info->pseudo_palette = devm_kcalloc(&pdev->dev, 16, sizeof(u32), in mxsfb_probe()
936 if (!fb_info->pseudo_palette) { in mxsfb_probe()
941 ret = mxsfb_init_fbinfo(fb_info, mode); in mxsfb_probe()
945 fb_videomode_to_var(&fb_info->var, mode); in mxsfb_probe()
948 mxsfb_check_var(&fb_info->var, fb_info); in mxsfb_probe()
950 platform_set_drvdata(pdev, fb_info); in mxsfb_probe()
952 ret = register_framebuffer(fb_info); in mxsfb_probe()
962 mxsfb_set_par(fb_info); in mxsfb_probe()
963 mxsfb_enable_controller(fb_info); in mxsfb_probe()
974 framebuffer_release(fb_info); in mxsfb_probe()
981 struct fb_info *fb_info = platform_get_drvdata(pdev); in mxsfb_remove() local
982 struct mxsfb_info *host = fb_info->par; in mxsfb_remove()
985 mxsfb_disable_controller(fb_info); in mxsfb_remove()
987 unregister_framebuffer(fb_info); in mxsfb_remove()
988 mxsfb_free_videomem(fb_info); in mxsfb_remove()
990 framebuffer_release(fb_info); in mxsfb_remove()
997 struct fb_info *fb_info = platform_get_drvdata(pdev); in mxsfb_shutdown() local
998 struct mxsfb_info *host = fb_info->par; in mxsfb_shutdown()