Lines Matching refs:sinfo
73 #define lcdc_readl(sinfo, reg) __raw_readl((sinfo)->mmio+(reg)) argument
74 #define lcdc_writel(sinfo, reg, val) __raw_writel((val), (sinfo)->mmio+(reg)) argument
152 static inline void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo, in atmel_lcdfb_update_dma2d() argument
164 static void atmel_lcdfb_update_dma2d(struct atmel_lcdfb_info *sinfo, in atmel_lcdfb_update_dma2d() argument
176 lcdc_writel(sinfo, ATMEL_LCDC_DMA2DCFG, dma2dcfg); in atmel_lcdfb_update_dma2d()
179 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, in atmel_lcdfb_update_dma2d()
180 lcdc_readl(sinfo, ATMEL_LCDC_DMACON) in atmel_lcdfb_update_dma2d()
194 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); in atmel_bl_update_status() local
195 int power = sinfo->bl_power; in atmel_bl_update_status()
202 if (bl->props.fb_blank != sinfo->bl_power) in atmel_bl_update_status()
204 else if (bl->props.power != sinfo->bl_power) in atmel_bl_update_status()
208 brightness = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); in atmel_bl_update_status()
212 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, brightness); in atmel_bl_update_status()
214 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, in atmel_bl_update_status()
217 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); in atmel_bl_update_status()
219 bl->props.fb_blank = bl->props.power = sinfo->bl_power = power; in atmel_bl_update_status()
226 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); in atmel_bl_get_brightness() local
228 return lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); in atmel_bl_get_brightness()
236 static void init_backlight(struct atmel_lcdfb_info *sinfo) in init_backlight() argument
241 sinfo->bl_power = FB_BLANK_UNBLANK; in init_backlight()
243 if (sinfo->backlight) in init_backlight()
249 bl = backlight_device_register("backlight", &sinfo->pdev->dev, sinfo, in init_backlight()
252 dev_err(&sinfo->pdev->dev, "error %ld on backlight register\n", in init_backlight()
256 sinfo->backlight = bl; in init_backlight()
263 static void exit_backlight(struct atmel_lcdfb_info *sinfo) in exit_backlight() argument
265 if (!sinfo->backlight) in exit_backlight()
268 if (sinfo->backlight->ops) { in exit_backlight()
269 sinfo->backlight->props.power = FB_BLANK_POWERDOWN; in exit_backlight()
270 sinfo->backlight->ops->update_status(sinfo->backlight); in exit_backlight()
272 backlight_device_unregister(sinfo->backlight); in exit_backlight()
277 static void init_backlight(struct atmel_lcdfb_info *sinfo) in init_backlight() argument
279 dev_warn(&sinfo->pdev->dev, "backlight control is not available\n"); in init_backlight()
282 static void exit_backlight(struct atmel_lcdfb_info *sinfo) in exit_backlight() argument
288 static void init_contrast(struct atmel_lcdfb_info *sinfo) in init_contrast() argument
290 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in init_contrast()
297 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); in init_contrast()
298 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, ATMEL_LCDC_CVAL_DEFAULT); in init_contrast()
301 init_backlight(sinfo); in init_contrast()
304 static inline void atmel_lcdfb_power_control(struct atmel_lcdfb_info *sinfo, int on) in atmel_lcdfb_power_control() argument
307 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_power_control()
311 else if (sinfo->reg_lcd) { in atmel_lcdfb_power_control()
313 ret = regulator_enable(sinfo->reg_lcd); in atmel_lcdfb_power_control()
315 dev_err(&sinfo->pdev->dev, in atmel_lcdfb_power_control()
318 ret = regulator_disable(sinfo->reg_lcd); in atmel_lcdfb_power_control()
320 dev_err(&sinfo->pdev->dev, in atmel_lcdfb_power_control()
335 static unsigned long compute_hozval(struct atmel_lcdfb_info *sinfo, in compute_hozval() argument
341 if (!sinfo->config->have_hozval) in compute_hozval()
344 lcdcon2 = lcdc_readl(sinfo, ATMEL_LCDC_LCDCON2); in compute_hozval()
362 static void atmel_lcdfb_stop_nowait(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop_nowait() argument
364 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_stop_nowait()
367 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, in atmel_lcdfb_stop_nowait()
371 while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY) in atmel_lcdfb_stop_nowait()
374 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0); in atmel_lcdfb_stop_nowait()
377 static void atmel_lcdfb_stop(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop() argument
379 atmel_lcdfb_stop_nowait(sinfo); in atmel_lcdfb_stop()
382 while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) in atmel_lcdfb_stop()
386 static void atmel_lcdfb_start(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_start() argument
388 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_start()
390 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, pdata->default_dmacon); in atmel_lcdfb_start()
391 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, in atmel_lcdfb_start()
399 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_update_dma() local
409 lcdc_writel(sinfo, ATMEL_LCDC_DMABADDR1, dma_addr); in atmel_lcdfb_update_dma()
411 atmel_lcdfb_update_dma2d(sinfo, var, info); in atmel_lcdfb_update_dma()
414 static inline void atmel_lcdfb_free_video_memory(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_free_video_memory() argument
416 struct fb_info *info = sinfo->info; in atmel_lcdfb_free_video_memory()
429 static int atmel_lcdfb_alloc_video_memory(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_alloc_video_memory() argument
431 struct fb_info *info = sinfo->info; in atmel_lcdfb_alloc_video_memory()
437 info->fix.smem_len = max(smem_len, sinfo->smem_len); in atmel_lcdfb_alloc_video_memory()
492 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_check_var() local
493 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_check_var()
496 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; in atmel_lcdfb_check_var()
575 if (sinfo->config->have_intensity_bit) in atmel_lcdfb_check_var()
621 static void atmel_lcdfb_reset(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_reset() argument
625 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_reset()
626 atmel_lcdfb_start(sinfo); in atmel_lcdfb_reset()
645 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_set_par() local
646 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_set_par()
660 atmel_lcdfb_stop_nowait(sinfo); in atmel_lcdfb_set_par()
679 lcdc_writel(sinfo, ATMEL_LCDC_DMAFRMCFG, value); in atmel_lcdfb_set_par()
684 if (sinfo->config->have_alt_pixclock) in atmel_lcdfb_set_par()
687 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; in atmel_lcdfb_set_par()
693 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, ATMEL_LCDC_BYPASS); in atmel_lcdfb_set_par()
698 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, in atmel_lcdfb_set_par()
727 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON2, value); in atmel_lcdfb_set_par()
734 lcdc_writel(sinfo, ATMEL_LCDC_TIM1, value); in atmel_lcdfb_set_par()
741 lcdc_writel(sinfo, ATMEL_LCDC_TIM2, value); in atmel_lcdfb_set_par()
744 hozval_linesz = compute_hozval(sinfo, info->var.xres); in atmel_lcdfb_set_par()
750 lcdc_writel(sinfo, ATMEL_LCDC_LCDFRMCFG, value); in atmel_lcdfb_set_par()
754 lcdc_writel(sinfo, ATMEL_LCDC_FIFO, value); in atmel_lcdfb_set_par()
757 lcdc_writel(sinfo, ATMEL_LCDC_MVAL, 0); in atmel_lcdfb_set_par()
760 lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0UL); in atmel_lcdfb_set_par()
762 lcdc_writel(sinfo, ATMEL_LCDC_IER, ATMEL_LCDC_UFLWI | ATMEL_LCDC_OWRI | ATMEL_LCDC_MERI); in atmel_lcdfb_set_par()
765 while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) in atmel_lcdfb_set_par()
768 atmel_lcdfb_start(sinfo); in atmel_lcdfb_set_par()
811 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_setcolreg() local
812 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_setcolreg()
837 if (sinfo->config->have_intensity_bit) { in atmel_lcdfb_setcolreg()
860 lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val); in atmel_lcdfb_setcolreg()
868 lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val); in atmel_lcdfb_setcolreg()
890 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_blank() local
895 atmel_lcdfb_start(sinfo); in atmel_lcdfb_blank()
901 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_blank()
926 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_interrupt() local
929 status = lcdc_readl(sinfo, ATMEL_LCDC_ISR); in atmel_lcdfb_interrupt()
933 schedule_work(&sinfo->task); in atmel_lcdfb_interrupt()
935 lcdc_writel(sinfo, ATMEL_LCDC_ICR, status); in atmel_lcdfb_interrupt()
944 struct atmel_lcdfb_info *sinfo = in atmel_lcdfb_task() local
947 atmel_lcdfb_reset(sinfo); in atmel_lcdfb_task()
950 static int __init atmel_lcdfb_init_fbinfo(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_init_fbinfo() argument
952 struct fb_info *info = sinfo->info; in atmel_lcdfb_init_fbinfo()
971 static void atmel_lcdfb_start_clock(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_start_clock() argument
973 clk_prepare_enable(sinfo->bus_clk); in atmel_lcdfb_start_clock()
974 clk_prepare_enable(sinfo->lcdc_clk); in atmel_lcdfb_start_clock()
977 static void atmel_lcdfb_stop_clock(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop_clock() argument
979 clk_disable_unprepare(sinfo->bus_clk); in atmel_lcdfb_stop_clock()
980 clk_disable_unprepare(sinfo->lcdc_clk); in atmel_lcdfb_stop_clock()
1026 static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_of_init() argument
1028 struct fb_info *info = sinfo->info; in atmel_lcdfb_of_init()
1029 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_of_init()
1031 struct device *dev = &sinfo->pdev->dev; in atmel_lcdfb_of_init()
1042 sinfo->config = (struct atmel_lcdfb_config*) in atmel_lcdfb_of_init()
1154 static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_of_init() argument
1164 struct atmel_lcdfb_info *sinfo; in atmel_lcdfb_probe() local
1180 sinfo = info->par; in atmel_lcdfb_probe()
1181 sinfo->pdev = pdev; in atmel_lcdfb_probe()
1182 sinfo->info = info; in atmel_lcdfb_probe()
1187 ret = atmel_lcdfb_of_init(sinfo); in atmel_lcdfb_probe()
1196 sinfo->pdata = *pdata; in atmel_lcdfb_probe()
1201 sinfo->config = atmel_lcdfb_get_config(pdev); in atmel_lcdfb_probe()
1210 if (!sinfo->config) in atmel_lcdfb_probe()
1213 sinfo->reg_lcd = devm_regulator_get(&pdev->dev, "lcd"); in atmel_lcdfb_probe()
1214 if (IS_ERR(sinfo->reg_lcd)) in atmel_lcdfb_probe()
1215 sinfo->reg_lcd = NULL; in atmel_lcdfb_probe()
1218 info->pseudo_palette = sinfo->pseudo_palette; in atmel_lcdfb_probe()
1222 strcpy(info->fix.id, sinfo->pdev->name); in atmel_lcdfb_probe()
1225 sinfo->bus_clk = clk_get(dev, "hclk"); in atmel_lcdfb_probe()
1226 if (IS_ERR(sinfo->bus_clk)) { in atmel_lcdfb_probe()
1227 ret = PTR_ERR(sinfo->bus_clk); in atmel_lcdfb_probe()
1230 sinfo->lcdc_clk = clk_get(dev, "lcdc_clk"); in atmel_lcdfb_probe()
1231 if (IS_ERR(sinfo->lcdc_clk)) { in atmel_lcdfb_probe()
1232 ret = PTR_ERR(sinfo->lcdc_clk); in atmel_lcdfb_probe()
1235 atmel_lcdfb_start_clock(sinfo); in atmel_lcdfb_probe()
1250 sinfo->irq_base = platform_get_irq(pdev, 0); in atmel_lcdfb_probe()
1251 if (sinfo->irq_base < 0) { in atmel_lcdfb_probe()
1253 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()