Commit 09fd671c authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'fbdev-4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux

Pull fbdev updates from Tomi Valkeinen:

 - Miscallaneous small fixes to various fbdev drivers

 - Remove fb_rotate, which was never used

 - pmag fb improvements

* tag 'fbdev-4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux: (21 commits)
  xen kconfig: don't "select INPUT_XEN_KBDDEV_FRONTEND"
  video: fbdev: sis: remove unused variable
  drivers/video: make fbdev/sunxvr2500.c explicitly non-modular
  drivers/video: make fbdev/sunxvr1000.c explicitly non-modular
  drivers/video: make fbdev/sunxvr500.c explicitly non-modular
  video: exynos: fix modular build
  fbdev: da8xx-fb: fix videomodes of lcd panels
  fbdev: kill fb_rotate
  video: fbdev: bt431: Correct cursor format control macro
  video: fbdev: pmag-ba-fb: Optimize Bt455 colormap addressing
  video: fbdev: pmag-ba-fb: Fix and rework Bt455 colormap handling
  video: fbdev: bt455: Remove unneeded colormap helpers for cursor support
  video: fbdev: pmag-aa-fb: Report video timings
  video: fbdev: pmag-aa-fb: Enable building as a module
  video: fbdev: pmag-aa-fb: Adapt to current APIs
  video: fbdev: pmag-ba-fb: Fix the lower margin size
  fbdev: sh_mobile_lcdc: Use ARCH_RENESAS
  fbdev: n411: check return value
  fbdev: exynos: fix IS_ERR_VALUE usage
  video: Use bool instead int pointer for get_opt_bool() argument
  ...
