Lines Matching refs:sinfo

72 #define lcdc_readl(sinfo, reg)		__raw_readl((sinfo)->mmio+(reg))  argument
73 #define lcdc_writel(sinfo, reg, val) __raw_writel((val), (sinfo)->mmio+(reg)) argument
151 static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo, in atmel_lcdfb_update_dma2d() argument
163 static void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo, in atmel_lcdfb_update_dma2d() argument
175 lcdc_writel(sinfo, ATMEL_LCDC_DMA2DCFG, dma2dcfg); in atmel_lcdfb_update_dma2d()
178 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, in atmel_lcdfb_update_dma2d()
179 lcdc_readl(sinfo, ATMEL_LCDC_DMACON) in atmel_lcdfb_update_dma2d()
193 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); in atmel_bl_update_status() local
194 int power = sinfo->bl_power; in atmel_bl_update_status()
201 if (bl->props.fb_blank != sinfo->bl_power) in atmel_bl_update_status()
203 else if (bl->props.power != sinfo->bl_power) in atmel_bl_update_status()
207 brightness = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); in atmel_bl_update_status()
211 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, brightness); in atmel_bl_update_status()
213 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, in atmel_bl_update_status()
216 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); in atmel_bl_update_status()
218 bl->props.fb_blank = bl->props.power = sinfo->bl_power = power; in atmel_bl_update_status()
225 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); in atmel_bl_get_brightness() local
227 return lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); in atmel_bl_get_brightness()
235 static void init_backlight(struct atmel_lcdfb_info *sinfo) in init_backlight() argument
240 sinfo->bl_power = FB_BLANK_UNBLANK; in init_backlight()
242 if (sinfo->backlight) in init_backlight()
248 bl = backlight_device_register("backlight", &sinfo->pdev->dev, sinfo, in init_backlight()
251 dev_err(&sinfo->pdev->dev, "error %ld on backlight register\n", in init_backlight()
255 sinfo->backlight = bl; in init_backlight()
262 static void exit_backlight(struct atmel_lcdfb_info *sinfo) in exit_backlight() argument
264 if (!sinfo->backlight) in exit_backlight()
267 if (sinfo->backlight->ops) { in exit_backlight()
268 sinfo->backlight->props.power = FB_BLANK_POWERDOWN; in exit_backlight()
269 sinfo->backlight->ops->update_status(sinfo->backlight); in exit_backlight()
271 backlight_device_unregister(sinfo->backlight); in exit_backlight()
276 static void init_backlight(struct atmel_lcdfb_info *sinfo) in init_backlight() argument
278 dev_warn(&sinfo->pdev->dev, "backlight control is not available\n"); in init_backlight()
281 static void exit_backlight(struct atmel_lcdfb_info *sinfo) in exit_backlight() argument
287 static void init_contrast(struct atmel_lcdfb_info *sinfo) in init_contrast() argument
289 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in init_contrast()
296 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); in init_contrast()
297 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, ATMEL_LCDC_CVAL_DEFAULT); in init_contrast()
300 init_backlight(sinfo); in init_contrast()
303 static inline void atmel_lcdfb_power_control(struct atmel_lcdfb_info *sinfo, int on) in atmel_lcdfb_power_control() argument
306 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_power_control()
310 else if (sinfo->reg_lcd) { in atmel_lcdfb_power_control()
312 ret = regulator_enable(sinfo->reg_lcd); in atmel_lcdfb_power_control()
314 dev_err(&sinfo->pdev->dev, in atmel_lcdfb_power_control()
317 ret = regulator_disable(sinfo->reg_lcd); in atmel_lcdfb_power_control()
319 dev_err(&sinfo->pdev->dev, in atmel_lcdfb_power_control()
334 static unsigned long compute_hozval(struct atmel_lcdfb_info *sinfo, in compute_hozval() argument
340 if (!sinfo->config->have_hozval) in compute_hozval()
343 lcdcon2 = lcdc_readl(sinfo, ATMEL_LCDC_LCDCON2); in compute_hozval()
361 static void atmel_lcdfb_stop_nowait(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop_nowait() argument
363 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_stop_nowait()
366 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, in atmel_lcdfb_stop_nowait()
370 while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY) in atmel_lcdfb_stop_nowait()
373 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0); in atmel_lcdfb_stop_nowait()
376 static void atmel_lcdfb_stop(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop() argument
378 atmel_lcdfb_stop_nowait(sinfo); in atmel_lcdfb_stop()
381 while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) in atmel_lcdfb_stop()
385 static void atmel_lcdfb_start(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_start() argument
387 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_start()
389 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, pdata->default_dmacon); in atmel_lcdfb_start()
390 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, in atmel_lcdfb_start()
398 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_update_dma() local
408 lcdc_writel(sinfo, ATMEL_LCDC_DMABADDR1, dma_addr); in atmel_lcdfb_update_dma()
410 atmel_lcdfb_update_dma2d(sinfo, var, info); in atmel_lcdfb_update_dma()
413 static inline void atmel_lcdfb_free_video_memory(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_free_video_memory() argument
415 struct fb_info *info = sinfo->info; in atmel_lcdfb_free_video_memory()
428 static int atmel_lcdfb_alloc_video_memory(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_alloc_video_memory() argument
430 struct fb_info *info = sinfo->info; in atmel_lcdfb_alloc_video_memory()
436 info->fix.smem_len = max(smem_len, sinfo->smem_len); in atmel_lcdfb_alloc_video_memory()
491 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_check_var() local
492 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_check_var()
495 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; in atmel_lcdfb_check_var()
574 if (sinfo->config->have_intensity_bit) in atmel_lcdfb_check_var()
620 static void atmel_lcdfb_reset(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_reset() argument
624 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_reset()
625 atmel_lcdfb_start(sinfo); in atmel_lcdfb_reset()
644 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_set_par() local
645 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_set_par()
659 atmel_lcdfb_stop_nowait(sinfo); in atmel_lcdfb_set_par()
678 lcdc_writel(sinfo, ATMEL_LCDC_DMAFRMCFG, value); in atmel_lcdfb_set_par()
683 if (sinfo->config->have_alt_pixclock) in atmel_lcdfb_set_par()
686 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; in atmel_lcdfb_set_par()
692 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, ATMEL_LCDC_BYPASS); in atmel_lcdfb_set_par()
697 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, in atmel_lcdfb_set_par()
726 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON2, value); in atmel_lcdfb_set_par()
733 lcdc_writel(sinfo, ATMEL_LCDC_TIM1, value); in atmel_lcdfb_set_par()
740 lcdc_writel(sinfo, ATMEL_LCDC_TIM2, value); in atmel_lcdfb_set_par()
743 hozval_linesz = compute_hozval(sinfo, info->var.xres); in atmel_lcdfb_set_par()
749 lcdc_writel(sinfo, ATMEL_LCDC_LCDFRMCFG, value); in atmel_lcdfb_set_par()
753 lcdc_writel(sinfo, ATMEL_LCDC_FIFO, value); in atmel_lcdfb_set_par()
756 lcdc_writel(sinfo, ATMEL_LCDC_MVAL, 0); in atmel_lcdfb_set_par()
759 lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0UL); in atmel_lcdfb_set_par()
761 lcdc_writel(sinfo, ATMEL_LCDC_IER, ATMEL_LCDC_UFLWI | ATMEL_LCDC_OWRI | ATMEL_LCDC_MERI); in atmel_lcdfb_set_par()
764 while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) in atmel_lcdfb_set_par()
767 atmel_lcdfb_start(sinfo); in atmel_lcdfb_set_par()
810 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_setcolreg() local
811 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_setcolreg()
836 if (sinfo->config->have_intensity_bit) { in atmel_lcdfb_setcolreg()
859 lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val); in atmel_lcdfb_setcolreg()
867 lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val); in atmel_lcdfb_setcolreg()
889 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_blank() local
894 atmel_lcdfb_start(sinfo); in atmel_lcdfb_blank()
900 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_blank()
925 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_interrupt() local
928 status = lcdc_readl(sinfo, ATMEL_LCDC_ISR); in atmel_lcdfb_interrupt()
932 schedule_work(&sinfo->task); in atmel_lcdfb_interrupt()
934 lcdc_writel(sinfo, ATMEL_LCDC_ICR, status); in atmel_lcdfb_interrupt()
943 struct atmel_lcdfb_info *sinfo = in atmel_lcdfb_task() local
946 atmel_lcdfb_reset(sinfo); in atmel_lcdfb_task()
949 static int __init atmel_lcdfb_init_fbinfo(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_init_fbinfo() argument
951 struct fb_info *info = sinfo->info; in atmel_lcdfb_init_fbinfo()
970 static void atmel_lcdfb_start_clock(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_start_clock() argument
972 clk_prepare_enable(sinfo->bus_clk); in atmel_lcdfb_start_clock()
973 clk_prepare_enable(sinfo->lcdc_clk); in atmel_lcdfb_start_clock()
976 static void atmel_lcdfb_stop_clock(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop_clock() argument
978 clk_disable_unprepare(sinfo->bus_clk); in atmel_lcdfb_stop_clock()
979 clk_disable_unprepare(sinfo->lcdc_clk); in atmel_lcdfb_stop_clock()
1025 static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_of_init() argument
1027 struct fb_info *info = sinfo->info; in atmel_lcdfb_of_init()
1028 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_of_init()
1030 struct device *dev = &sinfo->pdev->dev; in atmel_lcdfb_of_init()
1041 sinfo->config = (struct atmel_lcdfb_config*) in atmel_lcdfb_of_init()
1153 static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_of_init() argument
1163 struct atmel_lcdfb_info *sinfo; in atmel_lcdfb_probe() local
1179 sinfo = info->par; in atmel_lcdfb_probe()
1180 sinfo->pdev = pdev; in atmel_lcdfb_probe()
1181 sinfo->info = info; in atmel_lcdfb_probe()
1186 ret = atmel_lcdfb_of_init(sinfo); in atmel_lcdfb_probe()
1195 sinfo->pdata = *pdata; in atmel_lcdfb_probe()
1200 sinfo->config = atmel_lcdfb_get_config(pdev); in atmel_lcdfb_probe()
1209 if (!sinfo->config) in atmel_lcdfb_probe()
1212 sinfo->reg_lcd = devm_regulator_get(&pdev->dev, "lcd"); in atmel_lcdfb_probe()
1213 if (IS_ERR(sinfo->reg_lcd)) in atmel_lcdfb_probe()
1214 sinfo->reg_lcd = NULL; in atmel_lcdfb_probe()
1217 info->pseudo_palette = sinfo->pseudo_palette; in atmel_lcdfb_probe()
1221 strcpy(info->fix.id, sinfo->pdev->name); in atmel_lcdfb_probe()
1224 sinfo->bus_clk = clk_get(dev, "hclk"); in atmel_lcdfb_probe()
1225 if (IS_ERR(sinfo->bus_clk)) { in atmel_lcdfb_probe()
1226 ret = PTR_ERR(sinfo->bus_clk); in atmel_lcdfb_probe()
1229 sinfo->lcdc_clk = clk_get(dev, "lcdc_clk"); in atmel_lcdfb_probe()
1230 if (IS_ERR(sinfo->lcdc_clk)) { in atmel_lcdfb_probe()
1231 ret = PTR_ERR(sinfo->lcdc_clk); in atmel_lcdfb_probe()
1234 atmel_lcdfb_start_clock(sinfo); in atmel_lcdfb_probe()
1249 sinfo->irq_base = platform_get_irq(pdev, 0); in atmel_lcdfb_probe()
1250 if (sinfo->irq_base < 0) { in atmel_lcdfb_probe()
1252 ret = sinfo->irq_base; in atmel_lcdfb_probe()
1281 ret = atmel_lcdfb_alloc_video_memory(sinfo); in atmel_lcdfb_probe()
1298 sinfo->mmio = ioremap(info->fix.mmio_start, info->fix.mmio_len); in atmel_lcdfb_probe()
1299 if (!sinfo->mmio) { in atmel_lcdfb_probe()
1306 init_contrast(sinfo); in atmel_lcdfb_probe()
1309 ret = request_irq(sinfo->irq_base, atmel_lcdfb_interrupt, 0, pdev->name, info); in atmel_lcdfb_probe()
1317 INIT_WORK(&sinfo->task, atmel_lcdfb_task); in atmel_lcdfb_probe()
1319 ret = atmel_lcdfb_init_fbinfo(sinfo); in atmel_lcdfb_probe()
1343 atmel_lcdfb_power_control(sinfo, 1); in atmel_lcdfb_probe()
1346 info->node, info->fix.mmio_start, sinfo->mmio, sinfo->irq_base); in atmel_lcdfb_probe()
1354 cancel_work_sync(&sinfo->task); in atmel_lcdfb_probe()
1355 free_irq(sinfo->irq_base, info); in atmel_lcdfb_probe()
1357 exit_backlight(sinfo); in atmel_lcdfb_probe()
1358 iounmap(sinfo->mmio); in atmel_lcdfb_probe()
1365 atmel_lcdfb_free_video_memory(sinfo); in atmel_lcdfb_probe()
1371 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_probe()
1372 clk_put(sinfo->lcdc_clk); in atmel_lcdfb_probe()
1374 clk_put(sinfo->bus_clk); in atmel_lcdfb_probe()
1386 struct atmel_lcdfb_info *sinfo; in atmel_lcdfb_remove() local
1391 sinfo = info->par; in atmel_lcdfb_remove()
1392 pdata = &sinfo->pdata; in atmel_lcdfb_remove()
1394 cancel_work_sync(&sinfo->task); in atmel_lcdfb_remove()
1395 exit_backlight(sinfo); in atmel_lcdfb_remove()
1396 atmel_lcdfb_power_control(sinfo, 0); in atmel_lcdfb_remove()
1398 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_remove()
1399 clk_put(sinfo->lcdc_clk); in atmel_lcdfb_remove()
1400 clk_put(sinfo->bus_clk); in atmel_lcdfb_remove()
1402 free_irq(sinfo->irq_base, info); in atmel_lcdfb_remove()
1403 iounmap(sinfo->mmio); in atmel_lcdfb_remove()
1409 atmel_lcdfb_free_video_memory(sinfo); in atmel_lcdfb_remove()
1422 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_suspend() local
1428 lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0UL); in atmel_lcdfb_suspend()
1430 sinfo->saved_lcdcon = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_CTR); in atmel_lcdfb_suspend()
1431 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, 0); in atmel_lcdfb_suspend()
1432 atmel_lcdfb_power_control(sinfo, 0); in atmel_lcdfb_suspend()
1433 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_suspend()
1434 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_suspend()
1442 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_resume() local
1444 atmel_lcdfb_start_clock(sinfo); in atmel_lcdfb_resume()
1445 atmel_lcdfb_start(sinfo); in atmel_lcdfb_resume()
1446 atmel_lcdfb_power_control(sinfo, 1); in atmel_lcdfb_resume()
1447 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, sinfo->saved_lcdcon); in atmel_lcdfb_resume()
1450 lcdc_writel(sinfo, ATMEL_LCDC_IER, ATMEL_LCDC_UFLWI in atmel_lcdfb_resume()