Lines Matching refs:fbi

219 static void set_ctrlr_state(struct sa1100fb_info *fbi, u_int state);
221 static inline void sa1100fb_schedule_work(struct sa1100fb_info *fbi, u_int state) in sa1100fb_schedule_work() argument
234 if (fbi->task_state == C_ENABLE && state == C_REENABLE) in sa1100fb_schedule_work()
236 if (fbi->task_state == C_DISABLE && state == C_ENABLE) in sa1100fb_schedule_work()
240 fbi->task_state = state; in sa1100fb_schedule_work()
241 schedule_work(&fbi->task); in sa1100fb_schedule_work()
271 struct sa1100fb_info *fbi = in sa1100fb_setpalettereg() local
275 if (regno < fbi->palette_size) { in sa1100fb_setpalettereg()
281 val |= palette_pbs(&fbi->fb.var); in sa1100fb_setpalettereg()
283 fbi->palette_cpu[regno] = val; in sa1100fb_setpalettereg()
293 struct sa1100fb_info *fbi = in sa1100fb_setcolreg() local
304 if (fbi->inf->cmap_inverse) { in sa1100fb_setcolreg()
314 if (fbi->fb.var.grayscale) in sa1100fb_setcolreg()
318 switch (fbi->fb.fix.visual) { in sa1100fb_setcolreg()
325 val = chan_to_field(red, &fbi->fb.var.red); in sa1100fb_setcolreg()
326 val |= chan_to_field(green, &fbi->fb.var.green); in sa1100fb_setcolreg()
327 val |= chan_to_field(blue, &fbi->fb.var.blue); in sa1100fb_setcolreg()
329 fbi->pseudo_palette[regno] = val; in sa1100fb_setcolreg()
369 struct sa1100fb_info *fbi = in sa1100fb_check_var() local
377 if (var->xres > fbi->inf->xres) in sa1100fb_check_var()
378 var->xres = fbi->inf->xres; in sa1100fb_check_var()
379 if (var->yres > fbi->inf->yres) in sa1100fb_check_var()
380 var->yres = fbi->inf->yres; in sa1100fb_check_var()
384 dev_dbg(fbi->dev, "var->bits_per_pixel=%d\n", var->bits_per_pixel); in sa1100fb_check_var()
403 var->red = fbi->rgb[rgbidx]->red; in sa1100fb_check_var()
404 var->green = fbi->rgb[rgbidx]->green; in sa1100fb_check_var()
405 var->blue = fbi->rgb[rgbidx]->blue; in sa1100fb_check_var()
406 var->transp = fbi->rgb[rgbidx]->transp; in sa1100fb_check_var()
408 dev_dbg(fbi->dev, "RGBT length = %d:%d:%d:%d\n", in sa1100fb_check_var()
412 dev_dbg(fbi->dev, "RGBT offset = %d:%d:%d:%d\n", in sa1100fb_check_var()
417 dev_dbg(fbi->dev, "dma period = %d ps, clock = %ld kHz\n", in sa1100fb_check_var()
419 clk_get_rate(fbi->clk) / 1000); in sa1100fb_check_var()
425 static void sa1100fb_set_visual(struct sa1100fb_info *fbi, u32 visual) in sa1100fb_set_visual() argument
427 if (fbi->inf->set_visual) in sa1100fb_set_visual()
428 fbi->inf->set_visual(visual); in sa1100fb_set_visual()
437 struct sa1100fb_info *fbi = in sa1100fb_set_par() local
442 dev_dbg(fbi->dev, "set_par\n"); in sa1100fb_set_par()
445 fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR; in sa1100fb_set_par()
446 else if (!fbi->inf->cmap_static) in sa1100fb_set_par()
447 fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; in sa1100fb_set_par()
454 fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR; in sa1100fb_set_par()
457 fbi->fb.fix.line_length = var->xres_virtual * in sa1100fb_set_par()
459 fbi->palette_size = var->bits_per_pixel == 8 ? 256 : 16; in sa1100fb_set_par()
461 palette_mem_size = fbi->palette_size * sizeof(u16); in sa1100fb_set_par()
463 dev_dbg(fbi->dev, "palette_mem_size = 0x%08lx\n", palette_mem_size); in sa1100fb_set_par()
465 fbi->palette_cpu = (u16 *)(fbi->map_cpu + PAGE_SIZE - palette_mem_size); in sa1100fb_set_par()
466 fbi->palette_dma = fbi->map_dma + PAGE_SIZE - palette_mem_size; in sa1100fb_set_par()
471 sa1100fb_set_visual(fbi, fbi->fb.fix.visual); in sa1100fb_set_par()
472 sa1100fb_activate_var(var, fbi); in sa1100fb_set_par()
482 struct sa1100fb_info *fbi = (struct sa1100fb_info *)info;
487 if (!kspc && (fbi->fb.var.bits_per_pixel == 16 || fbi->inf->cmap_static))
531 struct sa1100fb_info *fbi = in sa1100fb_blank() local
535 dev_dbg(fbi->dev, "sa1100fb_blank: blank=%d\n", blank); in sa1100fb_blank()
542 if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR || in sa1100fb_blank()
543 fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR) in sa1100fb_blank()
544 for (i = 0; i < fbi->palette_size; i++) in sa1100fb_blank()
546 sa1100fb_schedule_work(fbi, C_DISABLE); in sa1100fb_blank()
550 if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR || in sa1100fb_blank()
551 fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR) in sa1100fb_blank()
552 fb_set_cmap(&fbi->fb.cmap, info); in sa1100fb_blank()
553 sa1100fb_schedule_work(fbi, C_ENABLE); in sa1100fb_blank()
561 struct sa1100fb_info *fbi = in sa1100fb_mmap() local
567 return dma_mmap_wc(fbi->dev, vma, fbi->map_cpu, fbi->map_dma, in sa1100fb_mmap()
568 fbi->map_size); in sa1100fb_mmap()
593 static inline unsigned int get_pcd(struct sa1100fb_info *fbi, in get_pcd() argument
596 unsigned int pcd = clk_get_rate(fbi->clk) / 100 / 1000; in get_pcd()
609 static int sa1100fb_activate_var(struct fb_var_screeninfo *var, struct sa1100fb_info *fbi) in sa1100fb_activate_var() argument
615 dev_dbg(fbi->dev, "Configuring SA1100 LCD\n"); in sa1100fb_activate_var()
617 dev_dbg(fbi->dev, "var: xres=%d hslen=%d lm=%d rm=%d\n", in sa1100fb_activate_var()
620 dev_dbg(fbi->dev, "var: yres=%d vslen=%d um=%d bm=%d\n", in sa1100fb_activate_var()
626 dev_err(fbi->dev, "%s: invalid xres %d\n", in sa1100fb_activate_var()
627 fbi->fb.fix.id, var->xres); in sa1100fb_activate_var()
629 dev_err(fbi->dev, "%s: invalid hsync_len %d\n", in sa1100fb_activate_var()
630 fbi->fb.fix.id, var->hsync_len); in sa1100fb_activate_var()
632 dev_err(fbi->dev, "%s: invalid left_margin %d\n", in sa1100fb_activate_var()
633 fbi->fb.fix.id, var->left_margin); in sa1100fb_activate_var()
635 dev_err(fbi->dev, "%s: invalid right_margin %d\n", in sa1100fb_activate_var()
636 fbi->fb.fix.id, var->right_margin); in sa1100fb_activate_var()
638 dev_err(fbi->dev, "%s: invalid yres %d\n", in sa1100fb_activate_var()
639 fbi->fb.fix.id, var->yres); in sa1100fb_activate_var()
641 dev_err(fbi->dev, "%s: invalid vsync_len %d\n", in sa1100fb_activate_var()
642 fbi->fb.fix.id, var->vsync_len); in sa1100fb_activate_var()
644 dev_err(fbi->dev, "%s: invalid upper_margin %d\n", in sa1100fb_activate_var()
645 fbi->fb.fix.id, var->upper_margin); in sa1100fb_activate_var()
647 dev_err(fbi->dev, "%s: invalid lower_margin %d\n", in sa1100fb_activate_var()
648 fbi->fb.fix.id, var->lower_margin); in sa1100fb_activate_var()
651 new_regs.lccr0 = fbi->inf->lccr0 | in sa1100fb_activate_var()
666 if (fbi->inf->lccr0 & LCCR0_Dual) in sa1100fb_activate_var()
675 pcd = get_pcd(fbi, var->pixclock); in sa1100fb_activate_var()
676 new_regs.lccr3 = LCCR3_PixClkDiv(pcd) | fbi->inf->lccr3 | in sa1100fb_activate_var()
680 dev_dbg(fbi->dev, "nlccr0 = 0x%08lx\n", new_regs.lccr0); in sa1100fb_activate_var()
681 dev_dbg(fbi->dev, "nlccr1 = 0x%08lx\n", new_regs.lccr1); in sa1100fb_activate_var()
682 dev_dbg(fbi->dev, "nlccr2 = 0x%08lx\n", new_regs.lccr2); in sa1100fb_activate_var()
683 dev_dbg(fbi->dev, "nlccr3 = 0x%08lx\n", new_regs.lccr3); in sa1100fb_activate_var()
690 fbi->dbar1 = fbi->palette_dma; in sa1100fb_activate_var()
691 fbi->dbar2 = fbi->screen_dma + half_screen_size; in sa1100fb_activate_var()
693 fbi->reg_lccr0 = new_regs.lccr0; in sa1100fb_activate_var()
694 fbi->reg_lccr1 = new_regs.lccr1; in sa1100fb_activate_var()
695 fbi->reg_lccr2 = new_regs.lccr2; in sa1100fb_activate_var()
696 fbi->reg_lccr3 = new_regs.lccr3; in sa1100fb_activate_var()
703 if (readl_relaxed(fbi->base + LCCR0) != fbi->reg_lccr0 || in sa1100fb_activate_var()
704 readl_relaxed(fbi->base + LCCR1) != fbi->reg_lccr1 || in sa1100fb_activate_var()
705 readl_relaxed(fbi->base + LCCR2) != fbi->reg_lccr2 || in sa1100fb_activate_var()
706 readl_relaxed(fbi->base + LCCR3) != fbi->reg_lccr3 || in sa1100fb_activate_var()
707 readl_relaxed(fbi->base + DBAR1) != fbi->dbar1 || in sa1100fb_activate_var()
708 readl_relaxed(fbi->base + DBAR2) != fbi->dbar2) in sa1100fb_activate_var()
709 sa1100fb_schedule_work(fbi, C_REENABLE); in sa1100fb_activate_var()
720 static inline void __sa1100fb_backlight_power(struct sa1100fb_info *fbi, int on) in __sa1100fb_backlight_power() argument
722 dev_dbg(fbi->dev, "backlight o%s\n", on ? "n" : "ff"); in __sa1100fb_backlight_power()
724 if (fbi->inf->backlight_power) in __sa1100fb_backlight_power()
725 fbi->inf->backlight_power(on); in __sa1100fb_backlight_power()
728 static inline void __sa1100fb_lcd_power(struct sa1100fb_info *fbi, int on) in __sa1100fb_lcd_power() argument
730 dev_dbg(fbi->dev, "LCD power o%s\n", on ? "n" : "ff"); in __sa1100fb_lcd_power()
732 if (fbi->inf->lcd_power) in __sa1100fb_lcd_power()
733 fbi->inf->lcd_power(on); in __sa1100fb_lcd_power()
736 static void sa1100fb_setup_gpio(struct sa1100fb_info *fbi) in sa1100fb_setup_gpio() argument
752 if ((fbi->reg_lccr0 & LCCR0_CMS) == LCCR0_Color && in sa1100fb_setup_gpio()
753 (fbi->reg_lccr0 & (LCCR0_Dual|LCCR0_Act)) != 0) { in sa1100fb_setup_gpio()
756 if (fbi->fb.var.bits_per_pixel > 8 || in sa1100fb_setup_gpio()
757 (fbi->reg_lccr0 & (LCCR0_Dual|LCCR0_Act)) == LCCR0_Dual) in sa1100fb_setup_gpio()
779 static void sa1100fb_enable_controller(struct sa1100fb_info *fbi) in sa1100fb_enable_controller() argument
781 dev_dbg(fbi->dev, "Enabling LCD controller\n"); in sa1100fb_enable_controller()
786 fbi->palette_cpu[0] &= 0xcfff; in sa1100fb_enable_controller()
787 fbi->palette_cpu[0] |= palette_pbs(&fbi->fb.var); in sa1100fb_enable_controller()
790 clk_prepare_enable(fbi->clk); in sa1100fb_enable_controller()
793 writel_relaxed(fbi->reg_lccr3, fbi->base + LCCR3); in sa1100fb_enable_controller()
794 writel_relaxed(fbi->reg_lccr2, fbi->base + LCCR2); in sa1100fb_enable_controller()
795 writel_relaxed(fbi->reg_lccr1, fbi->base + LCCR1); in sa1100fb_enable_controller()
796 writel_relaxed(fbi->reg_lccr0 & ~LCCR0_LEN, fbi->base + LCCR0); in sa1100fb_enable_controller()
797 writel_relaxed(fbi->dbar1, fbi->base + DBAR1); in sa1100fb_enable_controller()
798 writel_relaxed(fbi->dbar2, fbi->base + DBAR2); in sa1100fb_enable_controller()
799 writel_relaxed(fbi->reg_lccr0 | LCCR0_LEN, fbi->base + LCCR0); in sa1100fb_enable_controller()
801 if (fbi->shannon_lcden) in sa1100fb_enable_controller()
802 gpiod_set_value(fbi->shannon_lcden, 1); in sa1100fb_enable_controller()
804 dev_dbg(fbi->dev, "DBAR1: 0x%08x\n", readl_relaxed(fbi->base + DBAR1)); in sa1100fb_enable_controller()
805 dev_dbg(fbi->dev, "DBAR2: 0x%08x\n", readl_relaxed(fbi->base + DBAR2)); in sa1100fb_enable_controller()
806 dev_dbg(fbi->dev, "LCCR0: 0x%08x\n", readl_relaxed(fbi->base + LCCR0)); in sa1100fb_enable_controller()
807 dev_dbg(fbi->dev, "LCCR1: 0x%08x\n", readl_relaxed(fbi->base + LCCR1)); in sa1100fb_enable_controller()
808 dev_dbg(fbi->dev, "LCCR2: 0x%08x\n", readl_relaxed(fbi->base + LCCR2)); in sa1100fb_enable_controller()
809 dev_dbg(fbi->dev, "LCCR3: 0x%08x\n", readl_relaxed(fbi->base + LCCR3)); in sa1100fb_enable_controller()
812 static void sa1100fb_disable_controller(struct sa1100fb_info *fbi) in sa1100fb_disable_controller() argument
817 dev_dbg(fbi->dev, "Disabling LCD controller\n"); in sa1100fb_disable_controller()
819 if (fbi->shannon_lcden) in sa1100fb_disable_controller()
820 gpiod_set_value(fbi->shannon_lcden, 0); in sa1100fb_disable_controller()
823 add_wait_queue(&fbi->ctrlr_wait, &wait); in sa1100fb_disable_controller()
826 writel_relaxed(~0, fbi->base + LCSR); in sa1100fb_disable_controller()
828 lccr0 = readl_relaxed(fbi->base + LCCR0); in sa1100fb_disable_controller()
830 writel_relaxed(lccr0, fbi->base + LCCR0); in sa1100fb_disable_controller()
832 writel_relaxed(lccr0, fbi->base + LCCR0); in sa1100fb_disable_controller()
835 remove_wait_queue(&fbi->ctrlr_wait, &wait); in sa1100fb_disable_controller()
838 clk_disable_unprepare(fbi->clk); in sa1100fb_disable_controller()
846 struct sa1100fb_info *fbi = dev_id; in sa1100fb_handle_irq() local
847 unsigned int lcsr = readl_relaxed(fbi->base + LCSR); in sa1100fb_handle_irq()
850 u32 lccr0 = readl_relaxed(fbi->base + LCCR0) | LCCR0_LDM; in sa1100fb_handle_irq()
851 writel_relaxed(lccr0, fbi->base + LCCR0); in sa1100fb_handle_irq()
852 wake_up(&fbi->ctrlr_wait); in sa1100fb_handle_irq()
855 writel_relaxed(lcsr, fbi->base + LCSR); in sa1100fb_handle_irq()
864 static void set_ctrlr_state(struct sa1100fb_info *fbi, u_int state) in set_ctrlr_state() argument
868 mutex_lock(&fbi->ctrlr_lock); in set_ctrlr_state()
870 old_state = fbi->state; in set_ctrlr_state()
885 fbi->state = state; in set_ctrlr_state()
886 sa1100fb_disable_controller(fbi); in set_ctrlr_state()
896 fbi->state = state; in set_ctrlr_state()
898 __sa1100fb_backlight_power(fbi, 0); in set_ctrlr_state()
900 sa1100fb_disable_controller(fbi); in set_ctrlr_state()
901 __sa1100fb_lcd_power(fbi, 0); in set_ctrlr_state()
911 fbi->state = C_ENABLE; in set_ctrlr_state()
912 sa1100fb_enable_controller(fbi); in set_ctrlr_state()
923 sa1100fb_disable_controller(fbi); in set_ctrlr_state()
924 sa1100fb_setup_gpio(fbi); in set_ctrlr_state()
925 sa1100fb_enable_controller(fbi); in set_ctrlr_state()
945 fbi->state = C_ENABLE; in set_ctrlr_state()
946 sa1100fb_setup_gpio(fbi); in set_ctrlr_state()
947 __sa1100fb_lcd_power(fbi, 1); in set_ctrlr_state()
948 sa1100fb_enable_controller(fbi); in set_ctrlr_state()
949 __sa1100fb_backlight_power(fbi, 1); in set_ctrlr_state()
953 mutex_unlock(&fbi->ctrlr_lock); in set_ctrlr_state()
962 struct sa1100fb_info *fbi = container_of(w, struct sa1100fb_info, task); in sa1100fb_task() local
963 u_int state = xchg(&fbi->task_state, -1); in sa1100fb_task()
965 set_ctrlr_state(fbi, state); in sa1100fb_task()
978 struct sa1100fb_info *fbi = TO_INF(nb, freq_transition); in sa1100fb_freq_transition() local
983 set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE); in sa1100fb_freq_transition()
987 pcd = get_pcd(fbi, fbi->fb.var.pixclock); in sa1100fb_freq_transition()
988 fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd); in sa1100fb_freq_transition()
989 set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE); in sa1100fb_freq_transition()
1003 struct sa1100fb_info *fbi = platform_get_drvdata(dev); in sa1100fb_suspend() local
1005 set_ctrlr_state(fbi, C_DISABLE_PM); in sa1100fb_suspend()
1011 struct sa1100fb_info *fbi = platform_get_drvdata(dev); in sa1100fb_resume() local
1013 set_ctrlr_state(fbi, C_ENABLE_PM); in sa1100fb_resume()
1029 static int sa1100fb_map_video_memory(struct sa1100fb_info *fbi) in sa1100fb_map_video_memory() argument
1035 fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); in sa1100fb_map_video_memory()
1036 fbi->map_cpu = dma_alloc_wc(fbi->dev, fbi->map_size, &fbi->map_dma, in sa1100fb_map_video_memory()
1039 if (fbi->map_cpu) { in sa1100fb_map_video_memory()
1040 fbi->fb.screen_base = fbi->map_cpu + PAGE_SIZE; in sa1100fb_map_video_memory()
1041 fbi->screen_dma = fbi->map_dma + PAGE_SIZE; in sa1100fb_map_video_memory()
1048 fbi->fb.fix.smem_start = fbi->screen_dma; in sa1100fb_map_video_memory()
1051 return fbi->map_cpu ? 0 : -ENOMEM; in sa1100fb_map_video_memory()
1066 struct sa1100fb_info *fbi; in sa1100fb_init_fbinfo() local
1069 fbi = devm_kzalloc(dev, sizeof(struct sa1100fb_info), GFP_KERNEL); in sa1100fb_init_fbinfo()
1070 if (!fbi) in sa1100fb_init_fbinfo()
1073 fbi->dev = dev; in sa1100fb_init_fbinfo()
1075 strcpy(fbi->fb.fix.id, SA1100_NAME); in sa1100fb_init_fbinfo()
1077 fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; in sa1100fb_init_fbinfo()
1078 fbi->fb.fix.type_aux = 0; in sa1100fb_init_fbinfo()
1079 fbi->fb.fix.xpanstep = 0; in sa1100fb_init_fbinfo()
1080 fbi->fb.fix.ypanstep = 0; in sa1100fb_init_fbinfo()
1081 fbi->fb.fix.ywrapstep = 0; in sa1100fb_init_fbinfo()
1082 fbi->fb.fix.accel = FB_ACCEL_NONE; in sa1100fb_init_fbinfo()
1084 fbi->fb.var.nonstd = 0; in sa1100fb_init_fbinfo()
1085 fbi->fb.var.activate = FB_ACTIVATE_NOW; in sa1100fb_init_fbinfo()
1086 fbi->fb.var.height = -1; in sa1100fb_init_fbinfo()
1087 fbi->fb.var.width = -1; in sa1100fb_init_fbinfo()
1088 fbi->fb.var.accel_flags = 0; in sa1100fb_init_fbinfo()
1089 fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; in sa1100fb_init_fbinfo()
1091 fbi->fb.fbops = &sa1100fb_ops; in sa1100fb_init_fbinfo()
1092 fbi->fb.monspecs = monspecs; in sa1100fb_init_fbinfo()
1093 fbi->fb.pseudo_palette = fbi->pseudo_palette; in sa1100fb_init_fbinfo()
1095 fbi->rgb[RGB_4] = &rgb_4; in sa1100fb_init_fbinfo()
1096 fbi->rgb[RGB_8] = &rgb_8; in sa1100fb_init_fbinfo()
1097 fbi->rgb[RGB_16] = &def_rgb_16; in sa1100fb_init_fbinfo()
1109 fbi->fb.var.xres = inf->xres; in sa1100fb_init_fbinfo()
1110 fbi->fb.var.xres_virtual = inf->xres; in sa1100fb_init_fbinfo()
1111 fbi->fb.var.yres = inf->yres; in sa1100fb_init_fbinfo()
1112 fbi->fb.var.yres_virtual = inf->yres; in sa1100fb_init_fbinfo()
1113 fbi->fb.var.bits_per_pixel = inf->bpp; in sa1100fb_init_fbinfo()
1114 fbi->fb.var.pixclock = inf->pixclock; in sa1100fb_init_fbinfo()
1115 fbi->fb.var.hsync_len = inf->hsync_len; in sa1100fb_init_fbinfo()
1116 fbi->fb.var.left_margin = inf->left_margin; in sa1100fb_init_fbinfo()
1117 fbi->fb.var.right_margin = inf->right_margin; in sa1100fb_init_fbinfo()
1118 fbi->fb.var.vsync_len = inf->vsync_len; in sa1100fb_init_fbinfo()
1119 fbi->fb.var.upper_margin = inf->upper_margin; in sa1100fb_init_fbinfo()
1120 fbi->fb.var.lower_margin = inf->lower_margin; in sa1100fb_init_fbinfo()
1121 fbi->fb.var.sync = inf->sync; in sa1100fb_init_fbinfo()
1122 fbi->fb.var.grayscale = inf->cmap_greyscale; in sa1100fb_init_fbinfo()
1123 fbi->state = C_STARTUP; in sa1100fb_init_fbinfo()
1124 fbi->task_state = (u_char)-1; in sa1100fb_init_fbinfo()
1125 fbi->fb.fix.smem_len = inf->xres * inf->yres * in sa1100fb_init_fbinfo()
1127 fbi->inf = inf; in sa1100fb_init_fbinfo()
1132 fbi->rgb[i] = inf->rgb[i]; in sa1100fb_init_fbinfo()
1134 init_waitqueue_head(&fbi->ctrlr_wait); in sa1100fb_init_fbinfo()
1135 INIT_WORK(&fbi->task, sa1100fb_task); in sa1100fb_init_fbinfo()
1136 mutex_init(&fbi->ctrlr_lock); in sa1100fb_init_fbinfo()
1138 return fbi; in sa1100fb_init_fbinfo()
1143 struct sa1100fb_info *fbi; in sa1100fb_probe() local
1155 fbi = sa1100fb_init_fbinfo(&pdev->dev); in sa1100fb_probe()
1156 if (!fbi) in sa1100fb_probe()
1159 fbi->base = devm_platform_ioremap_resource(pdev, 0); in sa1100fb_probe()
1160 if (IS_ERR(fbi->base)) in sa1100fb_probe()
1161 return PTR_ERR(fbi->base); in sa1100fb_probe()
1163 fbi->clk = devm_clk_get(&pdev->dev, NULL); in sa1100fb_probe()
1164 if (IS_ERR(fbi->clk)) in sa1100fb_probe()
1165 return PTR_ERR(fbi->clk); in sa1100fb_probe()
1168 "LCD", fbi); in sa1100fb_probe()
1174 fbi->shannon_lcden = gpiod_get_optional(&pdev->dev, "shannon-lcden", in sa1100fb_probe()
1176 if (IS_ERR(fbi->shannon_lcden)) in sa1100fb_probe()
1177 return PTR_ERR(fbi->shannon_lcden); in sa1100fb_probe()
1180 ret = sa1100fb_map_video_memory(fbi); in sa1100fb_probe()
1188 sa1100fb_check_var(&fbi->fb.var, &fbi->fb); in sa1100fb_probe()
1190 platform_set_drvdata(pdev, fbi); in sa1100fb_probe()
1192 ret = register_framebuffer(&fbi->fb); in sa1100fb_probe()
1194 dma_free_wc(fbi->dev, fbi->map_size, fbi->map_cpu, in sa1100fb_probe()
1195 fbi->map_dma); in sa1100fb_probe()
1200 fbi->freq_transition.notifier_call = sa1100fb_freq_transition; in sa1100fb_probe()
1201 cpufreq_register_notifier(&fbi->freq_transition, CPUFREQ_TRANSITION_NOTIFIER); in sa1100fb_probe()