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
454 spin_lock_irqsave(&mx3fb->lock, flags); in sdc_disable_channel()
458 spin_unlock_irqrestore(&mx3fb->lock, flags); in sdc_disable_channel()
473 static int sdc_set_window_pos(struct mx3fb_data *mx3fb, enum ipu_channel channel, in sdc_set_window_pos() argument
479 x_pos += mx3fb->h_start_width; in sdc_set_window_pos()
480 y_pos += mx3fb->v_start_width; in sdc_set_window_pos()
482 mx3fb_write_reg(mx3fb, (x_pos << 16) | y_pos, SDC_BG_POS); in sdc_set_window_pos()
506 static int sdc_init_panel(struct mx3fb_data *mx3fb, enum ipu_panel panel, in sdc_init_panel() argument
521 dev_dbg(mx3fb->dev, "panel size = %d x %d", width, height); in sdc_init_panel()
529 mx3fb_write_reg(mx3fb, reg, SDC_HOR_CONF); in sdc_init_panel()
537 mx3fb_write_reg(mx3fb, reg, SDC_VER_CONF); in sdc_init_panel()
543 mx3fb->h_start_width = h_start_width; in sdc_init_panel()
544 mx3fb->v_start_width = v_start_width; in sdc_init_panel()
548 mx3fb_write_reg(mx3fb, 0x00FD0102L, SDC_SHARP_CONF_1); in sdc_init_panel()
549 mx3fb_write_reg(mx3fb, 0x00F500F4L, SDC_SHARP_CONF_2); in sdc_init_panel()
550 mx3fb_write_reg(mx3fb, SDC_COM_SHARP | SDC_COM_TFT_COLOR, SDC_COM_CONF); in sdc_init_panel()
553 mx3fb_write_reg(mx3fb, SDC_COM_TFT_COLOR, SDC_COM_CONF); in sdc_init_panel()
566 ipu_clk = clk_get(mx3fb->dev, NULL); in sdc_init_panel()
575 dev_dbg(mx3fb->dev, in sdc_init_panel()
580 dev_dbg(mx3fb->dev, "pixel clk = %u, divider %u.%u\n", in sdc_init_panel()
583 spin_lock_irqsave(&mx3fb->lock, lock_flags); in sdc_init_panel()
590 mx3fb_write_reg(mx3fb, (((div / 8) - 1) << 22) | div, DI_DISP3_TIME_CONF); in sdc_init_panel()
593 old_conf = mx3fb_read_reg(mx3fb, DI_DISP_IF_CONF) & 0x78FFFFFF; in sdc_init_panel()
597 mx3fb_write_reg(mx3fb, old_conf, DI_DISP_IF_CONF); in sdc_init_panel()
599 old_conf = mx3fb_read_reg(mx3fb, DI_DISP_SIG_POL) & 0xE0FFFFFF; in sdc_init_panel()
605 mx3fb_write_reg(mx3fb, old_conf, DI_DISP_SIG_POL); in sdc_init_panel()
607 map = &di_mappings[mx3fb->disp_data_fmt]; in sdc_init_panel()
608 mx3fb_write_reg(mx3fb, map->b0, DI_DISP3_B0_MAP); in sdc_init_panel()
609 mx3fb_write_reg(mx3fb, map->b1, DI_DISP3_B1_MAP); in sdc_init_panel()
610 mx3fb_write_reg(mx3fb, map->b2, DI_DISP3_B2_MAP); in sdc_init_panel()
612 spin_unlock_irqrestore(&mx3fb->lock, lock_flags); in sdc_init_panel()
614 dev_dbg(mx3fb->dev, "DI_DISP_IF_CONF = 0x%08X\n", in sdc_init_panel()
615 mx3fb_read_reg(mx3fb, DI_DISP_IF_CONF)); in sdc_init_panel()
616 dev_dbg(mx3fb->dev, "DI_DISP_SIG_POL = 0x%08X\n", in sdc_init_panel()
617 mx3fb_read_reg(mx3fb, DI_DISP_SIG_POL)); in sdc_init_panel()
618 dev_dbg(mx3fb->dev, "DI_DISP3_TIME_CONF = 0x%08X\n", in sdc_init_panel()
619 mx3fb_read_reg(mx3fb, DI_DISP3_TIME_CONF)); in sdc_init_panel()
632 static int sdc_set_color_key(struct mx3fb_data *mx3fb, enum ipu_channel channel, in sdc_set_color_key() argument
638 spin_lock_irqsave(&mx3fb->lock, lock_flags); in sdc_set_color_key()
640 sdc_conf = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_set_color_key()
647 reg = mx3fb_read_reg(mx3fb, SDC_GW_CTRL) & 0xFF000000L; in sdc_set_color_key()
648 mx3fb_write_reg(mx3fb, reg | (color_key & 0x00FFFFFFL), in sdc_set_color_key()
655 mx3fb_write_reg(mx3fb, sdc_conf, SDC_COM_CONF); in sdc_set_color_key()
657 spin_unlock_irqrestore(&mx3fb->lock, lock_flags); in sdc_set_color_key()
670 static int sdc_set_global_alpha(struct mx3fb_data *mx3fb, bool enable, uint8_t alpha) in sdc_set_global_alpha() argument
675 spin_lock_irqsave(&mx3fb->lock, lock_flags); in sdc_set_global_alpha()
678 reg = mx3fb_read_reg(mx3fb, SDC_GW_CTRL) & 0x00FFFFFFL; in sdc_set_global_alpha()
679 mx3fb_write_reg(mx3fb, reg | ((uint32_t) alpha << 24), SDC_GW_CTRL); in sdc_set_global_alpha()
681 reg = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_set_global_alpha()
682 mx3fb_write_reg(mx3fb, reg | SDC_COM_GLB_A, SDC_COM_CONF); in sdc_set_global_alpha()
684 reg = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_set_global_alpha()
685 mx3fb_write_reg(mx3fb, reg & ~SDC_COM_GLB_A, SDC_COM_CONF); in sdc_set_global_alpha()
688 spin_unlock_irqrestore(&mx3fb->lock, lock_flags); in sdc_set_global_alpha()
693 static u32 sdc_get_brightness(struct mx3fb_data *mx3fb) in sdc_get_brightness() argument
697 brightness = mx3fb_read_reg(mx3fb, SDC_PWM_CTRL); in sdc_get_brightness()
703 static void sdc_set_brightness(struct mx3fb_data *mx3fb, uint8_t value) in sdc_set_brightness() argument
705 dev_dbg(mx3fb->dev, "%s: value = %d\n", __func__, value); in sdc_set_brightness()
707 mx3fb_write_reg(mx3fb, 0x03000000UL | value << 16, SDC_PWM_CTRL); in sdc_set_brightness()
761 struct mx3fb_data *mx3fb = ichannel->client; in mx3fb_dma_done() local
762 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_dma_done()
764 dev_dbg(mx3fb->dev, "irq %d callback\n", ichannel->eof_irq); in mx3fb_dma_done()
798 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in __set_par() local
848 if (sdc_init_panel(mx3fb, mode, in __set_par()
865 sdc_set_window_pos(mx3fb, mx3_fbi->ipu_ch, 0, 0); in __set_par()
905 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in mx3fb_set_par() local
909 dev_dbg(mx3fb->dev, "%s [%c]\n", __func__, list_empty(&ichan->queue) ? '-' : '+'); in mx3fb_set_par()
1074 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in __blank() local
1093 sdc_set_brightness(mx3fb, 0); in __blank()
1101 sdc_set_brightness(mx3fb, mx3fb->backlight_level); in __blank()
1275 struct mx3fb_data *mx3fb = platform_get_drvdata(pdev); in mx3fb_suspend() local
1276 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_suspend()
1279 fb_set_suspend(mx3fb->fbi, 1); in mx3fb_suspend()
1284 sdc_set_brightness(mx3fb, 0); in mx3fb_suspend()
1295 struct mx3fb_data *mx3fb = platform_get_drvdata(pdev); in mx3fb_resume() local
1296 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_resume()
1300 sdc_set_brightness(mx3fb, mx3fb->backlight_level); in mx3fb_resume()
1304 fb_set_suspend(mx3fb->fbi, 0); in mx3fb_resume()
1426 static int init_fb_chan(struct mx3fb_data *mx3fb, struct idmac_channel *ichan) in init_fb_chan() argument
1428 struct device *dev = mx3fb->dev; in init_fb_chan()
1443 ichan->client = mx3fb; in init_fb_chan()
1480 mx3fb->fbi = fbi; in init_fb_chan()
1483 mx3fb_write_reg(mx3fb, 0x00100010L, DI_HSP_CLK_PER); in init_fb_chan()
1486 sdc_set_brightness(mx3fb, 255); in init_fb_chan()
1487 sdc_set_global_alpha(mx3fb, true, 0xFF); in init_fb_chan()
1488 sdc_set_color_key(mx3fb, IDMAC_SDC_0, false, 0); in init_fb_chan()
1493 mx3fbi->mx3fb = mx3fb; in init_fb_chan()
1496 mx3fb->disp_data_fmt = mx3fb_pdata->disp_data_fmt; in init_fb_chan()
1500 dev_dbg(mx3fb->dev, "disabling irq %d\n", ichan->eof_irq); in init_fb_chan()
1536 dev = rq->mx3fb->dev; in chan_filter()
1558 struct mx3fb_data *mx3fb; in mx3fb_probe() local
1571 mx3fb = devm_kzalloc(&pdev->dev, sizeof(*mx3fb), GFP_KERNEL); in mx3fb_probe()
1572 if (!mx3fb) in mx3fb_probe()
1575 spin_lock_init(&mx3fb->lock); in mx3fb_probe()
1577 mx3fb->reg_base = ioremap(sdc_reg->start, resource_size(sdc_reg)); in mx3fb_probe()
1578 if (!mx3fb->reg_base) { in mx3fb_probe()
1583 pr_debug("Remapped %pR at %p\n", sdc_reg, mx3fb->reg_base); in mx3fb_probe()
1588 mx3fb->dev = dev; in mx3fb_probe()
1589 platform_set_drvdata(pdev, mx3fb); in mx3fb_probe()
1591 rq.mx3fb = mx3fb; in mx3fb_probe()
1603 mx3fb->backlight_level = 255; in mx3fb_probe()
1605 ret = init_fb_chan(mx3fb, to_idmac_chan(chan)); in mx3fb_probe()
1609 mx3fb_init_backlight(mx3fb); in mx3fb_probe()
1617 iounmap(mx3fb->reg_base); in mx3fb_probe()
1625 struct mx3fb_data *mx3fb = platform_get_drvdata(dev); in mx3fb_remove() local
1626 struct fb_info *fbi = mx3fb->fbi; in mx3fb_remove()
1633 mx3fb_exit_backlight(mx3fb); in mx3fb_remove()
1638 iounmap(mx3fb->reg_base); in mx3fb_remove()