Lines Matching refs:mx3fb
250 struct mx3fb_data *mx3fb; member
264 struct mx3fb_data *mx3fb; member
273 static void sdc_set_brightness(struct mx3fb_data *mx3fb, uint8_t value);
274 static u32 sdc_get_brightness(struct mx3fb_data *mx3fb);
343 static u32 mx3fb_read_reg(struct mx3fb_data *mx3fb, unsigned long reg) in mx3fb_read_reg() argument
345 return __raw_readl(mx3fb->reg_base + reg); in mx3fb_read_reg()
348 static void mx3fb_write_reg(struct mx3fb_data *mx3fb, u32 value, unsigned long reg) in mx3fb_write_reg() argument
350 __raw_writel(value, mx3fb->reg_base + reg); in mx3fb_write_reg()
365 struct mx3fb_data *mx3fb = fbi->mx3fb; in sdc_fb_init() local
368 reg = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_fb_init()
370 mx3fb_write_reg(mx3fb, reg | SDC_COM_BG_EN, SDC_COM_CONF); in sdc_fb_init()
376 struct mx3fb_data *mx3fb = fbi->mx3fb; in sdc_fb_uninit() local
379 reg = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_fb_uninit()
381 mx3fb_write_reg(mx3fb, reg & ~SDC_COM_BG_EN, SDC_COM_CONF); in sdc_fb_uninit()
388 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in sdc_enable_channel() local
395 dev_dbg(mx3fb->dev, "mx3fbi %p, desc %p, sg %p\n", mx3_fbi, in sdc_enable_channel()
398 dev_dbg(mx3fb->dev, "mx3fbi %p, txd = NULL\n", mx3_fbi); in sdc_enable_channel()
405 dev_err(mx3fb->dev, "Cannot allocate descriptor on %d\n", in sdc_enable_channel()
414 dev_dbg(mx3fb->dev, "%d: Submit %p #%d [%c]\n", __LINE__, in sdc_enable_channel()
418 dev_err(mx3fb->dev, "Cannot enable channel %d\n", in sdc_enable_channel()
426 dev_dbg(mx3fb->dev, "%d: Re-submit %p #%d [%c]\n", __LINE__, in sdc_enable_channel()
431 spin_lock_irqsave(&mx3fb->lock, flags); in sdc_enable_channel()
434 spin_unlock_irqrestore(&mx3fb->lock, flags); in sdc_enable_channel()
447 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in sdc_disable_channel() local
453 spin_lock_irqsave(&mx3fb->lock, flags); in sdc_disable_channel()
457 spin_unlock_irqrestore(&mx3fb->lock, flags); in sdc_disable_channel()
472 static int sdc_set_window_pos(struct mx3fb_data *mx3fb, enum ipu_channel channel, in sdc_set_window_pos() argument
478 x_pos += mx3fb->h_start_width; in sdc_set_window_pos()
479 y_pos += mx3fb->v_start_width; in sdc_set_window_pos()
481 mx3fb_write_reg(mx3fb, (x_pos << 16) | y_pos, SDC_BG_POS); in sdc_set_window_pos()
505 static int sdc_init_panel(struct mx3fb_data *mx3fb, enum ipu_panel panel, in sdc_init_panel() argument
520 dev_dbg(mx3fb->dev, "panel size = %d x %d", width, height); in sdc_init_panel()
528 mx3fb_write_reg(mx3fb, reg, SDC_HOR_CONF); in sdc_init_panel()
536 mx3fb_write_reg(mx3fb, reg, SDC_VER_CONF); in sdc_init_panel()
542 mx3fb->h_start_width = h_start_width; in sdc_init_panel()
543 mx3fb->v_start_width = v_start_width; in sdc_init_panel()
547 mx3fb_write_reg(mx3fb, 0x00FD0102L, SDC_SHARP_CONF_1); in sdc_init_panel()
548 mx3fb_write_reg(mx3fb, 0x00F500F4L, SDC_SHARP_CONF_2); in sdc_init_panel()
549 mx3fb_write_reg(mx3fb, SDC_COM_SHARP | SDC_COM_TFT_COLOR, SDC_COM_CONF); in sdc_init_panel()
552 mx3fb_write_reg(mx3fb, SDC_COM_TFT_COLOR, SDC_COM_CONF); in sdc_init_panel()
565 ipu_clk = clk_get(mx3fb->dev, NULL); in sdc_init_panel()
574 dev_dbg(mx3fb->dev, in sdc_init_panel()
579 dev_dbg(mx3fb->dev, "pixel clk = %u, divider %u.%u\n", in sdc_init_panel()
582 spin_lock_irqsave(&mx3fb->lock, lock_flags); in sdc_init_panel()
589 mx3fb_write_reg(mx3fb, (((div / 8) - 1) << 22) | div, DI_DISP3_TIME_CONF); in sdc_init_panel()
592 old_conf = mx3fb_read_reg(mx3fb, DI_DISP_IF_CONF) & 0x78FFFFFF; in sdc_init_panel()
596 mx3fb_write_reg(mx3fb, old_conf, DI_DISP_IF_CONF); in sdc_init_panel()
598 old_conf = mx3fb_read_reg(mx3fb, DI_DISP_SIG_POL) & 0xE0FFFFFF; in sdc_init_panel()
604 mx3fb_write_reg(mx3fb, old_conf, DI_DISP_SIG_POL); in sdc_init_panel()
606 map = &di_mappings[mx3fb->disp_data_fmt]; in sdc_init_panel()
607 mx3fb_write_reg(mx3fb, map->b0, DI_DISP3_B0_MAP); in sdc_init_panel()
608 mx3fb_write_reg(mx3fb, map->b1, DI_DISP3_B1_MAP); in sdc_init_panel()
609 mx3fb_write_reg(mx3fb, map->b2, DI_DISP3_B2_MAP); in sdc_init_panel()
611 spin_unlock_irqrestore(&mx3fb->lock, lock_flags); in sdc_init_panel()
613 dev_dbg(mx3fb->dev, "DI_DISP_IF_CONF = 0x%08X\n", in sdc_init_panel()
614 mx3fb_read_reg(mx3fb, DI_DISP_IF_CONF)); in sdc_init_panel()
615 dev_dbg(mx3fb->dev, "DI_DISP_SIG_POL = 0x%08X\n", in sdc_init_panel()
616 mx3fb_read_reg(mx3fb, DI_DISP_SIG_POL)); in sdc_init_panel()
617 dev_dbg(mx3fb->dev, "DI_DISP3_TIME_CONF = 0x%08X\n", in sdc_init_panel()
618 mx3fb_read_reg(mx3fb, DI_DISP3_TIME_CONF)); in sdc_init_panel()
631 static int sdc_set_color_key(struct mx3fb_data *mx3fb, enum ipu_channel channel, in sdc_set_color_key() argument
637 spin_lock_irqsave(&mx3fb->lock, lock_flags); in sdc_set_color_key()
639 sdc_conf = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_set_color_key()
646 reg = mx3fb_read_reg(mx3fb, SDC_GW_CTRL) & 0xFF000000L; in sdc_set_color_key()
647 mx3fb_write_reg(mx3fb, reg | (color_key & 0x00FFFFFFL), in sdc_set_color_key()
654 mx3fb_write_reg(mx3fb, sdc_conf, SDC_COM_CONF); in sdc_set_color_key()
656 spin_unlock_irqrestore(&mx3fb->lock, lock_flags); in sdc_set_color_key()
669 static int sdc_set_global_alpha(struct mx3fb_data *mx3fb, bool enable, uint8_t alpha) in sdc_set_global_alpha() argument
674 spin_lock_irqsave(&mx3fb->lock, lock_flags); in sdc_set_global_alpha()
677 reg = mx3fb_read_reg(mx3fb, SDC_GW_CTRL) & 0x00FFFFFFL; in sdc_set_global_alpha()
678 mx3fb_write_reg(mx3fb, reg | ((uint32_t) alpha << 24), SDC_GW_CTRL); in sdc_set_global_alpha()
680 reg = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_set_global_alpha()
681 mx3fb_write_reg(mx3fb, reg | SDC_COM_GLB_A, SDC_COM_CONF); in sdc_set_global_alpha()
683 reg = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_set_global_alpha()
684 mx3fb_write_reg(mx3fb, reg & ~SDC_COM_GLB_A, SDC_COM_CONF); in sdc_set_global_alpha()
687 spin_unlock_irqrestore(&mx3fb->lock, lock_flags); in sdc_set_global_alpha()
692 static u32 sdc_get_brightness(struct mx3fb_data *mx3fb) in sdc_get_brightness() argument
696 brightness = mx3fb_read_reg(mx3fb, SDC_PWM_CTRL); in sdc_get_brightness()
702 static void sdc_set_brightness(struct mx3fb_data *mx3fb, uint8_t value) in sdc_set_brightness() argument
704 dev_dbg(mx3fb->dev, "%s: value = %d\n", __func__, value); in sdc_set_brightness()
706 mx3fb_write_reg(mx3fb, 0x03000000UL | value << 16, SDC_PWM_CTRL); in sdc_set_brightness()
760 struct mx3fb_data *mx3fb = ichannel->client; in mx3fb_dma_done() local
761 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_dma_done()
763 dev_dbg(mx3fb->dev, "irq %d callback\n", ichannel->eof_irq); in mx3fb_dma_done()
797 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in __set_par() local
847 if (sdc_init_panel(mx3fb, mode, in __set_par()
864 sdc_set_window_pos(mx3fb, mx3_fbi->ipu_ch, 0, 0); in __set_par()
904 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in mx3fb_set_par() local
908 dev_dbg(mx3fb->dev, "%s [%c]\n", __func__, list_empty(&ichan->queue) ? '-' : '+'); in mx3fb_set_par()
1073 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in __blank() local
1092 sdc_set_brightness(mx3fb, 0); in __blank()
1100 sdc_set_brightness(mx3fb, mx3fb->backlight_level); in __blank()
1276 struct mx3fb_data *mx3fb = platform_get_drvdata(pdev); in mx3fb_suspend() local
1277 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_suspend()
1280 fb_set_suspend(mx3fb->fbi, 1); in mx3fb_suspend()
1285 sdc_set_brightness(mx3fb, 0); in mx3fb_suspend()
1296 struct mx3fb_data *mx3fb = platform_get_drvdata(pdev); in mx3fb_resume() local
1297 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_resume()
1301 sdc_set_brightness(mx3fb, mx3fb->backlight_level); in mx3fb_resume()
1305 fb_set_suspend(mx3fb->fbi, 0); in mx3fb_resume()
1429 static int init_fb_chan(struct mx3fb_data *mx3fb, struct idmac_channel *ichan) in init_fb_chan() argument
1431 struct device *dev = mx3fb->dev; in init_fb_chan()
1445 ichan->client = mx3fb; in init_fb_chan()
1481 mx3fb->fbi = fbi; in init_fb_chan()
1484 mx3fb_write_reg(mx3fb, 0x00100010L, DI_HSP_CLK_PER); in init_fb_chan()
1487 sdc_set_brightness(mx3fb, 255); in init_fb_chan()
1488 sdc_set_global_alpha(mx3fb, true, 0xFF); in init_fb_chan()
1489 sdc_set_color_key(mx3fb, IDMAC_SDC_0, false, 0); in init_fb_chan()
1494 mx3fbi->mx3fb = mx3fb; in init_fb_chan()
1497 mx3fb->disp_data_fmt = mx3fb_pdata->disp_data_fmt; in init_fb_chan()
1501 dev_dbg(mx3fb->dev, "disabling irq %d\n", ichan->eof_irq); in init_fb_chan()
1537 dev = rq->mx3fb->dev; in chan_filter()
1559 struct mx3fb_data *mx3fb; in mx3fb_probe() local
1572 mx3fb = devm_kzalloc(&pdev->dev, sizeof(*mx3fb), GFP_KERNEL); in mx3fb_probe()
1573 if (!mx3fb) in mx3fb_probe()
1576 spin_lock_init(&mx3fb->lock); in mx3fb_probe()
1578 mx3fb->reg_base = ioremap(sdc_reg->start, resource_size(sdc_reg)); in mx3fb_probe()
1579 if (!mx3fb->reg_base) { in mx3fb_probe()
1584 pr_debug("Remapped %pR at %p\n", sdc_reg, mx3fb->reg_base); in mx3fb_probe()
1589 mx3fb->dev = dev; in mx3fb_probe()
1590 platform_set_drvdata(pdev, mx3fb); in mx3fb_probe()
1592 rq.mx3fb = mx3fb; in mx3fb_probe()
1604 mx3fb->backlight_level = 255; in mx3fb_probe()
1606 ret = init_fb_chan(mx3fb, to_idmac_chan(chan)); in mx3fb_probe()
1610 mx3fb_init_backlight(mx3fb); in mx3fb_probe()
1618 iounmap(mx3fb->reg_base); in mx3fb_probe()
1626 struct mx3fb_data *mx3fb = platform_get_drvdata(dev); in mx3fb_remove() local
1627 struct fb_info *fbi = mx3fb->fbi; in mx3fb_remove()
1634 mx3fb_exit_backlight(mx3fb); in mx3fb_remove()
1639 iounmap(mx3fb->reg_base); in mx3fb_remove()