diff options
author | Marcus Lorentzon <marcus.xm.lorentzon@stericsson.com> | 2011-10-25 18:10:20 +0200 |
---|---|---|
committer | Jonas ABERG <jonas.aberg@stericsson.com> | 2011-10-27 11:31:47 +0200 |
commit | 1b8cbdab7d3a2182aa518cfcf445e4d0505b1a24 (patch) | |
tree | eac817ed1ad22cc97950cc1478304c6f1a22ab0f /drivers | |
parent | 94160bce5ef05ea15d996b8c70b37148fc8ce4fe (diff) |
video: av8100: Remove fb on/off machine dependency
AV8100 driver is calling into an external function defined
in mach-ux500 making this driver statically machine dependant.
This patch attempt to remove this dependency.
ST-Ericsson ID: 369972
ST-Ericsson FOSS-OUT ID: Trivial
ST-Ericsson Linux next: NA
Change-Id: Iff8943905ea7b1a072feb5d6a42886daed33a6a9
Signed-off-by: Marcus Lorentzon <marcus.xm.lorentzon@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/35243
Reviewed-by: QATOOLS
Reviewed-by: QABUILD
Reviewed-by: Per PERSSON <per.xb.persson@stericsson.com>
Reviewed-by: Jimmy RUBIN <jimmy.rubin@stericsson.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/mcde/display-av8100.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/drivers/video/mcde/display-av8100.c b/drivers/video/mcde/display-av8100.c index e076398ca45..7034f6ed2e7 100644 --- a/drivers/video/mcde/display-av8100.c +++ b/drivers/video/mcde/display-av8100.c @@ -17,6 +17,7 @@ #include <linux/io.h> #include <linux/slab.h> +#include <video/mcde_fb.h> #include <video/mcde_display.h> #include <video/mcde_display-av8100.h> #include <video/av8100.h> @@ -31,6 +32,12 @@ #define AVI_INFOFRAME_DB1 0x10 /* Active Information present */ #define AVI_INFOFRAME_DB2 0x08 /* Active Portion Aspect ratio */ +#ifdef CONFIG_DISPLAY_AV8100_TRIPPLE_BUFFER +#define NUM_FB_BUFFERS 3 +#else +#define NUM_FB_BUFFERS 2 +#endif + struct cea_vesa_video_mode { u32 cea; u32 vesa_cea_nr; @@ -45,6 +52,8 @@ static int hdmi_set_pixel_format( struct mcde_display_device *ddev, enum mcde_ovly_pix_fmt format); static struct mcde_video_mode *video_mode_get(struct mcde_display_device *ddev, u8 cea, u8 vesa_cea_nr); +static int ceanr_convert(struct mcde_display_device *ddev, + u8 cea, u8 vesa_cea_nr, u16 *w, u16 *h); static ssize_t show_hdmisdtvswitch(struct device *dev, struct device_attribute *attr, char *buf); @@ -198,7 +207,24 @@ static ssize_t store_disponoff(struct device *dev, vesa_cea_nr = (hex_to_bin(buf[4]) << 4) + hex_to_bin(buf[5]); dev_dbg(dev, "enable:%d cea:%d nr:%d\n", enable, cea, vesa_cea_nr); - hdmi_fb_onoff(mdev, enable, cea, vesa_cea_nr); + if (enable && !mdev->enabled && mdev->fbi == NULL) { + struct display_driver_data *driver_data = dev_get_drvdata(dev); + u16 w = mdev->native_x_res; + u16 h = mdev->native_y_res, vh; + int buffering = NUM_FB_BUFFERS; + struct fb_info *fbi; + + ceanr_convert(mdev, cea, vesa_cea_nr, &w, &h); + vh = h * buffering; + fbi = mcde_fb_create(mdev, w, h, w, vh, + mdev->default_pixel_format, FB_ROTATE_UR); + if (IS_ERR(fbi)) + dev_warn(dev, "fb create failed\n"); + else + driver_data->fbdevname = dev_name(fbi->dev); + } else if (!enable && mdev->enabled) { + mcde_fb_destroy(mdev); + } return count; } @@ -271,8 +297,7 @@ static ssize_t store_stayalive(struct device *dev, } static int ceanr_convert(struct mcde_display_device *ddev, - u8 cea, u8 vesa_cea_nr, int buffering, - u16 *w, u16 *h, u16 *vw, u16 *vh) + u8 cea, u8 vesa_cea_nr, u16 *w, u16 *h) { struct mcde_video_mode *video_mode; @@ -281,8 +306,6 @@ static int ceanr_convert(struct mcde_display_device *ddev, if (video_mode) { *w = video_mode->xres; *h = video_mode->yres; - *vw = video_mode->xres; - *vh = video_mode->yres * buffering; dev_dbg(&ddev->dev, "cea:%d nr:%d found\n", cea, vesa_cea_nr); return 0; @@ -1429,7 +1452,6 @@ static int __devinit hdmi_probe(struct mcde_display_device *dev) dev->apply_config = hdmi_apply_config; dev->set_pixel_format = hdmi_set_pixel_format; dev->set_power_mode = hdmi_set_power_mode; - dev->ceanr_convert = ceanr_convert; /* Create sysfs files */ if (device_create_file(&dev->dev, &dev_attr_hdmisdtvswitch)) |