summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorDanny Nold <dannynold@freescale.com>2010-11-11 19:01:59 -0600
committerDanny Nold <dannynold@freescale.com>2010-12-03 11:14:51 -0600
commit239e4b394c1cb0dc4df67861e59dde08b8a239f4 (patch)
treeba6cf0e0bae5dbe1445a8f51d8bf0d890be39b6d /drivers
parent6087d4e16160320d3b64a68f562eb1e06df8d7d3 (diff)
ENGR00133794 - EPDC fb: Make IOCTL functions accessible from kernel modules
- Created global to hold EPDC fb data structure - Created new functions to ensure all ioctls map to functions - Created header file to declare functions accessible from other kernel modules Signed-off-by: Danny Nold <dannynold@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/mxc/mxc_epdc_fb.c74
1 files changed, 52 insertions, 22 deletions
diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
index 92243b6b257c..57c595ff387b 100644
--- a/drivers/video/mxc/mxc_epdc_fb.c
+++ b/drivers/video/mxc/mxc_epdc_fb.c
@@ -43,6 +43,7 @@
#include <linux/dmaengine.h>
#include <linux/pxp_dma.h>
#include <linux/mxcfb.h>
+#include <linux/mxcfb_epdc_kernel.h>
#include <linux/gpio.h>
#include <linux/regulator/driver.h>
#include <linux/fsl_devices.h>
@@ -63,15 +64,15 @@
#define DEFAULT_TEMP_INDEX 8
#define DEFAULT_TEMP 20 /* room temp in deg Celsius */
-#define INIT_UPDATE_MARKER 0x12345678
-#define PAN_UPDATE_MARKER 0x12345679
+#define INIT_UPDATE_MARKER 0x12345678
+#define PAN_UPDATE_MARKER 0x12345679
#define LUT_UPDATE_NONE 0
-#define LUT_UPDATE_NEW 1
+#define LUT_UPDATE_NEW 1
#define LUT_UPDATE_COLLISION 2
#define POWER_STATE_OFF 0
-#define POWER_STATE_ON 1
+#define POWER_STATE_ON 1
static unsigned long default_bpp = 16;
@@ -195,6 +196,8 @@ struct mxcfb_waveform_data_file {
void __iomem *epdc_base;
+struct mxc_epdc_fb_data *g_fb_data;
+
/* forward declaration */
static int mxc_epdc_fb_blank(int blank, struct fb_info *info);
static int mxc_epdc_fb_init_hw(struct fb_info *info);
@@ -1230,6 +1233,17 @@ static int mxc_epdc_fb_check_var(struct fb_var_screeninfo *var,
return 0;
}
+void mxc_epdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
+ struct fb_info *info)
+{
+ struct mxc_epdc_fb_data *fb_data = info ?
+ (struct mxc_epdc_fb_data *)info:g_fb_data;
+
+ memcpy(&fb_data->wv_modes, &modes,
+ sizeof(modes));
+}
+EXPORT_SYMBOL(mxc_epdc_fb_set_waveform_modes);
+
static int mxc_epdc_fb_get_temp_index(struct mxc_epdc_fb_data *fb_data, int temp)
{
int i;
@@ -1261,9 +1275,10 @@ static int mxc_epdc_fb_get_temp_index(struct mxc_epdc_fb_data *fb_data, int temp
return index;
}
-static int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info)
+int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info)
{
- struct mxc_epdc_fb_data *fb_data = (struct mxc_epdc_fb_data *)info;
+ struct mxc_epdc_fb_data *fb_data = info ?
+ (struct mxc_epdc_fb_data *)info:g_fb_data;
int temp_index;
unsigned long flags;
@@ -1274,10 +1289,12 @@ static int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info)
return 0;
}
+EXPORT_SYMBOL(mxc_epdc_fb_set_temperature);
-static int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info)
+int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info)
{
- struct mxc_epdc_fb_data *fb_data = (struct mxc_epdc_fb_data *)info;
+ struct mxc_epdc_fb_data *fb_data = info ?
+ (struct mxc_epdc_fb_data *)info:g_fb_data;
dev_dbg(fb_data->dev, "Setting auto update mode to %d\n", auto_mode);
@@ -1291,11 +1308,13 @@ static int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info)
return 0;
}
+EXPORT_SYMBOL(mxc_epdc_fb_set_auto_update);
-static int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
+int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
struct fb_info *info)
{
- struct mxc_epdc_fb_data *fb_data = (struct mxc_epdc_fb_data *)info;
+ struct mxc_epdc_fb_data *fb_data = info ?
+ (struct mxc_epdc_fb_data *)info:g_fb_data;
struct update_data_list *upd_data_list = NULL;
struct mxcfb_rect *screen_upd_region; /* Region on screen to update */
struct mxcfb_rect *src_upd_region; /* Region of src buffer for update */
@@ -1657,11 +1676,12 @@ static int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
return 0;
}
+EXPORT_SYMBOL(mxc_epdc_fb_send_update);
-static int mxc_epdc_fb_wait_update_complete(u32 update_marker,
- struct fb_info *info)
+int mxc_epdc_fb_wait_update_complete(u32 update_marker, struct fb_info *info)
{
- struct mxc_epdc_fb_data *fb_data = (struct mxc_epdc_fb_data *)info;
+ struct mxc_epdc_fb_data *fb_data = info ?
+ (struct mxc_epdc_fb_data *)info:g_fb_data;
int ret;
int i;
@@ -1688,16 +1708,28 @@ static int mxc_epdc_fb_wait_update_complete(u32 update_marker,
return 0;
}
+EXPORT_SYMBOL(mxc_epdc_fb_wait_update_complete);
-static int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
+int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
struct fb_info *info)
{
- struct mxc_epdc_fb_data *fb_data = (struct mxc_epdc_fb_data *)info;
+ struct mxc_epdc_fb_data *fb_data = info ?
+ (struct mxc_epdc_fb_data *)info:g_fb_data;
fb_data->pwrdown_delay = pwrdown_delay;
return 0;
}
+EXPORT_SYMBOL(mxc_epdc_fb_set_pwrdown_delay);
+
+int mxc_epdc_get_pwrdown_delay(struct fb_info *info)
+{
+ struct mxc_epdc_fb_data *fb_data = info ?
+ (struct mxc_epdc_fb_data *)info:g_fb_data;
+
+ return fb_data->pwrdown_delay;
+}
+EXPORT_SYMBOL(mxc_epdc_get_pwrdown_delay);
static int mxc_epdc_fb_ioctl(struct fb_info *info, unsigned int cmd,
unsigned long arg)
@@ -1709,11 +1741,8 @@ static int mxc_epdc_fb_ioctl(struct fb_info *info, unsigned int cmd,
case MXCFB_SET_WAVEFORM_MODES:
{
struct mxcfb_waveform_modes modes;
- struct mxc_epdc_fb_data *fb_data =
- (struct mxc_epdc_fb_data *)info;
if (!copy_from_user(&modes, argp, sizeof(modes))) {
- memcpy(&fb_data->wv_modes, &modes,
- sizeof(modes));
+ mxc_epdc_fb_set_waveform_modes(&modes, info);
ret = 0;
}
break;
@@ -1772,9 +1801,8 @@ static int mxc_epdc_fb_ioctl(struct fb_info *info, unsigned int cmd,
case MXCFB_GET_PWRDOWN_DELAY:
{
- struct mxc_epdc_fb_data *fb_data =
- (struct mxc_epdc_fb_data *)info;
- if (put_user(fb_data->pwrdown_delay,
+ int pwrdown_delay = mxc_epdc_get_pwrdown_delay(info);
+ if (put_user(pwrdown_delay,
(int __user *)argp))
ret = -EFAULT;
ret = 0;
@@ -2890,6 +2918,8 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
goto out_dmaengine;
}
+ g_fb_data = fb_data;
+
#ifdef DEFAULT_PANEL_HW_INIT
ret = mxc_epdc_fb_init_hw((struct fb_info *)fb_data);
if (ret) {