Lines Matching refs:fbdev
116 static int dma_desc_list(struct adv7393fb_device *fbdev, u16 arg) in dma_desc_list() argument
119 fbdev->vb1 = l1_data_sram_zalloc(sizeof(struct dmasg)); in dma_desc_list()
120 if (fbdev->vb1 == NULL) in dma_desc_list()
123 fbdev->av1 = l1_data_sram_zalloc(sizeof(struct dmasg)); in dma_desc_list()
124 if (fbdev->av1 == NULL) in dma_desc_list()
127 fbdev->vb2 = l1_data_sram_zalloc(sizeof(struct dmasg)); in dma_desc_list()
128 if (fbdev->vb2 == NULL) in dma_desc_list()
131 fbdev->av2 = l1_data_sram_zalloc(sizeof(struct dmasg)); in dma_desc_list()
132 if (fbdev->av2 == NULL) in dma_desc_list()
136 fbdev->vb1->next_desc_addr = fbdev->av1; in dma_desc_list()
137 fbdev->av1->next_desc_addr = fbdev->vb2; in dma_desc_list()
138 fbdev->vb2->next_desc_addr = fbdev->av2; in dma_desc_list()
139 fbdev->av2->next_desc_addr = fbdev->vb1; in dma_desc_list()
142 fbdev->descriptor_list_head = fbdev->av2; in dma_desc_list()
145 fbdev->vb1->start_addr = VB_DUMMY_MEMORY_SOURCE; in dma_desc_list()
146 fbdev->vb1->cfg = DMA_CFG_VAL; in dma_desc_list()
148 fbdev->vb1->x_count = in dma_desc_list()
149 fbdev->modes[mode].xres + fbdev->modes[mode].boeft_blank; in dma_desc_list()
151 fbdev->vb1->x_modify = 0; in dma_desc_list()
152 fbdev->vb1->y_count = fbdev->modes[mode].vb1_lines; in dma_desc_list()
153 fbdev->vb1->y_modify = 0; in dma_desc_list()
157 fbdev->av1->start_addr = (unsigned long)fbdev->fb_mem; in dma_desc_list()
158 fbdev->av1->cfg = DMA_CFG_VAL; in dma_desc_list()
159 fbdev->av1->x_count = in dma_desc_list()
160 fbdev->modes[mode].xres + fbdev->modes[mode].boeft_blank; in dma_desc_list()
161 fbdev->av1->x_modify = fbdev->modes[mode].bpp / 8; in dma_desc_list()
162 fbdev->av1->y_count = fbdev->modes[mode].a_lines; in dma_desc_list()
163 fbdev->av1->y_modify = in dma_desc_list()
164 (fbdev->modes[mode].xres - fbdev->modes[mode].boeft_blank + in dma_desc_list()
165 1) * (fbdev->modes[mode].bpp / 8); in dma_desc_list()
169 fbdev->vb2->start_addr = VB_DUMMY_MEMORY_SOURCE; in dma_desc_list()
170 fbdev->vb2->cfg = DMA_CFG_VAL; in dma_desc_list()
171 fbdev->vb2->x_count = in dma_desc_list()
172 fbdev->modes[mode].xres + fbdev->modes[mode].boeft_blank; in dma_desc_list()
174 fbdev->vb2->x_modify = 0; in dma_desc_list()
175 fbdev->vb2->y_count = fbdev->modes[mode].vb2_lines; in dma_desc_list()
176 fbdev->vb2->y_modify = 0; in dma_desc_list()
180 fbdev->av2->start_addr = in dma_desc_list()
181 (unsigned long)fbdev->fb_mem + fbdev->line_len; in dma_desc_list()
183 fbdev->av2->cfg = DMA_CFG_VAL; in dma_desc_list()
185 fbdev->av2->x_count = in dma_desc_list()
186 fbdev->modes[mode].xres + fbdev->modes[mode].boeft_blank; in dma_desc_list()
188 fbdev->av2->x_modify = (fbdev->modes[mode].bpp / 8); in dma_desc_list()
189 fbdev->av2->y_count = fbdev->modes[mode].a_lines; in dma_desc_list()
191 fbdev->av2->y_modify = in dma_desc_list()
192 (fbdev->modes[mode].xres - fbdev->modes[mode].boeft_blank + in dma_desc_list()
193 1) * (fbdev->modes[mode].bpp / 8); in dma_desc_list()
199 l1_data_sram_free(fbdev->vb1); in dma_desc_list()
200 l1_data_sram_free(fbdev->av1); in dma_desc_list()
201 l1_data_sram_free(fbdev->vb2); in dma_desc_list()
202 l1_data_sram_free(fbdev->av2); in dma_desc_list()
207 static int bfin_config_dma(struct adv7393fb_device *fbdev) in bfin_config_dma() argument
209 BUG_ON(!(fbdev->fb_mem)); in bfin_config_dma()
211 set_dma_x_count(CH_PPI, fbdev->descriptor_list_head->x_count); in bfin_config_dma()
212 set_dma_x_modify(CH_PPI, fbdev->descriptor_list_head->x_modify); in bfin_config_dma()
213 set_dma_y_count(CH_PPI, fbdev->descriptor_list_head->y_count); in bfin_config_dma()
214 set_dma_y_modify(CH_PPI, fbdev->descriptor_list_head->y_modify); in bfin_config_dma()
215 set_dma_start_addr(CH_PPI, fbdev->descriptor_list_head->start_addr); in bfin_config_dma()
217 fbdev->descriptor_list_head->next_desc_addr); in bfin_config_dma()
218 set_dma_config(CH_PPI, fbdev->descriptor_list_head->cfg); in bfin_config_dma()
228 static void bfin_config_ppi(struct adv7393fb_device *fbdev) in bfin_config_ppi() argument
236 bfin_write_PPI_FRAME(fbdev->modes[mode].tot_lines); in bfin_config_ppi()
237 bfin_write_PPI_COUNT(fbdev->modes[mode].xres + in bfin_config_ppi()
238 fbdev->modes[mode].boeft_blank - 1); in bfin_config_ppi()
239 bfin_write_PPI_DELAY(fbdev->modes[mode].aoeft_blank - 1); in bfin_config_ppi()
305 struct adv7393fb_device *fbdev = (struct adv7393fb_device *)dev_id; in ppi_irq_error() local
315 bfin_config_dma(fbdev); in ppi_irq_error()
352 struct adv7393fb_device *fbdev = PDE_DATA(file_inode(file)); in adv7393_write_proc() local
360 adv7393_write(fbdev->client, val >> 8, val & 0xff); in adv7393_write_proc()
378 struct adv7393fb_device *fbdev = NULL; in bfin_adv7393_fb_probe() local
390 fbdev = kzalloc(sizeof(*fbdev), GFP_KERNEL); in bfin_adv7393_fb_probe()
391 if (!fbdev) { in bfin_adv7393_fb_probe()
396 i2c_set_clientdata(client, fbdev); in bfin_adv7393_fb_probe()
398 fbdev->modes = known_modes; in bfin_adv7393_fb_probe()
399 fbdev->client = client; in bfin_adv7393_fb_probe()
401 fbdev->fb_len = in bfin_adv7393_fb_probe()
402 mem * fbdev->modes[mode].xres * fbdev->modes[mode].xres * in bfin_adv7393_fb_probe()
403 (fbdev->modes[mode].bpp / 8); in bfin_adv7393_fb_probe()
405 fbdev->line_len = in bfin_adv7393_fb_probe()
406 fbdev->modes[mode].xres * (fbdev->modes[mode].bpp / 8); in bfin_adv7393_fb_probe()
425 fbdev->fb_mem = in bfin_adv7393_fb_probe()
426 dma_alloc_coherent(NULL, fbdev->fb_len, &fbdev->dma_handle, in bfin_adv7393_fb_probe()
429 if (NULL == fbdev->fb_mem) { in bfin_adv7393_fb_probe()
431 (u32) fbdev->fb_len); in bfin_adv7393_fb_probe()
436 fbdev->info.screen_base = (void *)fbdev->fb_mem; in bfin_adv7393_fb_probe()
437 bfin_adv7393_fb_fix.smem_start = (int)fbdev->fb_mem; in bfin_adv7393_fb_probe()
439 bfin_adv7393_fb_fix.smem_len = fbdev->fb_len; in bfin_adv7393_fb_probe()
440 bfin_adv7393_fb_fix.line_length = fbdev->line_len; in bfin_adv7393_fb_probe()
449 bfin_adv7393_fb_defined.xres = fbdev->modes[mode].xres; in bfin_adv7393_fb_probe()
450 bfin_adv7393_fb_defined.yres = fbdev->modes[mode].yres; in bfin_adv7393_fb_probe()
451 bfin_adv7393_fb_defined.xres_virtual = fbdev->modes[mode].xres; in bfin_adv7393_fb_probe()
452 bfin_adv7393_fb_defined.yres_virtual = mem * fbdev->modes[mode].yres; in bfin_adv7393_fb_probe()
453 bfin_adv7393_fb_defined.bits_per_pixel = fbdev->modes[mode].bpp; in bfin_adv7393_fb_probe()
455 fbdev->info.fbops = &bfin_adv7393_fb_ops; in bfin_adv7393_fb_probe()
456 fbdev->info.var = bfin_adv7393_fb_defined; in bfin_adv7393_fb_probe()
457 fbdev->info.fix = bfin_adv7393_fb_fix; in bfin_adv7393_fb_probe()
458 fbdev->info.par = &bfin_par; in bfin_adv7393_fb_probe()
459 fbdev->info.flags = FBINFO_DEFAULT; in bfin_adv7393_fb_probe()
461 fbdev->info.pseudo_palette = kzalloc(sizeof(u32) * 16, GFP_KERNEL); in bfin_adv7393_fb_probe()
462 if (!fbdev->info.pseudo_palette) { in bfin_adv7393_fb_probe()
468 if (fb_alloc_cmap(&fbdev->info.cmap, BFIN_LCD_NBR_PALETTE_ENTRIES, 0) < 0) { in bfin_adv7393_fb_probe()
482 "PPI ERROR", fbdev) < 0) { in bfin_adv7393_fb_probe()
488 fbdev->open = 0; in bfin_adv7393_fb_probe()
490 ret = adv7393_write_block(client, fbdev->modes[mode].adv7393_i2c_initd, in bfin_adv7393_fb_probe()
491 fbdev->modes[mode].adv7393_i2c_initd_len); in bfin_adv7393_fb_probe()
499 if (register_framebuffer(&fbdev->info) < 0) { in bfin_adv7393_fb_probe()
506 fbdev->info.node, fbdev->info.fix.id); in bfin_adv7393_fb_probe()
507 dev_info(&client->dev, "fb memory address : 0x%p\n", fbdev->fb_mem); in bfin_adv7393_fb_probe()
509 entry = proc_create_data("driver/adv7393", 0, NULL, &fops, fbdev); in bfin_adv7393_fb_probe()
518 unregister_framebuffer(&fbdev->info); in bfin_adv7393_fb_probe()
520 free_irq(IRQ_PPI_ERROR, fbdev); in bfin_adv7393_fb_probe()
524 fb_dealloc_cmap(&fbdev->info.cmap); in bfin_adv7393_fb_probe()
526 kfree(fbdev->info.pseudo_palette); in bfin_adv7393_fb_probe()
528 dma_free_coherent(NULL, fbdev->fb_len, fbdev->fb_mem, in bfin_adv7393_fb_probe()
529 fbdev->dma_handle); in bfin_adv7393_fb_probe()
536 kfree(fbdev); in bfin_adv7393_fb_probe()
543 struct adv7393fb_device *fbdev = to_adv7393fb_device(info); in bfin_adv7393_fb_open() local
545 fbdev->info.screen_base = (void *)fbdev->fb_mem; in bfin_adv7393_fb_open()
546 if (!fbdev->info.screen_base) { in bfin_adv7393_fb_open()
547 dev_err(&fbdev->client->dev, "unable to map device\n"); in bfin_adv7393_fb_open()
551 fbdev->open = 1; in bfin_adv7393_fb_open()
552 dma_desc_list(fbdev, BUILD); in bfin_adv7393_fb_open()
553 adv7393_mode(fbdev->client, BLANK_OFF); in bfin_adv7393_fb_open()
554 bfin_config_ppi(fbdev); in bfin_adv7393_fb_open()
555 bfin_config_dma(fbdev); in bfin_adv7393_fb_open()
563 struct adv7393fb_device *fbdev = to_adv7393fb_device(info); in bfin_adv7393_fb_release() local
565 adv7393_mode(fbdev->client, BLANK_ON); in bfin_adv7393_fb_release()
568 dma_desc_list(fbdev, DESTRUCT); in bfin_adv7393_fb_release()
569 fbdev->open = 0; in bfin_adv7393_fb_release()
625 struct adv7393fb_device *fbdev = to_adv7393fb_device(info); in bfin_adv7393_fb_pan_display() local
639 dmaaddr = fbdev->av1->start_addr; in bfin_adv7393_fb_pan_display()
643 fbdev->av1->start_addr = (unsigned long)dmaaddr; in bfin_adv7393_fb_pan_display()
644 fbdev->av2->start_addr = (unsigned long)dmaaddr + fbdev->line_len; in bfin_adv7393_fb_pan_display()
654 struct adv7393fb_device *fbdev = to_adv7393fb_device(info); in bfin_adv7393_fb_blank() local
660 adv7393_mode(fbdev->client, BLANK_OFF); in bfin_adv7393_fb_blank()
667 adv7393_mode(fbdev->client, BLANK_ON); in bfin_adv7393_fb_blank()
719 struct adv7393fb_device *fbdev = i2c_get_clientdata(client); in bfin_adv7393_fb_remove() local
723 if (fbdev->fb_mem) in bfin_adv7393_fb_remove()
724 dma_free_coherent(NULL, fbdev->fb_len, fbdev->fb_mem, fbdev->dma_handle); in bfin_adv7393_fb_remove()
726 free_irq(IRQ_PPI_ERROR, fbdev); in bfin_adv7393_fb_remove()
727 unregister_framebuffer(&fbdev->info); in bfin_adv7393_fb_remove()
729 fb_dealloc_cmap(&fbdev->info.cmap); in bfin_adv7393_fb_remove()
730 kfree(fbdev->info.pseudo_palette); in bfin_adv7393_fb_remove()
735 kfree(fbdev); in bfin_adv7393_fb_remove()
743 struct adv7393fb_device *fbdev = dev_get_drvdata(dev); in bfin_adv7393_fb_suspend() local
745 if (fbdev->open) { in bfin_adv7393_fb_suspend()
748 dma_desc_list(fbdev, DESTRUCT); in bfin_adv7393_fb_suspend()
750 adv7393_mode(fbdev->client, POWER_DOWN); in bfin_adv7393_fb_suspend()
757 struct adv7393fb_device *fbdev = dev_get_drvdata(dev); in bfin_adv7393_fb_resume() local
759 adv7393_mode(fbdev->client, POWER_ON); in bfin_adv7393_fb_resume()
761 if (fbdev->open) { in bfin_adv7393_fb_resume()
762 dma_desc_list(fbdev, BUILD); in bfin_adv7393_fb_resume()
763 bfin_config_ppi(fbdev); in bfin_adv7393_fb_resume()
764 bfin_config_dma(fbdev); in bfin_adv7393_fb_resume()