From: Ralf Baechle Akpm's patch "newport_con warning fix" got me to look at the console drivers again and one thing that I noticed was that none of the fonts was using ISO initializers for it's fonts. Signed-off-by: Ralf Baechle Signed-off-by: Antonino Daplas Signed-off-by: Andrew Morton --- drivers/video/backlight/cr_bllcd.c | 146 +++++++++++++++++++++-- drivers/video/console/font_10x18.c | 14 +- drivers/video/console/font_6x11.c | 13 +- drivers/video/console/font_7x14.c | 12 - drivers/video/console/font_8x16.c | 12 - drivers/video/console/font_8x8.c | 12 - drivers/video/console/font_acorn_8x8.c | 14 +- drivers/video/console/font_mini_4x6.c | 12 - drivers/video/console/font_pearl_8x8.c | 12 - drivers/video/console/font_sun12x22.c | 14 +- drivers/video/console/font_sun8x16.c | 14 +- 11 files changed, 201 insertions(+), 74 deletions(-) diff -puN drivers/video/backlight/cr_bllcd.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/backlight/cr_bllcd.c --- a/drivers/video/backlight/cr_bllcd.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/backlight/cr_bllcd.c @@ -25,6 +25,7 @@ * Authors: * Thomas Hellstrom * Alan Hourihane + * Michel Dänzer */ #include @@ -38,6 +39,8 @@ #include #include +#define MODULE_NAME "cr_bllcd" + /* The LVDS- and panel power controls sits on the * GPIO port of the ISA bridge. */ @@ -51,19 +54,25 @@ #define CRVML_PANEL_ON 0x00000002 #define CRVML_BACKLIGHT_OFF 0x00000004 -/* The PLL Clock register sits on Host bridge */ -#define CRVML_DEVICE_MCH 0x5001 -#define CRVML_REG_MCHBAR 0x44 -#define CRVML_REG_MCHEN 0x54 -#define CRVML_MCHEN_BIT (1 << 28) -#define CRVML_MCHMAP_SIZE 4096 -#define CRVML_REG_CLOCK 0xc3c -#define CRVML_CLOCK_SHIFT 8 -#define CRVML_CLOCK_MASK 0x00000f00 - static struct pci_dev *lpc_dev; static u32 gpio_bar; +#ifdef CONFIG_PM + +#define NUM_LPC_EXTRA_CONFIG_SPACE 45 +static int lpc_saved_config_space[NUM_LPC_EXTRA_CONFIG_SPACE]; + +#define CRVML_REG_RCBABAR 0xF0 +#define CRVML_RCBAEN_BIT (1 << 0) +#define CRVML_RCBAMAP_SIZE 16384 +static u32 rcba_bar; +static void __iomem *rcba_regs_base; + +#define REGSAVE_SIZE (CRVML_RCBAMAP_SIZE + 4) +static u32 *regsave; + +#endif /* CONFIG_PM */ + struct cr_panel { struct backlight_device *cr_backlight_device; struct lcd_device *cr_lcd_device; @@ -169,6 +178,94 @@ static struct lcd_ops cr_lcd_ops = { .set_power = cr_lcd_set_power, }; +#ifdef CONFIG_PM + +static int cr_backlight_suspend(struct platform_device *pdev, + pm_message_t state) +{ + int i; + int reg; + int saveidx = 0; + + printk(KERN_DEBUG MODULE_NAME ": suspending to state: %d\n", + state.event); + + regsave = kmalloc(REGSAVE_SIZE, GFP_ATOMIC); + + if (!regsave) { + printk(KERN_ERR MODULE_NAME + ": Could not allocate %d bytes for saving registers\n", + REGSAVE_SIZE); + return -ENOMEM; + } + + /* Save registers and config space */ + + regsave[saveidx++] = inl(gpio_bar + CRVML_PANEL_PORT); + + for (reg = 0; reg < CRVML_RCBAMAP_SIZE; reg += 4) + regsave[saveidx++] = ioread32(rcba_regs_base + reg); + + pci_save_state(lpc_dev); + for (i = 0; i < NUM_LPC_EXTRA_CONFIG_SPACE; i++) + pci_read_config_dword(lpc_dev, (i + 16) * 4, + &lpc_saved_config_space[i]); + pci_disable_device(lpc_dev); + pci_set_power_state(lpc_dev, pci_choose_state(lpc_dev, state)); + + pdev->dev.power.power_state = state; + + return 0; +} + +static int cr_backlight_resume(struct platform_device *pdev) +{ + int i; + int reg; + int val; + int restoreidx = 0; + + if (pdev->dev.power.power_state.event == PM_EVENT_ON) + return 0; + + pci_set_power_state(lpc_dev, PCI_D0); + pci_restore_state(lpc_dev); + for (i = 0; i < NUM_LPC_EXTRA_CONFIG_SPACE; i++) { + if (i == 0x70 / 4) + continue; + + pci_read_config_dword(lpc_dev, (i + 16) * 4, &val); + if (val != lpc_saved_config_space[i]) { + printk(KERN_DEBUG MODULE_NAME ": Writing back config " + "space on device %s at offset %x (was %x, " + "writing %x)\n", pci_name(lpc_dev), (i + 16), + val, lpc_saved_config_space[i]); + pci_write_config_dword(lpc_dev, (i + 16) * 4, + lpc_saved_config_space[i]); + } + } + if (pci_enable_device(lpc_dev)) + return -1; + + outl(regsave[restoreidx++], gpio_bar + CRVML_PANEL_PORT); + + for (reg = 0; reg < CRVML_RCBAMAP_SIZE; reg += 4) + iowrite32(regsave[restoreidx++], rcba_regs_base + reg); + + /* Flush posted writes */ + ioread32(rcba_regs_base); + + kfree(regsave); + + pdev->dev.power.power_state = PMSG_ON; + + printk(KERN_DEBUG MODULE_NAME ": resumed\n"); + + return 0; +} + +#endif /* CONFIG_PM */ + static int cr_backlight_probe(struct platform_device *pdev) { struct backlight_device *bdp; @@ -228,6 +325,26 @@ static int cr_backlight_probe(struct pla platform_set_drvdata(pdev, crp); +#ifdef CONFIG_PM + pci_read_config_dword(lpc_dev, CRVML_REG_RCBABAR, &rcba_bar); + + if (!(rcba_bar & CRVML_RCBAEN_BIT)) { + printk(KERN_ERR MODULE_NAME + ": Carillo Ranch LPC device RCBA BAR was not enabled\n"); + pci_dev_put(lpc_dev); + return -ENODEV; + } + + rcba_regs_base = + ioremap_nocache(rcba_bar, CRVML_RCBAMAP_SIZE); + if (!rcba_regs_base) { + printk(KERN_ERR MODULE_NAME + ": Could not map Carillo Ranch RCBA BAR\n"); + pci_dev_put(lpc_dev); + return -ENODEV; + } +#endif /* CONFIG_PM */ + return 0; } @@ -241,6 +358,11 @@ static int cr_backlight_remove(struct pl cr_lcd_set_power(crp->cr_lcd_device, FB_BLANK_POWERDOWN); backlight_device_unregister(crp->cr_backlight_device); lcd_device_unregister(crp->cr_lcd_device); + platform_set_drvdata(pdev, NULL); +#ifdef CONFIG_PM + iounmap(rcba_regs_base); +#endif + kfree(crp); pci_dev_put(lpc_dev); return 0; @@ -252,6 +374,10 @@ static struct platform_driver cr_backlig .driver = { .name = "cr_backlight", }, +#ifdef CONFIG_PM + .suspend = cr_backlight_suspend, + .resume = cr_backlight_resume, +#endif }; static struct platform_device *crp; diff -puN drivers/video/console/font_10x18.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/console/font_10x18.c --- a/drivers/video/console/font_10x18.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/console/font_10x18.c @@ -5133,14 +5133,14 @@ static const unsigned char fontdata_10x1 const struct font_desc font_10x18 = { - FONT10x18_IDX, - "10x18", - 10, - 18, - fontdata_10x18, + .idx = FONT10x18_IDX, + .name = "10x18", + .width = 10, + .height = 18, + .data = fontdata_10x18, #ifdef __sparc__ - 5 + .pref = 5, #else - -1 + .pref = -1, #endif }; diff -puN drivers/video/console/font_6x11.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/console/font_6x11.c --- a/drivers/video/console/font_6x11.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/console/font_6x11.c @@ -3342,10 +3342,11 @@ static const unsigned char fontdata_6x11 const struct font_desc font_vga_6x11 = { - VGA6x11_IDX, - "ProFont6x11", - 6, - 11, - fontdata_6x11, - -2000 /* Try avoiding this font if possible unless on MAC */ + .idx = VGA6x11_IDX, + .name = "ProFont6x11", + .width = 6, + .height = 11, + .data = fontdata_6x11, + /* Try avoiding this font if possible unless on MAC */ + .pref = -2000, }; diff -puN drivers/video/console/font_7x14.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/console/font_7x14.c --- a/drivers/video/console/font_7x14.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/console/font_7x14.c @@ -4109,10 +4109,10 @@ static const unsigned char fontdata_7x14 const struct font_desc font_7x14 = { - FONT7x14_IDX, - "7x14", - 7, - 14, - fontdata_7x14, - 0 + .idx = FONT7x14_IDX, + .name = "7x14", + .width = 7, + .height = 14, + .data = fontdata_7x14, + .pref = 0, }; diff -puN drivers/video/console/font_8x16.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/console/font_8x16.c --- a/drivers/video/console/font_8x16.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/console/font_8x16.c @@ -4622,10 +4622,10 @@ static const unsigned char fontdata_8x16 const struct font_desc font_vga_8x16 = { - VGA8x16_IDX, - "VGA8x16", - 8, - 16, - fontdata_8x16, - 0 + .idx = VGA8x16_IDX, + .name = "VGA8x16", + .width = 8, + .height = 16, + .data = fontdata_8x16, + .pref = 0, }; diff -puN drivers/video/console/font_8x8.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/console/font_8x8.c --- a/drivers/video/console/font_8x8.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/console/font_8x8.c @@ -2574,10 +2574,10 @@ static const unsigned char fontdata_8x8[ const struct font_desc font_vga_8x8 = { - VGA8x8_IDX, - "VGA8x8", - 8, - 8, - fontdata_8x8, - 0 + .idx = VGA8x8_IDX, + .name = "VGA8x8", + .width = 8, + .height = 8, + .data = fontdata_8x8, + .pref = 0, }; diff -puN drivers/video/console/font_acorn_8x8.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/console/font_acorn_8x8.c --- a/drivers/video/console/font_acorn_8x8.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/console/font_acorn_8x8.c @@ -262,14 +262,14 @@ static const unsigned char acorndata_8x8 }; const struct font_desc font_acorn_8x8 = { - ACORN8x8_IDX, - "Acorn8x8", - 8, - 8, - acorndata_8x8, + .idx = ACORN8x8_IDX, + .name = "Acorn8x8", + .width = 8, + .height = 8, + .data = acorndata_8x8, #ifdef CONFIG_ARCH_ACORN - 20 + .pref = 20, #else - 0 + .pref = 0, #endif }; diff -puN drivers/video/console/font_mini_4x6.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/console/font_mini_4x6.c --- a/drivers/video/console/font_mini_4x6.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/console/font_mini_4x6.c @@ -2148,11 +2148,11 @@ static const unsigned char fontdata_mini }; const struct font_desc font_mini_4x6 = { - MINI4x6_IDX, - "MINI4x6", - 4, - 6, - fontdata_mini_4x6, - 3 + .idx = MINI4x6_IDX, + .name = "MINI4x6", + .width = 4, + .height = 6, + .data = fontdata_mini_4x6, + .pref = 3, }; diff -puN drivers/video/console/font_pearl_8x8.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/console/font_pearl_8x8.c --- a/drivers/video/console/font_pearl_8x8.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/console/font_pearl_8x8.c @@ -2578,10 +2578,10 @@ static const unsigned char fontdata_pear }; const struct font_desc font_pearl_8x8 = { - PEARL8x8_IDX, - "PEARL8x8", - 8, - 8, - fontdata_pearl8x8, - 2 + .idx = PEARL8x8_IDX, + .name = "PEARL8x8", + .width = 8, + .height = 8, + .data = fontdata_pearl8x8, + .pref = 2, }; diff -puN drivers/video/console/font_sun12x22.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/console/font_sun12x22.c --- a/drivers/video/console/font_sun12x22.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/console/font_sun12x22.c @@ -6152,14 +6152,14 @@ static const unsigned char fontdata_sun1 const struct font_desc font_sun_12x22 = { - SUN12x22_IDX, - "SUN12x22", - 12, - 22, - fontdata_sun12x22, + .idx = SUN12x22_IDX, + .name = "SUN12x22", + .width = 12, + .height = 22, + .data = fontdata_sun12x22, #ifdef __sparc__ - 5 + .pref = 5, #else - -1 + .pref = -1, #endif }; diff -puN drivers/video/console/font_sun8x16.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers drivers/video/console/font_sun8x16.c --- a/drivers/video/console/font_sun8x16.c~fbcon-convert-struct-font_desc-to-use-iso-c-initializers +++ a/drivers/video/console/font_sun8x16.c @@ -262,14 +262,14 @@ static const unsigned char fontdata_sun8 }; const struct font_desc font_sun_8x16 = { - SUN8x16_IDX, - "SUN8x16", - 8, - 16, - fontdata_sun8x16, + .idx = SUN8x16_IDX, + .name = "SUN8x16", + .width = 8, + .height = 16, + .data = fontdata_sun8x16, #ifdef __sparc__ - 10 + .pref = 10, #else - -1 + .pref = -1, #endif }; _