mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
Merge 9c4b86ebf5 ("Merge tag 'for-5.18/fbdev-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev") into android-mainline
Steps on the way to 5.18-rc1 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I791f482065934a181cfeaaa12c1e3795d3e35e2a
This commit is contained in:
@@ -52,11 +52,13 @@ description: |+
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- apple,simple-framebuffer
|
||||
- allwinner,simple-framebuffer
|
||||
- amlogic,simple-framebuffer
|
||||
oneOf:
|
||||
- items:
|
||||
- enum:
|
||||
- apple,simple-framebuffer
|
||||
- allwinner,simple-framebuffer
|
||||
- amlogic,simple-framebuffer
|
||||
- const: simple-framebuffer
|
||||
- const: simple-framebuffer
|
||||
|
||||
reg:
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define map_page_into_agp(page) /* nothing */
|
||||
#define unmap_page_from_agp(page) /* nothing */
|
||||
#define map_page_into_agp(page) do { } while (0)
|
||||
#define unmap_page_from_agp(page) do { } while (0)
|
||||
#define flush_agp_cache() mb()
|
||||
|
||||
/* GATT allocation. Returns/accepts GATT kernel virtual address. */
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
#define map_page_into_agp(page)
|
||||
#define unmap_page_from_agp(page)
|
||||
#define map_page_into_agp(page) do {} while (0)
|
||||
#define unmap_page_from_agp(page) do {} while (0)
|
||||
#define flush_agp_cache() mb()
|
||||
|
||||
/* GATT allocation. Returns/accepts GATT kernel virtual address. */
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
|
||||
/* dummy for now */
|
||||
|
||||
#define map_page_into_agp(page)
|
||||
#define unmap_page_from_agp(page)
|
||||
#define flush_agp_cache() mb()
|
||||
#define map_page_into_agp(page) do { } while (0)
|
||||
#define unmap_page_from_agp(page) do { } while (0)
|
||||
#define flush_agp_cache() mb()
|
||||
|
||||
/* GATT allocation. Returns/accepts GATT kernel virtual address. */
|
||||
#define alloc_gatt_pages(order) \
|
||||
|
||||
@@ -594,7 +594,6 @@ static int lm3630a_remove(struct i2c_client *client)
|
||||
|
||||
if (pchip->irq) {
|
||||
free_irq(pchip->irq, pchip);
|
||||
flush_workqueue(pchip->irqthread);
|
||||
destroy_workqueue(pchip->irqthread);
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -1734,6 +1734,7 @@ static const struct of_device_id wled_match_table[] = {
|
||||
{ .compatible = "qcom,pmi8994-wled", .data = (void *)4 },
|
||||
{ .compatible = "qcom,pmi8998-wled", .data = (void *)4 },
|
||||
{ .compatible = "qcom,pm660l-wled", .data = (void *)4 },
|
||||
{ .compatible = "qcom,pm6150l-wled", .data = (void *)5 },
|
||||
{ .compatible = "qcom,pm8150l-wled", .data = (void *)5 },
|
||||
{}
|
||||
};
|
||||
|
||||
@@ -829,7 +829,7 @@ config FB_PVR2
|
||||
You can pass several parameters to the driver at boot time or at
|
||||
module load time. The parameters look like "video=pvr2:XXX", where
|
||||
the meaning of XXX can be found at the end of the main source file
|
||||
(<file:drivers/video/pvr2fb.c>). Please see the file
|
||||
(<file:drivers/video/fbdev/pvr2fb.c>). Please see the file
|
||||
<file:Documentation/fb/pvr2fb.rst>.
|
||||
|
||||
config FB_OPENCORES
|
||||
|
||||
@@ -110,7 +110,7 @@ static const struct fb_ops asiliantfb_ops = {
|
||||
static void asiliant_calc_dclk2(u32 *ppixclock, u8 *dclk2_m, u8 *dclk2_n, u8 *dclk2_div)
|
||||
{
|
||||
unsigned pixclock = *ppixclock;
|
||||
unsigned Ftarget = 1000000 * (1000000 / pixclock);
|
||||
unsigned Ftarget;
|
||||
unsigned n;
|
||||
unsigned best_error = 0xffffffff;
|
||||
unsigned best_m = 0xffffffff,
|
||||
|
||||
@@ -76,8 +76,6 @@
|
||||
#define SWITCH_SND7 0x80
|
||||
#define SWITCH_NONE 0x00
|
||||
|
||||
#define up(x, r) (((x) + (r) - 1) & ~((r)-1))
|
||||
|
||||
|
||||
static int default_par; /* default resolution (0=none) */
|
||||
|
||||
@@ -487,8 +485,8 @@ static struct fb_videomode atafb_modedb[] __initdata = {
|
||||
"tt-mid", 60, 640, 480, 31041, 120, 100, 8, 16, 140, 30,
|
||||
0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
}, {
|
||||
/* 1280x960, 29 kHz, 60 Hz (TT high) */
|
||||
"tt-high", 57, 640, 960, 31041, 120, 100, 8, 16, 140, 30,
|
||||
/* 1280x960, 72 kHz, 72 Hz (TT high) */
|
||||
"tt-high", 57, 1280, 960, 7760, 260, 60, 36, 4, 192, 4,
|
||||
0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
},
|
||||
|
||||
@@ -1649,12 +1647,12 @@ static int falcon_pan_display(struct fb_var_screeninfo *var,
|
||||
int bpp = info->var.bits_per_pixel;
|
||||
|
||||
if (bpp == 1)
|
||||
var->xoffset = up(var->xoffset, 32);
|
||||
var->xoffset = round_up(var->xoffset, 32);
|
||||
if (bpp != 16)
|
||||
par->hw.falcon.xoffset = var->xoffset & 15;
|
||||
else {
|
||||
par->hw.falcon.xoffset = 0;
|
||||
var->xoffset = up(var->xoffset, 2);
|
||||
var->xoffset = round_up(var->xoffset, 2);
|
||||
}
|
||||
par->hw.falcon.line_offset = bpp *
|
||||
(info->var.xres_virtual - info->var.xres) / 16;
|
||||
@@ -1683,9 +1681,9 @@ static int falcon_setcolreg(unsigned int regno, unsigned int red,
|
||||
((blue & 0xfc00) >> 8));
|
||||
if (regno < 16) {
|
||||
shifter_tt.color_reg[regno] =
|
||||
(((red & 0xe000) >> 13) | ((red & 0x1000) >> 12) << 8) |
|
||||
(((green & 0xe000) >> 13) | ((green & 0x1000) >> 12) << 4) |
|
||||
((blue & 0xe000) >> 13) | ((blue & 0x1000) >> 12);
|
||||
((((red & 0xe000) >> 13) | ((red & 0x1000) >> 12)) << 8) |
|
||||
((((green & 0xe000) >> 13) | ((green & 0x1000) >> 12)) << 4) |
|
||||
((blue & 0xe000) >> 13) | ((blue & 0x1000) >> 12);
|
||||
((u32 *)info->pseudo_palette)[regno] = ((red & 0xf800) |
|
||||
((green & 0xfc00) >> 5) |
|
||||
((blue & 0xf800) >> 11));
|
||||
@@ -1971,9 +1969,9 @@ static int stste_setcolreg(unsigned int regno, unsigned int red,
|
||||
green >>= 12;
|
||||
if (ATARIHW_PRESENT(EXTD_SHIFTER))
|
||||
shifter_tt.color_reg[regno] =
|
||||
(((red & 0xe) >> 1) | ((red & 1) << 3) << 8) |
|
||||
(((green & 0xe) >> 1) | ((green & 1) << 3) << 4) |
|
||||
((blue & 0xe) >> 1) | ((blue & 1) << 3);
|
||||
((((red & 0xe) >> 1) | ((red & 1) << 3)) << 8) |
|
||||
((((green & 0xe) >> 1) | ((green & 1) << 3)) << 4) |
|
||||
((blue & 0xe) >> 1) | ((blue & 1) << 3);
|
||||
else
|
||||
shifter_tt.color_reg[regno] =
|
||||
((red & 0xe) << 7) |
|
||||
@@ -2268,7 +2266,7 @@ static int pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||
if (!fbhw->set_screen_base ||
|
||||
(!ATARIHW_PRESENT(EXTD_SHIFTER) && var->xoffset))
|
||||
return -EINVAL;
|
||||
var->xoffset = up(var->xoffset, 16);
|
||||
var->xoffset = round_up(var->xoffset, 16);
|
||||
par->screen_base = screen_base +
|
||||
(var->yoffset * info->var.xres_virtual + var->xoffset)
|
||||
* info->var.bits_per_pixel / 8;
|
||||
@@ -2406,16 +2404,6 @@ static void atafb_set_disp(struct fb_info *info)
|
||||
atari_stram_to_virt(info->fix.smem_start));
|
||||
}
|
||||
|
||||
static int atafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
|
||||
u_int transp, struct fb_info *info)
|
||||
{
|
||||
red >>= 8;
|
||||
green >>= 8;
|
||||
blue >>= 8;
|
||||
|
||||
return info->fbops->fb_setcolreg(regno, red, green, blue, transp, info);
|
||||
}
|
||||
|
||||
static int
|
||||
atafb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||
{
|
||||
@@ -2726,7 +2714,6 @@ static struct fb_ops atafb_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.fb_check_var = atafb_check_var,
|
||||
.fb_set_par = atafb_set_par,
|
||||
.fb_setcolreg = atafb_setcolreg,
|
||||
.fb_blank = atafb_blank,
|
||||
.fb_pan_display = atafb_pan_display,
|
||||
.fb_fillrect = atafb_fillrect,
|
||||
|
||||
@@ -1062,15 +1062,16 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)
|
||||
|
||||
INIT_LIST_HEAD(&info->modelist);
|
||||
|
||||
if (pdev->dev.of_node) {
|
||||
ret = atmel_lcdfb_of_init(sinfo);
|
||||
if (ret)
|
||||
goto free_info;
|
||||
} else {
|
||||
if (!pdev->dev.of_node) {
|
||||
dev_err(dev, "cannot get default configuration\n");
|
||||
goto free_info;
|
||||
}
|
||||
|
||||
ret = atmel_lcdfb_of_init(sinfo);
|
||||
if (ret)
|
||||
goto free_info;
|
||||
|
||||
ret = -ENODEV;
|
||||
if (!sinfo->config)
|
||||
goto free_info;
|
||||
|
||||
|
||||
@@ -952,7 +952,7 @@ static void aty128_timings(struct aty128fb_par *par)
|
||||
u32 x_mpll_ref_fb_div;
|
||||
u32 xclk_cntl;
|
||||
u32 Nx, M;
|
||||
unsigned PostDivSet[] = { 0, 1, 2, 4, 8, 3, 6, 12 };
|
||||
static const unsigned int PostDivSet[] = { 0, 1, 2, 4, 8, 3, 6, 12 };
|
||||
#endif
|
||||
|
||||
if (!par->constants.ref_clk)
|
||||
@@ -1321,8 +1321,10 @@ static void aty128_set_pll(struct aty128_pll *pll,
|
||||
{
|
||||
u32 div3;
|
||||
|
||||
unsigned char post_conv[] = /* register values for post dividers */
|
||||
{ 2, 0, 1, 4, 2, 2, 6, 2, 3, 2, 2, 2, 7 };
|
||||
/* register values for post dividers */
|
||||
static const unsigned char post_conv[] = {
|
||||
2, 0, 1, 4, 2, 2, 6, 2, 3, 2, 2, 2, 7
|
||||
};
|
||||
|
||||
/* select PPLL_DIV_3 */
|
||||
aty_st_le32(CLOCK_CNTL_INDEX, aty_ld_le32(CLOCK_CNTL_INDEX) | (3 << 8));
|
||||
@@ -1360,7 +1362,7 @@ static int aty128_var_to_pll(u32 period_in_ps, struct aty128_pll *pll,
|
||||
const struct aty128fb_par *par)
|
||||
{
|
||||
const struct aty128_constants c = par->constants;
|
||||
unsigned char post_dividers[] = {1,2,4,8,3,6,12};
|
||||
static const unsigned char post_dividers[] = { 1, 2, 4, 8, 3, 6, 12 };
|
||||
u32 output_freq;
|
||||
u32 vclk; /* in .01 MHz */
|
||||
int i = 0;
|
||||
|
||||
@@ -22,13 +22,11 @@ static u32 aty_pll_to_var_ct(const struct fb_info *info, const union aty_pll *pl
|
||||
|
||||
u8 aty_ld_pll_ct(int offset, const struct atyfb_par *par)
|
||||
{
|
||||
u8 res;
|
||||
|
||||
/* write addr byte */
|
||||
aty_st_8(CLOCK_CNTL_ADDR, (offset << 2) & PLL_ADDR, par);
|
||||
/* read the register value */
|
||||
res = aty_ld_8(CLOCK_CNTL_DATA, par);
|
||||
return res;
|
||||
return aty_ld_8(CLOCK_CNTL_DATA, par);
|
||||
}
|
||||
|
||||
static void aty_st_pll_ct(int offset, u8 val, const struct atyfb_par *par)
|
||||
|
||||
@@ -352,10 +352,8 @@ static int aty_var_to_pll_18818(const struct fb_info *info, u32 vclk_per,
|
||||
post_divider = 1;
|
||||
|
||||
if (MHz100 > MAX_FREQ_2595) {
|
||||
MHz100 = MAX_FREQ_2595;
|
||||
return -EINVAL;
|
||||
} else if (MHz100 < ABS_MIN_FREQ_2595) {
|
||||
program_bits = 0; /* MHz100 = 257 */
|
||||
return -EINVAL;
|
||||
} else {
|
||||
while (MHz100 < MIN_FREQ_2595) {
|
||||
|
||||
@@ -239,7 +239,7 @@ int au1100fb_fb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned
|
||||
u32 value;
|
||||
|
||||
fbdev = to_au1100fb_device(fbi);
|
||||
palette = fbdev->regs->lcd_pallettebase;
|
||||
palette = fbdev->regs->lcd_palettebase;
|
||||
|
||||
if (regno > (AU1100_LCD_NBR_PALETTE_ENTRIES - 1))
|
||||
return -EINVAL;
|
||||
|
||||
@@ -92,7 +92,7 @@ struct au1100fb_regs
|
||||
u32 lcd_pwmdiv;
|
||||
u32 lcd_pwmhi;
|
||||
u32 reserved[(0x0400-0x002C)/4];
|
||||
u32 lcd_pallettebase[256];
|
||||
u32 lcd_palettebase[256];
|
||||
};
|
||||
|
||||
struct au1100fb_device {
|
||||
|
||||
@@ -1233,8 +1233,8 @@ static int au1200fb_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
|
||||
{
|
||||
struct au1200fb_device *fbdev = info->par;
|
||||
|
||||
return dma_mmap_attrs(fbdev->dev, vma, fbdev->fb_mem, fbdev->fb_phys,
|
||||
fbdev->fb_len, 0);
|
||||
return dma_mmap_coherent(fbdev->dev, vma,
|
||||
fbdev->fb_mem, fbdev->fb_phys, fbdev->fb_len);
|
||||
}
|
||||
|
||||
static void set_global(u_int cmd, struct au1200_lcd_global_regs_t *pdata)
|
||||
|
||||
@@ -469,7 +469,7 @@ static int cirrusfb_check_mclk(struct fb_info *info, long freq)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var,
|
||||
static int cirrusfb_check_pixclock(struct fb_var_screeninfo *var,
|
||||
struct fb_info *info)
|
||||
{
|
||||
long freq;
|
||||
@@ -478,9 +478,7 @@ static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var,
|
||||
unsigned maxclockidx = var->bits_per_pixel >> 3;
|
||||
|
||||
/* convert from ps to kHz */
|
||||
freq = PICOS2KHZ(var->pixclock);
|
||||
|
||||
dev_dbg(info->device, "desired pixclock: %ld kHz\n", freq);
|
||||
freq = PICOS2KHZ(var->pixclock ? : 1);
|
||||
|
||||
maxclock = cirrusfb_board_info[cinfo->btype].maxclock[maxclockidx];
|
||||
cinfo->multiplexing = 0;
|
||||
@@ -488,11 +486,13 @@ static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var,
|
||||
/* If the frequency is greater than we can support, we might be able
|
||||
* to use multiplexing for the video mode */
|
||||
if (freq > maxclock) {
|
||||
dev_err(info->device,
|
||||
"Frequency greater than maxclock (%ld kHz)\n",
|
||||
maxclock);
|
||||
return -EINVAL;
|
||||
var->pixclock = KHZ2PICOS(maxclock);
|
||||
|
||||
while ((freq = PICOS2KHZ(var->pixclock)) > maxclock)
|
||||
var->pixclock++;
|
||||
}
|
||||
dev_dbg(info->device, "desired pixclock: %ld kHz\n", freq);
|
||||
|
||||
/*
|
||||
* Additional constraint: 8bpp uses DAC clock doubling to allow maximum
|
||||
* pixel clock
|
||||
|
||||
@@ -67,7 +67,9 @@
|
||||
#define out_8(addr, val) (void)(val)
|
||||
#define in_le32(addr) 0
|
||||
#define out_le32(addr, val) (void)(val)
|
||||
#ifndef pgprot_cached_wthru
|
||||
#define pgprot_cached_wthru(prot) (prot)
|
||||
#endif
|
||||
#else
|
||||
static void invalid_vram_cache(void __force *addr)
|
||||
{
|
||||
|
||||
@@ -214,9 +214,11 @@ static u32 fb_cvt_aspect_ratio(struct fb_cvt_data *cvt)
|
||||
static void fb_cvt_print_name(struct fb_cvt_data *cvt)
|
||||
{
|
||||
u32 pixcount, pixcount_mod;
|
||||
int cnt = 255, offset = 0, read = 0;
|
||||
u8 *buf = kzalloc(256, GFP_KERNEL);
|
||||
int size = 256;
|
||||
int off = 0;
|
||||
u8 *buf;
|
||||
|
||||
buf = kzalloc(size, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return;
|
||||
|
||||
@@ -224,43 +226,30 @@ static void fb_cvt_print_name(struct fb_cvt_data *cvt)
|
||||
pixcount_mod = (cvt->xres * (cvt->yres/cvt->interlace)) % 1000000;
|
||||
pixcount_mod /= 1000;
|
||||
|
||||
read = snprintf(buf+offset, cnt, "fbcvt: %dx%d@%d: CVT Name - ",
|
||||
cvt->xres, cvt->yres, cvt->refresh);
|
||||
offset += read;
|
||||
cnt -= read;
|
||||
off += scnprintf(buf + off, size - off, "fbcvt: %dx%d@%d: CVT Name - ",
|
||||
cvt->xres, cvt->yres, cvt->refresh);
|
||||
|
||||
if (cvt->status)
|
||||
snprintf(buf+offset, cnt, "Not a CVT standard - %d.%03d Mega "
|
||||
"Pixel Image\n", pixcount, pixcount_mod);
|
||||
else {
|
||||
if (pixcount) {
|
||||
read = snprintf(buf+offset, cnt, "%d", pixcount);
|
||||
cnt -= read;
|
||||
offset += read;
|
||||
}
|
||||
if (cvt->status) {
|
||||
off += scnprintf(buf + off, size - off,
|
||||
"Not a CVT standard - %d.%03d Mega Pixel Image\n",
|
||||
pixcount, pixcount_mod);
|
||||
} else {
|
||||
if (pixcount)
|
||||
off += scnprintf(buf + off, size - off, "%d", pixcount);
|
||||
|
||||
read = snprintf(buf+offset, cnt, ".%03dM", pixcount_mod);
|
||||
cnt -= read;
|
||||
offset += read;
|
||||
off += scnprintf(buf + off, size - off, ".%03dM", pixcount_mod);
|
||||
|
||||
if (cvt->aspect_ratio == 0)
|
||||
read = snprintf(buf+offset, cnt, "3");
|
||||
off += scnprintf(buf + off, size - off, "3");
|
||||
else if (cvt->aspect_ratio == 3)
|
||||
read = snprintf(buf+offset, cnt, "4");
|
||||
off += scnprintf(buf + off, size - off, "4");
|
||||
else if (cvt->aspect_ratio == 1 || cvt->aspect_ratio == 4)
|
||||
read = snprintf(buf+offset, cnt, "9");
|
||||
off += scnprintf(buf + off, size - off, "9");
|
||||
else if (cvt->aspect_ratio == 2)
|
||||
read = snprintf(buf+offset, cnt, "A");
|
||||
else
|
||||
read = 0;
|
||||
cnt -= read;
|
||||
offset += read;
|
||||
off += scnprintf(buf + off, size - off, "A");
|
||||
|
||||
if (cvt->flags & FB_CVT_FLAG_REDUCED_BLANK) {
|
||||
read = snprintf(buf+offset, cnt, "-R");
|
||||
cnt -= read;
|
||||
offset += read;
|
||||
}
|
||||
if (cvt->flags & FB_CVT_FLAG_REDUCED_BLANK)
|
||||
off += scnprintf(buf + off, size - off, "-R");
|
||||
}
|
||||
|
||||
printk(KERN_INFO "%s\n", buf);
|
||||
|
||||
@@ -396,18 +396,14 @@ static void fb_rotate_logo(struct fb_info *info, u8 *dst,
|
||||
} else if (rotate == FB_ROTATE_CW) {
|
||||
fb_rotate_logo_cw(image->data, dst, image->width,
|
||||
image->height);
|
||||
tmp = image->width;
|
||||
image->width = image->height;
|
||||
image->height = tmp;
|
||||
swap(image->width, image->height);
|
||||
tmp = image->dy;
|
||||
image->dy = image->dx;
|
||||
image->dx = info->var.xres - image->width - tmp;
|
||||
} else if (rotate == FB_ROTATE_CCW) {
|
||||
fb_rotate_logo_ccw(image->data, dst, image->width,
|
||||
image->height);
|
||||
tmp = image->width;
|
||||
image->width = image->height;
|
||||
image->height = tmp;
|
||||
swap(image->width, image->height);
|
||||
tmp = image->dx;
|
||||
image->dx = image->dy;
|
||||
image->dy = info->var.yres - image->height - tmp;
|
||||
|
||||
@@ -1354,10 +1354,9 @@ static int fb_probe(struct platform_device *device)
|
||||
return PTR_ERR(da8xx_fb_reg_base);
|
||||
|
||||
tmp_lcdc_clk = devm_clk_get(&device->dev, "fck");
|
||||
if (IS_ERR(tmp_lcdc_clk)) {
|
||||
dev_err(&device->dev, "Can not get device clock\n");
|
||||
return PTR_ERR(tmp_lcdc_clk);
|
||||
}
|
||||
if (IS_ERR(tmp_lcdc_clk))
|
||||
return dev_err_probe(&device->dev, PTR_ERR(tmp_lcdc_clk),
|
||||
"Can not get device clock\n");
|
||||
|
||||
pm_runtime_enable(&device->dev);
|
||||
pm_runtime_get_sync(&device->dev);
|
||||
|
||||
@@ -1083,6 +1083,8 @@ static int imxfb_remove(struct platform_device *pdev)
|
||||
struct resource *res;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res)
|
||||
return -EINVAL;
|
||||
|
||||
imxfb_disable_controller(fbi);
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ u32 ProgramClock(u32 refClock,
|
||||
u32 ulScore, ulPhaseScore, ulVcoScore;
|
||||
u32 ulTmp = 0, ulVCO;
|
||||
u32 ulScaleClockReq, ulMinClock, ulMaxClock;
|
||||
u32 ODValues[] = { 1, 2, 0 };
|
||||
static const unsigned char ODValues[] = { 1, 2, 0 };
|
||||
|
||||
/* Translate clock in Hz */
|
||||
coreClock *= 100; /* in Hz */
|
||||
|
||||
@@ -1377,7 +1377,7 @@ static struct video_board vbG200 = {
|
||||
.lowlevel = &matrox_G100
|
||||
};
|
||||
static struct video_board vbG200eW = {
|
||||
.maxvram = 0x800000,
|
||||
.maxvram = 0x100000,
|
||||
.maxdisplayable = 0x800000,
|
||||
.accelID = FB_ACCEL_MATROX_MGAG200,
|
||||
.lowlevel = &matrox_G100
|
||||
|
||||
@@ -132,7 +132,7 @@ static void mb86290fb_imageblit8(u32 *cmd, u16 step, u16 dx, u16 dy,
|
||||
cmd[2] = (height << 16) | width;
|
||||
|
||||
i = 0;
|
||||
line = ptr = image->data;
|
||||
line = image->data;
|
||||
bytes = image->width;
|
||||
|
||||
while (i < height) {
|
||||
|
||||
@@ -514,7 +514,8 @@ static int mmphw_probe(struct platform_device *pdev)
|
||||
/* get clock */
|
||||
ctrl->clk = devm_clk_get(ctrl->dev, mi->clk_name);
|
||||
if (IS_ERR(ctrl->clk)) {
|
||||
dev_err(ctrl->dev, "unable to get clk %s\n", mi->clk_name);
|
||||
dev_err_probe(ctrl->dev, ret,
|
||||
"unable to get clk %s\n", mi->clk_name);
|
||||
ret = -ENOENT;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ static int nvidia_setup_i2c_bus(struct nvidia_i2c_chan *chan, const char *name,
|
||||
{
|
||||
int rc;
|
||||
|
||||
strcpy(chan->adapter.name, name);
|
||||
strscpy(chan->adapter.name, name, sizeof(chan->adapter.name));
|
||||
chan->adapter.owner = THIS_MODULE;
|
||||
chan->adapter.class = i2c_class;
|
||||
chan->adapter.algo_data = &chan->algo;
|
||||
|
||||
@@ -387,7 +387,7 @@ static int ocfb_remove(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct of_device_id ocfb_match[] = {
|
||||
static const struct of_device_id ocfb_match[] = {
|
||||
{ .compatible = "opencores,ocfb", },
|
||||
{},
|
||||
};
|
||||
|
||||
@@ -412,7 +412,7 @@ static void __init offb_init_fb(const char *name,
|
||||
|
||||
info = framebuffer_alloc(sizeof(u32) * 16, NULL);
|
||||
|
||||
if (info == 0) {
|
||||
if (!info) {
|
||||
release_mem_region(res_start, res_size);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -131,18 +131,14 @@ static int ams_delta_panel_probe(struct platform_device *pdev)
|
||||
int ret;
|
||||
|
||||
gpiod_vblen = devm_gpiod_get(&pdev->dev, "vblen", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(gpiod_vblen)) {
|
||||
ret = PTR_ERR(gpiod_vblen);
|
||||
dev_err(&pdev->dev, "VBLEN GPIO request failed (%d)\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (IS_ERR(gpiod_vblen))
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(gpiod_vblen),
|
||||
"VBLEN GPIO request failed\n");
|
||||
|
||||
gpiod_ndisp = devm_gpiod_get(&pdev->dev, "ndisp", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(gpiod_ndisp)) {
|
||||
ret = PTR_ERR(gpiod_ndisp);
|
||||
dev_err(&pdev->dev, "NDISP GPIO request failed (%d)\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (IS_ERR(gpiod_ndisp))
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(gpiod_ndisp),
|
||||
"NDISP GPIO request failed\n");
|
||||
|
||||
#ifdef CONFIG_LCD_CLASS_DEVICE
|
||||
lcd_device = lcd_device_register("omapfb", &pdev->dev, NULL,
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/sysfs.h>
|
||||
|
||||
#include <linux/omap-dma.h>
|
||||
|
||||
@@ -1303,7 +1304,7 @@ static ssize_t omapfb_show_panel_name(struct device *dev,
|
||||
{
|
||||
struct omapfb_device *fbdev = dev_get_drvdata(dev);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%s\n", fbdev->panel->name);
|
||||
return sysfs_emit(buf, "%s\n", fbdev->panel->name);
|
||||
}
|
||||
|
||||
static ssize_t omapfb_show_bklight_level(struct device *dev,
|
||||
@@ -1314,8 +1315,8 @@ static ssize_t omapfb_show_bklight_level(struct device *dev,
|
||||
int r;
|
||||
|
||||
if (fbdev->panel->get_bklight_level) {
|
||||
r = snprintf(buf, PAGE_SIZE, "%d\n",
|
||||
fbdev->panel->get_bklight_level(fbdev->panel));
|
||||
r = sysfs_emit(buf, "%d\n",
|
||||
fbdev->panel->get_bklight_level(fbdev->panel));
|
||||
} else
|
||||
r = -ENODEV;
|
||||
return r;
|
||||
@@ -1348,8 +1349,8 @@ static ssize_t omapfb_show_bklight_max(struct device *dev,
|
||||
int r;
|
||||
|
||||
if (fbdev->panel->get_bklight_level) {
|
||||
r = snprintf(buf, PAGE_SIZE, "%d\n",
|
||||
fbdev->panel->get_bklight_max(fbdev->panel));
|
||||
r = sysfs_emit(buf, "%d\n",
|
||||
fbdev->panel->get_bklight_max(fbdev->panel));
|
||||
} else
|
||||
r = -ENODEV;
|
||||
return r;
|
||||
@@ -1379,7 +1380,7 @@ static ssize_t omapfb_show_ctrl_name(struct device *dev,
|
||||
{
|
||||
struct omapfb_device *fbdev = dev_get_drvdata(dev);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%s\n", fbdev->ctrl->name);
|
||||
return sysfs_emit(buf, "%s\n", fbdev->ctrl->name);
|
||||
}
|
||||
|
||||
static struct device_attribute dev_attr_ctrl_name =
|
||||
|
||||
@@ -246,6 +246,7 @@ static int dvic_probe_of(struct platform_device *pdev)
|
||||
adapter_node = of_parse_phandle(node, "ddc-i2c-bus", 0);
|
||||
if (adapter_node) {
|
||||
adapter = of_get_i2c_adapter_by_node(adapter_node);
|
||||
of_node_put(adapter_node);
|
||||
if (adapter == NULL) {
|
||||
dev_err(&pdev->dev, "failed to parse ddc-i2c-bus\n");
|
||||
omap_dss_put_device(ddata->in);
|
||||
|
||||
@@ -409,7 +409,7 @@ static ssize_t dsicm_num_errors_show(struct device *dev,
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%d\n", errors);
|
||||
return sysfs_emit(buf, "%d\n", errors);
|
||||
}
|
||||
|
||||
static ssize_t dsicm_hw_revision_show(struct device *dev,
|
||||
@@ -439,7 +439,7 @@ static ssize_t dsicm_hw_revision_show(struct device *dev,
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%02x.%02x.%02x\n", id1, id2, id3);
|
||||
return sysfs_emit(buf, "%02x.%02x.%02x\n", id1, id2, id3);
|
||||
}
|
||||
|
||||
static ssize_t dsicm_store_ulps(struct device *dev,
|
||||
@@ -487,7 +487,7 @@ static ssize_t dsicm_show_ulps(struct device *dev,
|
||||
t = ddata->ulps_enabled;
|
||||
mutex_unlock(&ddata->lock);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n", t);
|
||||
return sysfs_emit(buf, "%u\n", t);
|
||||
}
|
||||
|
||||
static ssize_t dsicm_store_ulps_timeout(struct device *dev,
|
||||
@@ -532,7 +532,7 @@ static ssize_t dsicm_show_ulps_timeout(struct device *dev,
|
||||
t = ddata->ulps_timeout;
|
||||
mutex_unlock(&ddata->lock);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n", t);
|
||||
return sysfs_emit(buf, "%u\n", t);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(num_dsi_errors, S_IRUGO, dsicm_num_errors_show, NULL);
|
||||
|
||||
@@ -244,10 +244,9 @@ static int lb035q02_probe_of(struct spi_device *spi)
|
||||
struct gpio_desc *gpio;
|
||||
|
||||
gpio = devm_gpiod_get(&spi->dev, "enable", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(gpio)) {
|
||||
dev_err(&spi->dev, "failed to parse enable gpio\n");
|
||||
return PTR_ERR(gpio);
|
||||
}
|
||||
if (IS_ERR(gpio))
|
||||
return dev_err_probe(&spi->dev, PTR_ERR(gpio),
|
||||
"failed to parse enable gpio\n");
|
||||
|
||||
ddata->enable_gpio = gpio;
|
||||
|
||||
|
||||
@@ -211,10 +211,9 @@ static int sharp_ls_probe_of(struct platform_device *pdev)
|
||||
int r;
|
||||
|
||||
ddata->vcc = devm_regulator_get(&pdev->dev, "envdd");
|
||||
if (IS_ERR(ddata->vcc)) {
|
||||
dev_err(&pdev->dev, "failed to get regulator\n");
|
||||
return PTR_ERR(ddata->vcc);
|
||||
}
|
||||
if (IS_ERR(ddata->vcc))
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(ddata->vcc),
|
||||
"failed to get regulator\n");
|
||||
|
||||
/* lcd INI */
|
||||
r = sharp_ls_get_gpio_of(&pdev->dev, 0, 0, "enable", &ddata->ini_gpio);
|
||||
|
||||
@@ -476,7 +476,7 @@ static ssize_t show_cabc_available_modes(struct device *dev,
|
||||
int i;
|
||||
|
||||
if (!ddata->has_cabc)
|
||||
return snprintf(buf, PAGE_SIZE, "%s\n", cabc_modes[0]);
|
||||
return sysfs_emit(buf, "%s\n", cabc_modes[0]);
|
||||
|
||||
for (i = 0, len = 0;
|
||||
len < PAGE_SIZE && i < ARRAY_SIZE(cabc_modes); i++)
|
||||
|
||||
@@ -169,7 +169,7 @@ static ssize_t tpo_td043_vmirror_show(struct device *dev,
|
||||
{
|
||||
struct panel_drv_data *ddata = dev_get_drvdata(dev);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%d\n", ddata->vmirror);
|
||||
return sysfs_emit(buf, "%d\n", ddata->vmirror);
|
||||
}
|
||||
|
||||
static ssize_t tpo_td043_vmirror_store(struct device *dev,
|
||||
@@ -199,7 +199,7 @@ static ssize_t tpo_td043_mode_show(struct device *dev,
|
||||
{
|
||||
struct panel_drv_data *ddata = dev_get_drvdata(dev);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%d\n", ddata->mode);
|
||||
return sysfs_emit(buf, "%d\n", ddata->mode);
|
||||
}
|
||||
|
||||
static ssize_t tpo_td043_mode_store(struct device *dev,
|
||||
@@ -517,8 +517,7 @@ static int tpo_td043_probe(struct spi_device *spi)
|
||||
|
||||
ddata->vcc_reg = devm_regulator_get(&spi->dev, "vcc");
|
||||
if (IS_ERR(ddata->vcc_reg)) {
|
||||
dev_err(&spi->dev, "failed to get LCD VCC regulator\n");
|
||||
r = PTR_ERR(ddata->vcc_reg);
|
||||
r = dev_err_probe(&spi->dev, r, "failed to get LCD VCC regulator\n");
|
||||
goto err_regulator;
|
||||
}
|
||||
|
||||
|
||||
@@ -265,6 +265,7 @@ static struct attribute *display_sysfs_attrs[] = {
|
||||
&display_attr_wss.attr,
|
||||
NULL
|
||||
};
|
||||
ATTRIBUTE_GROUPS(display_sysfs);
|
||||
|
||||
static ssize_t display_attr_show(struct kobject *kobj, struct attribute *attr,
|
||||
char *buf)
|
||||
@@ -303,7 +304,7 @@ static const struct sysfs_ops display_sysfs_ops = {
|
||||
|
||||
static struct kobj_type display_ktype = {
|
||||
.sysfs_ops = &display_sysfs_ops,
|
||||
.default_attrs = display_sysfs_attrs,
|
||||
.default_groups = display_sysfs_groups,
|
||||
};
|
||||
|
||||
int display_init_sysfs(struct platform_device *pdev)
|
||||
|
||||
@@ -457,6 +457,7 @@ static struct attribute *manager_sysfs_attrs[] = {
|
||||
&manager_attr_cpr_coef.attr,
|
||||
NULL
|
||||
};
|
||||
ATTRIBUTE_GROUPS(manager_sysfs);
|
||||
|
||||
static ssize_t manager_attr_show(struct kobject *kobj, struct attribute *attr,
|
||||
char *buf)
|
||||
@@ -495,7 +496,7 @@ static const struct sysfs_ops manager_sysfs_ops = {
|
||||
|
||||
static struct kobj_type manager_ktype = {
|
||||
.sysfs_ops = &manager_sysfs_ops,
|
||||
.default_attrs = manager_sysfs_attrs,
|
||||
.default_groups = manager_sysfs_groups,
|
||||
};
|
||||
|
||||
int dss_manager_kobj_init(struct omap_overlay_manager *mgr,
|
||||
|
||||
@@ -390,6 +390,7 @@ static struct attribute *overlay_sysfs_attrs[] = {
|
||||
&overlay_attr_zorder.attr,
|
||||
NULL
|
||||
};
|
||||
ATTRIBUTE_GROUPS(overlay_sysfs);
|
||||
|
||||
static ssize_t overlay_attr_show(struct kobject *kobj, struct attribute *attr,
|
||||
char *buf)
|
||||
@@ -428,7 +429,7 @@ static const struct sysfs_ops overlay_sysfs_ops = {
|
||||
|
||||
static struct kobj_type overlay_ktype = {
|
||||
.sysfs_ops = &overlay_sysfs_ops,
|
||||
.default_attrs = overlay_sysfs_attrs,
|
||||
.default_groups = overlay_sysfs_groups,
|
||||
};
|
||||
|
||||
int dss_overlay_kobj_init(struct omap_overlay *ovl,
|
||||
|
||||
@@ -1854,7 +1854,6 @@ static void omapfb_free_resources(struct omapfb2_device *fbdev)
|
||||
}
|
||||
|
||||
if (fbdev->auto_update_wq != NULL) {
|
||||
flush_workqueue(fbdev->auto_update_wq);
|
||||
destroy_workqueue(fbdev->auto_update_wq);
|
||||
fbdev->auto_update_wq = NULL;
|
||||
}
|
||||
|
||||
@@ -593,8 +593,8 @@ static void pxa168fb_init_mode(struct fb_info *info,
|
||||
static int pxa168fb_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct pxa168fb_mach_info *mi;
|
||||
struct fb_info *info = 0;
|
||||
struct pxa168fb_info *fbi = 0;
|
||||
struct fb_info *info = NULL;
|
||||
struct pxa168fb_info *fbi = NULL;
|
||||
struct resource *res;
|
||||
struct clk *clk;
|
||||
int irq, ret;
|
||||
@@ -606,10 +606,9 @@ static int pxa168fb_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
clk = devm_clk_get(&pdev->dev, "LCDCLK");
|
||||
if (IS_ERR(clk)) {
|
||||
dev_err(&pdev->dev, "unable to get LCDCLK");
|
||||
return PTR_ERR(clk);
|
||||
}
|
||||
if (IS_ERR(clk))
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(clk),
|
||||
"unable to get LCDCLK");
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (res == NULL) {
|
||||
@@ -618,10 +617,8 @@ static int pxa168fb_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0) {
|
||||
dev_err(&pdev->dev, "no IRQ defined\n");
|
||||
if (irq < 0)
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
info = framebuffer_alloc(sizeof(struct pxa168fb_info), &pdev->dev);
|
||||
if (info == NULL) {
|
||||
|
||||
@@ -606,17 +606,13 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)
|
||||
|
||||
/* enable the clock */
|
||||
priv->clk = devm_clk_get(dev, NULL);
|
||||
if (IS_ERR(priv->clk)) {
|
||||
dev_err(dev, "failed to get clock\n");
|
||||
return PTR_ERR(priv->clk);
|
||||
}
|
||||
if (IS_ERR(priv->clk))
|
||||
return dev_err_probe(dev, PTR_ERR(priv->clk), "failed to get clock\n");
|
||||
|
||||
/* request the IRQ */
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0) {
|
||||
dev_err(dev, "no IRQ defined: %d\n", irq);
|
||||
if (irq < 0)
|
||||
return irq;
|
||||
}
|
||||
|
||||
ret = devm_request_irq(dev, irq, pxa3xx_gcu_handle_irq,
|
||||
0, DRV_NAME, priv);
|
||||
|
||||
@@ -1360,7 +1360,6 @@ static int s3c_fb_probe(struct platform_device *pdev)
|
||||
struct device *dev = &pdev->dev;
|
||||
struct s3c_fb_platdata *pd;
|
||||
struct s3c_fb *sfb;
|
||||
struct resource *res;
|
||||
int win;
|
||||
int ret = 0;
|
||||
u32 reg;
|
||||
@@ -1392,18 +1391,17 @@ static int s3c_fb_probe(struct platform_device *pdev)
|
||||
spin_lock_init(&sfb->slock);
|
||||
|
||||
sfb->bus_clk = devm_clk_get(dev, "lcd");
|
||||
if (IS_ERR(sfb->bus_clk)) {
|
||||
dev_err(dev, "failed to get bus clock\n");
|
||||
return PTR_ERR(sfb->bus_clk);
|
||||
}
|
||||
if (IS_ERR(sfb->bus_clk))
|
||||
return dev_err_probe(dev, PTR_ERR(sfb->bus_clk),
|
||||
"failed to get bus clock\n");
|
||||
|
||||
clk_prepare_enable(sfb->bus_clk);
|
||||
|
||||
if (!sfb->variant.has_clksel) {
|
||||
sfb->lcd_clk = devm_clk_get(dev, "sclk_fimd");
|
||||
if (IS_ERR(sfb->lcd_clk)) {
|
||||
dev_err(dev, "failed to get lcd clock\n");
|
||||
ret = PTR_ERR(sfb->lcd_clk);
|
||||
ret = dev_err_probe(dev, PTR_ERR(sfb->lcd_clk),
|
||||
"failed to get lcd clock\n");
|
||||
goto err_bus_clk;
|
||||
}
|
||||
|
||||
@@ -1418,13 +1416,12 @@ static int s3c_fb_probe(struct platform_device *pdev)
|
||||
goto err_lcd_clk;
|
||||
}
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
if (!res) {
|
||||
dev_err(dev, "failed to acquire irq resource\n");
|
||||
sfb->irq_no = platform_get_irq(pdev, 0);
|
||||
if (sfb->irq_no < 0) {
|
||||
ret = -ENOENT;
|
||||
goto err_lcd_clk;
|
||||
}
|
||||
sfb->irq_no = res->start;
|
||||
|
||||
ret = devm_request_irq(dev, sfb->irq_no, s3c_fb_irq,
|
||||
0, "s3c_fb", sfb);
|
||||
if (ret) {
|
||||
@@ -1810,4 +1807,3 @@ module_platform_driver(s3c_fb_driver);
|
||||
MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
|
||||
MODULE_DESCRIPTION("Samsung S3C SoC Framebuffer driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:s3c-fb");
|
||||
|
||||
@@ -195,7 +195,6 @@ struct savagefb_par {
|
||||
struct savage_reg initial;
|
||||
struct vgastate vgastate;
|
||||
struct mutex open_lock;
|
||||
unsigned char *edid;
|
||||
u32 pseudo_palette[16];
|
||||
u32 open_count;
|
||||
int paletteEnabled;
|
||||
|
||||
@@ -2170,6 +2170,7 @@ static int savagefb_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
struct fb_info *info;
|
||||
struct savagefb_par *par;
|
||||
u_int h_sync, v_sync;
|
||||
unsigned char __maybe_unused *edid;
|
||||
int err, lpitch;
|
||||
int video_len;
|
||||
|
||||
@@ -2212,9 +2213,9 @@ static int savagefb_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
INIT_LIST_HEAD(&info->modelist);
|
||||
#if defined(CONFIG_FB_SAVAGE_I2C)
|
||||
savagefb_create_i2c_busses(info);
|
||||
savagefb_probe_i2c_connector(info, &par->edid);
|
||||
fb_edid_to_monspecs(par->edid, &info->monspecs);
|
||||
kfree(par->edid);
|
||||
savagefb_probe_i2c_connector(info, &edid);
|
||||
fb_edid_to_monspecs(edid, &info->monspecs);
|
||||
kfree(edid);
|
||||
fb_videomode_to_modelist(info->monspecs.modedb,
|
||||
info->monspecs.modedb_len,
|
||||
&info->modelist);
|
||||
|
||||
@@ -213,7 +213,7 @@ static void sisfb_search_mode(char *name, bool quiet)
|
||||
/* This does some fuzzy mode naming detection */
|
||||
if(sscanf(strbuf1, "%u %u %u %u", &xres, &yres, &depth, &rate) == 4) {
|
||||
if((rate <= 32) || (depth > 32)) {
|
||||
j = rate; rate = depth; depth = j;
|
||||
swap(rate, depth);
|
||||
}
|
||||
sprintf(strbuf, "%ux%ux%u", xres, yres, depth);
|
||||
nameptr = strbuf;
|
||||
|
||||
@@ -1047,7 +1047,7 @@ static ssize_t smtcfb_read(struct fb_info *info, char __user *buf,
|
||||
if (count + p > total_size)
|
||||
count = total_size - p;
|
||||
|
||||
buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
|
||||
buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
|
||||
if (!buffer)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -1059,24 +1059,13 @@ static ssize_t smtcfb_read(struct fb_info *info, char __user *buf,
|
||||
while (count) {
|
||||
c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
|
||||
dst = buffer;
|
||||
for (i = c >> 2; i--;) {
|
||||
*dst = fb_readl(src++);
|
||||
*dst = big_swap(*dst);
|
||||
dst++;
|
||||
}
|
||||
if (c & 3) {
|
||||
u8 *dst8 = (u8 *)dst;
|
||||
u8 __iomem *src8 = (u8 __iomem *)src;
|
||||
for (i = (c + 3) >> 2; i--;) {
|
||||
u32 val;
|
||||
|
||||
for (i = c & 3; i--;) {
|
||||
if (i & 1) {
|
||||
*dst8++ = fb_readb(++src8);
|
||||
} else {
|
||||
*dst8++ = fb_readb(--src8);
|
||||
src8 += 2;
|
||||
}
|
||||
}
|
||||
src = (u32 __iomem *)src8;
|
||||
val = fb_readl(src);
|
||||
*dst = big_swap(val);
|
||||
src++;
|
||||
dst++;
|
||||
}
|
||||
|
||||
if (copy_to_user(buf, buffer, c)) {
|
||||
@@ -1130,7 +1119,7 @@ static ssize_t smtcfb_write(struct fb_info *info, const char __user *buf,
|
||||
count = total_size - p;
|
||||
}
|
||||
|
||||
buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
|
||||
buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
|
||||
if (!buffer)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -1148,24 +1137,11 @@ static ssize_t smtcfb_write(struct fb_info *info, const char __user *buf,
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = c >> 2; i--;) {
|
||||
fb_writel(big_swap(*src), dst++);
|
||||
for (i = (c + 3) >> 2; i--;) {
|
||||
fb_writel(big_swap(*src), dst);
|
||||
dst++;
|
||||
src++;
|
||||
}
|
||||
if (c & 3) {
|
||||
u8 *src8 = (u8 *)src;
|
||||
u8 __iomem *dst8 = (u8 __iomem *)dst;
|
||||
|
||||
for (i = c & 3; i--;) {
|
||||
if (i & 1) {
|
||||
fb_writeb(*src8++, ++dst8);
|
||||
} else {
|
||||
fb_writeb(*src8++, --dst8);
|
||||
dst8 += 2;
|
||||
}
|
||||
}
|
||||
dst = (u32 __iomem *)dst8;
|
||||
}
|
||||
|
||||
*ppos += c;
|
||||
buf += c;
|
||||
|
||||
@@ -1656,6 +1656,7 @@ static int ufx_usb_probe(struct usb_interface *interface,
|
||||
info->par = dev;
|
||||
info->pseudo_palette = dev->pseudo_palette;
|
||||
info->fbops = &ufx_ops;
|
||||
INIT_LIST_HEAD(&info->modelist);
|
||||
|
||||
retval = fb_alloc_cmap(&info->cmap, 256, 0);
|
||||
if (retval < 0) {
|
||||
@@ -1666,8 +1667,6 @@ static int ufx_usb_probe(struct usb_interface *interface,
|
||||
INIT_DELAYED_WORK(&dev->free_framebuffer_work,
|
||||
ufx_free_framebuffer_work);
|
||||
|
||||
INIT_LIST_HEAD(&info->modelist);
|
||||
|
||||
retval = ufx_reg_read(dev, 0x3000, &id_rev);
|
||||
check_warn_goto_error(retval, "error %d reading 0x3000 register from device", retval);
|
||||
dev_dbg(dev->gdev, "ID_REV register value 0x%08x", id_rev);
|
||||
|
||||
@@ -658,9 +658,8 @@ static int ssd1307fb_probe(struct i2c_client *client)
|
||||
|
||||
par->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(par->reset)) {
|
||||
dev_err(dev, "failed to get reset gpio: %ld\n",
|
||||
PTR_ERR(par->reset));
|
||||
ret = PTR_ERR(par->reset);
|
||||
ret = dev_err_probe(dev, PTR_ERR(par->reset),
|
||||
"failed to get reset gpio\n");
|
||||
goto fb_alloc_error;
|
||||
}
|
||||
|
||||
@@ -670,7 +669,7 @@ static int ssd1307fb_probe(struct i2c_client *client)
|
||||
if (ret == -ENODEV) {
|
||||
par->vbat_reg = NULL;
|
||||
} else {
|
||||
dev_err(dev, "failed to get VBAT regulator: %d\n", ret);
|
||||
dev_err_probe(dev, ret, "failed to get VBAT regulator\n");
|
||||
goto fb_alloc_error;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1426,7 +1426,7 @@ static ssize_t metrics_bytes_rendered_show(struct device *fbdev,
|
||||
struct device_attribute *a, char *buf) {
|
||||
struct fb_info *fb_info = dev_get_drvdata(fbdev);
|
||||
struct dlfb_data *dlfb = fb_info->par;
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n",
|
||||
return sysfs_emit(buf, "%u\n",
|
||||
atomic_read(&dlfb->bytes_rendered));
|
||||
}
|
||||
|
||||
@@ -1434,7 +1434,7 @@ static ssize_t metrics_bytes_identical_show(struct device *fbdev,
|
||||
struct device_attribute *a, char *buf) {
|
||||
struct fb_info *fb_info = dev_get_drvdata(fbdev);
|
||||
struct dlfb_data *dlfb = fb_info->par;
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n",
|
||||
return sysfs_emit(buf, "%u\n",
|
||||
atomic_read(&dlfb->bytes_identical));
|
||||
}
|
||||
|
||||
@@ -1442,7 +1442,7 @@ static ssize_t metrics_bytes_sent_show(struct device *fbdev,
|
||||
struct device_attribute *a, char *buf) {
|
||||
struct fb_info *fb_info = dev_get_drvdata(fbdev);
|
||||
struct dlfb_data *dlfb = fb_info->par;
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n",
|
||||
return sysfs_emit(buf, "%u\n",
|
||||
atomic_read(&dlfb->bytes_sent));
|
||||
}
|
||||
|
||||
@@ -1450,7 +1450,7 @@ static ssize_t metrics_cpu_kcycles_used_show(struct device *fbdev,
|
||||
struct device_attribute *a, char *buf) {
|
||||
struct fb_info *fb_info = dev_get_drvdata(fbdev);
|
||||
struct dlfb_data *dlfb = fb_info->par;
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n",
|
||||
return sysfs_emit(buf, "%u\n",
|
||||
atomic_read(&dlfb->cpu_kcycles_used));
|
||||
}
|
||||
|
||||
|
||||
@@ -543,7 +543,7 @@ void viafb_lcd_set_mode(const struct fb_var_screeninfo *var, u16 cxres,
|
||||
/* Get panel table Pointer */
|
||||
panel_crt_table = viafb_get_best_mode(panel_hres, panel_vres, 60);
|
||||
viafb_fill_var_timing_info(&panel_var, panel_crt_table);
|
||||
DEBUG_MSG(KERN_INFO "bellow viafb_lcd_set_mode!!\n");
|
||||
DEBUG_MSG(KERN_INFO "below viafb_lcd_set_mode!!\n");
|
||||
if (VT1636_LVDS == plvds_chip_info->lvds_chip_name)
|
||||
viafb_init_lvds_vt1636(plvds_setting_info, plvds_chip_info);
|
||||
clock = PICOS2KHZ(panel_crt_table->pixclock) * 1000;
|
||||
|
||||
@@ -1939,8 +1939,12 @@ static int __init viafb_setup(void)
|
||||
|
||||
if (!strncmp(this_opt, "viafb_mode1=", 12)) {
|
||||
viafb_mode1 = kstrdup(this_opt + 12, GFP_KERNEL);
|
||||
if (!viafb_mode1)
|
||||
return -ENOMEM;
|
||||
} else if (!strncmp(this_opt, "viafb_mode=", 11)) {
|
||||
viafb_mode = kstrdup(this_opt + 11, GFP_KERNEL);
|
||||
if (!viafb_mode)
|
||||
return -ENOMEM;
|
||||
} else if (!strncmp(this_opt, "viafb_bpp1=", 11)) {
|
||||
if (kstrtouint(this_opt + 11, 0, &viafb_bpp1) < 0)
|
||||
return -EINVAL;
|
||||
@@ -1969,6 +1973,8 @@ static int __init viafb_setup(void)
|
||||
return -EINVAL;
|
||||
} else if (!strncmp(this_opt, "viafb_active_dev=", 17)) {
|
||||
viafb_active_dev = kstrdup(this_opt + 17, GFP_KERNEL);
|
||||
if (!viafb_active_dev)
|
||||
return -ENOMEM;
|
||||
} else if (!strncmp(this_opt,
|
||||
"viafb_display_hardware_layout=", 30)) {
|
||||
if (kstrtoint(this_opt + 30, 0,
|
||||
@@ -1995,8 +2001,12 @@ static int __init viafb_setup(void)
|
||||
return -EINVAL;
|
||||
} else if (!strncmp(this_opt, "viafb_lcd_port=", 15)) {
|
||||
viafb_lcd_port = kstrdup(this_opt + 15, GFP_KERNEL);
|
||||
if (!viafb_lcd_port)
|
||||
return -ENOMEM;
|
||||
} else if (!strncmp(this_opt, "viafb_dvi_port=", 15)) {
|
||||
viafb_dvi_port = kstrdup(this_opt + 15, GFP_KERNEL);
|
||||
if (!viafb_dvi_port)
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -770,12 +770,18 @@ out:
|
||||
fb_dealloc_cmap(&info->cmap);
|
||||
kfree(info->pseudo_palette);
|
||||
}
|
||||
if (remapped_fbuf != NULL)
|
||||
if (remapped_fbuf != NULL) {
|
||||
iounmap(remapped_fbuf);
|
||||
if (remapped_regs != NULL)
|
||||
remapped_fbuf = NULL;
|
||||
}
|
||||
if (remapped_regs != NULL) {
|
||||
iounmap(remapped_regs);
|
||||
if (remapped_base != NULL)
|
||||
remapped_regs = NULL;
|
||||
}
|
||||
if (remapped_base != NULL) {
|
||||
iounmap(remapped_base);
|
||||
remapped_base = NULL;
|
||||
}
|
||||
if (info)
|
||||
framebuffer_release(info);
|
||||
return err;
|
||||
@@ -795,8 +801,11 @@ static int w100fb_remove(struct platform_device *pdev)
|
||||
fb_dealloc_cmap(&info->cmap);
|
||||
|
||||
iounmap(remapped_base);
|
||||
remapped_base = NULL;
|
||||
iounmap(remapped_regs);
|
||||
remapped_regs = NULL;
|
||||
iounmap(remapped_fbuf);
|
||||
remapped_fbuf = NULL;
|
||||
|
||||
framebuffer_release(info);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user