Lines Matching refs:sinfo

69 #define lcdc_readl(sinfo, reg)		__raw_readl((sinfo)->mmio+(reg))  argument
70 #define lcdc_writel(sinfo, reg, val) __raw_writel((val), (sinfo)->mmio+(reg)) argument
148 static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo, in atmel_lcdfb_update_dma2d() argument
160 static void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo, in atmel_lcdfb_update_dma2d() argument
172 lcdc_writel(sinfo, ATMEL_LCDC_DMA2DCFG, dma2dcfg); in atmel_lcdfb_update_dma2d()
175 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, in atmel_lcdfb_update_dma2d()
176 lcdc_readl(sinfo, ATMEL_LCDC_DMACON) in atmel_lcdfb_update_dma2d()
190 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); in atmel_bl_update_status() local
191 int power = sinfo->bl_power; in atmel_bl_update_status()
198 if (bl->props.fb_blank != sinfo->bl_power) in atmel_bl_update_status()
200 else if (bl->props.power != sinfo->bl_power) in atmel_bl_update_status()
204 brightness = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); in atmel_bl_update_status()
208 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, brightness); in atmel_bl_update_status()
210 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, in atmel_bl_update_status()
213 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); in atmel_bl_update_status()
215 bl->props.fb_blank = bl->props.power = sinfo->bl_power = power; in atmel_bl_update_status()
222 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); in atmel_bl_get_brightness() local
224 return lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); in atmel_bl_get_brightness()
232 static void init_backlight(struct atmel_lcdfb_info *sinfo) in init_backlight() argument
237 sinfo->bl_power = FB_BLANK_UNBLANK; in init_backlight()
239 if (sinfo->backlight) in init_backlight()
245 bl = backlight_device_register("backlight", &sinfo->pdev->dev, sinfo, in init_backlight()
248 dev_err(&sinfo->pdev->dev, "error %ld on backlight register\n", in init_backlight()
252 sinfo->backlight = bl; in init_backlight()
259 static void exit_backlight(struct atmel_lcdfb_info *sinfo) in exit_backlight() argument
261 if (!sinfo->backlight) in exit_backlight()
264 if (sinfo->backlight->ops) { in exit_backlight()
265 sinfo->backlight->props.power = FB_BLANK_POWERDOWN; in exit_backlight()
266 sinfo->backlight->ops->update_status(sinfo->backlight); in exit_backlight()
268 backlight_device_unregister(sinfo->backlight); in exit_backlight()
273 static void init_backlight(struct atmel_lcdfb_info *sinfo) in init_backlight() argument
275 dev_warn(&sinfo->pdev->dev, "backlight control is not available\n"); in init_backlight()
278 static void exit_backlight(struct atmel_lcdfb_info *sinfo) in exit_backlight() argument
284 static void init_contrast(struct atmel_lcdfb_info *sinfo) in init_contrast() argument
286 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in init_contrast()
293 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); in init_contrast()
294 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, ATMEL_LCDC_CVAL_DEFAULT); in init_contrast()
297 init_backlight(sinfo); in init_contrast()
300 static inline void atmel_lcdfb_power_control(struct atmel_lcdfb_info *sinfo, int on) in atmel_lcdfb_power_control() argument
303 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_power_control()
307 else if (sinfo->reg_lcd) { in atmel_lcdfb_power_control()
309 ret = regulator_enable(sinfo->reg_lcd); in atmel_lcdfb_power_control()
311 dev_err(&sinfo->pdev->dev, in atmel_lcdfb_power_control()
314 ret = regulator_disable(sinfo->reg_lcd); in atmel_lcdfb_power_control()
316 dev_err(&sinfo->pdev->dev, in atmel_lcdfb_power_control()
331 static unsigned long compute_hozval(struct atmel_lcdfb_info *sinfo, in compute_hozval() argument
337 if (!sinfo->config->have_hozval) in compute_hozval()
340 lcdcon2 = lcdc_readl(sinfo, ATMEL_LCDC_LCDCON2); in compute_hozval()
358 static void atmel_lcdfb_stop_nowait(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop_nowait() argument
360 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_stop_nowait()
363 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, in atmel_lcdfb_stop_nowait()
367 while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY) in atmel_lcdfb_stop_nowait()
370 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0); in atmel_lcdfb_stop_nowait()
373 static void atmel_lcdfb_stop(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop() argument
375 atmel_lcdfb_stop_nowait(sinfo); in atmel_lcdfb_stop()
378 while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) in atmel_lcdfb_stop()
382 static void atmel_lcdfb_start(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_start() argument
384 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_start()
386 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, pdata->default_dmacon); in atmel_lcdfb_start()
387 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, in atmel_lcdfb_start()
395 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_update_dma() local
405 lcdc_writel(sinfo, ATMEL_LCDC_DMABADDR1, dma_addr); in atmel_lcdfb_update_dma()
407 atmel_lcdfb_update_dma2d(sinfo, var, info); in atmel_lcdfb_update_dma()
410 static inline void atmel_lcdfb_free_video_memory(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_free_video_memory() argument
412 struct fb_info *info = sinfo->info; in atmel_lcdfb_free_video_memory()
425 static int atmel_lcdfb_alloc_video_memory(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_alloc_video_memory() argument
427 struct fb_info *info = sinfo->info; in atmel_lcdfb_alloc_video_memory()
433 info->fix.smem_len = max(smem_len, sinfo->smem_len); in atmel_lcdfb_alloc_video_memory()
489 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_check_var() local
490 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_check_var()
493 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; in atmel_lcdfb_check_var()
572 if (sinfo->config->have_intensity_bit) in atmel_lcdfb_check_var()
618 static void atmel_lcdfb_reset(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_reset() argument
622 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_reset()
623 atmel_lcdfb_start(sinfo); in atmel_lcdfb_reset()
642 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_set_par() local
643 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_set_par()
657 atmel_lcdfb_stop_nowait(sinfo); in atmel_lcdfb_set_par()
676 lcdc_writel(sinfo, ATMEL_LCDC_DMAFRMCFG, value); in atmel_lcdfb_set_par()
681 if (sinfo->config->have_alt_pixclock) in atmel_lcdfb_set_par()
684 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; in atmel_lcdfb_set_par()
690 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, ATMEL_LCDC_BYPASS); in atmel_lcdfb_set_par()
695 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, in atmel_lcdfb_set_par()
724 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON2, value); in atmel_lcdfb_set_par()
731 lcdc_writel(sinfo, ATMEL_LCDC_TIM1, value); in atmel_lcdfb_set_par()
738 lcdc_writel(sinfo, ATMEL_LCDC_TIM2, value); in atmel_lcdfb_set_par()
741 hozval_linesz = compute_hozval(sinfo, info->var.xres); in atmel_lcdfb_set_par()
747 lcdc_writel(sinfo, ATMEL_LCDC_LCDFRMCFG, value); in atmel_lcdfb_set_par()
751 lcdc_writel(sinfo, ATMEL_LCDC_FIFO, value); in atmel_lcdfb_set_par()
754 lcdc_writel(sinfo, ATMEL_LCDC_MVAL, 0); in atmel_lcdfb_set_par()
757 lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0UL); in atmel_lcdfb_set_par()
759 lcdc_writel(sinfo, ATMEL_LCDC_IER, ATMEL_LCDC_UFLWI | ATMEL_LCDC_OWRI | ATMEL_LCDC_MERI); in atmel_lcdfb_set_par()
762 while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) in atmel_lcdfb_set_par()
765 atmel_lcdfb_start(sinfo); in atmel_lcdfb_set_par()
808 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_setcolreg() local
809 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_setcolreg()
834 if (sinfo->config->have_intensity_bit) { in atmel_lcdfb_setcolreg()
857 lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val); in atmel_lcdfb_setcolreg()
865 lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val); in atmel_lcdfb_setcolreg()
887 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_blank() local
892 atmel_lcdfb_start(sinfo); in atmel_lcdfb_blank()
898 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_blank()
923 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_interrupt() local
926 status = lcdc_readl(sinfo, ATMEL_LCDC_ISR); in atmel_lcdfb_interrupt()
930 schedule_work(&sinfo->task); in atmel_lcdfb_interrupt()
932 lcdc_writel(sinfo, ATMEL_LCDC_ICR, status); in atmel_lcdfb_interrupt()
941 struct atmel_lcdfb_info *sinfo = in atmel_lcdfb_task() local
944 atmel_lcdfb_reset(sinfo); in atmel_lcdfb_task()
947 static int __init atmel_lcdfb_init_fbinfo(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_init_fbinfo() argument
949 struct fb_info *info = sinfo->info; in atmel_lcdfb_init_fbinfo()
968 static void atmel_lcdfb_start_clock(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_start_clock() argument
970 clk_prepare_enable(sinfo->bus_clk); in atmel_lcdfb_start_clock()
971 clk_prepare_enable(sinfo->lcdc_clk); in atmel_lcdfb_start_clock()
974 static void atmel_lcdfb_stop_clock(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop_clock() argument
976 clk_disable_unprepare(sinfo->bus_clk); in atmel_lcdfb_stop_clock()
977 clk_disable_unprepare(sinfo->lcdc_clk); in atmel_lcdfb_stop_clock()
1023 static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_of_init() argument
1025 struct fb_info *info = sinfo->info; in atmel_lcdfb_of_init()
1026 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_of_init()
1028 struct device *dev = &sinfo->pdev->dev; in atmel_lcdfb_of_init()
1039 sinfo->config = (struct atmel_lcdfb_config*) in atmel_lcdfb_of_init()
1151 static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_of_init() argument
1161 struct atmel_lcdfb_info *sinfo; in atmel_lcdfb_probe() local
1177 sinfo = info->par; in atmel_lcdfb_probe()
1178 sinfo->pdev = pdev; in atmel_lcdfb_probe()
1179 sinfo->info = info; in atmel_lcdfb_probe()
1184 ret = atmel_lcdfb_of_init(sinfo); in atmel_lcdfb_probe()
1193 sinfo->pdata = *pdata; in atmel_lcdfb_probe()
1198 sinfo->config = atmel_lcdfb_get_config(pdev); in atmel_lcdfb_probe()
1207 if (!sinfo->config) in atmel_lcdfb_probe()
1210 sinfo->reg_lcd = devm_regulator_get(&pdev->dev, "lcd"); in atmel_lcdfb_probe()
1211 if (IS_ERR(sinfo->reg_lcd)) in atmel_lcdfb_probe()
1212 sinfo->reg_lcd = NULL; in atmel_lcdfb_probe()
1215 info->pseudo_palette = sinfo->pseudo_palette; in atmel_lcdfb_probe()
1219 strcpy(info->fix.id, sinfo->pdev->name); in atmel_lcdfb_probe()
1222 sinfo->bus_clk = clk_get(dev, "hclk"); in atmel_lcdfb_probe()
1223 if (IS_ERR(sinfo->bus_clk)) { in atmel_lcdfb_probe()
1224 ret = PTR_ERR(sinfo->bus_clk); in atmel_lcdfb_probe()
1227 sinfo->lcdc_clk = clk_get(dev, "lcdc_clk"); in atmel_lcdfb_probe()
1228 if (IS_ERR(sinfo->lcdc_clk)) { in atmel_lcdfb_probe()
1229 ret = PTR_ERR(sinfo->lcdc_clk); in atmel_lcdfb_probe()
1232 atmel_lcdfb_start_clock(sinfo); in atmel_lcdfb_probe()
1247 sinfo->irq_base = platform_get_irq(pdev, 0); in atmel_lcdfb_probe()
1248 if (sinfo->irq_base < 0) { in atmel_lcdfb_probe()
1250 ret = sinfo->irq_base; in atmel_lcdfb_probe()
1279 ret = atmel_lcdfb_alloc_video_memory(sinfo); in atmel_lcdfb_probe()
1296 sinfo->mmio = ioremap(info->fix.mmio_start, info->fix.mmio_len); in atmel_lcdfb_probe()
1297 if (!sinfo->mmio) { in atmel_lcdfb_probe()
1304 init_contrast(sinfo); in atmel_lcdfb_probe()
1307 ret = request_irq(sinfo->irq_base, atmel_lcdfb_interrupt, 0, pdev->name, info); in atmel_lcdfb_probe()
1315 INIT_WORK(&sinfo->task, atmel_lcdfb_task); in atmel_lcdfb_probe()
1317 ret = atmel_lcdfb_init_fbinfo(sinfo); in atmel_lcdfb_probe()
1341 atmel_lcdfb_power_control(sinfo, 1); in atmel_lcdfb_probe()
1344 info->node, info->fix.mmio_start, sinfo->mmio, sinfo->irq_base); in atmel_lcdfb_probe()
1352 cancel_work_sync(&sinfo->task); in atmel_lcdfb_probe()
1353 free_irq(sinfo->irq_base, info); in atmel_lcdfb_probe()
1355 exit_backlight(sinfo); in atmel_lcdfb_probe()
1356 iounmap(sinfo->mmio); in atmel_lcdfb_probe()
1363 atmel_lcdfb_free_video_memory(sinfo); in atmel_lcdfb_probe()
1369 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_probe()
1370 clk_put(sinfo->lcdc_clk); in atmel_lcdfb_probe()
1372 clk_put(sinfo->bus_clk); in atmel_lcdfb_probe()
1384 struct atmel_lcdfb_info *sinfo; in atmel_lcdfb_remove() local
1389 sinfo = info->par; in atmel_lcdfb_remove()
1390 pdata = &sinfo->pdata; in atmel_lcdfb_remove()
1392 cancel_work_sync(&sinfo->task); in atmel_lcdfb_remove()
1393 exit_backlight(sinfo); in atmel_lcdfb_remove()
1394 atmel_lcdfb_power_control(sinfo, 0); in atmel_lcdfb_remove()
1396 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_remove()
1397 clk_put(sinfo->lcdc_clk); in atmel_lcdfb_remove()
1398 clk_put(sinfo->bus_clk); in atmel_lcdfb_remove()
1400 free_irq(sinfo->irq_base, info); in atmel_lcdfb_remove()
1401 iounmap(sinfo->mmio); in atmel_lcdfb_remove()
1407 atmel_lcdfb_free_video_memory(sinfo); in atmel_lcdfb_remove()
1420 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_suspend() local
1426 lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0UL); in atmel_lcdfb_suspend()
1428 sinfo->saved_lcdcon = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_CTR); in atmel_lcdfb_suspend()
1429 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, 0); in atmel_lcdfb_suspend()
1430 atmel_lcdfb_power_control(sinfo, 0); in atmel_lcdfb_suspend()
1431 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_suspend()
1432 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_suspend()
1440 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_resume() local
1442 atmel_lcdfb_start_clock(sinfo); in atmel_lcdfb_resume()
1443 atmel_lcdfb_start(sinfo); in atmel_lcdfb_resume()
1444 atmel_lcdfb_power_control(sinfo, 1); in atmel_lcdfb_resume()
1445 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, sinfo->saved_lcdcon); in atmel_lcdfb_resume()
1448 lcdc_writel(sinfo, ATMEL_LCDC_IER, ATMEL_LCDC_UFLWI in atmel_lcdfb_resume()