static inline int OMAPLFBRegisterVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) return omap_dispc_request_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain); #else return omap2_disp_register_isr(OMAPLFBVSyncISR, psSwapChain, DISPC_IRQSTATUS_VSYNC); #endif }
static int rfbi_init(struct omapfb_device *fbdev) { u32 l; int r; rfbi.fbdev = fbdev; rfbi.base = ioremap(RFBI_BASE, SZ_1K); if (!rfbi.base) { dev_err(fbdev->dev, "can't ioremap RFBI\n"); return -ENOMEM; } if ((r = rfbi_get_clocks()) < 0) return r; rfbi_enable_clocks(1); rfbi.l4_khz = clk_get_rate(rfbi.dss_ick) / 1000; /* Reset */ rfbi_write_reg(RFBI_SYSCONFIG, 1 << 1); while (!(rfbi_read_reg(RFBI_SYSSTATUS) & (1 << 0))); l = rfbi_read_reg(RFBI_SYSCONFIG); /* Enable autoidle and smart-idle */ l |= (1 << 0) | (2 << 3); rfbi_write_reg(RFBI_SYSCONFIG, l); /* 16-bit interface, ITE trigger mode, 16-bit data */ l = (0x03 << 0) | (0x00 << 2) | (0x01 << 5) | (0x02 << 7); l |= (0 << 9) | (1 << 20) | (1 << 21); rfbi_write_reg(RFBI_CONFIG0, l); rfbi_write_reg(RFBI_DATA_CYCLE1_0, 0x00000010); l = rfbi_read_reg(RFBI_CONTROL); /* Select CS0, clear bypass mode */ l = (0x01 << 2); rfbi_write_reg(RFBI_CONTROL, l); r = omap_dispc_request_irq(DISPC_IRQ_FRAMEMASK, rfbi_dma_callback, NULL); if (r < 0) { dev_err(fbdev->dev, "can't get DISPC irq\n"); rfbi_enable_clocks(0); return r; } l = rfbi_read_reg(RFBI_REVISION); pr_info("omapfb: RFBI version %d.%d initialized\n", (l >> 4) & 0x0f, l & 0x0f); rfbi_enable_clocks(0); return 0; }
OMAP_ERROR OMAPLFBInstallVSyncISR(OMAPLFB_SWAPCHAIN *psSwapChain) { #if !defined (CONFIG_OMAP2_DSS) if (omap_dispc_request_irq(DISPC_IRQ_VSYNC, OMAPLFBVSyncISR, psSwapChain) != 0) #else pOMAPLFBVSyncISRHandle = omap_dispc_register_isr( (omap_dispc_isr_t)OMAPLFBVSyncISR, psSwapChain, DISPC_IRQ_VSYNC); if (pOMAPLFBVSyncISRHandle != NULL) #endif return PVRSRV_ERROR_OUT_OF_MEMORY; /* not worth a proper mapping */ return OMAP_OK; }