Lines Matching refs:fbi

220 static void set_ctrlr_state(struct sa1100fb_info *fbi, u_int state);
222 static inline void sa1100fb_schedule_work(struct sa1100fb_info *fbi, u_int state) in sa1100fb_schedule_work() argument
235 if (fbi->task_state == C_ENABLE && state == C_REENABLE) in sa1100fb_schedule_work()
237 if (fbi->task_state == C_DISABLE && state == C_ENABLE) in sa1100fb_schedule_work()
241 fbi->task_state = state; in sa1100fb_schedule_work()
242 schedule_work(&fbi->task); in sa1100fb_schedule_work()
272 struct sa1100fb_info *fbi = in sa1100fb_setpalettereg() local
276 if (regno < fbi->palette_size) { in sa1100fb_setpalettereg()
282 val |= palette_pbs(&fbi->fb.var); in sa1100fb_setpalettereg()
284 fbi->palette_cpu[regno] = val; in sa1100fb_setpalettereg()
294 struct sa1100fb_info *fbi = in sa1100fb_setcolreg() local
305 if (fbi->inf->cmap_inverse) { in sa1100fb_setcolreg()
315 if (fbi->fb.var.grayscale) in sa1100fb_setcolreg()
319 switch (fbi->fb.fix.visual) { in sa1100fb_setcolreg()
326 val = chan_to_field(red, &fbi->fb.var.red); in sa1100fb_setcolreg()
327 val |= chan_to_field(green, &fbi->fb.var.green); in sa1100fb_setcolreg()
328 val |= chan_to_field(blue, &fbi->fb.var.blue); in sa1100fb_setcolreg()
330 fbi->pseudo_palette[regno] = val; in sa1100fb_setcolreg()
370 struct sa1100fb_info *fbi = in sa1100fb_check_var() local
378 if (var->xres > fbi->inf->xres) in sa1100fb_check_var()
379 var->xres = fbi->inf->xres; in sa1100fb_check_var()
380 if (var->yres > fbi->inf->yres) in sa1100fb_check_var()
381 var->yres = fbi->inf->yres; in sa1100fb_check_var()
385 dev_dbg(fbi->dev, "var->bits_per_pixel=%d\n", var->bits_per_pixel); in sa1100fb_check_var()
404 var->red = fbi->rgb[rgbidx]->red; in sa1100fb_check_var()
405 var->green = fbi->rgb[rgbidx]->green; in sa1100fb_check_var()
406 var->blue = fbi->rgb[rgbidx]->blue; in sa1100fb_check_var()
407 var->transp = fbi->rgb[rgbidx]->transp; in sa1100fb_check_var()
409 dev_dbg(fbi->dev, "RGBT length = %d:%d:%d:%d\n", in sa1100fb_check_var()
413 dev_dbg(fbi->dev, "RGBT offset = %d:%d:%d:%d\n", in sa1100fb_check_var()
418 dev_dbg(fbi->dev, "dma period = %d ps, clock = %ld kHz\n", in sa1100fb_check_var()
420 clk_get_rate(fbi->clk) / 1000); in sa1100fb_check_var()
426 static void sa1100fb_set_visual(struct sa1100fb_info *fbi, u32 visual) in sa1100fb_set_visual() argument
428 if (fbi->inf->set_visual) in sa1100fb_set_visual()
429 fbi->inf->set_visual(visual); in sa1100fb_set_visual()
438 struct sa1100fb_info *fbi = in sa1100fb_set_par() local
443 dev_dbg(fbi->dev, "set_par\n"); in sa1100fb_set_par()
446 fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR; in sa1100fb_set_par()
447 else if (!fbi->inf->cmap_static) in sa1100fb_set_par()
448 fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; in sa1100fb_set_par()
455 fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR; in sa1100fb_set_par()
458 fbi->fb.fix.line_length = var->xres_virtual * in sa1100fb_set_par()
460 fbi->palette_size = var->bits_per_pixel == 8 ? 256 : 16; in sa1100fb_set_par()
462 palette_mem_size = fbi->palette_size * sizeof(u16); in sa1100fb_set_par()
464 dev_dbg(fbi->dev, "palette_mem_size = 0x%08lx\n", palette_mem_size); in sa1100fb_set_par()
466 fbi->palette_cpu = (u16 *)(fbi->map_cpu + PAGE_SIZE - palette_mem_size); in sa1100fb_set_par()
467 fbi->palette_dma = fbi->map_dma + PAGE_SIZE - palette_mem_size; in sa1100fb_set_par()
472 sa1100fb_set_visual(fbi, fbi->fb.fix.visual); in sa1100fb_set_par()
473 sa1100fb_activate_var(var, fbi); in sa1100fb_set_par()
483 struct sa1100fb_info *fbi = (struct sa1100fb_info *)info;
488 if (!kspc && (fbi->fb.var.bits_per_pixel == 16 || fbi->inf->cmap_static))
532 struct sa1100fb_info *fbi = in sa1100fb_blank() local
536 dev_dbg(fbi->dev, "sa1100fb_blank: blank=%d\n", blank); in sa1100fb_blank()
543 if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR || in sa1100fb_blank()
544 fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR) in sa1100fb_blank()
545 for (i = 0; i < fbi->palette_size; i++) in sa1100fb_blank()
547 sa1100fb_schedule_work(fbi, C_DISABLE); in sa1100fb_blank()
551 if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR || in sa1100fb_blank()
552 fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR) in sa1100fb_blank()
553 fb_set_cmap(&fbi->fb.cmap, info); in sa1100fb_blank()
554 sa1100fb_schedule_work(fbi, C_ENABLE); in sa1100fb_blank()
562 struct sa1100fb_info *fbi = in sa1100fb_mmap() local
568 return dma_mmap_wc(fbi->dev, vma, fbi->map_cpu, fbi->map_dma, in sa1100fb_mmap()
569 fbi->map_size); in sa1100fb_mmap()
594 static inline unsigned int get_pcd(struct sa1100fb_info *fbi, in get_pcd() argument
597 unsigned int pcd = clk_get_rate(fbi->clk) / 100 / 1000; in get_pcd()
610 static int sa1100fb_activate_var(struct fb_var_screeninfo *var, struct sa1100fb_info *fbi) in sa1100fb_activate_var() argument
616 dev_dbg(fbi->dev, "Configuring SA1100 LCD\n"); in sa1100fb_activate_var()
618 dev_dbg(fbi->dev, "var: xres=%d hslen=%d lm=%d rm=%d\n", in sa1100fb_activate_var()
621 dev_dbg(fbi->dev, "var: yres=%d vslen=%d um=%d bm=%d\n", in sa1100fb_activate_var()
627 dev_err(fbi->dev, "%s: invalid xres %d\n", in sa1100fb_activate_var()
628 fbi->fb.fix.id, var->xres); in sa1100fb_activate_var()
630 dev_err(fbi->dev, "%s: invalid hsync_len %d\n", in sa1100fb_activate_var()
631 fbi->fb.fix.id, var->hsync_len); in sa1100fb_activate_var()
633 dev_err(fbi->dev, "%s: invalid left_margin %d\n", in sa1100fb_activate_var()
634 fbi->fb.fix.id, var->left_margin); in sa1100fb_activate_var()
636 dev_err(fbi->dev, "%s: invalid right_margin %d\n", in sa1100fb_activate_var()
637 fbi->fb.fix.id, var->right_margin); in sa1100fb_activate_var()
639 dev_err(fbi->dev, "%s: invalid yres %d\n", in sa1100fb_activate_var()
640 fbi->fb.fix.id, var->yres); in sa1100fb_activate_var()
642 dev_err(fbi->dev, "%s: invalid vsync_len %d\n", in sa1100fb_activate_var()
643 fbi->fb.fix.id, var->vsync_len); in sa1100fb_activate_var()
645 dev_err(fbi->dev, "%s: invalid upper_margin %d\n", in sa1100fb_activate_var()
646 fbi->fb.fix.id, var->upper_margin); in sa1100fb_activate_var()
648 dev_err(fbi->dev, "%s: invalid lower_margin %d\n", in sa1100fb_activate_var()
649 fbi->fb.fix.id, var->lower_margin); in sa1100fb_activate_var()
652 new_regs.lccr0 = fbi->inf->lccr0 | in sa1100fb_activate_var()
667 if (fbi->inf->lccr0 & LCCR0_Dual) in sa1100fb_activate_var()
676 pcd = get_pcd(fbi, var->pixclock); in sa1100fb_activate_var()
677 new_regs.lccr3 = LCCR3_PixClkDiv(pcd) | fbi->inf->lccr3 | in sa1100fb_activate_var()
681 dev_dbg(fbi->dev, "nlccr0 = 0x%08lx\n", new_regs.lccr0); in sa1100fb_activate_var()
682 dev_dbg(fbi->dev, "nlccr1 = 0x%08lx\n", new_regs.lccr1); in sa1100fb_activate_var()
683 dev_dbg(fbi->dev, "nlccr2 = 0x%08lx\n", new_regs.lccr2); in sa1100fb_activate_var()
684 dev_dbg(fbi->dev, "nlccr3 = 0x%08lx\n", new_regs.lccr3); in sa1100fb_activate_var()
691 fbi->dbar1 = fbi->palette_dma; in sa1100fb_activate_var()
692 fbi->dbar2 = fbi->screen_dma + half_screen_size; in sa1100fb_activate_var()
694 fbi->reg_lccr0 = new_regs.lccr0; in sa1100fb_activate_var()
695 fbi->reg_lccr1 = new_regs.lccr1; in sa1100fb_activate_var()
696 fbi->reg_lccr2 = new_regs.lccr2; in sa1100fb_activate_var()
697 fbi->reg_lccr3 = new_regs.lccr3; in sa1100fb_activate_var()
704 if (readl_relaxed(fbi->base + LCCR0) != fbi->reg_lccr0 || in sa1100fb_activate_var()
705 readl_relaxed(fbi->base + LCCR1) != fbi->reg_lccr1 || in sa1100fb_activate_var()
706 readl_relaxed(fbi->base + LCCR2) != fbi->reg_lccr2 || in sa1100fb_activate_var()
707 readl_relaxed(fbi->base + LCCR3) != fbi->reg_lccr3 || in sa1100fb_activate_var()
708 readl_relaxed(fbi->base + DBAR1) != fbi->dbar1 || in sa1100fb_activate_var()
709 readl_relaxed(fbi->base + DBAR2) != fbi->dbar2) in sa1100fb_activate_var()
710 sa1100fb_schedule_work(fbi, C_REENABLE); in sa1100fb_activate_var()
721 static inline void __sa1100fb_backlight_power(struct sa1100fb_info *fbi, int on) in __sa1100fb_backlight_power() argument
723 dev_dbg(fbi->dev, "backlight o%s\n", on ? "n" : "ff"); in __sa1100fb_backlight_power()
725 if (fbi->inf->backlight_power) in __sa1100fb_backlight_power()
726 fbi->inf->backlight_power(on); in __sa1100fb_backlight_power()
729 static inline void __sa1100fb_lcd_power(struct sa1100fb_info *fbi, int on) in __sa1100fb_lcd_power() argument
731 dev_dbg(fbi->dev, "LCD power o%s\n", on ? "n" : "ff"); in __sa1100fb_lcd_power()
733 if (fbi->inf->lcd_power) in __sa1100fb_lcd_power()
734 fbi->inf->lcd_power(on); in __sa1100fb_lcd_power()
737 static void sa1100fb_setup_gpio(struct sa1100fb_info *fbi) in sa1100fb_setup_gpio() argument
753 if ((fbi->reg_lccr0 & LCCR0_CMS) == LCCR0_Color && in sa1100fb_setup_gpio()
754 (fbi->reg_lccr0 & (LCCR0_Dual|LCCR0_Act)) != 0) { in sa1100fb_setup_gpio()
757 if (fbi->fb.var.bits_per_pixel > 8 || in sa1100fb_setup_gpio()
758 (fbi->reg_lccr0 & (LCCR0_Dual|LCCR0_Act)) == LCCR0_Dual) in sa1100fb_setup_gpio()
780 static void sa1100fb_enable_controller(struct sa1100fb_info *fbi) in sa1100fb_enable_controller() argument
782 dev_dbg(fbi->dev, "Enabling LCD controller\n"); in sa1100fb_enable_controller()
787 fbi->palette_cpu[0] &= 0xcfff; in sa1100fb_enable_controller()
788 fbi->palette_cpu[0] |= palette_pbs(&fbi->fb.var); in sa1100fb_enable_controller()
791 clk_prepare_enable(fbi->clk); in sa1100fb_enable_controller()
794 writel_relaxed(fbi->reg_lccr3, fbi->base + LCCR3); in sa1100fb_enable_controller()
795 writel_relaxed(fbi->reg_lccr2, fbi->base + LCCR2); in sa1100fb_enable_controller()
796 writel_relaxed(fbi->reg_lccr1, fbi->base + LCCR1); in sa1100fb_enable_controller()
797 writel_relaxed(fbi->reg_lccr0 & ~LCCR0_LEN, fbi->base + LCCR0); in sa1100fb_enable_controller()
798 writel_relaxed(fbi->dbar1, fbi->base + DBAR1); in sa1100fb_enable_controller()
799 writel_relaxed(fbi->dbar2, fbi->base + DBAR2); in sa1100fb_enable_controller()
800 writel_relaxed(fbi->reg_lccr0 | LCCR0_LEN, fbi->base + LCCR0); in sa1100fb_enable_controller()
802 if (fbi->shannon_lcden) in sa1100fb_enable_controller()
803 gpiod_set_value(fbi->shannon_lcden, 1); in sa1100fb_enable_controller()
805 dev_dbg(fbi->dev, "DBAR1: 0x%08x\n", readl_relaxed(fbi->base + DBAR1)); in sa1100fb_enable_controller()
806 dev_dbg(fbi->dev, "DBAR2: 0x%08x\n", readl_relaxed(fbi->base + DBAR2)); in sa1100fb_enable_controller()
807 dev_dbg(fbi->dev, "LCCR0: 0x%08x\n", readl_relaxed(fbi->base + LCCR0)); in sa1100fb_enable_controller()
808 dev_dbg(fbi->dev, "LCCR1: 0x%08x\n", readl_relaxed(fbi->base + LCCR1)); in sa1100fb_enable_controller()
809 dev_dbg(fbi->dev, "LCCR2: 0x%08x\n", readl_relaxed(fbi->base + LCCR2)); in sa1100fb_enable_controller()
810 dev_dbg(fbi->dev, "LCCR3: 0x%08x\n", readl_relaxed(fbi->base + LCCR3)); in sa1100fb_enable_controller()
813 static void sa1100fb_disable_controller(struct sa1100fb_info *fbi) in sa1100fb_disable_controller() argument
818 dev_dbg(fbi->dev, "Disabling LCD controller\n"); in sa1100fb_disable_controller()
820 if (fbi->shannon_lcden) in sa1100fb_disable_controller()
821 gpiod_set_value(fbi->shannon_lcden, 0); in sa1100fb_disable_controller()
824 add_wait_queue(&fbi->ctrlr_wait, &wait); in sa1100fb_disable_controller()
827 writel_relaxed(~0, fbi->base + LCSR); in sa1100fb_disable_controller()
829 lccr0 = readl_relaxed(fbi->base + LCCR0); in sa1100fb_disable_controller()
831 writel_relaxed(lccr0, fbi->base + LCCR0); in sa1100fb_disable_controller()
833 writel_relaxed(lccr0, fbi->base + LCCR0); in sa1100fb_disable_controller()
836 remove_wait_queue(&fbi->ctrlr_wait, &wait); in sa1100fb_disable_controller()
839 clk_disable_unprepare(fbi->clk); in sa1100fb_disable_controller()
847 struct sa1100fb_info *fbi = dev_id; in sa1100fb_handle_irq() local
848 unsigned int lcsr = readl_relaxed(fbi->base + LCSR); in sa1100fb_handle_irq()
851 u32 lccr0 = readl_relaxed(fbi->base + LCCR0) | LCCR0_LDM; in sa1100fb_handle_irq()
852 writel_relaxed(lccr0, fbi->base + LCCR0); in sa1100fb_handle_irq()
853 wake_up(&fbi->ctrlr_wait); in sa1100fb_handle_irq()
856 writel_relaxed(lcsr, fbi->base + LCSR); in sa1100fb_handle_irq()
865 static void set_ctrlr_state(struct sa1100fb_info *fbi, u_int state) in set_ctrlr_state() argument
869 mutex_lock(&fbi->ctrlr_lock); in set_ctrlr_state()
871 old_state = fbi->state; in set_ctrlr_state()
886 fbi->state = state; in set_ctrlr_state()
887 sa1100fb_disable_controller(fbi); in set_ctrlr_state()
897 fbi->state = state; in set_ctrlr_state()
899 __sa1100fb_backlight_power(fbi, 0); in set_ctrlr_state()
901 sa1100fb_disable_controller(fbi); in set_ctrlr_state()
902 __sa1100fb_lcd_power(fbi, 0); in set_ctrlr_state()
912 fbi->state = C_ENABLE; in set_ctrlr_state()
913 sa1100fb_enable_controller(fbi); in set_ctrlr_state()
924 sa1100fb_disable_controller(fbi); in set_ctrlr_state()
925 sa1100fb_setup_gpio(fbi); in set_ctrlr_state()
926 sa1100fb_enable_controller(fbi); in set_ctrlr_state()
946 fbi->state = C_ENABLE; in set_ctrlr_state()
947 sa1100fb_setup_gpio(fbi); in set_ctrlr_state()
948 __sa1100fb_lcd_power(fbi, 1); in set_ctrlr_state()
949 sa1100fb_enable_controller(fbi); in set_ctrlr_state()
950 __sa1100fb_backlight_power(fbi, 1); in set_ctrlr_state()
954 mutex_unlock(&fbi->ctrlr_lock); in set_ctrlr_state()
963 struct sa1100fb_info *fbi = container_of(w, struct sa1100fb_info, task); in sa1100fb_task() local
964 u_int state = xchg(&fbi->task_state, -1); in sa1100fb_task()
966 set_ctrlr_state(fbi, state); in sa1100fb_task()
979 struct sa1100fb_info *fbi = TO_INF(nb, freq_transition); in sa1100fb_freq_transition() local
984 set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE); in sa1100fb_freq_transition()
988 pcd = get_pcd(fbi, fbi->fb.var.pixclock); in sa1100fb_freq_transition()
989 fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd); in sa1100fb_freq_transition()
990 set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE); in sa1100fb_freq_transition()
1004 struct sa1100fb_info *fbi = platform_get_drvdata(dev); in sa1100fb_suspend() local
1006 set_ctrlr_state(fbi, C_DISABLE_PM); in sa1100fb_suspend()
1012 struct sa1100fb_info *fbi = platform_get_drvdata(dev); in sa1100fb_resume() local
1014 set_ctrlr_state(fbi, C_ENABLE_PM); in sa1100fb_resume()
1030 static int sa1100fb_map_video_memory(struct sa1100fb_info *fbi) in sa1100fb_map_video_memory() argument
1036 fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); in sa1100fb_map_video_memory()
1037 fbi->map_cpu = dma_alloc_wc(fbi->dev, fbi->map_size, &fbi->map_dma, in sa1100fb_map_video_memory()
1040 if (fbi->map_cpu) { in sa1100fb_map_video_memory()
1041 fbi->fb.screen_base = fbi->map_cpu + PAGE_SIZE; in sa1100fb_map_video_memory()
1042 fbi->screen_dma = fbi->map_dma + PAGE_SIZE; in sa1100fb_map_video_memory()
1049 fbi->fb.fix.smem_start = fbi->screen_dma; in sa1100fb_map_video_memory()
1052 return fbi->map_cpu ? 0 : -ENOMEM; in sa1100fb_map_video_memory()
1067 struct sa1100fb_info *fbi; in sa1100fb_init_fbinfo() local
1070 fbi = devm_kzalloc(dev, sizeof(struct sa1100fb_info), GFP_KERNEL); in sa1100fb_init_fbinfo()
1071 if (!fbi) in sa1100fb_init_fbinfo()
1074 fbi->dev = dev; in sa1100fb_init_fbinfo()
1076 strcpy(fbi->fb.fix.id, SA1100_NAME); in sa1100fb_init_fbinfo()
1078 fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; in sa1100fb_init_fbinfo()
1079 fbi->fb.fix.type_aux = 0; in sa1100fb_init_fbinfo()
1080 fbi->fb.fix.xpanstep = 0; in sa1100fb_init_fbinfo()
1081 fbi->fb.fix.ypanstep = 0; in sa1100fb_init_fbinfo()
1082 fbi->fb.fix.ywrapstep = 0; in sa1100fb_init_fbinfo()
1083 fbi->fb.fix.accel = FB_ACCEL_NONE; in sa1100fb_init_fbinfo()
1085 fbi->fb.var.nonstd = 0; in sa1100fb_init_fbinfo()
1086 fbi->fb.var.activate = FB_ACTIVATE_NOW; in sa1100fb_init_fbinfo()
1087 fbi->fb.var.height = -1; in sa1100fb_init_fbinfo()
1088 fbi->fb.var.width = -1; in sa1100fb_init_fbinfo()
1089 fbi->fb.var.accel_flags = 0; in sa1100fb_init_fbinfo()
1090 fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; in sa1100fb_init_fbinfo()
1092 fbi->fb.fbops = &sa1100fb_ops; in sa1100fb_init_fbinfo()
1093 fbi->fb.flags = FBINFO_DEFAULT; in sa1100fb_init_fbinfo()
1094 fbi->fb.monspecs = monspecs; in sa1100fb_init_fbinfo()
1095 fbi->fb.pseudo_palette = fbi->pseudo_palette; in sa1100fb_init_fbinfo()
1097 fbi->rgb[RGB_4] = &rgb_4; in sa1100fb_init_fbinfo()
1098 fbi->rgb[RGB_8] = &rgb_8; in sa1100fb_init_fbinfo()
1099 fbi->rgb[RGB_16] = &def_rgb_16; in sa1100fb_init_fbinfo()
1111 fbi->fb.var.xres = inf->xres; in sa1100fb_init_fbinfo()
1112 fbi->fb.var.xres_virtual = inf->xres; in sa1100fb_init_fbinfo()
1113 fbi->fb.var.yres = inf->yres; in sa1100fb_init_fbinfo()
1114 fbi->fb.var.yres_virtual = inf->yres; in sa1100fb_init_fbinfo()
1115 fbi->fb.var.bits_per_pixel = inf->bpp; in sa1100fb_init_fbinfo()
1116 fbi->fb.var.pixclock = inf->pixclock; in sa1100fb_init_fbinfo()
1117 fbi->fb.var.hsync_len = inf->hsync_len; in sa1100fb_init_fbinfo()
1118 fbi->fb.var.left_margin = inf->left_margin; in sa1100fb_init_fbinfo()
1119 fbi->fb.var.right_margin = inf->right_margin; in sa1100fb_init_fbinfo()
1120 fbi->fb.var.vsync_len = inf->vsync_len; in sa1100fb_init_fbinfo()
1121 fbi->fb.var.upper_margin = inf->upper_margin; in sa1100fb_init_fbinfo()
1122 fbi->fb.var.lower_margin = inf->lower_margin; in sa1100fb_init_fbinfo()
1123 fbi->fb.var.sync = inf->sync; in sa1100fb_init_fbinfo()
1124 fbi->fb.var.grayscale = inf->cmap_greyscale; in sa1100fb_init_fbinfo()
1125 fbi->state = C_STARTUP; in sa1100fb_init_fbinfo()
1126 fbi->task_state = (u_char)-1; in sa1100fb_init_fbinfo()
1127 fbi->fb.fix.smem_len = inf->xres * inf->yres * in sa1100fb_init_fbinfo()
1129 fbi->inf = inf; in sa1100fb_init_fbinfo()
1134 fbi->rgb[i] = inf->rgb[i]; in sa1100fb_init_fbinfo()
1136 init_waitqueue_head(&fbi->ctrlr_wait); in sa1100fb_init_fbinfo()
1137 INIT_WORK(&fbi->task, sa1100fb_task); in sa1100fb_init_fbinfo()
1138 mutex_init(&fbi->ctrlr_lock); in sa1100fb_init_fbinfo()
1140 return fbi; in sa1100fb_init_fbinfo()
1145 struct sa1100fb_info *fbi; in sa1100fb_probe() local
1157 fbi = sa1100fb_init_fbinfo(&pdev->dev); in sa1100fb_probe()
1158 if (!fbi) in sa1100fb_probe()
1161 fbi->base = devm_platform_ioremap_resource(pdev, 0); in sa1100fb_probe()
1162 if (IS_ERR(fbi->base)) in sa1100fb_probe()
1163 return PTR_ERR(fbi->base); in sa1100fb_probe()
1165 fbi->clk = devm_clk_get(&pdev->dev, NULL); in sa1100fb_probe()
1166 if (IS_ERR(fbi->clk)) in sa1100fb_probe()
1167 return PTR_ERR(fbi->clk); in sa1100fb_probe()
1170 "LCD", fbi); in sa1100fb_probe()
1176 fbi->shannon_lcden = gpiod_get_optional(&pdev->dev, "shannon-lcden", in sa1100fb_probe()
1178 if (IS_ERR(fbi->shannon_lcden)) in sa1100fb_probe()
1179 return PTR_ERR(fbi->shannon_lcden); in sa1100fb_probe()
1182 ret = sa1100fb_map_video_memory(fbi); in sa1100fb_probe()
1190 sa1100fb_check_var(&fbi->fb.var, &fbi->fb); in sa1100fb_probe()
1192 platform_set_drvdata(pdev, fbi); in sa1100fb_probe()
1194 ret = register_framebuffer(&fbi->fb); in sa1100fb_probe()
1196 dma_free_wc(fbi->dev, fbi->map_size, fbi->map_cpu, in sa1100fb_probe()
1197 fbi->map_dma); in sa1100fb_probe()
1202 fbi->freq_transition.notifier_call = sa1100fb_freq_transition; in sa1100fb_probe()
1203 cpufreq_register_notifier(&fbi->freq_transition, CPUFREQ_TRANSITION_NOTIFIER); in sa1100fb_probe()