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
110 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); in atmel_bl_update_status() local
113 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, brightness); in atmel_bl_update_status()
115 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, in atmel_bl_update_status()
118 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); in atmel_bl_update_status()
125 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); in atmel_bl_get_brightness() local
127 return lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); in atmel_bl_get_brightness()
135 static void init_backlight(struct atmel_lcdfb_info *sinfo) in init_backlight() argument
140 if (sinfo->backlight) in init_backlight()
146 bl = backlight_device_register("backlight", &sinfo->pdev->dev, sinfo, in init_backlight()
149 dev_err(&sinfo->pdev->dev, "error %ld on backlight register\n", in init_backlight()
153 sinfo->backlight = bl; in init_backlight()
159 static void exit_backlight(struct atmel_lcdfb_info *sinfo) in exit_backlight() argument
161 if (!sinfo->backlight) in exit_backlight()
164 if (sinfo->backlight->ops) { in exit_backlight()
165 sinfo->backlight->props.power = FB_BLANK_POWERDOWN; in exit_backlight()
166 sinfo->backlight->ops->update_status(sinfo->backlight); in exit_backlight()
168 backlight_device_unregister(sinfo->backlight); in exit_backlight()
173 static void init_backlight(struct atmel_lcdfb_info *sinfo) in init_backlight() argument
175 dev_warn(&sinfo->pdev->dev, "backlight control is not available\n"); in init_backlight()
178 static void exit_backlight(struct atmel_lcdfb_info *sinfo) in exit_backlight() argument
184 static void init_contrast(struct atmel_lcdfb_info *sinfo) in init_contrast() argument
186 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in init_contrast()
193 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); in init_contrast()
194 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, ATMEL_LCDC_CVAL_DEFAULT); in init_contrast()
197 init_backlight(sinfo); in init_contrast()
200 static inline void atmel_lcdfb_power_control(struct atmel_lcdfb_info *sinfo, int on) in atmel_lcdfb_power_control() argument
203 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_power_control()
207 else if (sinfo->reg_lcd) { in atmel_lcdfb_power_control()
209 ret = regulator_enable(sinfo->reg_lcd); in atmel_lcdfb_power_control()
211 dev_err(&sinfo->pdev->dev, in atmel_lcdfb_power_control()
214 ret = regulator_disable(sinfo->reg_lcd); in atmel_lcdfb_power_control()
216 dev_err(&sinfo->pdev->dev, in atmel_lcdfb_power_control()
231 static unsigned long compute_hozval(struct atmel_lcdfb_info *sinfo, in compute_hozval() argument
237 if (!sinfo->config->have_hozval) in compute_hozval()
240 lcdcon2 = lcdc_readl(sinfo, ATMEL_LCDC_LCDCON2); in compute_hozval()
258 static void atmel_lcdfb_stop_nowait(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop_nowait() argument
260 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_stop_nowait()
263 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, in atmel_lcdfb_stop_nowait()
267 while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY) in atmel_lcdfb_stop_nowait()
270 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0); in atmel_lcdfb_stop_nowait()
273 static void atmel_lcdfb_stop(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop() argument
275 atmel_lcdfb_stop_nowait(sinfo); in atmel_lcdfb_stop()
278 while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) in atmel_lcdfb_stop()
282 static void atmel_lcdfb_start(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_start() argument
284 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_start()
286 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, pdata->default_dmacon); in atmel_lcdfb_start()
287 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, in atmel_lcdfb_start()
295 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_update_dma() local
305 lcdc_writel(sinfo, ATMEL_LCDC_DMABADDR1, dma_addr); in atmel_lcdfb_update_dma()
308 static inline void atmel_lcdfb_free_video_memory(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_free_video_memory() argument
310 struct fb_info *info = sinfo->info; in atmel_lcdfb_free_video_memory()
323 static int atmel_lcdfb_alloc_video_memory(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_alloc_video_memory() argument
325 struct fb_info *info = sinfo->info; in atmel_lcdfb_alloc_video_memory()
331 info->fix.smem_len = max(smem_len, sinfo->smem_len); in atmel_lcdfb_alloc_video_memory()
387 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_check_var() local
388 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_check_var()
391 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; in atmel_lcdfb_check_var()
470 if (sinfo->config->have_intensity_bit) in atmel_lcdfb_check_var()
516 static void atmel_lcdfb_reset(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_reset() argument
520 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_reset()
521 atmel_lcdfb_start(sinfo); in atmel_lcdfb_reset()
540 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_set_par() local
541 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_set_par()
555 atmel_lcdfb_stop_nowait(sinfo); in atmel_lcdfb_set_par()
574 lcdc_writel(sinfo, ATMEL_LCDC_DMAFRMCFG, value); in atmel_lcdfb_set_par()
579 if (sinfo->config->have_alt_pixclock) in atmel_lcdfb_set_par()
582 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; in atmel_lcdfb_set_par()
588 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, ATMEL_LCDC_BYPASS); in atmel_lcdfb_set_par()
593 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON1, in atmel_lcdfb_set_par()
622 lcdc_writel(sinfo, ATMEL_LCDC_LCDCON2, value); in atmel_lcdfb_set_par()
629 lcdc_writel(sinfo, ATMEL_LCDC_TIM1, value); in atmel_lcdfb_set_par()
636 lcdc_writel(sinfo, ATMEL_LCDC_TIM2, value); in atmel_lcdfb_set_par()
639 hozval_linesz = compute_hozval(sinfo, info->var.xres); in atmel_lcdfb_set_par()
645 lcdc_writel(sinfo, ATMEL_LCDC_LCDFRMCFG, value); in atmel_lcdfb_set_par()
649 lcdc_writel(sinfo, ATMEL_LCDC_FIFO, value); in atmel_lcdfb_set_par()
652 lcdc_writel(sinfo, ATMEL_LCDC_MVAL, 0); in atmel_lcdfb_set_par()
655 lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0U); in atmel_lcdfb_set_par()
657 lcdc_writel(sinfo, ATMEL_LCDC_IER, ATMEL_LCDC_UFLWI | ATMEL_LCDC_OWRI | ATMEL_LCDC_MERI); in atmel_lcdfb_set_par()
660 while (lcdc_readl(sinfo, ATMEL_LCDC_DMACON) & ATMEL_LCDC_DMABUSY) in atmel_lcdfb_set_par()
663 atmel_lcdfb_start(sinfo); in atmel_lcdfb_set_par()
706 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_setcolreg() local
707 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_setcolreg()
732 if (sinfo->config->have_intensity_bit) { in atmel_lcdfb_setcolreg()
755 lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val); in atmel_lcdfb_setcolreg()
763 lcdc_writel(sinfo, ATMEL_LCDC_LUT(regno), val); in atmel_lcdfb_setcolreg()
785 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_blank() local
790 atmel_lcdfb_start(sinfo); in atmel_lcdfb_blank()
796 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_blank()
819 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_interrupt() local
822 status = lcdc_readl(sinfo, ATMEL_LCDC_ISR); in atmel_lcdfb_interrupt()
826 schedule_work(&sinfo->task); in atmel_lcdfb_interrupt()
828 lcdc_writel(sinfo, ATMEL_LCDC_ICR, status); in atmel_lcdfb_interrupt()
837 struct atmel_lcdfb_info *sinfo = in atmel_lcdfb_task() local
840 atmel_lcdfb_reset(sinfo); in atmel_lcdfb_task()
843 static int atmel_lcdfb_init_fbinfo(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_init_fbinfo() argument
845 struct fb_info *info = sinfo->info; in atmel_lcdfb_init_fbinfo()
864 static void atmel_lcdfb_start_clock(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_start_clock() argument
866 clk_prepare_enable(sinfo->bus_clk); in atmel_lcdfb_start_clock()
867 clk_prepare_enable(sinfo->lcdc_clk); in atmel_lcdfb_start_clock()
870 static void atmel_lcdfb_stop_clock(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_stop_clock() argument
872 clk_disable_unprepare(sinfo->bus_clk); in atmel_lcdfb_stop_clock()
873 clk_disable_unprepare(sinfo->lcdc_clk); in atmel_lcdfb_stop_clock()
917 static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo) in atmel_lcdfb_of_init() argument
919 struct fb_info *info = sinfo->info; in atmel_lcdfb_of_init()
920 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata; in atmel_lcdfb_of_init()
922 struct device *dev = &sinfo->pdev->dev; in atmel_lcdfb_of_init()
933 sinfo->config = (struct atmel_lcdfb_config*) in atmel_lcdfb_of_init()
1023 struct atmel_lcdfb_info *sinfo; in atmel_lcdfb_probe() local
1036 sinfo = info->par; in atmel_lcdfb_probe()
1037 sinfo->pdev = pdev; in atmel_lcdfb_probe()
1038 sinfo->info = info; in atmel_lcdfb_probe()
1047 ret = atmel_lcdfb_of_init(sinfo); in atmel_lcdfb_probe()
1052 if (!sinfo->config) in atmel_lcdfb_probe()
1055 sinfo->reg_lcd = devm_regulator_get(&pdev->dev, "lcd"); in atmel_lcdfb_probe()
1056 if (IS_ERR(sinfo->reg_lcd)) in atmel_lcdfb_probe()
1057 sinfo->reg_lcd = NULL; in atmel_lcdfb_probe()
1061 info->pseudo_palette = sinfo->pseudo_palette; in atmel_lcdfb_probe()
1065 strcpy(info->fix.id, sinfo->pdev->name); in atmel_lcdfb_probe()
1068 sinfo->bus_clk = clk_get(dev, "hclk"); in atmel_lcdfb_probe()
1069 if (IS_ERR(sinfo->bus_clk)) { in atmel_lcdfb_probe()
1070 ret = PTR_ERR(sinfo->bus_clk); in atmel_lcdfb_probe()
1073 sinfo->lcdc_clk = clk_get(dev, "lcdc_clk"); in atmel_lcdfb_probe()
1074 if (IS_ERR(sinfo->lcdc_clk)) { in atmel_lcdfb_probe()
1075 ret = PTR_ERR(sinfo->lcdc_clk); in atmel_lcdfb_probe()
1078 atmel_lcdfb_start_clock(sinfo); in atmel_lcdfb_probe()
1093 sinfo->irq_base = platform_get_irq(pdev, 0); in atmel_lcdfb_probe()
1094 if (sinfo->irq_base < 0) { in atmel_lcdfb_probe()
1095 ret = sinfo->irq_base; in atmel_lcdfb_probe()
1124 ret = atmel_lcdfb_alloc_video_memory(sinfo); in atmel_lcdfb_probe()
1141 sinfo->mmio = ioremap(info->fix.mmio_start, info->fix.mmio_len); in atmel_lcdfb_probe()
1142 if (!sinfo->mmio) { in atmel_lcdfb_probe()
1149 init_contrast(sinfo); in atmel_lcdfb_probe()
1152 ret = request_irq(sinfo->irq_base, atmel_lcdfb_interrupt, 0, pdev->name, info); in atmel_lcdfb_probe()
1160 INIT_WORK(&sinfo->task, atmel_lcdfb_task); in atmel_lcdfb_probe()
1162 ret = atmel_lcdfb_init_fbinfo(sinfo); in atmel_lcdfb_probe()
1186 atmel_lcdfb_power_control(sinfo, 1); in atmel_lcdfb_probe()
1189 info->node, info->fix.mmio_start, sinfo->mmio, sinfo->irq_base); in atmel_lcdfb_probe()
1197 cancel_work_sync(&sinfo->task); in atmel_lcdfb_probe()
1198 free_irq(sinfo->irq_base, info); in atmel_lcdfb_probe()
1200 exit_backlight(sinfo); in atmel_lcdfb_probe()
1201 iounmap(sinfo->mmio); in atmel_lcdfb_probe()
1208 atmel_lcdfb_free_video_memory(sinfo); in atmel_lcdfb_probe()
1214 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_probe()
1215 clk_put(sinfo->lcdc_clk); in atmel_lcdfb_probe()
1217 clk_put(sinfo->bus_clk); in atmel_lcdfb_probe()
1229 struct atmel_lcdfb_info *sinfo; in atmel_lcdfb_remove() local
1233 sinfo = info->par; in atmel_lcdfb_remove()
1235 cancel_work_sync(&sinfo->task); in atmel_lcdfb_remove()
1236 exit_backlight(sinfo); in atmel_lcdfb_remove()
1237 atmel_lcdfb_power_control(sinfo, 0); in atmel_lcdfb_remove()
1239 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_remove()
1240 clk_put(sinfo->lcdc_clk); in atmel_lcdfb_remove()
1241 clk_put(sinfo->bus_clk); in atmel_lcdfb_remove()
1243 free_irq(sinfo->irq_base, info); in atmel_lcdfb_remove()
1244 iounmap(sinfo->mmio); in atmel_lcdfb_remove()
1250 atmel_lcdfb_free_video_memory(sinfo); in atmel_lcdfb_remove()
1261 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_suspend() local
1267 lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0U); in atmel_lcdfb_suspend()
1269 sinfo->saved_lcdcon = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_CTR); in atmel_lcdfb_suspend()
1270 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, 0); in atmel_lcdfb_suspend()
1271 atmel_lcdfb_power_control(sinfo, 0); in atmel_lcdfb_suspend()
1272 atmel_lcdfb_stop(sinfo); in atmel_lcdfb_suspend()
1273 atmel_lcdfb_stop_clock(sinfo); in atmel_lcdfb_suspend()
1281 struct atmel_lcdfb_info *sinfo = info->par; in atmel_lcdfb_resume() local
1283 atmel_lcdfb_start_clock(sinfo); in atmel_lcdfb_resume()
1284 atmel_lcdfb_start(sinfo); in atmel_lcdfb_resume()
1285 atmel_lcdfb_power_control(sinfo, 1); in atmel_lcdfb_resume()
1286 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, sinfo->saved_lcdcon); in atmel_lcdfb_resume()
1289 lcdc_writel(sinfo, ATMEL_LCDC_IER, ATMEL_LCDC_UFLWI in atmel_lcdfb_resume()