Lines Matching refs:fbi

222 static inline int is_imx1_fb(struct imxfb_info *fbi)
224 return fbi->devtype == IMX1_FB;
280 struct imxfb_info *fbi = info->par;
284 if (regno < fbi->palette_size) {
289 writel(val, fbi->regs + 0x800 + (regno << 2));
298 struct imxfb_info *fbi = info->par;
308 if (fbi->cmap_inverse) {
349 static const struct imx_fb_videomode *imxfb_find_mode(struct imxfb_info *fbi)
355 return &fbi->mode[0];
357 for (i = 0, m = &fbi->mode[0]; i < fbi->num_modes; i++, m++) {
372 struct imxfb_info *fbi = info->par;
384 imxfb_mode = imxfb_find_mode(fbi);
404 lcd_clk = clk_get_rate(fbi->clk_per);
417 dev_warn(&fbi->pdev->dev, "Must limit pixel clock to %luHz\n",
428 if (is_imx1_fb(fbi))
447 fbi->pcr = pcr;
451 if (!is_imx1_fb(fbi) && imxfb_mode->aus_mode)
452 fbi->lauscr = LAUSCR_AUS_MODE;
455 fbi->panel_type = PANEL_TYPE_TFT;
457 fbi->panel_type = PANEL_TYPE_CSTN;
459 fbi->panel_type = PANEL_TYPE_MONOCHROME;
487 struct imxfb_info *fbi = info->par;
492 else if (!fbi->cmap_static)
504 fbi->palette_size = var->bits_per_pixel == 8 ? 256 : 16;
511 static int imxfb_enable_controller(struct imxfb_info *fbi)
515 if (fbi->enabled)
520 writel(fbi->map_dma, fbi->regs + LCDC_SSA);
523 writel(FIELD_PREP(POS_POS_MASK, 0), fbi->regs + LCDC_POS);
526 writel(readl(fbi->regs + LCDC_CPOS) & ~(CPOS_CC0 | CPOS_CC1),
527 fbi->regs + LCDC_CPOS);
533 writel(RMCR_LCDC_EN_MX1, fbi->regs + LCDC_RMCR);
535 ret = clk_prepare_enable(fbi->clk_ipg);
539 ret = clk_prepare_enable(fbi->clk_ahb);
543 ret = clk_prepare_enable(fbi->clk_per);
547 fbi->enabled = true;
551 clk_disable_unprepare(fbi->clk_ahb);
553 clk_disable_unprepare(fbi->clk_ipg);
555 writel(0, fbi->regs + LCDC_RMCR);
560 static void imxfb_disable_controller(struct imxfb_info *fbi)
562 if (!fbi->enabled)
567 clk_disable_unprepare(fbi->clk_per);
568 clk_disable_unprepare(fbi->clk_ahb);
569 clk_disable_unprepare(fbi->clk_ipg);
570 fbi->enabled = false;
572 writel(0, fbi->regs + LCDC_RMCR);
577 struct imxfb_info *fbi = info->par;
586 imxfb_disable_controller(fbi);
590 return imxfb_enable_controller(fbi);
611 struct imxfb_info *fbi = info->par;
612 u32 ymax_mask = is_imx1_fb(fbi) ? YMAX_MASK_IMX1 : YMAX_MASK_IMX21;
622 if (fbi->panel_type == PANEL_TYPE_TFT)
624 else if (fbi->panel_type == PANEL_TYPE_CSTN)
631 dev_err(&fbi->pdev->dev, "%s: invalid xres %d\n",
634 dev_err(&fbi->pdev->dev, "%s: invalid hsync_len %d\n",
637 dev_err(&fbi->pdev->dev, "%s: invalid left_margin %d\n",
640 dev_err(&fbi->pdev->dev, "%s: invalid right_margin %d\n",
643 dev_err(&fbi->pdev->dev, "%s: invalid yres %d\n",
646 dev_err(&fbi->pdev->dev, "%s: invalid vsync_len %d\n",
649 dev_err(&fbi->pdev->dev, "%s: invalid upper_margin %d\n",
652 dev_err(&fbi->pdev->dev, "%s: invalid lower_margin %d\n",
659 fbi->regs + LCDC_VPW);
665 fbi->regs + LCDC_HCR);
670 fbi->regs + LCDC_VCR);
674 fbi->regs + LCDC_SIZE);
676 writel(fbi->pcr, fbi->regs + LCDC_PCR);
677 if (fbi->pwmr)
678 writel(fbi->pwmr, fbi->regs + LCDC_PWMR);
679 writel(fbi->lscr1, fbi->regs + LCDC_LSCR1);
682 if (fbi->dmacr)
683 writel(fbi->dmacr, fbi->regs + LCDC_DMACR);
685 if (fbi->lauscr)
686 writel(fbi->lauscr, fbi->regs + LCDC_LAUSCR);
694 struct imxfb_info *fbi = info->par;
702 memset(fbi, 0, sizeof(struct imxfb_info));
704 fbi->pdev = pdev;
705 fbi->devtype = pdev->id_entry->driver_data;
729 fbi->cmap_inverse = of_property_read_bool(np, "cmap-inverse");
730 fbi->cmap_static = of_property_read_bool(np, "cmap-static");
732 fbi->lscr1 = IMXFB_LSCR1_DEFAULT;
734 of_property_read_u32(np, "fsl,lpccr", &fbi->pwmr);
736 of_property_read_u32(np, "fsl,lscr1", &fbi->lscr1);
738 of_property_read_u32(np, "fsl,dmacr", &fbi->dmacr);
787 struct imxfb_info *fbi = dev_get_drvdata(&lcddev->dev);
789 return fbi->pwmr & 0xff;
794 struct imxfb_info *fbi = dev_get_drvdata(&lcddev->dev);
796 if (fbi->pwmr && fbi->enabled) {
802 fbi->pwmr &= ~0xff;
803 fbi->pwmr |= contrast;
805 writel(fbi->pwmr, fbi->regs + LCDC_PWMR);
813 struct imxfb_info *fbi = dev_get_drvdata(&lcddev->dev);
815 if (!IS_ERR(fbi->lcd_pwr) &&
816 !regulator_is_enabled(fbi->lcd_pwr))
822 static int imxfb_regulator_set(struct imxfb_info *fbi, int enable)
826 if (enable == fbi->lcd_pwr_enabled)
830 ret = regulator_enable(fbi->lcd_pwr);
832 ret = regulator_disable(fbi->lcd_pwr);
835 fbi->lcd_pwr_enabled = enable;
842 struct imxfb_info *fbi = dev_get_drvdata(&lcddev->dev);
844 if (!IS_ERR(fbi->lcd_pwr))
845 return imxfb_regulator_set(fbi, power == LCD_POWER_ON);
879 struct imxfb_info *fbi;
902 fbi = info->par;
923 fbi->num_modes = 1;
925 fbi->mode = devm_kzalloc(&pdev->dev,
927 if (!fbi->mode) {
933 ret = imxfb_of_read_mode(&pdev->dev, display_np, fbi->mode);
942 m = &fbi->mode[0];
944 for (i = 0; i < fbi->num_modes; i++, m++)
948 fbi->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
949 if (IS_ERR(fbi->clk_ipg)) {
950 ret = PTR_ERR(fbi->clk_ipg);
964 ret = clk_prepare_enable(fbi->clk_ipg);
967 clk_disable_unprepare(fbi->clk_ipg);
969 fbi->clk_ahb = devm_clk_get(&pdev->dev, "ahb");
970 if (IS_ERR(fbi->clk_ahb)) {
971 ret = PTR_ERR(fbi->clk_ahb);
975 fbi->clk_per = devm_clk_get(&pdev->dev, "per");
976 if (IS_ERR(fbi->clk_per)) {
977 ret = PTR_ERR(fbi->clk_per);
981 fbi->regs = devm_platform_ioremap_resource(pdev, 0);
982 if (IS_ERR(fbi->regs)) {
983 ret = PTR_ERR(fbi->regs);
987 fbi->map_size = PAGE_ALIGN(info->fix.smem_len);
988 info->screen_buffer = dma_alloc_wc(&pdev->dev, fbi->map_size,
989 &fbi->map_dma, GFP_KERNEL);
996 info->fix.smem_start = fbi->map_dma;
999 for (i = 0; i < fbi->num_modes; i++) {
1000 ret = fb_add_videomode(&fbi->mode[i].mode, &info->modelist);
1023 fbi->lcd_pwr = devm_regulator_get(&pdev->dev, "lcd");
1024 if (PTR_ERR(fbi->lcd_pwr) == -EPROBE_DEFER) {
1029 lcd = devm_lcd_device_register(&pdev->dev, "imxfb-lcd", &pdev->dev, fbi,
1046 imxfb_enable_controller(fbi);
1053 dma_free_wc(&pdev->dev, fbi->map_size, info->screen_buffer,
1054 fbi->map_dma);
1063 struct imxfb_info *fbi = info->par;
1065 imxfb_disable_controller(fbi);
1069 dma_free_wc(&pdev->dev, fbi->map_size, info->screen_buffer,
1070 fbi->map_dma);
1077 struct imxfb_info *fbi = info->par;
1079 imxfb_disable_controller(fbi);
1087 struct imxfb_info *fbi = info->par;
1089 imxfb_enable_controller(fbi);