Lines Matching refs:mx3fb

253 	struct mx3fb_data	*mx3fb;  member
267 struct mx3fb_data *mx3fb; member
276 static void sdc_set_brightness(struct mx3fb_data *mx3fb, uint8_t value);
277 static u32 sdc_get_brightness(struct mx3fb_data *mx3fb);
346 static u32 mx3fb_read_reg(struct mx3fb_data *mx3fb, unsigned long reg) in mx3fb_read_reg() argument
348 return __raw_readl(mx3fb->reg_base + reg); in mx3fb_read_reg()
351 static void mx3fb_write_reg(struct mx3fb_data *mx3fb, u32 value, unsigned long reg) in mx3fb_write_reg() argument
353 __raw_writel(value, mx3fb->reg_base + reg); in mx3fb_write_reg()
368 struct mx3fb_data *mx3fb = fbi->mx3fb; in sdc_fb_init() local
371 reg = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_fb_init()
373 mx3fb_write_reg(mx3fb, reg | SDC_COM_BG_EN, SDC_COM_CONF); in sdc_fb_init()
379 struct mx3fb_data *mx3fb = fbi->mx3fb; in sdc_fb_uninit() local
382 reg = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_fb_uninit()
384 mx3fb_write_reg(mx3fb, reg & ~SDC_COM_BG_EN, SDC_COM_CONF); in sdc_fb_uninit()
391 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in sdc_enable_channel() local
398 dev_dbg(mx3fb->dev, "mx3fbi %p, desc %p, sg %p\n", mx3_fbi, in sdc_enable_channel()
401 dev_dbg(mx3fb->dev, "mx3fbi %p, txd = NULL\n", mx3_fbi); in sdc_enable_channel()
408 dev_err(mx3fb->dev, "Cannot allocate descriptor on %d\n", in sdc_enable_channel()
417 dev_dbg(mx3fb->dev, "%d: Submit %p #%d [%c]\n", __LINE__, in sdc_enable_channel()
421 dev_err(mx3fb->dev, "Cannot enable channel %d\n", in sdc_enable_channel()
429 dev_dbg(mx3fb->dev, "%d: Re-submit %p #%d [%c]\n", __LINE__, in sdc_enable_channel()
434 spin_lock_irqsave(&mx3fb->lock, flags); in sdc_enable_channel()
437 spin_unlock_irqrestore(&mx3fb->lock, flags); in sdc_enable_channel()
450 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in sdc_disable_channel() local
457 spin_lock_irqsave(&mx3fb->lock, flags); in sdc_disable_channel()
461 spin_unlock_irqrestore(&mx3fb->lock, flags); in sdc_disable_channel()
476 static int sdc_set_window_pos(struct mx3fb_data *mx3fb, enum ipu_channel channel, in sdc_set_window_pos() argument
482 x_pos += mx3fb->h_start_width; in sdc_set_window_pos()
483 y_pos += mx3fb->v_start_width; in sdc_set_window_pos()
485 mx3fb_write_reg(mx3fb, (x_pos << 16) | y_pos, SDC_BG_POS); in sdc_set_window_pos()
509 static int sdc_init_panel(struct mx3fb_data *mx3fb, enum ipu_panel panel, in sdc_init_panel() argument
524 dev_dbg(mx3fb->dev, "panel size = %d x %d", width, height); in sdc_init_panel()
532 mx3fb_write_reg(mx3fb, reg, SDC_HOR_CONF); in sdc_init_panel()
540 mx3fb_write_reg(mx3fb, reg, SDC_VER_CONF); in sdc_init_panel()
546 mx3fb->h_start_width = h_start_width; in sdc_init_panel()
547 mx3fb->v_start_width = v_start_width; in sdc_init_panel()
551 mx3fb_write_reg(mx3fb, 0x00FD0102L, SDC_SHARP_CONF_1); in sdc_init_panel()
552 mx3fb_write_reg(mx3fb, 0x00F500F4L, SDC_SHARP_CONF_2); in sdc_init_panel()
553 mx3fb_write_reg(mx3fb, SDC_COM_SHARP | SDC_COM_TFT_COLOR, SDC_COM_CONF); in sdc_init_panel()
556 mx3fb_write_reg(mx3fb, SDC_COM_TFT_COLOR, SDC_COM_CONF); in sdc_init_panel()
569 ipu_clk = clk_get(mx3fb->dev, NULL); in sdc_init_panel()
578 dev_dbg(mx3fb->dev, in sdc_init_panel()
583 dev_dbg(mx3fb->dev, "pixel clk = %u, divider %u.%u\n", in sdc_init_panel()
586 spin_lock_irqsave(&mx3fb->lock, lock_flags); in sdc_init_panel()
593 mx3fb_write_reg(mx3fb, (((div / 8) - 1) << 22) | div, DI_DISP3_TIME_CONF); in sdc_init_panel()
596 old_conf = mx3fb_read_reg(mx3fb, DI_DISP_IF_CONF) & 0x78FFFFFF; in sdc_init_panel()
600 mx3fb_write_reg(mx3fb, old_conf, DI_DISP_IF_CONF); in sdc_init_panel()
602 old_conf = mx3fb_read_reg(mx3fb, DI_DISP_SIG_POL) & 0xE0FFFFFF; in sdc_init_panel()
608 mx3fb_write_reg(mx3fb, old_conf, DI_DISP_SIG_POL); in sdc_init_panel()
610 map = &di_mappings[mx3fb->disp_data_fmt]; in sdc_init_panel()
611 mx3fb_write_reg(mx3fb, map->b0, DI_DISP3_B0_MAP); in sdc_init_panel()
612 mx3fb_write_reg(mx3fb, map->b1, DI_DISP3_B1_MAP); in sdc_init_panel()
613 mx3fb_write_reg(mx3fb, map->b2, DI_DISP3_B2_MAP); in sdc_init_panel()
615 spin_unlock_irqrestore(&mx3fb->lock, lock_flags); in sdc_init_panel()
617 dev_dbg(mx3fb->dev, "DI_DISP_IF_CONF = 0x%08X\n", in sdc_init_panel()
618 mx3fb_read_reg(mx3fb, DI_DISP_IF_CONF)); in sdc_init_panel()
619 dev_dbg(mx3fb->dev, "DI_DISP_SIG_POL = 0x%08X\n", in sdc_init_panel()
620 mx3fb_read_reg(mx3fb, DI_DISP_SIG_POL)); in sdc_init_panel()
621 dev_dbg(mx3fb->dev, "DI_DISP3_TIME_CONF = 0x%08X\n", in sdc_init_panel()
622 mx3fb_read_reg(mx3fb, DI_DISP3_TIME_CONF)); in sdc_init_panel()
635 static int sdc_set_color_key(struct mx3fb_data *mx3fb, enum ipu_channel channel, in sdc_set_color_key() argument
641 spin_lock_irqsave(&mx3fb->lock, lock_flags); in sdc_set_color_key()
643 sdc_conf = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_set_color_key()
650 reg = mx3fb_read_reg(mx3fb, SDC_GW_CTRL) & 0xFF000000L; in sdc_set_color_key()
651 mx3fb_write_reg(mx3fb, reg | (color_key & 0x00FFFFFFL), in sdc_set_color_key()
658 mx3fb_write_reg(mx3fb, sdc_conf, SDC_COM_CONF); in sdc_set_color_key()
660 spin_unlock_irqrestore(&mx3fb->lock, lock_flags); in sdc_set_color_key()
673 static int sdc_set_global_alpha(struct mx3fb_data *mx3fb, bool enable, uint8_t alpha) in sdc_set_global_alpha() argument
678 spin_lock_irqsave(&mx3fb->lock, lock_flags); in sdc_set_global_alpha()
681 reg = mx3fb_read_reg(mx3fb, SDC_GW_CTRL) & 0x00FFFFFFL; in sdc_set_global_alpha()
682 mx3fb_write_reg(mx3fb, reg | ((uint32_t) alpha << 24), SDC_GW_CTRL); 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()
687 reg = mx3fb_read_reg(mx3fb, SDC_COM_CONF); in sdc_set_global_alpha()
688 mx3fb_write_reg(mx3fb, reg & ~SDC_COM_GLB_A, SDC_COM_CONF); in sdc_set_global_alpha()
691 spin_unlock_irqrestore(&mx3fb->lock, lock_flags); in sdc_set_global_alpha()
696 static u32 sdc_get_brightness(struct mx3fb_data *mx3fb) in sdc_get_brightness() argument
700 brightness = mx3fb_read_reg(mx3fb, SDC_PWM_CTRL); in sdc_get_brightness()
706 static void sdc_set_brightness(struct mx3fb_data *mx3fb, uint8_t value) in sdc_set_brightness() argument
708 dev_dbg(mx3fb->dev, "%s: value = %d\n", __func__, value); in sdc_set_brightness()
710 mx3fb_write_reg(mx3fb, 0x03000000UL | value << 16, SDC_PWM_CTRL); in sdc_set_brightness()
764 struct mx3fb_data *mx3fb = ichannel->client; in mx3fb_dma_done() local
765 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_dma_done()
767 dev_dbg(mx3fb->dev, "irq %d callback\n", ichannel->eof_irq); in mx3fb_dma_done()
801 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in __set_par() local
851 if (sdc_init_panel(mx3fb, mode, in __set_par()
868 sdc_set_window_pos(mx3fb, mx3_fbi->ipu_ch, 0, 0); in __set_par()
908 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in mx3fb_set_par() local
912 dev_dbg(mx3fb->dev, "%s [%c]\n", __func__, list_empty(&ichan->queue) ? '-' : '+'); in mx3fb_set_par()
1077 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in __blank() local
1096 sdc_set_brightness(mx3fb, 0); in __blank()
1104 sdc_set_brightness(mx3fb, mx3fb->backlight_level); in __blank()
1278 struct mx3fb_data *mx3fb = platform_get_drvdata(pdev); in mx3fb_suspend() local
1279 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_suspend()
1282 fb_set_suspend(mx3fb->fbi, 1); in mx3fb_suspend()
1287 sdc_set_brightness(mx3fb, 0); in mx3fb_suspend()
1298 struct mx3fb_data *mx3fb = platform_get_drvdata(pdev); in mx3fb_resume() local
1299 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_resume()
1303 sdc_set_brightness(mx3fb, mx3fb->backlight_level); in mx3fb_resume()
1307 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()
1446 ichan->client = mx3fb; in init_fb_chan()
1483 mx3fb->fbi = fbi; in init_fb_chan()
1486 mx3fb_write_reg(mx3fb, 0x00100010L, DI_HSP_CLK_PER); in init_fb_chan()
1489 sdc_set_brightness(mx3fb, 255); in init_fb_chan()
1490 sdc_set_global_alpha(mx3fb, true, 0xFF); in init_fb_chan()
1491 sdc_set_color_key(mx3fb, IDMAC_SDC_0, false, 0); in init_fb_chan()
1496 mx3fbi->mx3fb = mx3fb; in init_fb_chan()
1499 mx3fb->disp_data_fmt = mx3fb_pdata->disp_data_fmt; in init_fb_chan()
1503 dev_dbg(mx3fb->dev, "disabling irq %d\n", ichan->eof_irq); in init_fb_chan()
1539 dev = rq->mx3fb->dev; in chan_filter()
1561 struct mx3fb_data *mx3fb; in mx3fb_probe() local
1574 mx3fb = devm_kzalloc(&pdev->dev, sizeof(*mx3fb), GFP_KERNEL); in mx3fb_probe()
1575 if (!mx3fb) in mx3fb_probe()
1578 spin_lock_init(&mx3fb->lock); in mx3fb_probe()
1580 mx3fb->reg_base = ioremap(sdc_reg->start, resource_size(sdc_reg)); in mx3fb_probe()
1581 if (!mx3fb->reg_base) { in mx3fb_probe()
1586 pr_debug("Remapped %pR at %p\n", sdc_reg, mx3fb->reg_base); in mx3fb_probe()
1591 mx3fb->dev = dev; in mx3fb_probe()
1592 platform_set_drvdata(pdev, mx3fb); in mx3fb_probe()
1594 rq.mx3fb = mx3fb; in mx3fb_probe()
1606 mx3fb->backlight_level = 255; in mx3fb_probe()
1608 ret = init_fb_chan(mx3fb, to_idmac_chan(chan)); in mx3fb_probe()
1612 mx3fb_init_backlight(mx3fb); in mx3fb_probe()
1620 iounmap(mx3fb->reg_base); in mx3fb_probe()
1628 struct mx3fb_data *mx3fb = platform_get_drvdata(dev); in mx3fb_remove() local
1629 struct fb_info *fbi = mx3fb->fbi; in mx3fb_remove()
1636 mx3fb_exit_backlight(mx3fb); in mx3fb_remove()
1641 iounmap(mx3fb->reg_base); in mx3fb_remove()