diff options
author | Eric Hustvedt <ehustvedt@cecropia.com> | 2006-06-20 14:36:42 -0400 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2006-07-03 04:59:46 -0400 |
commit | 37bced38b3d09c3de7c871790eddde81a3ce57cb (patch) | |
tree | 9472bb814b65c990fe004e715e810eb0ac0fc120 /drivers/video/intelfb/intelfbhw.c | |
parent | 7649757bd900bc900adcd95ab08903cdc28342fa (diff) |
intelfb: add vsync interrupt support
[04/05] intelfb: implement FBIO_WAITFORVSYNC ioctl
The (unofficial) FBIO_WAITFORVSYNC ioctl is implemented by sleeping on the appropriate waitqueue, as defined in my earlier patch. Currently, only display 0 (aka pipe A) is supported.
Signed-off-by: Eric Hustvedt <ehustvedt@cecropia.com>
Diffstat (limited to 'drivers/video/intelfb/intelfbhw.c')
-rw-r--r-- | drivers/video/intelfb/intelfbhw.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/video/intelfb/intelfbhw.c b/drivers/video/intelfb/intelfbhw.c index 1a698a7230e0..0f9631c2ad33 100644 --- a/drivers/video/intelfb/intelfbhw.c +++ b/drivers/video/intelfb/intelfbhw.c | |||
@@ -2019,3 +2019,36 @@ intelfbhw_disable_irq(struct intelfb_info *dinfo) { | |||
2019 | free_irq(dinfo->pdev->irq, dinfo); | 2019 | free_irq(dinfo->pdev->irq, dinfo); |
2020 | } | 2020 | } |
2021 | } | 2021 | } |
2022 | |||
2023 | int | ||
2024 | intelfbhw_wait_for_vsync(struct intelfb_info *dinfo, u32 pipe) { | ||
2025 | struct intelfb_vsync *vsync; | ||
2026 | unsigned int count; | ||
2027 | int ret; | ||
2028 | |||
2029 | switch (pipe) { | ||
2030 | case 0: | ||
2031 | vsync = &dinfo->vsync; | ||
2032 | break; | ||
2033 | default: | ||
2034 | return -ENODEV; | ||
2035 | } | ||
2036 | |||
2037 | ret = intelfbhw_enable_irq(dinfo, 0); | ||
2038 | if (ret) { | ||
2039 | return ret; | ||
2040 | } | ||
2041 | |||
2042 | count = vsync->count; | ||
2043 | ret = wait_event_interruptible_timeout(vsync->wait, count != vsync->count, HZ/10); | ||
2044 | if (ret < 0) { | ||
2045 | return ret; | ||
2046 | } | ||
2047 | if (ret == 0) { | ||
2048 | intelfbhw_enable_irq(dinfo, 1); | ||
2049 | DBG_MSG("wait_for_vsync timed out!\n"); | ||
2050 | return -ETIMEDOUT; | ||
2051 | } | ||
2052 | |||
2053 | return 0; | ||
2054 | } | ||