summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny Nold <dannynold@freescale.com>2010-08-22 21:20:26 -0500
committerDanny Nold <dannynold@freescale.com>2010-08-25 13:09:35 -0500
commit9812a96cd35d8f85cc9ae520e7b00cd7e35cf883 (patch)
tree6651f1e727106dfd0fbb110ee58e120aad40e660
parent6e28302271fd10f1319f94e0e11d367b87e3f385 (diff)
ENGR00126260-2 - EPDC fb: Support 9.7" panel
Add support for 9.7" E Ink panel. Expand driver support for multiple panels by storing platform data containing all variable panel parameters. Removed hard-coded reg values for 6" panel. Signed-off-by: Danny Nold <dannynold@freescale.com>
-rw-r--r--drivers/video/mxc/mxc_epdc_fb.c303
1 files changed, 161 insertions, 142 deletions
diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
index fd4a53517579..7a49cd980353 100644
--- a/drivers/video/mxc/mxc_epdc_fb.c
+++ b/drivers/video/mxc/mxc_epdc_fb.c
@@ -71,15 +71,6 @@
static unsigned long default_bpp = 16;
-struct mxc_epdc_platform_fb_entry {
- char name[16];
- u16 x_res;
- u16 y_res;
- u16 bpp;
- u32 cycle_time_ns;
- struct list_head link;
-};
-
struct update_marker_data {
u32 update_marker;
struct completion update_completion;
@@ -106,13 +97,15 @@ struct update_data_list {
struct mxc_epdc_fb_data {
struct fb_info info;
u32 pseudo_palette[16];
+ char *fb_panel_str;
struct list_head list;
- struct mxc_epdc_platform_fb_entry *cur;
+ struct mxc_epdc_fb_mode *cur_mode;
struct mxc_epdc_fb_platform_data *pdata;
int blank;
ssize_t map_size;
dma_addr_t phys_start;
u32 fb_offset;
+ int default_bpp;
int native_width;
int native_height;
int epdc_irq;
@@ -196,30 +189,6 @@ struct mxcfb_waveform_data_file {
void __iomem *epdc_base;
-#define NUM_PANELS 1
-
-static struct fb_videomode panel_modes[NUM_PANELS] = {
- {
- /* 800x600 @ 60 Hz , pixel clk @ 20MHz */
- "E-INK SVGA", 60, 800, 600, 50000, 10, 217, 4, 10, 20, 4,
- 0,
- FB_VMODE_NONINTERLACED,
- 0,},
-};
-
-/*
- * This is a temporary placeholder
- * Ultimately, this declaration will be off in a panel-specific file,
- * and will include implementations for all of the panel functions
- */
-static struct mxc_epdc_platform_fb_entry ed060sc4_fb_entry = {
- .name = "ed060sc4",
- .x_res = 800,
- .y_res = 600,
- .bpp = 16,
- .cycle_time_ns = 200,
-};
-
/* 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);
@@ -420,30 +389,6 @@ static inline void dump_all_updates(struct mxc_epdc_fb_data *fb_data) {}
#endif
-static struct fb_var_screeninfo mxc_epdc_fb_default __devinitdata = {
- .activate = FB_ACTIVATE_TEST,
- .height = -1,
- .width = -1,
- .pixclock = 20000,
- .left_margin = 8,
- .right_margin = 142,
- .upper_margin = 4,
- .lower_margin = 10,
- .hsync_len = 20,
- .vsync_len = 4,
- .vmode = FB_VMODE_NONINTERLACED,
-};
-
-static struct fb_fix_screeninfo mxc_epdc_fb_fix __devinitdata = {
- .id = "mxc_epdc_fb",
- .type = FB_TYPE_PACKED_PIXELS,
- .visual = FB_VISUAL_TRUECOLOR,
- .xpanstep = 0,
- .ypanstep = 0,
- .ywrapstep = 0,
- .accel = FB_ACCEL_NONE,
- .line_length = 800 * 2,
-};
/********************************************************
* Start Low-Level EPDC Functions
@@ -631,9 +576,10 @@ static void epdc_set_vertical_timing(u32 vert_start, u32 vert_end,
void epdc_init_settings(struct mxc_epdc_fb_data *fb_data)
{
- struct mxc_epdc_platform_fb_entry *pentry = fb_data->cur;
+ struct mxc_epdc_fb_mode *epdc_mode = fb_data->cur_mode;
struct fb_var_screeninfo *screeninfo = &fb_data->info.var;
u32 reg_val;
+ int num_ce;
/* Reset */
__raw_writel(EPDC_CTRL_SFTRST, EPDC_CTRL_SET);
@@ -675,7 +621,7 @@ void epdc_init_settings(struct mxc_epdc_fb_data *fb_data)
epdc_set_temp(8);
/* EPDC_RES */
- epdc_set_screen_res(pentry->x_res, pentry->y_res);
+ epdc_set_screen_res(epdc_mode->vmode->xres, epdc_mode->vmode->yres);
/*
* EPDC_TCE_CTRL
@@ -690,7 +636,7 @@ void epdc_init_settings(struct mxc_epdc_fb_data *fb_data)
* PIXELS_PER_SDCLK = 4
*/
reg_val =
- ((4 << EPDC_TCE_CTRL_VSCAN_HOLDOFF_OFFSET) &
+ ((epdc_mode->vscan_holdoff << EPDC_TCE_CTRL_VSCAN_HOLDOFF_OFFSET) &
EPDC_TCE_CTRL_VSCAN_HOLDOFF_MASK)
| EPDC_TCE_CTRL_PIXELS_PER_SDCLK_4;
__raw_writel(reg_val, EPDC_TCE_CTRL);
@@ -708,13 +654,13 @@ void epdc_init_settings(struct mxc_epdc_fb_data *fb_data)
/* EPDC_TCE_OE */
reg_val =
- ((10 << EPDC_TCE_OE_SDOED_WIDTH_OFFSET) &
+ ((epdc_mode->sdoed_width << EPDC_TCE_OE_SDOED_WIDTH_OFFSET) &
EPDC_TCE_OE_SDOED_WIDTH_MASK)
- | ((20 << EPDC_TCE_OE_SDOED_DLY_OFFSET) &
+ | ((epdc_mode->sdoed_delay << EPDC_TCE_OE_SDOED_DLY_OFFSET) &
EPDC_TCE_OE_SDOED_DLY_MASK)
- | ((10 << EPDC_TCE_OE_SDOEZ_WIDTH_OFFSET) &
+ | ((epdc_mode->sdoez_width << EPDC_TCE_OE_SDOEZ_WIDTH_OFFSET) &
EPDC_TCE_OE_SDOEZ_WIDTH_MASK)
- | ((20 << EPDC_TCE_OE_SDOEZ_DLY_OFFSET) &
+ | ((epdc_mode->sdoez_delay << EPDC_TCE_OE_SDOEZ_DLY_OFFSET) &
EPDC_TCE_OE_SDOEZ_DLY_MASK);
__raw_writel(reg_val, EPDC_TCE_OE);
@@ -723,17 +669,17 @@ void epdc_init_settings(struct mxc_epdc_fb_data *fb_data)
/* EPDC_TCE_TIMING2 */
reg_val =
- ((480 << EPDC_TCE_TIMING2_GDCLK_HP_OFFSET) &
+ ((epdc_mode->gdclk_hp_offs << EPDC_TCE_TIMING2_GDCLK_HP_OFFSET) &
EPDC_TCE_TIMING2_GDCLK_HP_MASK)
- | ((20 << EPDC_TCE_TIMING2_GDSP_OFFSET_OFFSET) &
+ | ((epdc_mode->gdsp_offs << EPDC_TCE_TIMING2_GDSP_OFFSET_OFFSET) &
EPDC_TCE_TIMING2_GDSP_OFFSET_MASK);
__raw_writel(reg_val, EPDC_TCE_TIMING2);
/* EPDC_TCE_TIMING3 */
reg_val =
- ((0 << EPDC_TCE_TIMING3_GDOE_OFFSET_OFFSET) &
+ ((epdc_mode->gdoe_offs << EPDC_TCE_TIMING3_GDOE_OFFSET_OFFSET) &
EPDC_TCE_TIMING3_GDOE_OFFSET_MASK)
- | ((1 << EPDC_TCE_TIMING3_GDCLK_OFFSET_OFFSET) &
+ | ((epdc_mode->gdclk_offs << EPDC_TCE_TIMING3_GDCLK_OFFSET_OFFSET) &
EPDC_TCE_TIMING3_GDCLK_OFFSET_MASK);
__raw_writel(reg_val, EPDC_TCE_TIMING3);
@@ -746,10 +692,14 @@ void epdc_init_settings(struct mxc_epdc_fb_data *fb_data)
* SDDO_INVERT = DISABLED
* PIXELS_PER_CE = display horizontal resolution
*/
+ num_ce = epdc_mode->num_ce;
+ if (num_ce == 0)
+ num_ce = 1;
reg_val = EPDC_TCE_SDCFG_SDCLK_HOLD | EPDC_TCE_SDCFG_SDSHR
- | ((1 << EPDC_TCE_SDCFG_NUM_CE_OFFSET) & EPDC_TCE_SDCFG_NUM_CE_MASK)
+ | ((num_ce << EPDC_TCE_SDCFG_NUM_CE_OFFSET) &
+ EPDC_TCE_SDCFG_NUM_CE_MASK)
| EPDC_TCE_SDCFG_SDDO_REFORMAT_FLIP_PIXELS
- | ((pentry->x_res << EPDC_TCE_SDCFG_PIXELS_PER_CE_OFFSET) &
+ | ((epdc_mode->vmode->xres/num_ce << EPDC_TCE_SDCFG_PIXELS_PER_CE_OFFSET) &
EPDC_TCE_SDCFG_PIXELS_PER_CE_MASK);
__raw_writel(reg_val, EPDC_TCE_SDCFG);
@@ -1079,19 +1029,24 @@ static int mxc_epdc_fb_set_par(struct fb_info *info)
* an initialization request.
*/
if (!fb_data->hw_ready) {
- for (i = 0; i < NUM_PANELS; i++) {
- /* Check resolution for a match with supported panel types */
- if ((screeninfo->xres != panel_modes[i].xres) ||
- (screeninfo->yres != panel_modes[i].yres))
+ for (i = 0; i < fb_data->pdata->num_modes; i++) {
+ struct fb_videomode *vmode =
+ fb_data->pdata->epdc_mode[i].vmode;
+ /* Check resolution for a match
+ with supported panel types */
+ if ((screeninfo->xres != vmode->xres) ||
+ (screeninfo->yres != vmode->yres))
continue;
+ fb_data->cur_mode = &fb_data->pdata->epdc_mode[i];
+
/* Found a match - Grab timing params */
- screeninfo->left_margin = panel_modes[i].left_margin;
- screeninfo->right_margin = panel_modes[i].right_margin;
- screeninfo->upper_margin = panel_modes[i].upper_margin;
- screeninfo->lower_margin = panel_modes[i].lower_margin;
- screeninfo->hsync_len = panel_modes[i].hsync_len;
- screeninfo->vsync_len = panel_modes[i].vsync_len;
+ screeninfo->left_margin = vmode->left_margin;
+ screeninfo->right_margin = vmode->right_margin;
+ screeninfo->upper_margin = vmode->upper_margin;
+ screeninfo->lower_margin = vmode->lower_margin;
+ screeninfo->hsync_len = vmode->hsync_len;
+ screeninfo->vsync_len = vmode->vsync_len;
/* Initialize EPDC settings and init panel */
ret =
@@ -1225,12 +1180,12 @@ static int mxc_epdc_fb_check_var(struct fb_var_screeninfo *var,
switch (var->rotate) {
case FB_ROTATE_UR:
case FB_ROTATE_UD:
- var->xres = var->xres_virtual = fb_data->native_width;
+ var->xres = fb_data->native_width;
var->yres = fb_data->native_height;
break;
case FB_ROTATE_CW:
case FB_ROTATE_CCW:
- var->xres = var->xres_virtual = fb_data->native_height;
+ var->xres = fb_data->native_height;
var->yres = fb_data->native_width;
break;
default:
@@ -1679,7 +1634,6 @@ static 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;
- int ret;
fb_data->pwrdown_delay = pwrdown_delay;
@@ -1946,14 +1900,15 @@ static struct fb_ops mxc_epdc_fb_ops = {
};
static struct fb_deferred_io mxc_epdc_fb_defio = {
- .delay = HZ / 2,
+ .delay = HZ,
.deferred_io = mxc_epdc_fb_deferred_io,
};
static void epdc_done_work_func(struct work_struct *work)
{
struct mxc_epdc_fb_data *fb_data =
- container_of(work, struct mxc_epdc_fb_data, epdc_done_work);
+ container_of(work, struct mxc_epdc_fb_data,
+ epdc_done_work.work);
epdc_powerdown(fb_data);
}
@@ -2294,13 +2249,24 @@ static int mxc_epdc_fb_init_hw(struct fb_info *info)
{
struct mxc_epdc_fb_data *fb_data = (struct mxc_epdc_fb_data *)info;
const struct firmware *fw;
+ char *fw_str = "imx/epdc";
struct mxcfb_update_data update;
struct mxcfb_waveform_data_file *wv_file;
int wv_data_offs;
int ret;
int i;
- ret = request_firmware(&fw, "imx/epdc.fw", fb_data->dev);
+ /*
+ * Create fw search string based on ID string in selected videomode.
+ * Format is "imx/epdc_[panel string].fw"
+ */
+ if (fb_data->cur_mode) {
+ strcat(fw_str, "_");
+ strcat(fw_str, fb_data->cur_mode->vmode->name);
+ strcat(fw_str, ".fw");
+ }
+
+ ret = request_firmware(&fw, fw_str, fb_data->dev);
if (ret) {
printk(KERN_ERR "Failed to load image imx/epdc.ihex err %d\n",
ret);
@@ -2343,7 +2309,7 @@ static int mxc_epdc_fb_init_hw(struct fb_info *info)
/* Enable pix clk for EPDC */
clk_enable(fb_data->epdc_clk_pix);
- clk_set_rate(fb_data->epdc_clk_pix, 20000000);
+ clk_set_rate(fb_data->epdc_clk_pix, fb_data->cur_mode->vmode->pixclock);
epdc_init_sequence(fb_data);
@@ -2414,8 +2380,13 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
struct mxc_epdc_fb_data *fb_data;
struct resource *res;
struct fb_info *info;
- struct mxc_epdc_platform_fb_entry *pentry;
+ char *options, *opt;
+ char *panel_str = NULL;
+ char name[] = "mxcepdcfb";
+ struct fb_videomode *vmode;
int xres_virt, yres_virt, buf_size;
+ struct fb_var_screeninfo *var_info;
+ struct fb_fix_screeninfo *fix_info;
struct pxp_config_data *pxp_conf;
struct pxp_proc_data *proc_data;
struct scatterlist *sg;
@@ -2433,27 +2404,58 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
goto out;
}
- fb_data->dev = &pdev->dev;
- /* We want to use hard-coded structure defined in this file */
- pentry = &ed060sc4_fb_entry;
- fb_data->cur = pentry;
- platform_set_drvdata(pdev, fb_data);
- info = &fb_data->info;
-
/* Get platform data */
fb_data->pdata = pdev->dev.platform_data;
- if (fb_data->pdata == NULL) {
+ if ((fb_data->pdata == NULL) || (fb_data->pdata->num_modes < 1)) {
ret = -EINVAL;
goto out_fbdata;
}
+ if (fb_get_options(name, &options)) {
+ ret = -ENODEV;
+ goto out_fbdata;
+ }
+
+ if (options)
+ while ((opt = strsep(&options, ",")) != NULL) {
+ if (!*opt)
+ continue;
+
+ if (!strncmp(opt, "bpp=", 4))
+ fb_data->default_bpp =
+ simple_strtoul(opt + 4, NULL, 0);
+ else
+ panel_str = opt;
+ }
+
+ fb_data->dev = &pdev->dev;
+
+ if (!fb_data->default_bpp)
+ fb_data->default_bpp = 16;
+
+ /* Set default (first defined mode) before searching for a match */
+ fb_data->cur_mode = &fb_data->pdata->epdc_mode[0];
+
+ for (i = 0; i < fb_data->pdata->num_modes; i++)
+ if (!strcmp(fb_data->pdata->epdc_mode[i].vmode->name,
+ panel_str)) {
+ fb_data->cur_mode = &fb_data->pdata->epdc_mode[i];
+ break;
+ }
+
+ vmode = fb_data->cur_mode->vmode;
+
+ platform_set_drvdata(pdev, fb_data);
+ info = &fb_data->info;
+
/* Allocate color map for the FB */
ret = fb_alloc_cmap(&info->cmap, 256, 0);
if (ret)
goto out_fbdata;
- dev_dbg(&pdev->dev, "resolution %dx%d, bpp %d\n", pentry->x_res,
- pentry->y_res, pentry->bpp);
+ dev_dbg(&pdev->dev, "resolution %dx%d, bpp %d\n",
+ fb_data->cur_mode->vmode->xres,
+ fb_data->cur_mode->vmode->yres, fb_data->default_bpp);
/*
* GPU alignment restrictions dictate framebuffer parameters:
@@ -2461,9 +2463,9 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
* - 128-byte alignment for buffer height
* => 4K buffer alignment for buffer start
*/
- xres_virt = ALIGN(pentry->x_res, 32);
- yres_virt = ALIGN(pentry->y_res, 128);
- buf_size = xres_virt * yres_virt * pentry->bpp/8;
+ xres_virt = ALIGN(vmode->xres, 32);
+ yres_virt = ALIGN(vmode->yres, 128);
+ buf_size = xres_virt * yres_virt * fb_data->default_bpp/8;
fb_data->map_size = PAGE_ALIGN(buf_size) * NUM_SCREENS;
dev_dbg(&pdev->dev, "memory to allocate: %d\n", fb_data->map_size);
@@ -2493,49 +2495,69 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
dev_dbg(&pdev->dev, "allocated at %p:0x%x\n", info->screen_base,
fb_data->phys_start);
- mxc_epdc_fb_default.bits_per_pixel = pentry->bpp;
- mxc_epdc_fb_default.xres = pentry->x_res;
- mxc_epdc_fb_default.yres = pentry->y_res;
- mxc_epdc_fb_default.xres_virtual = xres_virt;
- /* Additional screens allow for panning and buffer flipping */
- mxc_epdc_fb_default.yres_virtual = yres_virt * NUM_SCREENS;
+ var_info = &info->var;
- mxc_epdc_fb_fix.smem_start = fb_data->phys_start;
- mxc_epdc_fb_fix.smem_len = fb_data->map_size;
- mxc_epdc_fb_fix.ypanstep = 0;
-
- switch (pentry->bpp) {
+ var_info->activate = FB_ACTIVATE_TEST;
+ var_info->bits_per_pixel = fb_data->default_bpp;
+ var_info->xres = vmode->xres;
+ var_info->yres = vmode->yres;
+ var_info->xres_virtual = xres_virt;
+ /* Additional screens allow for panning and buffer flipping */
+ var_info->yres_virtual = yres_virt * NUM_SCREENS;
+
+ var_info->pixclock = vmode->pixclock;
+ var_info->left_margin = vmode->left_margin;
+ var_info->right_margin = vmode->right_margin;
+ var_info->upper_margin = vmode->upper_margin;
+ var_info->lower_margin = vmode->lower_margin;
+ var_info->hsync_len = vmode->hsync_len;
+ var_info->vsync_len = vmode->vsync_len;
+ var_info->vmode = FB_VMODE_NONINTERLACED;
+
+ switch (fb_data->default_bpp) {
case 32:
case 24:
- mxc_epdc_fb_default.red.offset = 16;
- mxc_epdc_fb_default.red.length = 8;
- mxc_epdc_fb_default.green.offset = 8;
- mxc_epdc_fb_default.green.length = 8;
- mxc_epdc_fb_default.blue.offset = 0;
- mxc_epdc_fb_default.blue.length = 8;
+ var_info->red.offset = 16;
+ var_info->red.length = 8;
+ var_info->green.offset = 8;
+ var_info->green.length = 8;
+ var_info->blue.offset = 0;
+ var_info->blue.length = 8;
break;
case 16:
- mxc_epdc_fb_default.red.offset = 11;
- mxc_epdc_fb_default.red.length = 5;
- mxc_epdc_fb_default.green.offset = 5;
- mxc_epdc_fb_default.green.length = 6;
- mxc_epdc_fb_default.blue.offset = 0;
- mxc_epdc_fb_default.blue.length = 5;
+ var_info->red.offset = 11;
+ var_info->red.length = 5;
+ var_info->green.offset = 5;
+ var_info->green.length = 6;
+ var_info->blue.offset = 0;
+ var_info->blue.length = 5;
break;
default:
- dev_err(&pdev->dev, "unsupported bitwidth %d\n", pentry->bpp);
+ dev_err(&pdev->dev, "unsupported bitwidth %d\n",
+ fb_data->default_bpp);
ret = -EINVAL;
goto out_dma_fb;
}
- fb_data->native_width = pentry->x_res;
- fb_data->native_height = pentry->y_res;
+ fix_info = &info->fix;
+
+ strcpy(fix_info->id, "mxc_epdc_fb");
+ fix_info->type = FB_TYPE_PACKED_PIXELS;
+ fix_info->visual = FB_VISUAL_TRUECOLOR;
+ fix_info->xpanstep = 0;
+ fix_info->ypanstep = 0;
+ fix_info->ywrapstep = 0;
+ fix_info->accel = FB_ACCEL_NONE;
+ fix_info->smem_start = fb_data->phys_start;
+ fix_info->smem_len = fb_data->map_size;
+ fix_info->ypanstep = 0;
+
+ fb_data->native_width = vmode->xres;
+ fb_data->native_height = vmode->yres;
info->fbops = &mxc_epdc_fb_ops;
- info->var = mxc_epdc_fb_default;
- info->fix = mxc_epdc_fb_fix;
info->var.activate = FB_ACTIVATE_NOW;
info->pseudo_palette = fb_data->pseudo_palette;
info->screen_size = info->fix.smem_len;
@@ -2607,7 +2629,7 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
upd_list->size, upd_list->phys_addr);
}
- fb_data->working_buffer_size = pentry->y_res * pentry->x_res * 2;
+ fb_data->working_buffer_size = vmode->yres * vmode->xres * 2;
/* Allocate memory for EPDC working buffer */
fb_data->working_buffer_virt =
dma_alloc_coherent(&pdev->dev, fb_data->working_buffer_size,
@@ -2680,17 +2702,17 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
fb_data->display_regulator = regulator_get(NULL, "DISPLAY");
if (IS_ERR(fb_data->display_regulator)) {
dev_err(&pdev->dev, "Unable to get display PMIC regulator."
- "err = 0x%x\n", fb_data->display_regulator);
+ "err = 0x%x\n", (int)fb_data->display_regulator);
ret = -ENODEV;
- goto out_dma_work_buf;
+ goto out_irq;
}
fb_data->vcom_regulator = regulator_get(NULL, "VCOM");
if (IS_ERR(fb_data->vcom_regulator)) {
regulator_put(fb_data->display_regulator);
dev_err(&pdev->dev, "Unable to get VCOM regulator."
- "err = 0x%x\n", fb_data->vcom_regulator);
+ "err = 0x%x\n", (int)fb_data->vcom_regulator);
ret = -ENODEV;
- goto out_dma_work_buf;
+ goto out_irq;
}
if (device_create_file(info->dev, &fb_attrs[0]))
@@ -2797,14 +2819,13 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
if (ret) {
dev_err(&pdev->dev,
"register_framebuffer failed with error %d\n", ret);
- goto out_irq;
+ goto out_dmaengine;
}
#ifdef DEFAULT_PANEL_HW_INIT
ret = mxc_epdc_fb_init_hw((struct fb_info *)fb_data);
if (ret) {
- dev_err(&pdev->dev, "Failed to read firmware!\n");
- goto out_dmaengine;
+ dev_err(&pdev->dev, "Failed to initialize HW!\n");
}
#endif
@@ -2832,7 +2853,6 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
out_dmaengine:
dmaengine_put();
- unregister_framebuffer(&fb_data->info);
out_irq:
free_irq(fb_data->epdc_irq, fb_data);
out_dma_work_buf:
@@ -2987,8 +3007,6 @@ static int pxp_chan_init(struct mxc_epdc_fb_data *fb_data)
fb_data->pxp_chan = to_pxp_channel(chan);
- dev_dbg(fb_data->dev, "dma_chan = 0x%x\n", fb_data->pxp_chan->dma_chan);
-
fb_data->pxp_chan->client = fb_data;
init_completion(&fb_data->pxp_tx_cmpl);
@@ -3012,6 +3030,7 @@ static int pxp_process_update(struct mxc_epdc_fb_data *fb_data,
struct pxp_config_data *pxp_conf = &fb_data->pxp_conf;
struct pxp_proc_data *proc_data = &fb_data->pxp_conf.proc_data;
int i, ret;
+ int length;
dev_dbg(fb_data->dev, "Starting PxP Send Buffer\n");
@@ -3084,7 +3103,7 @@ static int pxp_process_update(struct mxc_epdc_fb_data *fb_data,
pxp_conf->out_param.height = update_region->height;
desc = to_tx_desc(txd);
- int length = desc->len;
+ length = desc->len;
for (i = 0; i < length; i++) {
if (i == 0) {/* S0 */
memcpy(&desc->proc_data, proc_data, sizeof(struct pxp_proc_data));