diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-08 19:02:59 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-08 19:02:59 +0200 |
commit | 537d84787659b355b3331813dc134c7497ddafa5 (patch) | |
tree | e43d376ed8522b09163ed1f7902e1fed25d2fe3b /drivers/video/omap2/omapfb/omapfb.h | |
parent | Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/gi... (diff) | |
parent | OMAP: DSS2: OMAPFB: add support for FBIO_WAITFORVSYNC (diff) | |
download | linux-537d84787659b355b3331813dc134c7497ddafa5.tar.xz linux-537d84787659b355b3331813dc134c7497ddafa5.zip |
Merge branch 'for-linus' of git://gitorious.org/linux-omap-dss2/linux
* 'for-linus' of git://gitorious.org/linux-omap-dss2/linux: (64 commits)
OMAP: DSS2: OMAPFB: add support for FBIO_WAITFORVSYNC
OMAP: DSS2: Replace strncmp() with sysfs_streq() in overlay_manager_store()
OMAP: DSS2: Fix error path in omap_dsi_update()
OMAP: DSS2: TDO35S: fix video signaling
OMAP: DSS2: OMAPFB: Fix invalid bpp for PAL and NTSC modes
OMAP: DSS2: OMAPFB: Fix probe error path
OMAP3EVM: Replace vdvi regulator supply with vdds_dsi
OMAP: DSS2: Remove extra return statement
OMAP: DSS2: adjust YUV overlay width to be even
OMAP: DSS2: OMAPFB: Fix sysfs mirror input check
OMAP: DSS2: OMAPFB: Remove redundant color register range check
OMAP: DSS2: OMAPFB: Remove redundant rotate range check
OMAP: DSS2: OMAPFB: Check fb2display() return value
OMAP: DSS2: Taal: Optimize enable_te, rotate, mirror when value unchanged
OMAP: DSS2: DSI: detect unsupported update requests
OMAP: DSS2: DSI: increase FIFO low threshold
OMAP: DSS2: DSI: Add error IRQ mask for DSI complexIO
OMAP: DSS2: DSI: Remove BTA after set_max_rx_packet_size
OMAP: DSS2: change manual update scaling setup
OMAP: DSS2: DSI: use BTA to end the frame transfer
...
Diffstat (limited to 'drivers/video/omap2/omapfb/omapfb.h')
-rw-r--r-- | drivers/video/omap2/omapfb/omapfb.h | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/drivers/video/omap2/omapfb/omapfb.h b/drivers/video/omap2/omapfb/omapfb.h index cd54fdbfd8bb..1305fc9880ba 100644 --- a/drivers/video/omap2/omapfb/omapfb.h +++ b/drivers/video/omap2/omapfb/omapfb.h @@ -27,6 +27,8 @@ #define DEBUG #endif +#include <linux/rwsem.h> + #include <plat/display.h> #ifdef DEBUG @@ -44,6 +46,7 @@ extern unsigned int omapfb_debug; #define OMAPFB_MAX_OVL_PER_FB 3 struct omapfb2_mem_region { + int id; u32 paddr; void __iomem *vaddr; struct vrfb vrfb; @@ -51,13 +54,15 @@ struct omapfb2_mem_region { u8 type; /* OMAPFB_PLANE_MEM_* */ bool alloc; /* allocated by the driver */ bool map; /* kernel mapped by the driver */ + atomic_t map_count; + struct rw_semaphore lock; + atomic_t lock_count; }; /* appended to fb_info */ struct omapfb_info { int id; - struct omapfb2_mem_region region; - atomic_t map_count; + struct omapfb2_mem_region *region; int num_overlays; struct omap_overlay *overlays[OMAPFB_MAX_OVL_PER_FB]; struct omapfb2_device *fbdev; @@ -76,6 +81,7 @@ struct omapfb2_device { unsigned num_fbs; struct fb_info *fbs[10]; + struct omapfb2_mem_region regions[10]; unsigned num_displays; struct omap_dss_device *displays[10]; @@ -117,6 +123,9 @@ int omapfb_update_window(struct fb_info *fbi, int dss_mode_to_fb_mode(enum omap_color_mode dssmode, struct fb_var_screeninfo *var); +int omapfb_setup_overlay(struct fb_info *fbi, struct omap_overlay *ovl, + u16 posx, u16 posy, u16 outw, u16 outh); + /* find the display connected to this fb, if any */ static inline struct omap_dss_device *fb2display(struct fb_info *fbi) { @@ -148,8 +157,24 @@ static inline int omapfb_overlay_enable(struct omap_overlay *ovl, struct omap_overlay_info info; ovl->get_overlay_info(ovl, &info); + if (info.enabled == enable) + return 0; info.enabled = enable; return ovl->set_overlay_info(ovl, &info); } +static inline struct omapfb2_mem_region * +omapfb_get_mem_region(struct omapfb2_mem_region *rg) +{ + down_read_nested(&rg->lock, rg->id); + atomic_inc(&rg->lock_count); + return rg; +} + +static inline void omapfb_put_mem_region(struct omapfb2_mem_region *rg) +{ + atomic_dec(&rg->lock_count); + up_read(&rg->lock); +} + #endif |