parents bace3db5 13aa38e2
...@@ -1808,8 +1808,8 @@ config FB_HIT ...@@ -1808,8 +1808,8 @@ config FB_HIT
frame buffer card. frame buffer card.
config FB_PMAG_AA config FB_PMAG_AA
bool "PMAG-AA TURBOchannel framebuffer support" tristate "PMAG-AA TURBOchannel framebuffer support"
depends on (FB = y) && TC depends on FB && TC
select FB_CFB_FILLRECT select FB_CFB_FILLRECT
select FB_CFB_COPYAREA select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
...@@ -1985,7 +1985,7 @@ config FB_W100 ...@@ -1985,7 +1985,7 @@ config FB_W100
config FB_SH_MOBILE_LCDC config FB_SH_MOBILE_LCDC
tristate "SuperH Mobile LCDC framebuffer support" tristate "SuperH Mobile LCDC framebuffer support"
depends on FB && (SUPERH || ARCH_SHMOBILE) && HAVE_CLK depends on FB && (SUPERH || ARCH_RENESAS) && HAVE_CLK
depends on FB_SH_MOBILE_MERAM || !FB_SH_MOBILE_MERAM depends on FB_SH_MOBILE_MERAM || !FB_SH_MOBILE_MERAM
select FB_SYS_FILLRECT select FB_SYS_FILLRECT
select FB_SYS_COPYAREA select FB_SYS_COPYAREA
...@@ -2246,7 +2246,6 @@ config XEN_FBDEV_FRONTEND ...@@ -2246,7 +2246,6 @@ config XEN_FBDEV_FRONTEND
select FB_SYS_IMAGEBLIT select FB_SYS_IMAGEBLIT
select FB_SYS_FOPS select FB_SYS_FOPS
select FB_DEFERRED_IO select FB_DEFERRED_IO
select INPUT_XEN_KBDDEV_FRONTEND if INPUT_MISC
select XEN_XENBUS_FRONTEND select XEN_XENBUS_FRONTEND
default y default y
help help
......
...@@ -313,9 +313,6 @@ extern unsigned char fontdata_8x16[]; ...@@ -313,9 +313,6 @@ extern unsigned char fontdata_8x16[];
* * Draws cursor * * * Draws cursor *
* int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor); * int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor);
* *
* * Rotates the display *
* void (*fb_rotate)(struct fb_info *info, int angle);
*
* * wait for blit idle, optional * * * wait for blit idle, optional *
* int (*fb_sync)(struct fb_info *info); * int (*fb_sync)(struct fb_info *info);
* *
......
...@@ -334,27 +334,6 @@ int au1100fb_fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *fbi) ...@@ -334,27 +334,6 @@ int au1100fb_fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *fbi)
return 0; return 0;
} }
/* fb_rotate
* Rotate the display of this angle. This doesn't seems to be used by the core,
* but as our hardware supports it, so why not implementing it...
*/
void au1100fb_fb_rotate(struct fb_info *fbi, int angle)
{
struct au1100fb_device *fbdev = to_au1100fb_device(fbi);
print_dbg("fb_rotate %p %d", fbi, angle);
if (fbdev && (angle > 0) && !(angle % 90)) {
fbdev->regs->lcd_control &= ~LCD_CONTROL_GO;
fbdev->regs->lcd_control &= ~(LCD_CONTROL_SM_MASK);
fbdev->regs->lcd_control |= ((angle/90) << LCD_CONTROL_SM_BIT);
fbdev->regs->lcd_control |= LCD_CONTROL_GO;
}
}
/* fb_mmap /* fb_mmap
* Map video memory in user space. We don't use the generic fb_mmap method mainly * Map video memory in user space. We don't use the generic fb_mmap method mainly
* to allow the use of the TLB streaming flag (CCA=6) * to allow the use of the TLB streaming flag (CCA=6)
...@@ -380,7 +359,6 @@ static struct fb_ops au1100fb_ops = ...@@ -380,7 +359,6 @@ static struct fb_ops au1100fb_ops =
.fb_fillrect = cfb_fillrect, .fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea, .fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit, .fb_imageblit = cfb_imageblit,
.fb_rotate = au1100fb_fb_rotate,
.fb_mmap = au1100fb_fb_mmap, .fb_mmap = au1100fb_fb_mmap,
}; };
......
...@@ -554,28 +554,6 @@ static int bfin_lq035_fb_check_var(struct fb_var_screeninfo *var, ...@@ -554,28 +554,6 @@ static int bfin_lq035_fb_check_var(struct fb_var_screeninfo *var,
return 0; return 0;
} }
/* fb_rotate
* Rotate the display of this angle. This doesn't seems to be used by the core,
* but as our hardware supports it, so why not implementing it...
*/
static void bfin_lq035_fb_rotate(struct fb_info *fbi, int angle)
{
pr_debug("%s: %p %d", __func__, fbi, angle);
#if (defined(UD) && defined(LBR))
switch (angle) {
case 180:
gpio_set_value(LBR, 0);
gpio_set_value(UD, 1);
break;
default:
gpio_set_value(LBR, 1);
gpio_set_value(UD, 0);
break;
}
#endif
}
static int bfin_lq035_fb_cursor(struct fb_info *info, struct fb_cursor *cursor) static int bfin_lq035_fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
{ {
if (nocursor) if (nocursor)
...@@ -623,7 +601,6 @@ static struct fb_ops bfin_lq035_fb_ops = { ...@@ -623,7 +601,6 @@ static struct fb_ops bfin_lq035_fb_ops = {
.fb_open = bfin_lq035_fb_open, .fb_open = bfin_lq035_fb_open,
.fb_release = bfin_lq035_fb_release, .fb_release = bfin_lq035_fb_release,
.fb_check_var = bfin_lq035_fb_check_var, .fb_check_var = bfin_lq035_fb_check_var,
.fb_rotate = bfin_lq035_fb_rotate,
.fb_fillrect = cfb_fillrect, .fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea, .fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit, .fb_imageblit = cfb_imageblit,
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
* linux/drivers/video/bt431.h * linux/drivers/video/bt431.h
* *
* Copyright 2003 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de> * Copyright 2003 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
* Copyright 2016 Maciej W. Rozycki <macro@linux-mips.org>
* *
* This file is subject to the terms and conditions of the GNU General * This file is subject to the terms and conditions of the GNU General
* Public License. See the file COPYING in the main directory of this * Public License. See the file COPYING in the main directory of this
...@@ -9,6 +10,8 @@ ...@@ -9,6 +10,8 @@
*/ */
#include <linux/types.h> #include <linux/types.h>
#define BT431_CURSOR_SIZE 64
/* /*
* Bt431 cursor generator registers, 32-bit aligned. * Bt431 cursor generator registers, 32-bit aligned.
* Two twin Bt431 are used on the DECstation's PMAG-AA. * Two twin Bt431 are used on the DECstation's PMAG-AA.
...@@ -60,7 +63,7 @@ static inline u8 bt431_get_value(u16 val) ...@@ -60,7 +63,7 @@ static inline u8 bt431_get_value(u16 val)
#define BT431_CMD_CURS_ENABLE 0x40 #define BT431_CMD_CURS_ENABLE 0x40
#define BT431_CMD_XHAIR_ENABLE 0x20 #define BT431_CMD_XHAIR_ENABLE 0x20
#define BT431_CMD_OR_CURSORS 0x10 #define BT431_CMD_OR_CURSORS 0x10
#define BT431_CMD_AND_CURSORS 0x00 #define BT431_CMD_XOR_CURSORS 0x00
#define BT431_CMD_1_1_MUX 0x00 #define BT431_CMD_1_1_MUX 0x00
#define BT431_CMD_4_1_MUX 0x04 #define BT431_CMD_4_1_MUX 0x04
#define BT431_CMD_5_1_MUX 0x08 #define BT431_CMD_5_1_MUX 0x08
...@@ -196,28 +199,30 @@ static inline void bt431_position_cursor(struct bt431_regs *regs, u16 x, u16 y) ...@@ -196,28 +199,30 @@ static inline void bt431_position_cursor(struct bt431_regs *regs, u16 x, u16 y)
bt431_write_reg_inc(regs, (y >> 8) & 0x0f); /* BT431_REG_CYHI */ bt431_write_reg_inc(regs, (y >> 8) & 0x0f); /* BT431_REG_CYHI */
} }
static inline void bt431_set_font(struct bt431_regs *regs, u8 fgc, static inline void bt431_set_cursor(struct bt431_regs *regs,
u16 width, u16 height) const char *data, const char *mask,
u16 rop, u16 width, u16 height)
{ {
u16 x, y;
int i; int i;
u16 fgp = fgc ? 0xffff : 0x0000;
u16 bgp = fgc ? 0x0000 : 0xffff;
i = 0;
width = DIV_ROUND_UP(width, 8);
bt431_select_reg(regs, BT431_REG_CRAM_BASE); bt431_select_reg(regs, BT431_REG_CRAM_BASE);
for (i = BT431_REG_CRAM_BASE; i <= BT431_REG_CRAM_END; i++) { for (y = 0; y < BT431_CURSOR_SIZE; y++)
u16 value; for (x = 0; x < BT431_CURSOR_SIZE / 8; x++) {
u16 val = 0;
if (height << 6 <= i << 3)
value = bgp; if (y < height && x < width) {
else if (width <= i % 8 << 3) val = mask[i];
value = bgp; if (rop == ROP_XOR)
else if (((width >> 3) & 0xffff) > i % 8) val = (val << 8) | (val ^ data[i]);
value = fgp; else
else val = (val << 8) | (val & data[i]);
value = fgp & ~(bgp << (width % 8 << 1)); i++;
}
bt431_write_cmap_inc(regs, value); bt431_write_cmap_inc(regs, val);
} }
} }
static inline void bt431_init_cursor(struct bt431_regs *regs) static inline void bt431_init_cursor(struct bt431_regs *regs)
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
* linux/drivers/video/bt455.h * linux/drivers/video/bt455.h
* *
* Copyright 2003 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de> * Copyright 2003 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
* Copyright 2016 Maciej W. Rozycki <macro@linux-mips.org>
* *
* This file is subject to the terms and conditions of the GNU General * This file is subject to the terms and conditions of the GNU General
* Public License. See the file COPYING in the main directory of this * Public License. See the file COPYING in the main directory of this
...@@ -29,66 +30,61 @@ static inline void bt455_select_reg(struct bt455_regs *regs, int ir) ...@@ -29,66 +30,61 @@ static inline void bt455_select_reg(struct bt455_regs *regs, int ir)
regs->addr_cmap = ir & 0x0f; regs->addr_cmap = ir & 0x0f;
} }
static inline void bt455_reset_reg(struct bt455_regs *regs)
{
mb();
regs->addr_clr = 0;
}
/* /*
* Read/write to a Bt455 color map register. * Read/write to a Bt455 color map register.
*/ */
static inline void bt455_read_cmap_entry(struct bt455_regs *regs, int cr, static inline void bt455_read_cmap_next(struct bt455_regs *regs, u8 *grey)
u8* red, u8* green, u8* blue)
{ {
bt455_select_reg(regs, cr);
mb(); mb();
*red = regs->addr_cmap_data & 0x0f; regs->addr_cmap_data;
rmb(); rmb();
*green = regs->addr_cmap_data & 0x0f; *grey = regs->addr_cmap_data & 0xf;
rmb(); rmb();
*blue = regs->addr_cmap_data & 0x0f; regs->addr_cmap_data;
} }
static inline void bt455_write_cmap_entry(struct bt455_regs *regs, int cr, static inline void bt455_write_cmap_next(struct bt455_regs *regs, u8 grey)
u8 red, u8 green, u8 blue)
{ {
bt455_select_reg(regs, cr);
wmb(); wmb();
regs->addr_cmap_data = red & 0x0f; regs->addr_cmap_data = 0x0;
wmb(); wmb();
regs->addr_cmap_data = green & 0x0f; regs->addr_cmap_data = grey & 0xf;
wmb(); wmb();
regs->addr_cmap_data = blue & 0x0f; regs->addr_cmap_data = 0x0;
} }
static inline void bt455_write_ovly_entry(struct bt455_regs *regs, int cr, static inline void bt455_write_ovly_next(struct bt455_regs *regs, u8 grey)
u8 red, u8 green, u8 blue)
{ {
bt455_select_reg(regs, cr);
wmb(); wmb();
regs->addr_ovly = red & 0x0f; regs->addr_ovly = 0x0;
wmb(); wmb();
regs->addr_ovly = green & 0x0f; regs->addr_ovly = grey & 0xf;
wmb(); wmb();
regs->addr_ovly = blue & 0x0f; regs->addr_ovly = 0x0;
} }
static inline void bt455_set_cursor(struct bt455_regs *regs) static inline void bt455_read_cmap_entry(struct bt455_regs *regs,
int cr, u8 *grey)
{ {
mb(); bt455_select_reg(regs, cr);
regs->addr_ovly = 0x0f; bt455_read_cmap_next(regs, grey);
wmb();
regs->addr_ovly = 0x0f;
wmb();
regs->addr_ovly = 0x0f;
} }
static inline void bt455_erase_cursor(struct bt455_regs *regs) static inline void bt455_write_cmap_entry(struct bt455_regs *regs,
int cr, u8 grey)
{ {
/* bt455_write_cmap_entry(regs, 8, 0x00, 0x00, 0x00); */ bt455_select_reg(regs, cr);
/* bt455_write_cmap_entry(regs, 9, 0x00, 0x00, 0x00); */ bt455_write_cmap_next(regs, grey);
bt455_write_ovly_entry(regs, 8, 0x03, 0x03, 0x03); }
bt455_write_ovly_entry(regs, 9, 0x07, 0x07, 0x07);
wmb(); static inline void bt455_write_ovly_entry(struct bt455_regs *regs, u8 grey)
regs->addr_ovly = 0x09; {
wmb(); bt455_reset_reg(regs);
regs->addr_ovly = 0x09; bt455_write_ovly_next(regs, grey);
wmb();
regs->addr_ovly = 0x09;
} }
...@@ -209,8 +209,7 @@ static struct fb_videomode known_lcd_panels[] = { ...@@ -209,8 +209,7 @@ static struct fb_videomode known_lcd_panels[] = {
.lower_margin = 2, .lower_margin = 2,
.hsync_len = 0, .hsync_len = 0,
.vsync_len = 0, .vsync_len = 0,
.sync = FB_SYNC_CLK_INVERT | .sync = FB_SYNC_CLK_INVERT,
FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
}, },
/* Sharp LK043T1DG01 */ /* Sharp LK043T1DG01 */
[1] = { [1] = {
...@@ -224,7 +223,7 @@ static struct fb_videomode known_lcd_panels[] = { ...@@ -224,7 +223,7 @@ static struct fb_videomode known_lcd_panels[] = {
.lower_margin = 2, .lower_margin = 2,
.hsync_len = 41, .hsync_len = 41,
.vsync_len = 10, .vsync_len = 10,
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, .sync = 0,
.flag = 0, .flag = 0,
}, },
[2] = { [2] = {
...@@ -239,7 +238,7 @@ static struct fb_videomode known_lcd_panels[] = { ...@@ -239,7 +238,7 @@ static struct fb_videomode known_lcd_panels[] = {
.lower_margin = 10, .lower_margin = 10,
.hsync_len = 10, .hsync_len = 10,
.vsync_len = 10, .vsync_len = 10,
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, .sync = 0,
.flag = 0, .flag = 0,
}, },
[3] = { [3] = {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# #
menuconfig EXYNOS_VIDEO menuconfig EXYNOS_VIDEO
bool "Exynos Video driver support" tristate "Exynos Video driver support"
depends on ARCH_S5PV210 || ARCH_EXYNOS depends on ARCH_S5PV210 || ARCH_EXYNOS
help help
This enables support for EXYNOS Video device. This enables support for EXYNOS Video device.
...@@ -15,13 +15,13 @@ if EXYNOS_VIDEO ...@@ -15,13 +15,13 @@ if EXYNOS_VIDEO
# #
config EXYNOS_MIPI_DSI config EXYNOS_MIPI_DSI
bool "EXYNOS MIPI DSI driver support." tristate "EXYNOS MIPI DSI driver support."
select GENERIC_PHY select GENERIC_PHY
help help
This enables support for MIPI-DSI device. This enables support for MIPI-DSI device.
config EXYNOS_LCD_S6E8AX0 config EXYNOS_LCD_S6E8AX0
bool "S6E8AX0 MIPI AMOLED LCD Driver" tristate "S6E8AX0 MIPI AMOLED LCD Driver"
depends on EXYNOS_MIPI_DSI && BACKLIGHT_CLASS_DEVICE depends on EXYNOS_MIPI_DSI && BACKLIGHT_CLASS_DEVICE
depends on (LCD_CLASS_DEVICE = y) depends on (LCD_CLASS_DEVICE = y)
default n default n
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
# Makefile for the exynos video drivers. # Makefile for the exynos video drivers.
# #
obj-$(CONFIG_EXYNOS_MIPI_DSI) += exynos_mipi_dsi.o exynos_mipi_dsi_common.o \ obj-$(CONFIG_EXYNOS_MIPI_DSI) += exynos-mipi-dsi-mod.o
exynos_mipi_dsi_lowlevel.o
exynos-mipi-dsi-mod-objs += exynos_mipi_dsi.o exynos_mipi_dsi_common.o \
exynos_mipi_dsi_lowlevel.o
obj-$(CONFIG_EXYNOS_LCD_S6E8AX0) += s6e8ax0.o obj-$(CONFIG_EXYNOS_LCD_S6E8AX0) += s6e8ax0.o
...@@ -263,6 +263,7 @@ int exynos_mipi_dsi_register_lcd_driver(struct mipi_dsim_lcd_driver *lcd_drv) ...@@ -263,6 +263,7 @@ int exynos_mipi_dsi_register_lcd_driver(struct mipi_dsim_lcd_driver *lcd_drv)
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(exynos_mipi_dsi_register_lcd_driver);
static struct mipi_dsim_ddi *exynos_mipi_dsi_bind_lcd_ddi( static struct mipi_dsim_ddi *exynos_mipi_dsi_bind_lcd_ddi(
struct mipi_dsim_device *dsim, struct mipi_dsim_device *dsim,
...@@ -402,12 +403,12 @@ static int exynos_mipi_dsi_probe(struct platform_device *pdev) ...@@ -402,12 +403,12 @@ static int exynos_mipi_dsi_probe(struct platform_device *pdev)
goto error; goto error;
} }
dsim->irq = platform_get_irq(pdev, 0); ret = platform_get_irq(pdev, 0);
if (IS_ERR_VALUE(dsim->irq)) { if (ret < 0) {
dev_err(&pdev->dev, "failed to request dsim irq resource\n"); dev_err(&pdev->dev, "failed to request dsim irq resource\n");
ret = -EINVAL;
goto error; goto error;
} }
dsim->irq = ret;
init_completion(&dsim_wr_comp); init_completion(&dsim_wr_comp);
init_completion(&dsim_rd_comp); init_completion(&dsim_rd_comp);
......
...@@ -302,7 +302,7 @@ static __inline__ int get_opt_int(const char *this_opt, const char *name, ...@@ -302,7 +302,7 @@ static __inline__ int get_opt_int(const char *this_opt, const char *name,
} }
static __inline__ int get_opt_bool(const char *this_opt, const char *name, static __inline__ int get_opt_bool(const char *this_opt, const char *name,
int *ret) bool *ret)
{ {
if (!ret) if (!ret)
return 0; return 0;
......
...@@ -354,7 +354,8 @@ static int metronome_powerup_cmd(struct metronomefb_par *par) ...@@ -354,7 +354,8 @@ static int metronome_powerup_cmd(struct metronomefb_par *par)
} }
/* the rest are 0 */ /* the rest are 0 */
memset((u8 *) (par->metromem_cmd->args + i), 0, (32-i)*2); memset(&par->metromem_cmd->args[i], 0,
(ARRAY_SIZE(par->metromem_cmd->args) - i) * 2);
par->metromem_cmd->csum = cs; par->metromem_cmd->csum = cs;
...@@ -376,7 +377,8 @@ static int metronome_config_cmd(struct metronomefb_par *par) ...@@ -376,7 +377,8 @@ static int metronome_config_cmd(struct metronomefb_par *par)
memcpy(par->metromem_cmd->args, epd_frame_table[par->dt].config, memcpy(par->metromem_cmd->args, epd_frame_table[par->dt].config,
sizeof(epd_frame_table[par->dt].config)); sizeof(epd_frame_table[par->dt].config));
/* the rest are 0 */ /* the rest are 0 */
memset((u8 *) (par->metromem_cmd->args + 4), 0, (32-4)*2); memset(&par->metromem_cmd->args[4], 0,
(ARRAY_SIZE(par->metromem_cmd->args) - 4) * 2);
par->metromem_cmd->csum = 0xCC10; par->metromem_cmd->csum = 0xCC10;
par->metromem_cmd->csum += calc_img_cksum(par->metromem_cmd->args, 4); par->metromem_cmd->csum += calc_img_cksum(par->metromem_cmd->args, 4);
......
...@@ -165,16 +165,22 @@ static int __init n411_init(void) ...@@ -165,16 +165,22 @@ static int __init n411_init(void)
if (!n411_device) if (!n411_device)
return -ENOMEM; return -ENOMEM;
platform_device_add_data(n411_device, &n411_board, sizeof(n411_board)); ret = platform_device_add_data(n411_device, &n411_board,
sizeof(n411_board));
if (ret)
goto put_plat_device;
/* this _add binds hecubafb to n411. hecubafb refcounts n411 */ /* this _add binds hecubafb to n411. hecubafb refcounts n411 */
ret = platform_device_add(n411_device); ret = platform_device_add(n411_device);
if (ret) if (ret)
platform_device_put(n411_device); goto put_plat_device;
return ret; return 0;
put_plat_device:
platform_device_put(n411_device);
return ret;
} }
static void __exit n411_exit(void) static void __exit n411_exit(void)
......
...@@ -594,27 +594,6 @@ static int set_fb_var(struct fb_info *fbi, ...@@ -594,27 +594,6 @@ static int set_fb_var(struct fb_info *fbi,
} }
/* Set rotation (0, 90, 180, 270 degree), and switch to the new mode. */
static void omapfb_rotate(struct fb_info *fbi, int rotate)
{
struct omapfb_plane_struct *plane = fbi->par;
struct omapfb_device *fbdev = plane->fbdev;
omapfb_rqueue_lock(fbdev);
if (rotate != fbi->var.rotate) {
struct fb_var_screeninfo *new_var = &fbdev->new_var;
memcpy(new_var, &fbi->var, sizeof(*new_var));
new_var->rotate = rotate;
if (set_fb_var(fbi, new_var) == 0 &&
memcmp(new_var, &fbi->var, sizeof(*new_var))) {
memcpy(&fbi->var, new_var, sizeof(*new_var));
ctrl_change_mode(fbi);
}
}
omapfb_rqueue_unlock(fbdev);
}
/* /*
* Set new x,y offsets in the virtual display for the visible area and switch * Set new x,y offsets in the virtual display for the visible area and switch
* to the new mode. * to the new mode.
...@@ -1256,7 +1235,6 @@ static struct fb_ops omapfb_ops = { ...@@ -1256,7 +1235,6 @@ static struct fb_ops omapfb_ops = {
.fb_ioctl = omapfb_ioctl, .fb_ioctl = omapfb_ioctl,
.fb_check_var = omapfb_check_var, .fb_check_var = omapfb_check_var,
.fb_set_par = omapfb_set_par, .fb_set_par = omapfb_set_par,
.fb_rotate = omapfb_rotate,
.fb_pan_display = omapfb_pan_display, .fb_pan_display = omapfb_pan_display,
}; };
......
This diff is collapsed.
...@@ -60,7 +60,7 @@ static struct fb_var_screeninfo pmagbafb_defined = { ...@@ -60,7 +60,7 @@ static struct fb_var_screeninfo pmagbafb_defined = {
.left_margin = 116, .left_margin = 116,
.right_margin = 12, .right_margin = 12,
.upper_margin = 34, .upper_margin = 34,
.lower_margin = 12, .lower_margin = 0,
.hsync_len = 128, .hsync_len = 128,
.vsync_len = 3, .vsync_len = 3,
.sync = FB_SYNC_ON_GREEN, .sync = FB_SYNC_ON_GREEN,
......
...@@ -2151,17 +2151,15 @@ SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned shor ...@@ -2151,17 +2151,15 @@ SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned shor
unsigned short RefreshRateTableIndex) unsigned short RefreshRateTableIndex)
{ {
unsigned short CRT2Index, VCLKIndex = 0, VCLKIndexGEN = 0, VCLKIndexGENCRT = 0; unsigned short CRT2Index, VCLKIndex = 0, VCLKIndexGEN = 0, VCLKIndexGENCRT = 0;
unsigned short modeflag, resinfo, tempbx; unsigned short resinfo, tempbx;
const unsigned char *CHTVVCLKPtr = NULL; const unsigned char *CHTVVCLKPtr = NULL;
if(ModeNo <= 0x13) { if(ModeNo <= 0x13) {
modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo; resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
CRT2Index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC; CRT2Index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
VCLKIndexGEN = (SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02)) >> 2) & 0x03; VCLKIndexGEN = (SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02)) >> 2) & 0x03;
VCLKIndexGENCRT = VCLKIndexGEN; VCLKIndexGENCRT = VCLKIndexGEN;
} else { } else {
modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO; resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
CRT2Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC; CRT2Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
VCLKIndexGEN = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK; VCLKIndexGEN = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
...@@ -7270,7 +7268,7 @@ SiS_ShiftXPos(struct SiS_Private *SiS_Pr, int shift) ...@@ -7270,7 +7268,7 @@ SiS_ShiftXPos(struct SiS_Private *SiS_Pr, int shift)
static void static void
SiS_SetGroup4_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex) SiS_SetGroup4_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
{ {
unsigned short temp, temp1, resinfo = 0; unsigned short temp, temp1;
unsigned char *ROMAddr = SiS_Pr->VirtualRomBase; unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
if(!(SiS_Pr->SiS_VBType & VB_SIS30xCLV)) return; if(!(SiS_Pr->SiS_VBType & VB_SIS30xCLV)) return;
...@@ -7282,10 +7280,6 @@ SiS_SetGroup4_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned ...@@ -7282,10 +7280,6 @@ SiS_SetGroup4_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned
if(!(ROMAddr[0x61] & 0x04)) return; if(!(ROMAddr[0x61] & 0x04)) return;
} }
if(ModeNo > 0x13) {
resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
}
SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x3a,0x08); SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x3a,0x08);
temp = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x3a); temp = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x3a);
if(!(temp & 0x01)) { if(!(temp & 0x01)) {
......
...@@ -613,22 +613,6 @@ int xxxfb_cursor(struct fb_info *info, struct fb_cursor *cursor) ...@@ -613,22 +613,6 @@ int xxxfb_cursor(struct fb_info *info, struct fb_cursor *cursor)
*/ */
} }
/**
* xxxfb_rotate - NOT a required function. If your hardware
* supports rotation the whole screen then
* you would provide a hook for this.
*
* @info: frame buffer structure that represents a single frame buffer
* @angle: The angle we rotate the screen.
*
* This operation is used to set or alter the properities of the
* cursor.
*/
void xxxfb_rotate(struct fb_info *info, int angle)
{
/* Will be deprecated */
}
/** /**
* xxxfb_sync - NOT a required function. Normally the accel engine * xxxfb_sync - NOT a required function. Normally the accel engine
* for a graphics card take a specific amount of time. * for a graphics card take a specific amount of time.
...@@ -665,7 +649,6 @@ static struct fb_ops xxxfb_ops = { ...@@ -665,7 +649,6 @@ static struct fb_ops xxxfb_ops = {
.fb_copyarea = xxxfb_copyarea, /* Needed !!! */ .fb_copyarea = xxxfb_copyarea, /* Needed !!! */
.fb_imageblit = xxxfb_imageblit, /* Needed !!! */ .fb_imageblit = xxxfb_imageblit, /* Needed !!! */
.fb_cursor = xxxfb_cursor, /* Optional !!! */ .fb_cursor = xxxfb_cursor, /* Optional !!! */
.fb_rotate = xxxfb_rotate,
.fb_sync = xxxfb_sync, .fb_sync = xxxfb_sync,
.fb_ioctl = xxxfb_ioctl, .fb_ioctl = xxxfb_ioctl,
.fb_mmap = xxxfb_mmap, .fb_mmap = xxxfb_mmap,
......
/* sunxvr1000.c: Sun XVR-1000 driver for sparc64 systems /* sunxvr1000.c: Sun XVR-1000 fb driver for sparc64 systems
*
* License: GPL
* *
* Copyright (C) 2010 David S. Miller (davem@davemloft.net) * Copyright (C) 2010 David S. Miller (davem@davemloft.net)
*/ */
#include <linux/module.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/fb.h> #include <linux/fb.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -173,36 +174,19 @@ static int gfb_probe(struct platform_device *op) ...@@ -173,36 +174,19 @@ static int gfb_probe(struct platform_device *op)
return err; return err;
} }
static int gfb_remove(struct platform_device *op)
{
struct fb_info *info = dev_get_drvdata(&op->dev);
struct gfb_info *gp = info->par;
unregister_framebuffer(info);
iounmap(gp->fb_base);
of_iounmap(&op->resource[6], gp->fb_base, gp->fb_size);
framebuffer_release(info);
return 0;
}
static const struct of_device_id gfb_match[] = { static const struct of_device_id gfb_match[] = {
{ {
.name = "SUNW,gfb", .name = "SUNW,gfb",
}, },
{}, {},
}; };
MODULE_DEVICE_TABLE(of, ffb_match);
static struct platform_driver gfb_driver = { static struct platform_driver gfb_driver = {
.probe = gfb_probe, .probe = gfb_probe,
.remove = gfb_remove,
.driver = { .driver = {
.name = "gfb", .name = "gfb",
.of_match_table = gfb_match, .of_match_table = gfb_match,
.suppress_bind_attrs = true,
}, },
}; };
...@@ -213,16 +197,4 @@ static int __init gfb_init(void) ...@@ -213,16 +197,4 @@ static int __init gfb_init(void)
return platform_driver_register(&gfb_driver); return platform_driver_register(&gfb_driver);
} }
device_initcall(gfb_init);
static void __exit gfb_exit(void)
{
platform_driver_unregister(&gfb_driver);
}
module_init(gfb_init);
module_exit(gfb_exit);
MODULE_DESCRIPTION("framebuffer driver for Sun XVR-1000 graphics");
MODULE_AUTHOR("David S. Miller <davem@davemloft.net>");
MODULE_VERSION("1.0");
MODULE_LICENSE("GPL");
/* s3d.c: Sun 3DLABS XVR-2500 et al. driver for sparc64 systems /* sunxvr2500.c: Sun 3DLABS XVR-2500 et al. fb driver for sparc64 systems
*
* License: GPL
* *
* Copyright (C) 2007 David S. Miller (davem@davemloft.net) * Copyright (C) 2007 David S. Miller (davem@davemloft.net)
*/ */
#include <linux/module.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/fb.h> #include <linux/fb.h>
#include <linux/pci.h> #include <linux/pci.h>
...@@ -219,22 +220,6 @@ static int s3d_pci_register(struct pci_dev *pdev, ...@@ -219,22 +220,6 @@ static int s3d_pci_register(struct pci_dev *pdev,
return err; return err;
} }
static void s3d_pci_unregister(struct pci_dev *pdev)
{
struct fb_info *info = pci_get_drvdata(pdev);
struct s3d_info *sp = info->par;
unregister_framebuffer(info);
iounmap(sp->fb_base);
pci_release_region(pdev, 1);
framebuffer_release(info);
pci_disable_device(pdev);
}
static struct pci_device_id s3d_pci_table[] = { static struct pci_device_id s3d_pci_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x002c), }, { PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x002c), },
{ PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x002d), }, { PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x002d), },
...@@ -248,10 +233,12 @@ static struct pci_device_id s3d_pci_table[] = { ...@@ -248,10 +233,12 @@ static struct pci_device_id s3d_pci_table[] = {
}; };
static struct pci_driver s3d_driver = { static struct pci_driver s3d_driver = {
.driver = {
.suppress_bind_attrs = true,
},
.name = "s3d", .name = "s3d",
.id_table = s3d_pci_table, .id_table = s3d_pci_table,
.probe = s3d_pci_register, .probe = s3d_pci_register,
.remove = s3d_pci_unregister,
}; };
static int __init s3d_init(void) static int __init s3d_init(void)
...@@ -261,16 +248,4 @@ static int __init s3d_init(void) ...@@ -261,16 +248,4 @@ static int __init s3d_init(void)
return pci_register_driver(&s3d_driver); return pci_register_driver(&s3d_driver);
} }
device_initcall(s3d_init);
static void __exit s3d_exit(void)
{
pci_unregister_driver(&s3d_driver);
}
module_init(s3d_init);
module_exit(s3d_exit);
MODULE_DESCRIPTION("framebuffer driver for Sun XVR-2500 graphics");
MODULE_AUTHOR("David S. Miller <davem@davemloft.net>");
MODULE_VERSION("1.0");
MODULE_LICENSE("GPL");
/* sunxvr500.c: Sun 3DLABS XVR-500 Expert3D driver for sparc64 systems /* sunxvr500.c: Sun 3DLABS XVR-500 Expert3D fb driver for sparc64 systems
*
* License: GPL
* *
* Copyright (C) 2007 David S. Miller (davem@davemloft.net) * Copyright (C) 2007 David S. Miller (davem@davemloft.net)
*/ */
#include <linux/module.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/fb.h> #include <linux/fb.h>
#include <linux/pci.h> #include <linux/pci.h>
...@@ -392,25 +393,6 @@ static int e3d_pci_register(struct pci_dev *pdev, ...@@ -392,25 +393,6 @@ static int e3d_pci_register(struct pci_dev *pdev,
return err; return err;
} }
static void e3d_pci_unregister(struct pci_dev *pdev)
{
struct fb_info *info = pci_get_drvdata(pdev);
struct e3d_info *ep = info->par;
unregister_framebuffer(info);
iounmap(ep->ramdac);
iounmap(ep->fb_base);
pci_release_region(pdev, 0);
pci_release_region(pdev, 1);
fb_dealloc_cmap(&info->cmap);
framebuffer_release(info);
pci_disable_device(pdev);
}
static struct pci_device_id e3d_pci_table[] = { static struct pci_device_id e3d_pci_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x7a0), }, { PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x7a0), },
{ PCI_DEVICE(0x1091, 0x7a0), }, { PCI_DEVICE(0x1091, 0x7a0), },
...@@ -434,10 +416,12 @@ static struct pci_device_id e3d_pci_table[] = { ...@@ -434,10 +416,12 @@ static struct pci_device_id e3d_pci_table[] = {
}; };
static struct pci_driver e3d_driver = { static struct pci_driver e3d_driver = {
.driver = {
.suppress_bind_attrs = true,
},
.name = "e3d", .name = "e3d",
.id_table = e3d_pci_table, .id_table = e3d_pci_table,
.probe = e3d_pci_register, .probe = e3d_pci_register,
.remove = e3d_pci_unregister,
}; };
static int __init e3d_init(void) static int __init e3d_init(void)
...@@ -447,16 +431,4 @@ static int __init e3d_init(void) ...@@ -447,16 +431,4 @@ static int __init e3d_init(void)
return pci_register_driver(&e3d_driver); return pci_register_driver(&e3d_driver);
} }
device_initcall(e3d_init);
static void __exit e3d_exit(void)
{
pci_unregister_driver(&e3d_driver);
}
module_init(e3d_init);
module_exit(e3d_exit);
MODULE_DESCRIPTION("framebuffer driver for Sun XVR-500 graphics");
MODULE_AUTHOR("David S. Miller <davem@davemloft.net>");
MODULE_VERSION("1.0");
MODULE_LICENSE("GPL");
...@@ -296,9 +296,6 @@ struct fb_ops { ...@@ -296,9 +296,6 @@ struct fb_ops {
/* Draws cursor */ /* Draws cursor */
int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor); int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor);
/* Rotates the display */
void (*fb_rotate)(struct fb_info *info, int angle);
/* wait for blit idle, optional */ /* wait for blit idle, optional */
int (*fb_sync)(struct fb_info *info); int (*fb_sync)(struct fb_info *info);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment