Lines Matching refs:sinfo
70 #define lcdc_readl(sinfo, reg) __raw_readl((sinfo)->mmio+(reg)) argument
71 #define lcdc_writel(sinfo, reg, val) __raw_writel((val), (sinfo)->mmio+(reg)) argument
111 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); in atmel_bl_update_status() local
112 int power = sinfo->bl_power; in atmel_bl_update_status()
119 if (bl->props.fb_blank != sinfo->bl_power) in atmel_bl_update_status()
121 else if (bl->props.power != sinfo->bl_power) in atmel_bl_update_status()
125 brightness = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); in atmel_bl_update_status()
129 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, brightness); in atmel_bl_update_status()
131 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, in atmel_bl_update_status()
134 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); in atmel_bl_update_status()
136 bl->props.fb_blank = bl->props.power = sinfo->bl_power = power; in atmel_bl_update_status()
143 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); in atmel_bl_get_brightness() local
145 return lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); in atmel_bl_get_brightness()
153 static void init_backlight(struct atmel_lcdfb_info *sinfo) in init_backlight() argument
158 sinfo->bl_power = FB_BLANK_UNBLANK; in init_backlight()
160 if (sinfo->backlight) in init_backlight()
166 bl = backlight_device_register("backlight", &sinfo->pdev->dev, sinfo, in init_backlight()
169 dev_err(&sinfo->pdev->dev, "error %ld on backlight register\n", in init_backlight()
173 sinfo->backlight = bl; in init_backlight()
180 static void exit_backlight(struct atmel_lcdfb_info *sinfo) in exit_backlight() argument
182 if (!sinfo->backlight) in exit_backlight()
185 if (sinfo->backlight->ops) { in exit_backlight()
186 sinfo->backlight->props.power = FB_BLANK_POWERDOWN; in exit_backlight()
187 sinfo->backlight->ops->update_status(sinfo->backlight); in exit_backlight()
189 backlight_device_unregister(sinfo->backlight); in exit_backlight()
194 static void init_backlight(struct atmel_lcdfb_info *sinfo) in init_backlight() argument
196 dev_warn(&sinfo->pdev->dev, "backlight control is not available\n"); in init_backlight()
199 static void exit_backlight(struct atmel_lcdfb_info *sinfo) in exit_backlight() argument
205 static void init_contrast(struct atmel_lcdfb_info *sinfo) in init_contrast() argument
207 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in init_contrast()
214 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); in init_contrast()
215 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, ATMEL_LCDC_CVAL_DEFAULT); in init_contrast()
218 init_backlight(sinfo); in init_contrast()
221 static inline void atmel_lcdfb_power_control(struct atmel_lcdfb_info *sinfo, int on) in atmel_lcdfb_power_control() argument
224 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_power_control()
228 else if (sinfo->reg_lcd) { in atmel_lcdfb_power_control()
230 ret = regulator_enable(sinfo->reg_lcd); in atmel_lcdfb_power_control()
232 dev_err(&sinfo->pdev->dev, in atmel_lcdfb_power_control()
235 ret = regulator_disable(sinfo->reg_lcd); in atmel_lcdfb_power_control()
237 dev_err(&sinfo->pdev->dev, in atmel_lcdfb_power_control()
252 static unsigned long compute_hozval(struct atmel_lcdfb_info *sinfo, in compute_hozval() argument
258 if (!sinfo->config->have_hozval) in compute_hozval()
261 lcdcon2 = lcdc_readl(sinfo, ATMEL_LCDC_LCDCON2); in compute_hozval()
279 static void atmel_lcdfb_stop_nowait(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop_nowait() argument
281 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_stop_nowait()
284 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, in atmel_lcdfb_stop_nowait()
288 while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY) in atmel_lcdfb_stop_nowait()
291 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0); in atmel_lcdfb_stop_nowait()
294 static void atmel_lcdfb_stop(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop() argument
296 atmel_lcdfb_stop_nowait(sinfo); in atmel_lcdfb_stop()
299 while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) in atmel_lcdfb_stop()
303 static void atmel_lcdfb_start(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_start() argument
305 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_start()
307 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, pdata->default_dmacon); in atmel_lcdfb_start()
308 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, in atmel_lcdfb_start()
316 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_update_dma() local
326 lcdc_writel(sinfo, ATMEL_LCDC_DMABADDR1, dma_addr); in atmel_lcdfb_update_dma()
329 static inline void atmel_lcdfb_free_video_memory(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_free_video_memory() argument
331 struct fb_info *info = sinfo->info; in atmel_lcdfb_free_video_memory()
344 static int atmel_lcdfb_alloc_video_memory(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_alloc_video_memory() argument
346 struct fb_info *info = sinfo->info; in atmel_lcdfb_alloc_video_memory()
352 info->fix.smem_len = max(smem_len, sinfo->smem_len); in atmel_lcdfb_alloc_video_memory()
408 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_check_var() local
409 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_check_var()
412 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; in atmel_lcdfb_check_var()
491 if (sinfo->config->have_intensity_bit) in atmel_lcdfb_check_var()
537 static void atmel_lcdfb_reset(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_reset() argument
541 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_reset()
542 atmel_lcdfb_start(sinfo); in atmel_lcdfb_reset()
561 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_set_par() local
562 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_set_par()
576 atmel_lcdfb_stop_nowait(sinfo); in atmel_lcdfb_set_par()
595 lcdc_writel(sinfo, ATMEL_LCDC_DMAFRMCFG, value); in atmel_lcdfb_set_par()
600 if (sinfo->config->have_alt_pixclock) in atmel_lcdfb_set_par()
603 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; in atmel_lcdfb_set_par()
609 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, ATMEL_LCDC_BYPASS); in atmel_lcdfb_set_par()
614 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, in atmel_lcdfb_set_par()
643 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON2, value); in atmel_lcdfb_set_par()
650 lcdc_writel(sinfo, ATMEL_LCDC_TIM1, value); in atmel_lcdfb_set_par()
657 lcdc_writel(sinfo, ATMEL_LCDC_TIM2, value); in atmel_lcdfb_set_par()
660 hozval_linesz = compute_hozval(sinfo, info->var.xres); in atmel_lcdfb_set_par()
666 lcdc_writel(sinfo, ATMEL_LCDC_LCDFRMCFG, value); in atmel_lcdfb_set_par()
670 lcdc_writel(sinfo, ATMEL_LCDC_FIFO, value); in atmel_lcdfb_set_par()
673 lcdc_writel(sinfo, ATMEL_LCDC_MVAL, 0); in atmel_lcdfb_set_par()
676 lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0U); in atmel_lcdfb_set_par()
678 lcdc_writel(sinfo, ATMEL_LCDC_IER, ATMEL_LCDC_UFLWI | ATMEL_LCDC_OWRI | ATMEL_LCDC_MERI); in atmel_lcdfb_set_par()
681 while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) in atmel_lcdfb_set_par()
684 atmel_lcdfb_start(sinfo); in atmel_lcdfb_set_par()
727 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_setcolreg() local
728 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_setcolreg()
753 if (sinfo->config->have_intensity_bit) { in atmel_lcdfb_setcolreg()
776 lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val); in atmel_lcdfb_setcolreg()
784 lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val); in atmel_lcdfb_setcolreg()
806 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_blank() local
811 atmel_lcdfb_start(sinfo); in atmel_lcdfb_blank()
817 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_blank()
842 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_interrupt() local
845 status = lcdc_readl(sinfo, ATMEL_LCDC_ISR); in atmel_lcdfb_interrupt()
849 schedule_work(&sinfo->task); in atmel_lcdfb_interrupt()
851 lcdc_writel(sinfo, ATMEL_LCDC_ICR, status); in atmel_lcdfb_interrupt()
860 struct atmel_lcdfb_info *sinfo = in atmel_lcdfb_task() local
863 atmel_lcdfb_reset(sinfo); in atmel_lcdfb_task()
866 static int __init atmel_lcdfb_init_fbinfo(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_init_fbinfo() argument
868 struct fb_info *info = sinfo->info; in atmel_lcdfb_init_fbinfo()
887 static void atmel_lcdfb_start_clock(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_start_clock() argument
889 clk_prepare_enable(sinfo->bus_clk); in atmel_lcdfb_start_clock()
890 clk_prepare_enable(sinfo->lcdc_clk); in atmel_lcdfb_start_clock()
893 static void atmel_lcdfb_stop_clock(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop_clock() argument
895 clk_disable_unprepare(sinfo->bus_clk); in atmel_lcdfb_stop_clock()
896 clk_disable_unprepare(sinfo->lcdc_clk); in atmel_lcdfb_stop_clock()
940 static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_of_init() argument
942 struct fb_info *info = sinfo->info; in atmel_lcdfb_of_init()
943 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_of_init()
945 struct device *dev = &sinfo->pdev->dev; in atmel_lcdfb_of_init()
956 sinfo->config = (struct atmel_lcdfb_config*) in atmel_lcdfb_of_init()
1046 struct atmel_lcdfb_info *sinfo; in atmel_lcdfb_probe() local
1059 sinfo = info->par; in atmel_lcdfb_probe()
1060 sinfo->pdev = pdev; in atmel_lcdfb_probe()
1061 sinfo->info = info; in atmel_lcdfb_probe()
1066 ret = atmel_lcdfb_of_init(sinfo); in atmel_lcdfb_probe()
1074 if (!sinfo->config) in atmel_lcdfb_probe()
1077 sinfo->reg_lcd = devm_regulator_get(&pdev->dev, "lcd"); in atmel_lcdfb_probe()
1078 if (IS_ERR(sinfo->reg_lcd)) in atmel_lcdfb_probe()
1079 sinfo->reg_lcd = NULL; in atmel_lcdfb_probe()
1083 info->pseudo_palette = sinfo->pseudo_palette; in atmel_lcdfb_probe()
1087 strcpy(info->fix.id, sinfo->pdev->name); in atmel_lcdfb_probe()
1090 sinfo->bus_clk = clk_get(dev, "hclk"); in atmel_lcdfb_probe()
1091 if (IS_ERR(sinfo->bus_clk)) { in atmel_lcdfb_probe()
1092 ret = PTR_ERR(sinfo->bus_clk); in atmel_lcdfb_probe()
1095 sinfo->lcdc_clk = clk_get(dev, "lcdc_clk"); in atmel_lcdfb_probe()
1096 if (IS_ERR(sinfo->lcdc_clk)) { in atmel_lcdfb_probe()
1097 ret = PTR_ERR(sinfo->lcdc_clk); in atmel_lcdfb_probe()
1100 atmel_lcdfb_start_clock(sinfo); in atmel_lcdfb_probe()
1115 sinfo->irq_base = platform_get_irq(pdev, 0); in atmel_lcdfb_probe()
1116 if (sinfo->irq_base < 0) { in atmel_lcdfb_probe()
1117 ret = sinfo->irq_base; in atmel_lcdfb_probe()
1146 ret = atmel_lcdfb_alloc_video_memory(sinfo); in atmel_lcdfb_probe()
1163 sinfo->mmio = ioremap(info->fix.mmio_start, info->fix.mmio_len); in atmel_lcdfb_probe()
1164 if (!sinfo->mmio) { in atmel_lcdfb_probe()
1171 init_contrast(sinfo); in atmel_lcdfb_probe()
1174 ret = request_irq(sinfo->irq_base, atmel_lcdfb_interrupt, 0, pdev->name, info); in atmel_lcdfb_probe()
1182 INIT_WORK(&sinfo->task, atmel_lcdfb_task); in atmel_lcdfb_probe()
1184 ret = atmel_lcdfb_init_fbinfo(sinfo); in atmel_lcdfb_probe()
1208 atmel_lcdfb_power_control(sinfo, 1); in atmel_lcdfb_probe()
1211 info->node, info->fix.mmio_start, sinfo->mmio, sinfo->irq_base); in atmel_lcdfb_probe()
1219 cancel_work_sync(&sinfo->task); in atmel_lcdfb_probe()
1220 free_irq(sinfo->irq_base, info); in atmel_lcdfb_probe()
1222 exit_backlight(sinfo); in atmel_lcdfb_probe()
1223 iounmap(sinfo->mmio); in atmel_lcdfb_probe()
1230 atmel_lcdfb_free_video_memory(sinfo); in atmel_lcdfb_probe()
1236 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_probe()
1237 clk_put(sinfo->lcdc_clk); in atmel_lcdfb_probe()
1239 clk_put(sinfo->bus_clk); in atmel_lcdfb_probe()
1251 struct atmel_lcdfb_info *sinfo; in atmel_lcdfb_remove() local
1255 sinfo = info->par; in atmel_lcdfb_remove()
1257 cancel_work_sync(&sinfo->task); in atmel_lcdfb_remove()
1258 exit_backlight(sinfo); in atmel_lcdfb_remove()
1259 atmel_lcdfb_power_control(sinfo, 0); in atmel_lcdfb_remove()
1261 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_remove()
1262 clk_put(sinfo->lcdc_clk); in atmel_lcdfb_remove()
1263 clk_put(sinfo->bus_clk); in atmel_lcdfb_remove()
1265 free_irq(sinfo->irq_base, info); in atmel_lcdfb_remove()
1266 iounmap(sinfo->mmio); in atmel_lcdfb_remove()
1272 atmel_lcdfb_free_video_memory(sinfo); in atmel_lcdfb_remove()
1285 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_suspend() local
1291 lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0U); in atmel_lcdfb_suspend()
1293 sinfo->saved_lcdcon = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_CTR); in atmel_lcdfb_suspend()
1294 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, 0); in atmel_lcdfb_suspend()
1295 atmel_lcdfb_power_control(sinfo, 0); in atmel_lcdfb_suspend()
1296 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_suspend()
1297 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_suspend()
1305 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_resume() local
1307 atmel_lcdfb_start_clock(sinfo); in atmel_lcdfb_resume()
1308 atmel_lcdfb_start(sinfo); in atmel_lcdfb_resume()
1309 atmel_lcdfb_power_control(sinfo, 1); in atmel_lcdfb_resume()
1310 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, sinfo->saved_lcdcon); in atmel_lcdfb_resume()
1313 lcdc_writel(sinfo, ATMEL_LCDC_IER, ATMEL_LCDC_UFLWI in atmel_lcdfb_resume()