Automatic merge of master.kernel.org:/home/rmk/linux-2.6-rmk.git
This commit is contained in:
commit
2604f6da1a
|
@ -125,11 +125,11 @@ clcdfb_set_bitfields(struct clcd_fb *fb, struct fb_var_screeninfo *var)
|
||||||
case 2:
|
case 2:
|
||||||
case 4:
|
case 4:
|
||||||
case 8:
|
case 8:
|
||||||
var->red.length = 8;
|
var->red.length = var->bits_per_pixel;
|
||||||
var->red.offset = 0;
|
var->red.offset = 0;
|
||||||
var->green.length = 8;
|
var->green.length = var->bits_per_pixel;
|
||||||
var->green.offset = 0;
|
var->green.offset = 0;
|
||||||
var->blue.length = 8;
|
var->blue.length = var->bits_per_pixel;
|
||||||
var->blue.offset = 0;
|
var->blue.offset = 0;
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
|
@ -146,7 +146,7 @@ clcdfb_set_bitfields(struct clcd_fb *fb, struct fb_var_screeninfo *var)
|
||||||
var->blue.offset = 10;
|
var->blue.offset = 10;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 24:
|
case 32:
|
||||||
if (fb->panel->cntl & CNTL_LCDTFT) {
|
if (fb->panel->cntl & CNTL_LCDTFT) {
|
||||||
var->red.length = 8;
|
var->red.length = 8;
|
||||||
var->green.length = 8;
|
var->green.length = 8;
|
||||||
|
@ -178,6 +178,12 @@ static int clcdfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||||
|
|
||||||
if (fb->board->check)
|
if (fb->board->check)
|
||||||
ret = fb->board->check(fb, var);
|
ret = fb->board->check(fb, var);
|
||||||
|
|
||||||
|
if (ret == 0 &&
|
||||||
|
var->xres_virtual * var->bits_per_pixel / 8 *
|
||||||
|
var->yres_virtual > fb->fb.fix.smem_len)
|
||||||
|
ret = -EINVAL;
|
||||||
|
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
ret = clcdfb_set_bitfields(fb, var);
|
ret = clcdfb_set_bitfields(fb, var);
|
||||||
|
|
||||||
|
|
|
@ -153,7 +153,7 @@ struct clcd_fb {
|
||||||
|
|
||||||
static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
|
static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
|
||||||
{
|
{
|
||||||
u32 val;
|
u32 val, cpl;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Program the CLCD controller registers and start the CLCD
|
* Program the CLCD controller registers and start the CLCD
|
||||||
|
@ -164,7 +164,10 @@ static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
|
||||||
val |= (fb->fb.var.left_margin - 1) << 24;
|
val |= (fb->fb.var.left_margin - 1) << 24;
|
||||||
regs->tim0 = val;
|
regs->tim0 = val;
|
||||||
|
|
||||||
val = fb->fb.var.yres - 1;
|
val = fb->fb.var.yres;
|
||||||
|
if (fb->panel->cntl & CNTL_LCDDUAL)
|
||||||
|
val /= 2;
|
||||||
|
val -= 1;
|
||||||
val |= (fb->fb.var.vsync_len - 1) << 10;
|
val |= (fb->fb.var.vsync_len - 1) << 10;
|
||||||
val |= fb->fb.var.lower_margin << 16;
|
val |= fb->fb.var.lower_margin << 16;
|
||||||
val |= fb->fb.var.upper_margin << 24;
|
val |= fb->fb.var.upper_margin << 24;
|
||||||
|
@ -174,13 +177,17 @@ static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
|
||||||
val |= fb->fb.var.sync & FB_SYNC_HOR_HIGH_ACT ? 0 : TIM2_IHS;
|
val |= fb->fb.var.sync & FB_SYNC_HOR_HIGH_ACT ? 0 : TIM2_IHS;
|
||||||
val |= fb->fb.var.sync & FB_SYNC_VERT_HIGH_ACT ? 0 : TIM2_IVS;
|
val |= fb->fb.var.sync & FB_SYNC_VERT_HIGH_ACT ? 0 : TIM2_IVS;
|
||||||
|
|
||||||
if (fb->panel->cntl & CNTL_LCDTFT)
|
cpl = fb->fb.var.xres_virtual;
|
||||||
val |= (fb->fb.var.xres_virtual - 1) << 16;
|
if (fb->panel->cntl & CNTL_LCDTFT) /* TFT */
|
||||||
else if (fb->panel->cntl & CNTL_LCDBW)
|
/* / 1 */;
|
||||||
printk("what value for CPL for stnmono panels?");
|
else if (!fb->fb.var.grayscale) /* STN color */
|
||||||
else
|
cpl = cpl * 8 / 3;
|
||||||
val |= ((fb->fb.var.xres_virtual * 8 / 3) - 1) << 16;
|
else if (fb->panel->cntl & CNTL_LCDMONO8) /* STN monochrome, 8bit */
|
||||||
regs->tim2 = val;
|
cpl /= 8;
|
||||||
|
else /* STN monochrome, 4bit */
|
||||||
|
cpl /= 4;
|
||||||
|
|
||||||
|
regs->tim2 = val | ((cpl - 1) << 16);
|
||||||
|
|
||||||
regs->tim3 = fb->panel->tim3;
|
regs->tim3 = fb->panel->tim3;
|
||||||
|
|
||||||
|
@ -204,7 +211,7 @@ static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
|
||||||
case 16:
|
case 16:
|
||||||
val |= CNTL_LCDBPP16;
|
val |= CNTL_LCDBPP16;
|
||||||
break;
|
break;
|
||||||
case 24:
|
case 32:
|
||||||
val |= CNTL_LCDBPP24;
|
val |= CNTL_LCDBPP24;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -215,8 +222,8 @@ static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
|
||||||
|
|
||||||
static inline int clcdfb_check(struct clcd_fb *fb, struct fb_var_screeninfo *var)
|
static inline int clcdfb_check(struct clcd_fb *fb, struct fb_var_screeninfo *var)
|
||||||
{
|
{
|
||||||
var->xres_virtual = var->xres = (var->xres + 7) & ~7;
|
var->xres_virtual = var->xres = (var->xres + 15) & ~15;
|
||||||
var->yres_virtual = var->yres;
|
var->yres_virtual = var->yres = (var->yres + 1) & ~1;
|
||||||
|
|
||||||
#define CHECK(e,l,h) (var->e < l || var->e > h)
|
#define CHECK(e,l,h) (var->e < l || var->e > h)
|
||||||
if (CHECK(right_margin, (5+1), 256) || /* back porch */
|
if (CHECK(right_margin, (5+1), 256) || /* back porch */
|
||||||
|
|
|
@ -26,10 +26,13 @@ struct clk;
|
||||||
/**
|
/**
|
||||||
* clk_get - lookup and obtain a reference to a clock producer.
|
* clk_get - lookup and obtain a reference to a clock producer.
|
||||||
* @dev: device for clock "consumer"
|
* @dev: device for clock "consumer"
|
||||||
* @id: device ID
|
* @id: clock comsumer ID
|
||||||
*
|
*
|
||||||
* Returns a struct clk corresponding to the clock producer, or
|
* Returns a struct clk corresponding to the clock producer, or
|
||||||
* valid IS_ERR() condition containing errno.
|
* valid IS_ERR() condition containing errno. The implementation
|
||||||
|
* uses @dev and @id to determine the clock consumer, and thereby
|
||||||
|
* the clock producer. (IOW, @id may be identical strings, but
|
||||||
|
* clk_get may return different clock producers depending on @dev.)
|
||||||
*/
|
*/
|
||||||
struct clk *clk_get(struct device *dev, const char *id);
|
struct clk *clk_get(struct device *dev, const char *id);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue