From e09b41010ba33a20a87472ee821fa407a5b8da36 Mon Sep 17 00:00:00 2001 From: José Pekkarinen Date: Mon, 11 Apr 2016 10:41:07 +0300 Subject: These changes are the raw update to linux-4.4.6-rt14. Kernel sources are taken from kernel.org, and rt patch from the rt wiki download page. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit During the rebasing, the following patch collided: Force tick interrupt and get rid of softirq magic(I70131fb85). Collisions have been removed because its logic was found on the source already. Change-Id: I7f57a4081d9deaa0d9ccfc41a6c8daccdee3b769 Signed-off-by: José Pekkarinen --- kernel/drivers/video/Kconfig | 2 - kernel/drivers/video/backlight/88pm860x_bl.c | 1 + kernel/drivers/video/backlight/Kconfig | 15 +- kernel/drivers/video/backlight/Makefile | 1 + kernel/drivers/video/backlight/adp8860_bl.c | 1 - kernel/drivers/video/backlight/adp8870_bl.c | 1 - kernel/drivers/video/backlight/ams369fg06.c | 1 - kernel/drivers/video/backlight/corgi_lcd.c | 1 - kernel/drivers/video/backlight/da9052_bl.c | 2 +- kernel/drivers/video/backlight/gpio_backlight.c | 2 + kernel/drivers/video/backlight/ili922x.c | 1 - kernel/drivers/video/backlight/l4f00242t03.c | 1 - kernel/drivers/video/backlight/ld9040.c | 1 - kernel/drivers/video/backlight/lms283gf05.c | 1 - kernel/drivers/video/backlight/lms501kf03.c | 1 - kernel/drivers/video/backlight/lp855x_bl.c | 42 +- kernel/drivers/video/backlight/lp8788_bl.c | 3 +- kernel/drivers/video/backlight/ltv350qv.c | 1 - kernel/drivers/video/backlight/pm8941-wled.c | 432 +++++ kernel/drivers/video/backlight/pwm_bl.c | 25 +- kernel/drivers/video/backlight/s6e63m0.c | 1 - .../drivers/video/backlight/sky81452-backlight.c | 26 +- kernel/drivers/video/backlight/tdo24m.c | 1 - kernel/drivers/video/backlight/tosa_bl.c | 1 + kernel/drivers/video/backlight/tosa_lcd.c | 1 - kernel/drivers/video/backlight/vgg2432a4.c | 1 - kernel/drivers/video/console/Kconfig | 2 +- kernel/drivers/video/console/fbcon.c | 9 +- kernel/drivers/video/console/fbcon.h | 1 + kernel/drivers/video/console/newport_con.c | 6 +- kernel/drivers/video/fbdev/Kconfig | 33 +- kernel/drivers/video/fbdev/Makefile | 2 +- kernel/drivers/video/fbdev/amifb.c | 8 +- kernel/drivers/video/fbdev/arkfb.c | 36 +- kernel/drivers/video/fbdev/atafb.c | 3 +- kernel/drivers/video/fbdev/atmel_lcdfb.c | 6 +- kernel/drivers/video/fbdev/aty/aty128fb.c | 36 +- kernel/drivers/video/fbdev/aty/atyfb.h | 5 +- kernel/drivers/video/fbdev/aty/atyfb_base.c | 109 +- kernel/drivers/video/fbdev/aty/radeon_base.c | 162 +- kernel/drivers/video/fbdev/aty/radeonfb.h | 146 +- kernel/drivers/video/fbdev/broadsheetfb.c | 8 +- kernel/drivers/video/fbdev/core/Makefile | 2 +- kernel/drivers/video/fbdev/core/fb_ddc.c | 28 +- kernel/drivers/video/fbdev/core/fb_defio.c | 2 - kernel/drivers/video/fbdev/core/fbmon.c | 8 +- kernel/drivers/video/fbdev/core/fbsysfs.c | 2 +- kernel/drivers/video/fbdev/core/modedb.c | 2 +- kernel/drivers/video/fbdev/efifb.c | 24 +- kernel/drivers/video/fbdev/ep93xx-fb.c | 30 +- kernel/drivers/video/fbdev/fsl-diu-fb.c | 22 +- kernel/drivers/video/fbdev/gbefb.c | 25 +- kernel/drivers/video/fbdev/geode/gxfb_core.c | 3 +- kernel/drivers/video/fbdev/gxt4500.c | 27 +- kernel/drivers/video/fbdev/hpfb.c | 4 +- kernel/drivers/video/fbdev/hyperv_fb.c | 46 +- kernel/drivers/video/fbdev/i740fb.c | 35 +- kernel/drivers/video/fbdev/i810/i810.h | 3 +- kernel/drivers/video/fbdev/i810/i810_main.c | 11 +- kernel/drivers/video/fbdev/i810/i810_main.h | 26 - kernel/drivers/video/fbdev/imxfb.c | 2 +- kernel/drivers/video/fbdev/intelfb/intelfb.h | 4 +- kernel/drivers/video/fbdev/intelfb/intelfbdrv.c | 38 +- kernel/drivers/video/fbdev/kyro/fbdev.c | 33 +- kernel/drivers/video/fbdev/matrox/matroxfb_base.c | 42 +- kernel/drivers/video/fbdev/matrox/matroxfb_base.h | 27 +- kernel/drivers/video/fbdev/mb862xx/mb862xxfbdrv.c | 1 + .../video/fbdev/mmp/panel/tpo_tj032md01bw.c | 1 - kernel/drivers/video/fbdev/msm/Makefile | 19 - kernel/drivers/video/fbdev/msm/mddi.c | 821 ---------- kernel/drivers/video/fbdev/msm/mddi_client_dummy.c | 85 - .../drivers/video/fbdev/msm/mddi_client_nt35399.c | 252 --- .../drivers/video/fbdev/msm/mddi_client_toshiba.c | 280 ---- kernel/drivers/video/fbdev/msm/mddi_hw.h | 305 ---- kernel/drivers/video/fbdev/msm/mdp.c | 520 ------ kernel/drivers/video/fbdev/msm/mdp_csc_table.h | 582 ------- kernel/drivers/video/fbdev/msm/mdp_hw.h | 627 -------- kernel/drivers/video/fbdev/msm/mdp_ppp.c | 731 --------- kernel/drivers/video/fbdev/msm/mdp_scale_tables.c | 766 --------- kernel/drivers/video/fbdev/msm/mdp_scale_tables.h | 38 - kernel/drivers/video/fbdev/msm/msm_fb.c | 659 -------- kernel/drivers/video/fbdev/mxsfb.c | 2 +- kernel/drivers/video/fbdev/neofb.c | 26 +- kernel/drivers/video/fbdev/nvidia/nv_type.h | 7 +- kernel/drivers/video/fbdev/nvidia/nvidia.c | 37 +- kernel/drivers/video/fbdev/ocfb.c | 1 - kernel/drivers/video/fbdev/omap/Kconfig | 2 +- kernel/drivers/video/fbdev/omap/lcd_mipid.c | 1 - kernel/drivers/video/fbdev/omap/omapfb_main.c | 5 - .../video/fbdev/omap2/displays-new/connector-dvi.c | 2 +- .../fbdev/omap2/displays-new/encoder-opa362.c | 13 +- .../video/fbdev/omap2/displays-new/panel-dpi.c | 13 +- .../omap2/displays-new/panel-lgphilips-lb035q02.c | 8 +- .../omap2/displays-new/panel-nec-nl8048hl11.c | 1 - .../omap2/displays-new/panel-sharp-ls037v7dw01.c | 9 +- .../omap2/displays-new/panel-sony-acx565akm.c | 2 +- .../omap2/displays-new/panel-tpo-td028ttec1.c | 1 - .../omap2/displays-new/panel-tpo-td043mtea1.c | 1 - kernel/drivers/video/fbdev/omap2/dss/core.c | 80 +- kernel/drivers/video/fbdev/omap2/dss/dispc.c | 156 +- .../drivers/video/fbdev/omap2/dss/display-sysfs.c | 2 +- kernel/drivers/video/fbdev/omap2/dss/dpi.c | 36 +- kernel/drivers/video/fbdev/omap2/dss/dsi.c | 27 +- kernel/drivers/video/fbdev/omap2/dss/dss-of.c | 4 +- kernel/drivers/video/fbdev/omap2/dss/dss.c | 232 ++- kernel/drivers/video/fbdev/omap2/dss/dss.h | 32 +- kernel/drivers/video/fbdev/omap2/dss/hdmi.h | 9 +- kernel/drivers/video/fbdev/omap2/dss/hdmi4.c | 96 +- kernel/drivers/video/fbdev/omap2/dss/hdmi4_core.c | 12 +- kernel/drivers/video/fbdev/omap2/dss/hdmi5.c | 103 +- kernel/drivers/video/fbdev/omap2/dss/hdmi5_core.c | 5 +- kernel/drivers/video/fbdev/omap2/dss/hdmi_wp.c | 16 + kernel/drivers/video/fbdev/omap2/dss/rfbi.c | 32 +- kernel/drivers/video/fbdev/omap2/dss/sdi.c | 35 +- kernel/drivers/video/fbdev/omap2/dss/venc.c | 43 +- .../drivers/video/fbdev/omap2/omapfb/omapfb-main.c | 2 +- kernel/drivers/video/fbdev/pm2fb.c | 31 +- kernel/drivers/video/fbdev/pm3fb.c | 30 +- kernel/drivers/video/fbdev/pxa168fb.c | 14 +- kernel/drivers/video/fbdev/pxa3xx-gcu.c | 4 +- kernel/drivers/video/fbdev/pxafb.c | 1 - kernel/drivers/video/fbdev/riva/fbdev.c | 39 +- kernel/drivers/video/fbdev/riva/rivafb.h | 4 +- kernel/drivers/video/fbdev/s1d13xxxfb.c | 3 +- kernel/drivers/video/fbdev/s3c-fb.c | 2 +- kernel/drivers/video/fbdev/s3fb.c | 35 +- kernel/drivers/video/fbdev/sa1100fb.c | 1 - kernel/drivers/video/fbdev/savage/savagefb.h | 4 +- .../drivers/video/fbdev/savage/savagefb_driver.c | 17 +- kernel/drivers/video/fbdev/simplefb.c | 1 + kernel/drivers/video/fbdev/sis/sis.h | 2 +- kernel/drivers/video/fbdev/sis/sis_main.c | 27 +- kernel/drivers/video/fbdev/sm712.h | 116 ++ kernel/drivers/video/fbdev/sm712fb.c | 1653 ++++++++++++++++++++ kernel/drivers/video/fbdev/ssd1307fb.c | 312 ++-- kernel/drivers/video/fbdev/stifb.c | 41 +- kernel/drivers/video/fbdev/tdfxfb.c | 41 +- kernel/drivers/video/fbdev/tridentfb.c | 194 ++- kernel/drivers/video/fbdev/udlfb.c | 10 +- kernel/drivers/video/fbdev/uvesafb.c | 2 +- kernel/drivers/video/fbdev/vermilion/vermilion.c | 2 +- kernel/drivers/video/fbdev/vesafb.c | 80 +- kernel/drivers/video/fbdev/vfb.c | 17 +- kernel/drivers/video/fbdev/vt8623fb.c | 35 +- kernel/drivers/video/fbdev/xen-fbfront.c | 20 +- kernel/drivers/video/of_display_timing.c | 1 + kernel/drivers/video/of_videomode.c | 4 +- 147 files changed, 3970 insertions(+), 7097 deletions(-) create mode 100644 kernel/drivers/video/backlight/pm8941-wled.c delete mode 100644 kernel/drivers/video/fbdev/msm/Makefile delete mode 100644 kernel/drivers/video/fbdev/msm/mddi.c delete mode 100644 kernel/drivers/video/fbdev/msm/mddi_client_dummy.c delete mode 100644 kernel/drivers/video/fbdev/msm/mddi_client_nt35399.c delete mode 100644 kernel/drivers/video/fbdev/msm/mddi_client_toshiba.c delete mode 100644 kernel/drivers/video/fbdev/msm/mddi_hw.h delete mode 100644 kernel/drivers/video/fbdev/msm/mdp.c delete mode 100644 kernel/drivers/video/fbdev/msm/mdp_csc_table.h delete mode 100644 kernel/drivers/video/fbdev/msm/mdp_hw.h delete mode 100644 kernel/drivers/video/fbdev/msm/mdp_ppp.c delete mode 100644 kernel/drivers/video/fbdev/msm/mdp_scale_tables.c delete mode 100644 kernel/drivers/video/fbdev/msm/mdp_scale_tables.h delete mode 100644 kernel/drivers/video/fbdev/msm/msm_fb.c create mode 100644 kernel/drivers/video/fbdev/sm712.h create mode 100644 kernel/drivers/video/fbdev/sm712fb.c (limited to 'kernel/drivers/video') diff --git a/kernel/drivers/video/Kconfig b/kernel/drivers/video/Kconfig index 8bf495ffb..e0606c01e 100644 --- a/kernel/drivers/video/Kconfig +++ b/kernel/drivers/video/Kconfig @@ -22,9 +22,7 @@ source "drivers/gpu/vga/Kconfig" source "drivers/gpu/host1x/Kconfig" source "drivers/gpu/ipu-v3/Kconfig" -menu "Direct Rendering Manager" source "drivers/gpu/drm/Kconfig" -endmenu menu "Frame buffer Devices" source "drivers/video/fbdev/Kconfig" diff --git a/kernel/drivers/video/backlight/88pm860x_bl.c b/kernel/drivers/video/backlight/88pm860x_bl.c index 2da586287..6d8dc2c77 100644 --- a/kernel/drivers/video/backlight/88pm860x_bl.c +++ b/kernel/drivers/video/backlight/88pm860x_bl.c @@ -180,6 +180,7 @@ static int pm860x_backlight_dt_init(struct platform_device *pdev, data->iset = PM8606_WLED_CURRENT(iset); of_property_read_u32(np, "marvell,88pm860x-pwm", &data->pwm); + of_node_put(np); break; } } diff --git a/kernel/drivers/video/backlight/Kconfig b/kernel/drivers/video/backlight/Kconfig index 2d9923a60..5ffa4b4e2 100644 --- a/kernel/drivers/video/backlight/Kconfig +++ b/kernel/drivers/video/backlight/Kconfig @@ -36,14 +36,16 @@ config LCD_CORGI config LCD_L4F00242T03 tristate "Epson L4F00242T03 LCD" - depends on SPI_MASTER && GPIOLIB + depends on SPI_MASTER + depends on GPIOLIB || COMPILE_TEST help SPI driver for Epson L4F00242T03. This provides basic support for init and powering the LCD up/down through a sysfs interface. config LCD_LMS283GF05 tristate "Samsung LMS283GF05 LCD" - depends on SPI_MASTER && GPIOLIB + depends on SPI_MASTER + depends on GPIOLIB || COMPILE_TEST help SPI driver for Samsung LMS283GF05. This provides basic support for powering the LCD up/down through a sysfs interface. @@ -297,6 +299,13 @@ config BACKLIGHT_TOSA If you have an Sharp SL-6000 Zaurus say Y to enable a driver for its backlight +config BACKLIGHT_PM8941_WLED + tristate "Qualcomm PM8941 WLED Driver" + select REGMAP + help + If you have the Qualcomm PM8941, say Y to enable a driver for the + WLED block. + config BACKLIGHT_SAHARA tristate "Tabletkiosk Sahara Touch-iT Backlight Driver" depends on X86 @@ -434,7 +443,7 @@ config BACKLIGHT_AS3711 config BACKLIGHT_GPIO tristate "Generic GPIO based Backlight Driver" - depends on GPIOLIB + depends on GPIOLIB || COMPILE_TEST help If you have a LCD backlight adjustable by GPIO, say Y to enable this driver. diff --git a/kernel/drivers/video/backlight/Makefile b/kernel/drivers/video/backlight/Makefile index d67073f9d..16ec534cf 100644 --- a/kernel/drivers/video/backlight/Makefile +++ b/kernel/drivers/video/backlight/Makefile @@ -48,6 +48,7 @@ obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o obj-$(CONFIG_BACKLIGHT_OT200) += ot200_bl.o obj-$(CONFIG_BACKLIGHT_PANDORA) += pandora_bl.o obj-$(CONFIG_BACKLIGHT_PCF50633) += pcf50633-backlight.o +obj-$(CONFIG_BACKLIGHT_PM8941_WLED) += pm8941-wled.o obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o obj-$(CONFIG_BACKLIGHT_SAHARA) += kb3886_bl.o obj-$(CONFIG_BACKLIGHT_SKY81452) += sky81452-backlight.o diff --git a/kernel/drivers/video/backlight/adp8860_bl.c b/kernel/drivers/video/backlight/adp8860_bl.c index 71147f446..98ffe71e8 100644 --- a/kernel/drivers/video/backlight/adp8860_bl.c +++ b/kernel/drivers/video/backlight/adp8860_bl.c @@ -819,4 +819,3 @@ module_i2c_driver(adp8860_driver); MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Michael Hennerich "); MODULE_DESCRIPTION("ADP8860 Backlight driver"); -MODULE_ALIAS("i2c:adp8860-backlight"); diff --git a/kernel/drivers/video/backlight/adp8870_bl.c b/kernel/drivers/video/backlight/adp8870_bl.c index 037e43083..9d738352d 100644 --- a/kernel/drivers/video/backlight/adp8870_bl.c +++ b/kernel/drivers/video/backlight/adp8870_bl.c @@ -992,4 +992,3 @@ module_i2c_driver(adp8870_driver); MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Michael Hennerich "); MODULE_DESCRIPTION("ADP8870 Backlight driver"); -MODULE_ALIAS("i2c:adp8870-backlight"); diff --git a/kernel/drivers/video/backlight/ams369fg06.c b/kernel/drivers/video/backlight/ams369fg06.c index 5f897f99c..5cca8ce45 100644 --- a/kernel/drivers/video/backlight/ams369fg06.c +++ b/kernel/drivers/video/backlight/ams369fg06.c @@ -556,7 +556,6 @@ static void ams369fg06_shutdown(struct spi_device *spi) static struct spi_driver ams369fg06_driver = { .driver = { .name = "ams369fg06", - .owner = THIS_MODULE, .pm = &ams369fg06_pm_ops, }, .probe = ams369fg06_probe, diff --git a/kernel/drivers/video/backlight/corgi_lcd.c b/kernel/drivers/video/backlight/corgi_lcd.c index d7c37a8cc..d7c239ea3 100644 --- a/kernel/drivers/video/backlight/corgi_lcd.c +++ b/kernel/drivers/video/backlight/corgi_lcd.c @@ -598,7 +598,6 @@ static int corgi_lcd_remove(struct spi_device *spi) static struct spi_driver corgi_lcd_driver = { .driver = { .name = "corgi-lcd", - .owner = THIS_MODULE, .pm = &corgi_lcd_pm_ops, }, .probe = corgi_lcd_probe, diff --git a/kernel/drivers/video/backlight/da9052_bl.c b/kernel/drivers/video/backlight/da9052_bl.c index b1943e773..fd2be417a 100644 --- a/kernel/drivers/video/backlight/da9052_bl.c +++ b/kernel/drivers/video/backlight/da9052_bl.c @@ -152,7 +152,7 @@ static int da9052_backlight_remove(struct platform_device *pdev) return 0; } -static struct platform_device_id da9052_wled_ids[] = { +static const struct platform_device_id da9052_wled_ids[] = { { .name = "da9052-wled1", .driver_data = DA9052_TYPE_WLED1, diff --git a/kernel/drivers/video/backlight/gpio_backlight.c b/kernel/drivers/video/backlight/gpio_backlight.c index 439feb238..5fbbc2ebd 100644 --- a/kernel/drivers/video/backlight/gpio_backlight.c +++ b/kernel/drivers/video/backlight/gpio_backlight.c @@ -146,6 +146,8 @@ static struct of_device_id gpio_backlight_of_match[] = { { .compatible = "gpio-backlight" }, { /* sentinel */ } }; + +MODULE_DEVICE_TABLE(of, gpio_backlight_of_match); #endif static struct platform_driver gpio_backlight_driver = { diff --git a/kernel/drivers/video/backlight/ili922x.c b/kernel/drivers/video/backlight/ili922x.c index e7f0890cc..a9e9cef20 100644 --- a/kernel/drivers/video/backlight/ili922x.c +++ b/kernel/drivers/video/backlight/ili922x.c @@ -536,7 +536,6 @@ static int ili922x_remove(struct spi_device *spi) static struct spi_driver ili922x_driver = { .driver = { .name = "ili922x", - .owner = THIS_MODULE, }, .probe = ili922x_probe, .remove = ili922x_remove, diff --git a/kernel/drivers/video/backlight/l4f00242t03.c b/kernel/drivers/video/backlight/l4f00242t03.c index 5fa2649c9..e6054e249 100644 --- a/kernel/drivers/video/backlight/l4f00242t03.c +++ b/kernel/drivers/video/backlight/l4f00242t03.c @@ -255,7 +255,6 @@ static void l4f00242t03_shutdown(struct spi_device *spi) static struct spi_driver l4f00242t03_driver = { .driver = { .name = "l4f00242t03", - .owner = THIS_MODULE, }, .probe = l4f00242t03_probe, .remove = l4f00242t03_remove, diff --git a/kernel/drivers/video/backlight/ld9040.c b/kernel/drivers/video/backlight/ld9040.c index f71eaf10c..677f8abba 100644 --- a/kernel/drivers/video/backlight/ld9040.c +++ b/kernel/drivers/video/backlight/ld9040.c @@ -797,7 +797,6 @@ static void ld9040_shutdown(struct spi_device *spi) static struct spi_driver ld9040_driver = { .driver = { .name = "ld9040", - .owner = THIS_MODULE, .pm = &ld9040_pm_ops, }, .probe = ld9040_probe, diff --git a/kernel/drivers/video/backlight/lms283gf05.c b/kernel/drivers/video/backlight/lms283gf05.c index 14590c54a..4237aaa7f 100644 --- a/kernel/drivers/video/backlight/lms283gf05.c +++ b/kernel/drivers/video/backlight/lms283gf05.c @@ -192,7 +192,6 @@ static int lms283gf05_probe(struct spi_device *spi) static struct spi_driver lms283gf05_driver = { .driver = { .name = "lms283gf05", - .owner = THIS_MODULE, }, .probe = lms283gf05_probe, }; diff --git a/kernel/drivers/video/backlight/lms501kf03.c b/kernel/drivers/video/backlight/lms501kf03.c index 7e3810308..8aa3e7662 100644 --- a/kernel/drivers/video/backlight/lms501kf03.c +++ b/kernel/drivers/video/backlight/lms501kf03.c @@ -422,7 +422,6 @@ static void lms501kf03_shutdown(struct spi_device *spi) static struct spi_driver lms501kf03_driver = { .driver = { .name = "lms501kf03", - .owner = THIS_MODULE, .pm = &lms501kf03_pm_ops, }, .probe = lms501kf03_probe, diff --git a/kernel/drivers/video/backlight/lp855x_bl.c b/kernel/drivers/video/backlight/lp855x_bl.c index a26d3bb25..daca9e6a2 100644 --- a/kernel/drivers/video/backlight/lp855x_bl.c +++ b/kernel/drivers/video/backlight/lp855x_bl.c @@ -73,6 +73,7 @@ struct lp855x { struct device *dev; struct lp855x_platform_data *pdata; struct pwm_device *pwm; + struct regulator *supply; /* regulator for VDD input */ }; static int lp855x_write_byte(struct lp855x *lp, u8 reg, u8 data) @@ -257,21 +258,15 @@ static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br) static int lp855x_bl_update_status(struct backlight_device *bl) { struct lp855x *lp = bl_get_data(bl); + int brightness = bl->props.brightness; if (bl->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK)) - bl->props.brightness = 0; + brightness = 0; - if (lp->mode == PWM_BASED) { - int br = bl->props.brightness; - int max_br = bl->props.max_brightness; - - lp855x_pwm_ctrl(lp, br, max_br); - - } else if (lp->mode == REGISTER_BASED) { - u8 val = bl->props.brightness; - - lp855x_write_byte(lp, lp->cfg->reg_brightness, val); - } + if (lp->mode == PWM_BASED) + lp855x_pwm_ctrl(lp, brightness, bl->props.max_brightness); + else if (lp->mode == REGISTER_BASED) + lp855x_write_byte(lp, lp->cfg->reg_brightness, (u8)brightness); return 0; } @@ -288,6 +283,7 @@ static int lp855x_backlight_register(struct lp855x *lp) struct lp855x_platform_data *pdata = lp->pdata; const char *name = pdata->name ? : DEFAULT_BL_NAME; + memset(&props, 0, sizeof(props)); props.type = BACKLIGHT_PLATFORM; props.max_brightness = MAX_BRIGHTNESS; @@ -384,13 +380,6 @@ static int lp855x_parse_dt(struct lp855x *lp) pdata->rom_data = &rom[0]; } - pdata->supply = devm_regulator_get(dev, "power"); - if (IS_ERR(pdata->supply)) { - if (PTR_ERR(pdata->supply) == -EPROBE_DEFER) - return -EPROBE_DEFER; - pdata->supply = NULL; - } - lp->pdata = pdata; return 0; @@ -431,8 +420,15 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id) else lp->mode = REGISTER_BASED; - if (lp->pdata->supply) { - ret = regulator_enable(lp->pdata->supply); + lp->supply = devm_regulator_get(lp->dev, "power"); + if (IS_ERR(lp->supply)) { + if (PTR_ERR(lp->supply) == -EPROBE_DEFER) + return -EPROBE_DEFER; + lp->supply = NULL; + } + + if (lp->supply) { + ret = regulator_enable(lp->supply); if (ret < 0) { dev_err(&cl->dev, "failed to enable supply: %d\n", ret); return ret; @@ -470,8 +466,8 @@ static int lp855x_remove(struct i2c_client *cl) lp->bl->props.brightness = 0; backlight_update_status(lp->bl); - if (lp->pdata->supply) - regulator_disable(lp->pdata->supply); + if (lp->supply) + regulator_disable(lp->supply); sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group); return 0; diff --git a/kernel/drivers/video/backlight/lp8788_bl.c b/kernel/drivers/video/backlight/lp8788_bl.c index e418d5b1a..5d583d7a5 100644 --- a/kernel/drivers/video/backlight/lp8788_bl.c +++ b/kernel/drivers/video/backlight/lp8788_bl.c @@ -221,8 +221,7 @@ static void lp8788_backlight_unregister(struct lp8788_bl *bl) { struct backlight_device *bl_dev = bl->bl_dev; - if (bl_dev) - backlight_device_unregister(bl_dev); + backlight_device_unregister(bl_dev); } static ssize_t lp8788_get_bl_ctl_mode(struct device *dev, diff --git a/kernel/drivers/video/backlight/ltv350qv.c b/kernel/drivers/video/backlight/ltv350qv.c index 383f550e1..885612cc1 100644 --- a/kernel/drivers/video/backlight/ltv350qv.c +++ b/kernel/drivers/video/backlight/ltv350qv.c @@ -295,7 +295,6 @@ static void ltv350qv_shutdown(struct spi_device *spi) static struct spi_driver ltv350qv_driver = { .driver = { .name = "ltv350qv", - .owner = THIS_MODULE, .pm = <v350qv_pm_ops, }, diff --git a/kernel/drivers/video/backlight/pm8941-wled.c b/kernel/drivers/video/backlight/pm8941-wled.c new file mode 100644 index 000000000..0b6d21955 --- /dev/null +++ b/kernel/drivers/video/backlight/pm8941-wled.c @@ -0,0 +1,432 @@ +/* Copyright (c) 2015, Sony Mobile Communications, AB. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include + +/* From DT binding */ +#define PM8941_WLED_DEFAULT_BRIGHTNESS 2048 + +#define PM8941_WLED_REG_VAL_BASE 0x40 +#define PM8941_WLED_REG_VAL_MAX 0xFFF + +#define PM8941_WLED_REG_MOD_EN 0x46 +#define PM8941_WLED_REG_MOD_EN_BIT BIT(7) +#define PM8941_WLED_REG_MOD_EN_MASK BIT(7) + +#define PM8941_WLED_REG_SYNC 0x47 +#define PM8941_WLED_REG_SYNC_MASK 0x07 +#define PM8941_WLED_REG_SYNC_LED1 BIT(0) +#define PM8941_WLED_REG_SYNC_LED2 BIT(1) +#define PM8941_WLED_REG_SYNC_LED3 BIT(2) +#define PM8941_WLED_REG_SYNC_ALL 0x07 +#define PM8941_WLED_REG_SYNC_CLEAR 0x00 + +#define PM8941_WLED_REG_FREQ 0x4c +#define PM8941_WLED_REG_FREQ_MASK 0x0f + +#define PM8941_WLED_REG_OVP 0x4d +#define PM8941_WLED_REG_OVP_MASK 0x03 + +#define PM8941_WLED_REG_BOOST 0x4e +#define PM8941_WLED_REG_BOOST_MASK 0x07 + +#define PM8941_WLED_REG_SINK 0x4f +#define PM8941_WLED_REG_SINK_MASK 0xe0 +#define PM8941_WLED_REG_SINK_SHFT 0x05 + +/* Per-'string' registers below */ +#define PM8941_WLED_REG_STR_OFFSET 0x10 + +#define PM8941_WLED_REG_STR_MOD_EN_BASE 0x60 +#define PM8941_WLED_REG_STR_MOD_MASK BIT(7) +#define PM8941_WLED_REG_STR_MOD_EN BIT(7) + +#define PM8941_WLED_REG_STR_SCALE_BASE 0x62 +#define PM8941_WLED_REG_STR_SCALE_MASK 0x1f + +#define PM8941_WLED_REG_STR_MOD_SRC_BASE 0x63 +#define PM8941_WLED_REG_STR_MOD_SRC_MASK 0x01 +#define PM8941_WLED_REG_STR_MOD_SRC_INT 0x00 +#define PM8941_WLED_REG_STR_MOD_SRC_EXT 0x01 + +#define PM8941_WLED_REG_STR_CABC_BASE 0x66 +#define PM8941_WLED_REG_STR_CABC_MASK BIT(7) +#define PM8941_WLED_REG_STR_CABC_EN BIT(7) + +struct pm8941_wled_config { + u32 i_boost_limit; + u32 ovp; + u32 switch_freq; + u32 num_strings; + u32 i_limit; + bool cs_out_en; + bool ext_gen; + bool cabc_en; +}; + +struct pm8941_wled { + const char *name; + struct regmap *regmap; + u16 addr; + + struct pm8941_wled_config cfg; +}; + +static int pm8941_wled_update_status(struct backlight_device *bl) +{ + struct pm8941_wled *wled = bl_get_data(bl); + u16 val = bl->props.brightness; + u8 ctrl = 0; + int rc; + int i; + + if (bl->props.power != FB_BLANK_UNBLANK || + bl->props.fb_blank != FB_BLANK_UNBLANK || + bl->props.state & BL_CORE_FBBLANK) + val = 0; + + if (val != 0) + ctrl = PM8941_WLED_REG_MOD_EN_BIT; + + rc = regmap_update_bits(wled->regmap, + wled->addr + PM8941_WLED_REG_MOD_EN, + PM8941_WLED_REG_MOD_EN_MASK, ctrl); + if (rc) + return rc; + + for (i = 0; i < wled->cfg.num_strings; ++i) { + u8 v[2] = { val & 0xff, (val >> 8) & 0xf }; + + rc = regmap_bulk_write(wled->regmap, + wled->addr + PM8941_WLED_REG_VAL_BASE + 2 * i, + v, 2); + if (rc) + return rc; + } + + rc = regmap_update_bits(wled->regmap, + wled->addr + PM8941_WLED_REG_SYNC, + PM8941_WLED_REG_SYNC_MASK, PM8941_WLED_REG_SYNC_ALL); + if (rc) + return rc; + + rc = regmap_update_bits(wled->regmap, + wled->addr + PM8941_WLED_REG_SYNC, + PM8941_WLED_REG_SYNC_MASK, PM8941_WLED_REG_SYNC_CLEAR); + return rc; +} + +static int pm8941_wled_setup(struct pm8941_wled *wled) +{ + int rc; + int i; + + rc = regmap_update_bits(wled->regmap, + wled->addr + PM8941_WLED_REG_OVP, + PM8941_WLED_REG_OVP_MASK, wled->cfg.ovp); + if (rc) + return rc; + + rc = regmap_update_bits(wled->regmap, + wled->addr + PM8941_WLED_REG_BOOST, + PM8941_WLED_REG_BOOST_MASK, wled->cfg.i_boost_limit); + if (rc) + return rc; + + rc = regmap_update_bits(wled->regmap, + wled->addr + PM8941_WLED_REG_FREQ, + PM8941_WLED_REG_FREQ_MASK, wled->cfg.switch_freq); + if (rc) + return rc; + + if (wled->cfg.cs_out_en) { + u8 all = (BIT(wled->cfg.num_strings) - 1) + << PM8941_WLED_REG_SINK_SHFT; + + rc = regmap_update_bits(wled->regmap, + wled->addr + PM8941_WLED_REG_SINK, + PM8941_WLED_REG_SINK_MASK, all); + if (rc) + return rc; + } + + for (i = 0; i < wled->cfg.num_strings; ++i) { + u16 addr = wled->addr + PM8941_WLED_REG_STR_OFFSET * i; + + rc = regmap_update_bits(wled->regmap, + addr + PM8941_WLED_REG_STR_MOD_EN_BASE, + PM8941_WLED_REG_STR_MOD_MASK, + PM8941_WLED_REG_STR_MOD_EN); + if (rc) + return rc; + + if (wled->cfg.ext_gen) { + rc = regmap_update_bits(wled->regmap, + addr + PM8941_WLED_REG_STR_MOD_SRC_BASE, + PM8941_WLED_REG_STR_MOD_SRC_MASK, + PM8941_WLED_REG_STR_MOD_SRC_EXT); + if (rc) + return rc; + } + + rc = regmap_update_bits(wled->regmap, + addr + PM8941_WLED_REG_STR_SCALE_BASE, + PM8941_WLED_REG_STR_SCALE_MASK, + wled->cfg.i_limit); + if (rc) + return rc; + + rc = regmap_update_bits(wled->regmap, + addr + PM8941_WLED_REG_STR_CABC_BASE, + PM8941_WLED_REG_STR_CABC_MASK, + wled->cfg.cabc_en ? + PM8941_WLED_REG_STR_CABC_EN : 0); + if (rc) + return rc; + } + + return 0; +} + +static const struct pm8941_wled_config pm8941_wled_config_defaults = { + .i_boost_limit = 3, + .i_limit = 20, + .ovp = 2, + .switch_freq = 5, + .num_strings = 0, + .cs_out_en = false, + .ext_gen = false, + .cabc_en = false, +}; + +struct pm8941_wled_var_cfg { + const u32 *values; + u32 (*fn)(u32); + int size; +}; + +static const u32 pm8941_wled_i_boost_limit_values[] = { + 105, 385, 525, 805, 980, 1260, 1400, 1680, +}; + +static const struct pm8941_wled_var_cfg pm8941_wled_i_boost_limit_cfg = { + .values = pm8941_wled_i_boost_limit_values, + .size = ARRAY_SIZE(pm8941_wled_i_boost_limit_values), +}; + +static const u32 pm8941_wled_ovp_values[] = { + 35, 32, 29, 27, +}; + +static const struct pm8941_wled_var_cfg pm8941_wled_ovp_cfg = { + .values = pm8941_wled_ovp_values, + .size = ARRAY_SIZE(pm8941_wled_ovp_values), +}; + +static u32 pm8941_wled_num_strings_values_fn(u32 idx) +{ + return idx + 1; +} + +static const struct pm8941_wled_var_cfg pm8941_wled_num_strings_cfg = { + .fn = pm8941_wled_num_strings_values_fn, + .size = 3, +}; + +static u32 pm8941_wled_switch_freq_values_fn(u32 idx) +{ + return 19200 / (2 * (1 + idx)); +} + +static const struct pm8941_wled_var_cfg pm8941_wled_switch_freq_cfg = { + .fn = pm8941_wled_switch_freq_values_fn, + .size = 16, +}; + +static const struct pm8941_wled_var_cfg pm8941_wled_i_limit_cfg = { + .size = 26, +}; + +static u32 pm8941_wled_values(const struct pm8941_wled_var_cfg *cfg, u32 idx) +{ + if (idx >= cfg->size) + return UINT_MAX; + if (cfg->fn) + return cfg->fn(idx); + if (cfg->values) + return cfg->values[idx]; + return idx; +} + +static int pm8941_wled_configure(struct pm8941_wled *wled, struct device *dev) +{ + struct pm8941_wled_config *cfg = &wled->cfg; + u32 val; + int rc; + u32 c; + int i; + int j; + + const struct { + const char *name; + u32 *val_ptr; + const struct pm8941_wled_var_cfg *cfg; + } u32_opts[] = { + { + "qcom,current-boost-limit", + &cfg->i_boost_limit, + .cfg = &pm8941_wled_i_boost_limit_cfg, + }, + { + "qcom,current-limit", + &cfg->i_limit, + .cfg = &pm8941_wled_i_limit_cfg, + }, + { + "qcom,ovp", + &cfg->ovp, + .cfg = &pm8941_wled_ovp_cfg, + }, + { + "qcom,switching-freq", + &cfg->switch_freq, + .cfg = &pm8941_wled_switch_freq_cfg, + }, + { + "qcom,num-strings", + &cfg->num_strings, + .cfg = &pm8941_wled_num_strings_cfg, + }, + }; + const struct { + const char *name; + bool *val_ptr; + } bool_opts[] = { + { "qcom,cs-out", &cfg->cs_out_en, }, + { "qcom,ext-gen", &cfg->ext_gen, }, + { "qcom,cabc", &cfg->cabc_en, }, + }; + + rc = of_property_read_u32(dev->of_node, "reg", &val); + if (rc || val > 0xffff) { + dev_err(dev, "invalid IO resources\n"); + return rc ? rc : -EINVAL; + } + wled->addr = val; + + rc = of_property_read_string(dev->of_node, "label", &wled->name); + if (rc) + wled->name = dev->of_node->name; + + *cfg = pm8941_wled_config_defaults; + for (i = 0; i < ARRAY_SIZE(u32_opts); ++i) { + rc = of_property_read_u32(dev->of_node, u32_opts[i].name, &val); + if (rc == -EINVAL) { + continue; + } else if (rc) { + dev_err(dev, "error reading '%s'\n", u32_opts[i].name); + return rc; + } + + c = UINT_MAX; + for (j = 0; c != val; j++) { + c = pm8941_wled_values(u32_opts[i].cfg, j); + if (c == UINT_MAX) { + dev_err(dev, "invalid value for '%s'\n", + u32_opts[i].name); + return -EINVAL; + } + } + + dev_dbg(dev, "'%s' = %u\n", u32_opts[i].name, c); + *u32_opts[i].val_ptr = j; + } + + for (i = 0; i < ARRAY_SIZE(bool_opts); ++i) { + if (of_property_read_bool(dev->of_node, bool_opts[i].name)) + *bool_opts[i].val_ptr = true; + } + + cfg->num_strings = cfg->num_strings + 1; + + return 0; +} + +static const struct backlight_ops pm8941_wled_ops = { + .update_status = pm8941_wled_update_status, +}; + +static int pm8941_wled_probe(struct platform_device *pdev) +{ + struct backlight_properties props; + struct backlight_device *bl; + struct pm8941_wled *wled; + struct regmap *regmap; + u32 val; + int rc; + + regmap = dev_get_regmap(pdev->dev.parent, NULL); + if (!regmap) { + dev_err(&pdev->dev, "Unable to get regmap\n"); + return -EINVAL; + } + + wled = devm_kzalloc(&pdev->dev, sizeof(*wled), GFP_KERNEL); + if (!wled) + return -ENOMEM; + + wled->regmap = regmap; + + rc = pm8941_wled_configure(wled, &pdev->dev); + if (rc) + return rc; + + rc = pm8941_wled_setup(wled); + if (rc) + return rc; + + val = PM8941_WLED_DEFAULT_BRIGHTNESS; + of_property_read_u32(pdev->dev.of_node, "default-brightness", &val); + + memset(&props, 0, sizeof(struct backlight_properties)); + props.type = BACKLIGHT_RAW; + props.brightness = val; + props.max_brightness = PM8941_WLED_REG_VAL_MAX; + bl = devm_backlight_device_register(&pdev->dev, wled->name, + &pdev->dev, wled, + &pm8941_wled_ops, &props); + return PTR_ERR_OR_ZERO(bl); +}; + +static const struct of_device_id pm8941_wled_match_table[] = { + { .compatible = "qcom,pm8941-wled" }, + {} +}; +MODULE_DEVICE_TABLE(of, pm8941_wled_match_table); + +static struct platform_driver pm8941_wled_driver = { + .probe = pm8941_wled_probe, + .driver = { + .name = "pm8941-wled", + .of_match_table = pm8941_wled_match_table, + }, +}; + +module_platform_driver(pm8941_wled_driver); + +MODULE_DESCRIPTION("pm8941 wled driver"); +MODULE_LICENSE("GPL v2"); diff --git a/kernel/drivers/video/backlight/pwm_bl.c b/kernel/drivers/video/backlight/pwm_bl.c index 6897f1c1b..ae3c6b6fd 100644 --- a/kernel/drivers/video/backlight/pwm_bl.c +++ b/kernel/drivers/video/backlight/pwm_bl.c @@ -241,7 +241,8 @@ static int pwm_backlight_probe(struct platform_device *pdev) pb->dev = &pdev->dev; pb->enabled = false; - pb->enable_gpio = devm_gpiod_get_optional(&pdev->dev, "enable"); + pb->enable_gpio = devm_gpiod_get_optional(&pdev->dev, "enable", + GPIOD_OUT_HIGH); if (IS_ERR(pb->enable_gpio)) { ret = PTR_ERR(pb->enable_gpio); goto err_alloc; @@ -263,9 +264,6 @@ static int pwm_backlight_probe(struct platform_device *pdev) pb->enable_gpio = gpio_to_desc(data->enable_gpio); } - if (pb->enable_gpio) - gpiod_direction_output(pb->enable_gpio, 1); - pb->power_supply = devm_regulator_get(&pdev->dev, "power"); if (IS_ERR(pb->power_supply)) { ret = PTR_ERR(pb->power_supply); @@ -273,19 +271,18 @@ static int pwm_backlight_probe(struct platform_device *pdev) } pb->pwm = devm_pwm_get(&pdev->dev, NULL); - if (IS_ERR(pb->pwm)) { - ret = PTR_ERR(pb->pwm); - if (ret == -EPROBE_DEFER) - goto err_alloc; - + if (IS_ERR(pb->pwm) && PTR_ERR(pb->pwm) != -EPROBE_DEFER + && !pdev->dev.of_node) { dev_err(&pdev->dev, "unable to request PWM, trying legacy API\n"); pb->legacy = true; pb->pwm = pwm_request(data->pwm_id, "pwm-backlight"); - if (IS_ERR(pb->pwm)) { - dev_err(&pdev->dev, "unable to request legacy PWM\n"); - ret = PTR_ERR(pb->pwm); - goto err_alloc; - } + } + + if (IS_ERR(pb->pwm)) { + ret = PTR_ERR(pb->pwm); + if (ret != -EPROBE_DEFER) + dev_err(&pdev->dev, "unable to request PWM\n"); + goto err_alloc; } dev_dbg(&pdev->dev, "got pwm for backlight\n"); diff --git a/kernel/drivers/video/backlight/s6e63m0.c b/kernel/drivers/video/backlight/s6e63m0.c index 28bfa127f..3c4a22a30 100644 --- a/kernel/drivers/video/backlight/s6e63m0.c +++ b/kernel/drivers/video/backlight/s6e63m0.c @@ -842,7 +842,6 @@ static void s6e63m0_shutdown(struct spi_device *spi) static struct spi_driver s6e63m0_driver = { .driver = { .name = "s6e63m0", - .owner = THIS_MODULE, .pm = &s6e63m0_pm_ops, }, .probe = s6e63m0_probe, diff --git a/kernel/drivers/video/backlight/sky81452-backlight.c b/kernel/drivers/video/backlight/sky81452-backlight.c index 052fa1bac..d414c7a3a 100644 --- a/kernel/drivers/video/backlight/sky81452-backlight.c +++ b/kernel/drivers/video/backlight/sky81452-backlight.c @@ -65,7 +65,7 @@ static int sky81452_bl_update_status(struct backlight_device *bd) if (brightness > 0) { ret = regmap_write(regmap, SKY81452_REG0, brightness - 1); - if (IS_ERR_VALUE(ret)) + if (ret < 0) return ret; return regmap_update_bits(regmap, SKY81452_REG1, SKY81452_EN, @@ -87,12 +87,12 @@ static ssize_t sky81452_bl_store_enable(struct device *dev, int ret; ret = kstrtoul(buf, 16, &value); - if (IS_ERR_VALUE(ret)) + if (ret < 0) return ret; ret = regmap_update_bits(regmap, SKY81452_REG1, SKY81452_EN, value << CTZ(SKY81452_EN)); - if (IS_ERR_VALUE(ret)) + if (ret < 0) return ret; return count; @@ -108,7 +108,7 @@ static ssize_t sky81452_bl_show_open_short(struct device *dev, reg = !strcmp(attr->attr.name, "open") ? SKY81452_REG5 : SKY81452_REG4; ret = regmap_read(regmap, reg, &value); - if (IS_ERR_VALUE(ret)) + if (ret < 0) return ret; if (value & SKY81452_SHRT) { @@ -136,7 +136,7 @@ static ssize_t sky81452_bl_show_fault(struct device *dev, int ret; ret = regmap_read(regmap, SKY81452_REG4, &value); - if (IS_ERR_VALUE(ret)) + if (ret < 0) return ret; *buf = 0; @@ -196,7 +196,7 @@ static struct sky81452_bl_platform_data *sky81452_bl_parse_dt( pdata->gpio_enable = of_get_gpio(np, 0); ret = of_property_count_u32_elems(np, "led-sources"); - if (IS_ERR_VALUE(ret)) { + if (ret < 0) { pdata->enable = SKY81452_EN >> CTZ(SKY81452_EN); } else { num_entry = ret; @@ -205,7 +205,7 @@ static struct sky81452_bl_platform_data *sky81452_bl_parse_dt( ret = of_property_read_u32_array(np, "led-sources", sources, num_entry); - if (IS_ERR_VALUE(ret)) { + if (ret < 0) { dev_err(dev, "led-sources node is invalid.\n"); return ERR_PTR(-EINVAL); } @@ -218,12 +218,12 @@ static struct sky81452_bl_platform_data *sky81452_bl_parse_dt( ret = of_property_read_u32(np, "skyworks,short-detection-threshold-volt", &pdata->short_detection_threshold); - if (IS_ERR_VALUE(ret)) + if (ret < 0) pdata->short_detection_threshold = 7; ret = of_property_read_u32(np, "skyworks,current-limit-mA", &pdata->boost_current_limit); - if (IS_ERR_VALUE(ret)) + if (ret < 0) pdata->boost_current_limit = 2750; of_node_put(np); @@ -278,14 +278,14 @@ static int sky81452_bl_probe(struct platform_device *pdev) if (gpio_is_valid(pdata->gpio_enable)) { ret = devm_gpio_request_one(dev, pdata->gpio_enable, GPIOF_OUT_INIT_HIGH, "sky81452-en"); - if (IS_ERR_VALUE(ret)) { + if (ret < 0) { dev_err(dev, "failed to request GPIO. err=%d\n", ret); return ret; } } ret = sky81452_bl_init_device(regmap, pdata); - if (IS_ERR_VALUE(ret)) { + if (ret < 0) { dev_err(dev, "failed to initialize. err=%d\n", ret); return ret; } @@ -302,8 +302,8 @@ static int sky81452_bl_probe(struct platform_device *pdev) platform_set_drvdata(pdev, bd); - ret = sysfs_create_group(&bd->dev.kobj, &sky81452_bl_attr_group); - if (IS_ERR_VALUE(ret)) { + ret = sysfs_create_group(&bd->dev.kobj, &sky81452_bl_attr_group); + if (ret < 0) { dev_err(dev, "failed to create attribute. err=%d\n", ret); return ret; } diff --git a/kernel/drivers/video/backlight/tdo24m.c b/kernel/drivers/video/backlight/tdo24m.c index 30afce33e..eab1f842f 100644 --- a/kernel/drivers/video/backlight/tdo24m.c +++ b/kernel/drivers/video/backlight/tdo24m.c @@ -437,7 +437,6 @@ static void tdo24m_shutdown(struct spi_device *spi) static struct spi_driver tdo24m_driver = { .driver = { .name = "tdo24m", - .owner = THIS_MODULE, .pm = &tdo24m_pm_ops, }, .probe = tdo24m_probe, diff --git a/kernel/drivers/video/backlight/tosa_bl.c b/kernel/drivers/video/backlight/tosa_bl.c index 3ad676558..83742d806 100644 --- a/kernel/drivers/video/backlight/tosa_bl.c +++ b/kernel/drivers/video/backlight/tosa_bl.c @@ -158,6 +158,7 @@ static const struct i2c_device_id tosa_bl_id[] = { { "tosa-bl", 0 }, { }, }; +MODULE_DEVICE_TABLE(i2c, tosa_bl_id); static struct i2c_driver tosa_bl_driver = { .driver = { diff --git a/kernel/drivers/video/backlight/tosa_lcd.c b/kernel/drivers/video/backlight/tosa_lcd.c index f08d641cc..6a41ea927 100644 --- a/kernel/drivers/video/backlight/tosa_lcd.c +++ b/kernel/drivers/video/backlight/tosa_lcd.c @@ -263,7 +263,6 @@ static SIMPLE_DEV_PM_OPS(tosa_lcd_pm_ops, tosa_lcd_suspend, tosa_lcd_resume); static struct spi_driver tosa_lcd_driver = { .driver = { .name = "tosa-lcd", - .owner = THIS_MODULE, .pm = &tosa_lcd_pm_ops, }, .probe = tosa_lcd_probe, diff --git a/kernel/drivers/video/backlight/vgg2432a4.c b/kernel/drivers/video/backlight/vgg2432a4.c index d538947a6..242a9948f 100644 --- a/kernel/drivers/video/backlight/vgg2432a4.c +++ b/kernel/drivers/video/backlight/vgg2432a4.c @@ -251,7 +251,6 @@ static SIMPLE_DEV_PM_OPS(vgg2432a4_pm_ops, vgg2432a4_suspend, vgg2432a4_resume); static struct spi_driver vgg2432a4_driver = { .driver = { .name = "VGG2432A4", - .owner = THIS_MODULE, .pm = &vgg2432a4_pm_ops, }, .probe = vgg2432a4_probe, diff --git a/kernel/drivers/video/console/Kconfig b/kernel/drivers/video/console/Kconfig index ba97efc3b..38da6e299 100644 --- a/kernel/drivers/video/console/Kconfig +++ b/kernel/drivers/video/console/Kconfig @@ -9,7 +9,7 @@ config VGA_CONSOLE depends on !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && \ !SUPERH && !BLACKFIN && !AVR32 && !MN10300 && !CRIS && \ (!ARM || ARCH_FOOTBRIDGE || ARCH_INTEGRATOR || ARCH_NETWINDER) && \ - !ARM64 + !ARM64 && !ARC && !MICROBLAZE default y help Saying Y here will allow you to use Linux in text mode through a diff --git a/kernel/drivers/video/console/fbcon.c b/kernel/drivers/video/console/fbcon.c index b97210671..6e92917ba 100644 --- a/kernel/drivers/video/console/fbcon.c +++ b/kernel/drivers/video/console/fbcon.c @@ -402,7 +402,7 @@ static void cursor_timer_handler(unsigned long dev_addr) struct fbcon_ops *ops = info->fbcon_par; queue_work(system_power_efficient_wq, &info->queue); - mod_timer(&ops->cursor_timer, jiffies + HZ/5); + mod_timer(&ops->cursor_timer, jiffies + ops->cur_blink_jiffies); } static void fbcon_add_cursor_timer(struct fb_info *info) @@ -417,7 +417,7 @@ static void fbcon_add_cursor_timer(struct fb_info *info) init_timer(&ops->cursor_timer); ops->cursor_timer.function = cursor_timer_handler; - ops->cursor_timer.expires = jiffies + HZ / 5; + ops->cursor_timer.expires = jiffies + ops->cur_blink_jiffies; ops->cursor_timer.data = (unsigned long ) info; add_timer(&ops->cursor_timer); ops->flags |= FBCON_FLAGS_CURSOR_TIMER; @@ -709,6 +709,7 @@ static int con2fb_acquire_newinfo(struct vc_data *vc, struct fb_info *info, } if (!err) { + ops->cur_blink_jiffies = HZ / 5; info->fbcon_par = ops; if (vc) @@ -956,6 +957,7 @@ static const char *fbcon_startup(void) ops->currcon = -1; ops->graphics = 1; ops->cur_rotate = -1; + ops->cur_blink_jiffies = HZ / 5; info->fbcon_par = ops; p->con_rotate = initial_rotation; set_blitting_type(vc, info); @@ -1093,6 +1095,7 @@ static void fbcon_init(struct vc_data *vc, int init) con_copy_unimap(vc, svc); ops = info->fbcon_par; + ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); p->con_rotate = initial_rotation; set_blitting_type(vc, info); @@ -1306,6 +1309,8 @@ static void fbcon_cursor(struct vc_data *vc, int mode) int y; int c = scr_readw((u16 *) vc->vc_pos); + ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); + if (fbcon_is_inactive(vc, info) || vc->vc_deccm != 1) return; diff --git a/kernel/drivers/video/console/fbcon.h b/kernel/drivers/video/console/fbcon.h index 6bd2e0c7f..7aaa4eabb 100644 --- a/kernel/drivers/video/console/fbcon.h +++ b/kernel/drivers/video/console/fbcon.h @@ -70,6 +70,7 @@ struct fbcon_ops { struct fb_cursor cursor_state; struct display *p; int currcon; /* Current VC. */ + int cur_blink_jiffies; int cursor_flash; int cursor_reset; int blank_state; diff --git a/kernel/drivers/video/console/newport_con.c b/kernel/drivers/video/console/newport_con.c index a6ab92998..bb4e96255 100644 --- a/kernel/drivers/video/console/newport_con.c +++ b/kernel/drivers/video/console/newport_con.c @@ -687,7 +687,7 @@ static int newport_scroll(struct vc_data *vc, int t, int b, int dir, static void newport_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, int h, int w) { - short xs, ys, xe, ye, xoffs, yoffs, tmp; + short xs, ys, xe, ye, xoffs, yoffs; xs = sx << 3; xe = ((sx + w) << 3) - 1; @@ -701,9 +701,7 @@ static void newport_bmove(struct vc_data *vc, int sy, int sx, int dy, yoffs = (dy - sy) << 4; if (xoffs > 0) { /* move to the right, exchange starting points */ - tmp = xe; - xe = xs; - xs = tmp; + swap(xe, xs); } newport_wait(npregs); npregs->set.drawmode0 = (NPORT_DMODE0_S2S | NPORT_DMODE0_BLOCK | diff --git a/kernel/drivers/video/fbdev/Kconfig b/kernel/drivers/video/fbdev/Kconfig index 109462303..e6d16d65e 100644 --- a/kernel/drivers/video/fbdev/Kconfig +++ b/kernel/drivers/video/fbdev/Kconfig @@ -298,7 +298,7 @@ config FB_ARMCLCD # Helper logic selected only by the ARM Versatile platform family. config PLAT_VERSATILE_CLCD - def_bool ARCH_VERSATILE || ARCH_REALVIEW || ARCH_VEXPRESS + def_bool ARCH_VERSATILE || ARCH_REALVIEW || ARCH_VEXPRESS || ARCH_INTEGRATOR depends on ARM depends on FB_ARMCLCD && FB=y @@ -1666,6 +1666,8 @@ config FB_TRIDENT select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT + select FB_DDC + select FB_MODE_HELPERS ---help--- This is the frame buffer device driver for Trident PCI/AGP chipsets. Supported chipset families are TGUI 9440/96XX, 3DImage, Blade3D @@ -2132,7 +2134,7 @@ config FB_UDL config FB_IBM_GXT4500 tristate "Framebuffer support for IBM GXT4000P/4500P/6000P/6500P adaptors" - depends on FB && PPC + depends on FB select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT @@ -2140,7 +2142,8 @@ config FB_IBM_GXT4500 Say Y here to enable support for the IBM GXT4000P/6000P and GXT4500P/6500P display adaptor based on Raster Engine RC1000, found on some IBM System P (pSeries) machines. This driver - doesn't use Geometry Engine GT1000. + doesn't use Geometry Engine GT1000. This driver also supports + AGP Fire GL2/3/4 cards on x86. config FB_PS3 tristate "PS3 GPU framebuffer driver" @@ -2326,13 +2329,6 @@ config FB_PRE_INIT_FB Select this option if display contents should be inherited as set by the bootloader. -config FB_MSM - tristate "MSM Framebuffer support" - depends on FB && ARCH_MSM - select FB_CFB_FILLRECT - select FB_CFB_COPYAREA - select FB_CFB_IMAGEBLIT - config FB_MX3 tristate "MX3 Framebuffer support" depends on FB && MX3_IPU @@ -2471,13 +2467,28 @@ config FB_SSD1307 tristate "Solomon SSD1307 framebuffer support" depends on FB && I2C depends on OF - depends on GPIOLIB + depends on GPIOLIB || COMPILE_TEST select FB_SYS_FOPS select FB_SYS_FILLRECT select FB_SYS_COPYAREA select FB_SYS_IMAGEBLIT select FB_DEFERRED_IO select PWM + select FB_BACKLIGHT help This driver implements support for the Solomon SSD1307 OLED controller over I2C. + +config FB_SM712 + tristate "Silicon Motion SM712 framebuffer support" + depends on FB && PCI + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + Frame buffer driver for the Silicon Motion SM710, SM712, SM721 + and SM722 chips. + + This driver is also available as a module. The module will be + called sm712fb. If you want to compile it as a module, say M + here and read . diff --git a/kernel/drivers/video/fbdev/Makefile b/kernel/drivers/video/fbdev/Makefile index 1979afffc..50ed1b4fc 100644 --- a/kernel/drivers/video/fbdev/Makefile +++ b/kernel/drivers/video/fbdev/Makefile @@ -126,12 +126,12 @@ obj-y += omap2/ obj-$(CONFIG_XEN_FBDEV_FRONTEND) += xen-fbfront.o obj-$(CONFIG_FB_CARMINE) += carminefb.o obj-$(CONFIG_FB_MB862XX) += mb862xx/ -obj-$(CONFIG_FB_MSM) += msm/ obj-$(CONFIG_FB_NUC900) += nuc900fb.o obj-$(CONFIG_FB_JZ4740) += jz4740_fb.o obj-$(CONFIG_FB_PUV3_UNIGFX) += fb-puv3.o obj-$(CONFIG_FB_HYPERV) += hyperv_fb.o obj-$(CONFIG_FB_OPENCORES) += ocfb.o +obj-$(CONFIG_FB_SM712) += sm712fb.o # Platform or fallback drivers go here obj-$(CONFIG_FB_UVESA) += uvesafb.o diff --git a/kernel/drivers/video/fbdev/amifb.c b/kernel/drivers/video/fbdev/amifb.c index 35f7900a0..1d702e13a 100644 --- a/kernel/drivers/video/fbdev/amifb.c +++ b/kernel/drivers/video/fbdev/amifb.c @@ -2052,7 +2052,7 @@ static void ami_set_sprite(const struct amifb_par *par) { copins *copl, *cops; u_short hs, vs, ve; - u_long pl, ps, pt; + u_long pl, ps; short mx, my; cops = copdisplay.list[currentcop][0]; @@ -2078,7 +2078,7 @@ static void ami_set_sprite(const struct amifb_par *par) if (mod2(vs)) { lofsprite[1 << par->crsr.fmode] = spr2hw_ctl(vs, hs, ve); shfsprite[1 << par->crsr.fmode] = spr2hw_ctl(vs + 1, hs, ve + 1); - pt = pl; pl = ps; ps = pt; + swap(pl, ps); } else { lofsprite[1 << par->crsr.fmode] = spr2hw_ctl(vs, hs, ve + 1); shfsprite[1 << par->crsr.fmode] = spr2hw_ctl(vs + 1, hs, ve); @@ -3705,8 +3705,8 @@ default_chipset: * access the videomem with writethrough cache */ info->fix.smem_start = (u_long)ZTWO_PADDR(videomemory); - videomemory = (u_long)ioremap_writethrough(info->fix.smem_start, - info->fix.smem_len); + videomemory = (u_long)ioremap_wt(info->fix.smem_start, + info->fix.smem_len); if (!videomemory) { dev_warn(&pdev->dev, "Unable to map videomem cached writethrough\n"); diff --git a/kernel/drivers/video/fbdev/arkfb.c b/kernel/drivers/video/fbdev/arkfb.c index b305a1e7c..6a317de70 100644 --- a/kernel/drivers/video/fbdev/arkfb.c +++ b/kernel/drivers/video/fbdev/arkfb.c @@ -26,13 +26,9 @@ #include /* Why should fb driver call console functions? because console_lock() */ #include