summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Lorentzon <marcus.xm.lorentzon@stericsson.com>2011-10-25 18:10:20 +0200
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:04:17 +0200
commit968075598864c6ce9a2a346042a84e5cac4cdf03 (patch)
tree3d60f72005d5c035922ada1ebd0acd291448502b
parente8a7d701b4d33a16722eef691e74ed999a8f9fbd (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>
-rw-r--r--drivers/video/mcde/display-av8100.c34
-rw-r--r--include/video/mcde_display-av8100.h2
2 files changed, 29 insertions, 7 deletions
diff --git a/drivers/video/mcde/display-av8100.c b/drivers/video/mcde/display-av8100.c
index 3ff73f3e4eb..3c2ec85464a 100644
--- a/drivers/video/mcde/display-av8100.c
+++ b/drivers/video/mcde/display-av8100.c
@@ -18,6 +18,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>
@@ -32,6 +33,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;
@@ -46,6 +53,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);
@@ -199,7 +208,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;
}
@@ -272,8 +298,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;
@@ -282,8 +307,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;
@@ -1430,7 +1453,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))
diff --git a/include/video/mcde_display-av8100.h b/include/video/mcde_display-av8100.h
index 52578a675f1..7c13b49e58f 100644
--- a/include/video/mcde_display-av8100.h
+++ b/include/video/mcde_display-av8100.h
@@ -43,7 +43,7 @@ struct display_driver_data {
struct regulator *cvbs_regulator;
bool cvbs_regulator_enabled;
bool update_port_pixel_format;
- char *fbdevname;
+ const char *fbdevname;
struct mcde_video_mode *video_mode;
};