summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMarcus Lorentzon <marcus.xm.lorentzon@stericsson.com>2011-10-25 18:10:20 +0200
committerJonas ABERG <jonas.aberg@stericsson.com>2011-10-27 11:31:47 +0200
commit1b8cbdab7d3a2182aa518cfcf445e4d0505b1a24 (patch)
treeeac817ed1ad22cc97950cc1478304c6f1a22ab0f /drivers
parent94160bce5ef05ea15d996b8c70b37148fc8ce4fe (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.c34
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))