diff options
Diffstat (limited to 'drivers/video')
28 files changed, 155 insertions, 694 deletions
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index e0606c01e8ac..3c20af999893 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -8,10 +8,6 @@ menu "Graphics support" config HAVE_FB_ATMEL bool -config SH_MIPI_DSI - tristate - depends on (SUPERH || ARCH_SHMOBILE) && HAVE_CLK - config SH_LCD_MIPI_DSI bool diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index bddc8b17a4d8..288318ad21dd 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -164,18 +164,10 @@ static ssize_t brightness_show(struct device *dev, return sprintf(buf, "%d\n", bd->props.brightness); } -static ssize_t brightness_store(struct device *dev, - struct device_attribute *attr, const char *buf, size_t count) +int backlight_device_set_brightness(struct backlight_device *bd, + unsigned long brightness) { - int rc; - struct backlight_device *bd = to_backlight_device(dev); - unsigned long brightness; - - rc = kstrtoul(buf, 0, &brightness); - if (rc) - return rc; - - rc = -ENXIO; + int rc = -ENXIO; mutex_lock(&bd->ops_lock); if (bd->ops) { @@ -185,7 +177,7 @@ static ssize_t brightness_store(struct device *dev, pr_debug("set brightness to %lu\n", brightness); bd->props.brightness = brightness; backlight_update_status(bd); - rc = count; + rc = 0; } } mutex_unlock(&bd->ops_lock); @@ -194,6 +186,23 @@ static ssize_t brightness_store(struct device *dev, return rc; } +EXPORT_SYMBOL(backlight_device_set_brightness); + +static ssize_t brightness_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int rc; + struct backlight_device *bd = to_backlight_device(dev); + unsigned long brightness; + + rc = kstrtoul(buf, 0, &brightness); + if (rc) + return rc; + + rc = backlight_device_set_brightness(bd, brightness); + + return rc ? rc : count; +} static DEVICE_ATTR_RW(brightness); static ssize_t type_show(struct device *dev, struct device_attribute *attr, @@ -380,7 +389,7 @@ struct backlight_device *backlight_device_register(const char *name, } EXPORT_SYMBOL(backlight_device_register); -bool backlight_device_registered(enum backlight_type type) +struct backlight_device *backlight_device_get_by_type(enum backlight_type type) { bool found = false; struct backlight_device *bd; @@ -394,9 +403,9 @@ bool backlight_device_registered(enum backlight_type type) } mutex_unlock(&backlight_dev_list_mutex); - return found; + return found ? bd : NULL; } -EXPORT_SYMBOL(backlight_device_registered); +EXPORT_SYMBOL(backlight_device_get_by_type); /** * backlight_device_unregister - unregisters a backlight device object. diff --git a/drivers/video/backlight/lm3630a_bl.c b/drivers/video/backlight/lm3630a_bl.c index 35fe4825a454..60d6c2ac87aa 100644 --- a/drivers/video/backlight/lm3630a_bl.c +++ b/drivers/video/backlight/lm3630a_bl.c @@ -162,7 +162,7 @@ static int lm3630a_intr_config(struct lm3630a_chip *pchip) static void lm3630a_pwm_ctrl(struct lm3630a_chip *pchip, int br, int br_max) { - unsigned int period = pwm_get_period(pchip->pwmd); + unsigned int period = pchip->pdata->pwm_period; unsigned int duty = br * period / br_max; pwm_config(pchip->pwmd, duty, period); @@ -424,8 +424,13 @@ static int lm3630a_probe(struct i2c_client *client, dev_err(&client->dev, "fail : get pwm device\n"); return PTR_ERR(pchip->pwmd); } + + /* + * FIXME: pwm_apply_args() should be removed when switching to + * the atomic PWM API. + */ + pwm_apply_args(pchip->pwmd); } - pchip->pwmd->period = pdata->pwm_period; /* interrupt enable : irq 0 is not allowed */ pchip->irq = client->irq; diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c index daca9e6a2bb3..e5b14f52628f 100644 --- a/drivers/video/backlight/lp855x_bl.c +++ b/drivers/video/backlight/lp855x_bl.c @@ -246,6 +246,12 @@ static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br) return; lp->pwm = pwm; + + /* + * FIXME: pwm_apply_args() should be removed when switching to + * the atomic PWM API. + */ + pwm_apply_args(pwm); } pwm_config(lp->pwm, duty, period); diff --git a/drivers/video/backlight/lp8788_bl.c b/drivers/video/backlight/lp8788_bl.c index 5d583d7a517b..cf869ec90cce 100644 --- a/drivers/video/backlight/lp8788_bl.c +++ b/drivers/video/backlight/lp8788_bl.c @@ -145,6 +145,12 @@ static void lp8788_pwm_ctrl(struct lp8788_bl *bl, int br, int max_br) } bl->pwm = pwm; + + /* + * FIXME: pwm_apply_args() should be removed when switching to + * the atomic PWM API. + */ + pwm_apply_args(pwm); } pwm_config(bl->pwm, duty, period); diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c index 64f9e1b8655f..b2b366bb0f97 100644 --- a/drivers/video/backlight/pwm_bl.c +++ b/drivers/video/backlight/pwm_bl.c @@ -201,6 +201,7 @@ static int pwm_backlight_probe(struct platform_device *pdev) struct device_node *node = pdev->dev.of_node; struct pwm_bl_data *pb; int initial_blank = FB_BLANK_UNBLANK; + struct pwm_args pargs; int ret; if (!data) { @@ -307,16 +308,21 @@ static int pwm_backlight_probe(struct platform_device *pdev) dev_dbg(&pdev->dev, "got pwm for backlight\n"); /* + * FIXME: pwm_apply_args() should be removed when switching to + * the atomic PWM API. + */ + pwm_apply_args(pb->pwm); + + /* * The DT case will set the pwm_period_ns field to 0 and store the * period, parsed from the DT, in the PWM device. For the non-DT case, * set the period from platform data if it has not already been set * via the PWM lookup table. */ - pb->period = pwm_get_period(pb->pwm); - if (!pb->period && (data->pwm_period_ns > 0)) { + pwm_get_args(pb->pwm, &pargs); + pb->period = pargs.period; + if (!pb->period && (data->pwm_period_ns > 0)) pb->period = data->pwm_period_ns; - pwm_set_period(pb->pwm, data->pwm_period_ns); - } pb->lth_brightness = data->lth_brightness * (pb->period / pb->scale); diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 6e92917ba77a..afd3301ac40c 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c @@ -170,7 +170,7 @@ static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx, int height, int width); static int fbcon_switch(struct vc_data *vc); static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch); -static int fbcon_set_palette(struct vc_data *vc, unsigned char *table); +static int fbcon_set_palette(struct vc_data *vc, const unsigned char *table); static int fbcon_scrolldelta(struct vc_data *vc, int lines); /* @@ -2652,7 +2652,7 @@ static struct fb_cmap palette_cmap = { 0, 16, palette_red, palette_green, palette_blue, NULL }; -static int fbcon_set_palette(struct vc_data *vc, unsigned char *table) +static int fbcon_set_palette(struct vc_data *vc, const unsigned char *table) { struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; int i, j, k, depth; diff --git a/drivers/video/console/mdacon.c b/drivers/video/console/mdacon.c index 296e94561556..8edc062536a8 100644 --- a/drivers/video/console/mdacon.c +++ b/drivers/video/console/mdacon.c @@ -481,7 +481,7 @@ static int mdacon_switch(struct vc_data *c) return 1; /* redrawing needed */ } -static int mdacon_set_palette(struct vc_data *c, unsigned char *table) +static int mdacon_set_palette(struct vc_data *c, const unsigned char *table) { return -EINVAL; } diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c index bb4e96255974..0553dfe684ef 100644 --- a/drivers/video/console/newport_con.c +++ b/drivers/video/console/newport_con.c @@ -574,7 +574,7 @@ static int newport_font_set(struct vc_data *vc, struct console_font *font, unsig return newport_set_font(vc->vc_num, font); } -static int newport_set_palette(struct vc_data *vc, unsigned char *table) +static int newport_set_palette(struct vc_data *vc, const unsigned char *table) { return -EINVAL; } diff --git a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c index 026fd1215933..e440c2d9fe7c 100644 --- a/drivers/video/console/sticon.c +++ b/drivers/video/console/sticon.c @@ -79,7 +79,7 @@ static const char *sticon_startup(void) return "STI console"; } -static int sticon_set_palette(struct vc_data *c, unsigned char *table) +static int sticon_set_palette(struct vc_data *c, const unsigned char *table) { return -EINVAL; } diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c index 517f565b65d7..8bf911002cba 100644 --- a/drivers/video/console/vgacon.c +++ b/drivers/video/console/vgacon.c @@ -80,7 +80,6 @@ static void vgacon_deinit(struct vc_data *c); static void vgacon_cursor(struct vc_data *c, int mode); static int vgacon_switch(struct vc_data *c); static int vgacon_blank(struct vc_data *c, int blank, int mode_switch); -static int vgacon_set_palette(struct vc_data *vc, unsigned char *table); static int vgacon_scrolldelta(struct vc_data *c, int lines); static int vgacon_set_origin(struct vc_data *c); static void vgacon_save_screen(struct vc_data *c); @@ -847,7 +846,7 @@ static int vgacon_switch(struct vc_data *c) return 0; /* Redrawing not needed */ } -static void vga_set_palette(struct vc_data *vc, unsigned char *table) +static void vga_set_palette(struct vc_data *vc, const unsigned char *table) { int i, j; @@ -860,7 +859,7 @@ static void vga_set_palette(struct vc_data *vc, unsigned char *table) } } -static int vgacon_set_palette(struct vc_data *vc, unsigned char *table) +static int vgacon_set_palette(struct vc_data *vc, const unsigned char *table) { #ifdef CAN_LOAD_PALETTE if (vga_video_type != VIDEO_TYPE_VGAC || vga_palette_blanked diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig index 983280e8d93f..88b008fb8a4e 100644 --- a/drivers/video/fbdev/Kconfig +++ b/drivers/video/fbdev/Kconfig @@ -761,7 +761,7 @@ config FB_VESA config FB_EFI bool "EFI-based Framebuffer Support" - depends on (FB = y) && X86 && EFI + depends on (FB = y) && !IA64 && EFI select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT @@ -1993,7 +1993,6 @@ config FB_SH_MOBILE_LCDC select FB_SYS_FOPS select FB_DEFERRED_IO select FB_BACKLIGHT - select SH_MIPI_DSI if SH_LCD_MIPI_DSI ---help--- Frame buffer driver for the on-chip SH-Mobile LCD controller. diff --git a/drivers/video/fbdev/Makefile b/drivers/video/fbdev/Makefile index 65fb15075c8f..f6731867dd26 100644 --- a/drivers/video/fbdev/Makefile +++ b/drivers/video/fbdev/Makefile @@ -117,7 +117,6 @@ obj-$(CONFIG_FB_SM501) += sm501fb.o obj-$(CONFIG_FB_UDL) += udlfb.o obj-$(CONFIG_FB_SMSCUFX) += smscufx.o obj-$(CONFIG_FB_XILINX) += xilinxfb.o -obj-$(CONFIG_SH_MIPI_DSI) += sh_mipi_dsi.o obj-$(CONFIG_FB_SH_MOBILE_MERAM) += sh_mobile_meram.o obj-$(CONFIG_FB_SH_MOBILE_LCDC) += sh_mobile_lcdcfb.o obj-$(CONFIG_FB_OMAP) += omap/ diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c index 93e66a9148b9..9b158869cb89 100644 --- a/drivers/video/fbdev/amba-clcd.c +++ b/drivers/video/fbdev/amba-clcd.c @@ -34,8 +34,6 @@ #include <video/of_display_timing.h> #include <video/videomode.h> -#include <asm/sizes.h> - #define to_clcd(info) container_of(info, struct clcd_fb, fb) /* This is limited to 16 characters when displayed by X startup */ diff --git a/drivers/video/fbdev/core/fb_defio.c b/drivers/video/fbdev/core/fb_defio.c index 57721c73177f..74b5bcac8bf2 100644 --- a/drivers/video/fbdev/core/fb_defio.c +++ b/drivers/video/fbdev/core/fb_defio.c @@ -164,7 +164,7 @@ static const struct address_space_operations fb_deferred_io_aops = { .set_page_dirty = fb_deferred_io_set_page_dirty, }; -static int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) +int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) { vma->vm_ops = &fb_deferred_io_vm_ops; vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP; @@ -173,6 +173,7 @@ static int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) vma->vm_private_data = info; return 0; } +EXPORT_SYMBOL(fb_deferred_io_mmap); /* workqueue callback */ static void fb_deferred_io_work(struct work_struct *work) diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 4e73b6f6b1c0..76c1ad96fb37 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -1854,17 +1854,31 @@ EXPORT_SYMBOL(fb_set_suspend); static int __init fbmem_init(void) { - proc_create("fb", 0, NULL, &fb_proc_fops); + int ret; + + if (!proc_create("fb", 0, NULL, &fb_proc_fops)) + return -ENOMEM; - if (register_chrdev(FB_MAJOR,"fb",&fb_fops)) + ret = register_chrdev(FB_MAJOR, "fb", &fb_fops); + if (ret) { printk("unable to get major %d for fb devs\n", FB_MAJOR); + goto err_chrdev; + } fb_class = class_create(THIS_MODULE, "graphics"); if (IS_ERR(fb_class)) { - printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class)); + ret = PTR_ERR(fb_class); + pr_warn("Unable to create fb class; errno = %d\n", ret); fb_class = NULL; + goto err_class; } return 0; + +err_class: + unregister_chrdev(FB_MAJOR, "fb"); +err_chrdev: + remove_proc_entry("fb", NULL); + return ret; } #ifdef MODULE diff --git a/drivers/video/fbdev/da8xx-fb.c b/drivers/video/fbdev/da8xx-fb.c index d8d583d32a37..c229b1a0d13b 100644 --- a/drivers/video/fbdev/da8xx-fb.c +++ b/drivers/video/fbdev/da8xx-fb.c @@ -713,7 +713,7 @@ static int da8xx_fb_config_clk_divider(struct da8xx_fb_par *par, if (par->lcdc_clk_rate != lcdc_clk_rate) { ret = clk_set_rate(par->lcdc_clk, lcdc_clk_rate); - if (IS_ERR_VALUE(ret)) { + if (ret) { dev_err(par->dev, "unable to set clock rate at %u\n", lcdc_clk_rate); @@ -784,7 +784,7 @@ static int lcd_init(struct da8xx_fb_par *par, const struct lcd_ctrl_config *cfg, int ret = 0; ret = da8xx_fb_calc_config_clk_divider(par, panel); - if (IS_ERR_VALUE(ret)) { + if (ret) { dev_err(par->dev, "unable to configure clock\n"); return ret; } diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c index 95d293b7445a..924bad45c176 100644 --- a/drivers/video/fbdev/efifb.c +++ b/drivers/video/fbdev/efifb.c @@ -6,16 +6,14 @@ * */ -#include <linux/module.h> #include <linux/kernel.h> +#include <linux/efi.h> #include <linux/errno.h> #include <linux/fb.h> #include <linux/platform_device.h> #include <linux/screen_info.h> -#include <linux/dmi.h> -#include <linux/pci.h> #include <video/vga.h> -#include <asm/sysfb.h> +#include <asm/efi.h> static bool request_mem_succeeded = false; @@ -85,21 +83,13 @@ static struct fb_ops efifb_ops = { static int efifb_setup(char *options) { char *this_opt; - int i; if (options && *options) { while ((this_opt = strsep(&options, ",")) != NULL) { if (!*this_opt) continue; - for (i = 0; i < M_UNKNOWN; i++) { - if (efifb_dmi_list[i].base != 0 && - !strcmp(this_opt, efifb_dmi_list[i].optname)) { - screen_info.lfb_base = efifb_dmi_list[i].base; - screen_info.lfb_linelength = efifb_dmi_list[i].stride; - screen_info.lfb_width = efifb_dmi_list[i].width; - screen_info.lfb_height = efifb_dmi_list[i].height; - } - } + efifb_setup_from_dmi(&screen_info, this_opt); + if (!strncmp(this_opt, "base:", 5)) screen_info.lfb_base = simple_strtoul(this_opt+5, NULL, 0); else if (!strncmp(this_opt, "stride:", 7)) @@ -247,10 +237,8 @@ static int efifb_probe(struct platform_device *dev) goto err_release_fb; } - printk(KERN_INFO "efifb: framebuffer at 0x%lx, mapped to 0x%p, " - "using %dk, total %dk\n", - efifb_fix.smem_start, info->screen_base, - size_remap/1024, size_total/1024); + printk(KERN_INFO "efifb: framebuffer at 0x%lx, using %dk, total %dk\n", + efifb_fix.smem_start, size_remap/1024, size_total/1024); printk(KERN_INFO "efifb: mode is %dx%dx%d, linelength=%d, pages=%d\n", efifb_defined.xres, efifb_defined.yres, efifb_defined.bits_per_pixel, efifb_fix.line_length, @@ -338,5 +326,4 @@ static struct platform_driver efifb_driver = { .remove = efifb_remove, }; -module_platform_driver(efifb_driver); -MODULE_LICENSE("GPL"); +builtin_platform_driver(efifb_driver); diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c index e2451bdb4525..2fd49b2358f8 100644 --- a/drivers/video/fbdev/hyperv_fb.c +++ b/drivers/video/fbdev/hyperv_fb.c @@ -743,7 +743,7 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info) err3: iounmap(fb_virt); err2: - release_mem_region(par->mem->start, screen_fb_size); + vmbus_free_mmio(par->mem->start, screen_fb_size); par->mem = NULL; err1: if (!gen2vm) @@ -758,7 +758,7 @@ static void hvfb_putmem(struct fb_info *info) struct hvfb_par *par = info->par; iounmap(info->screen_base); - release_mem_region(par->mem->start, screen_fb_size); + vmbus_free_mmio(par->mem->start, screen_fb_size); par->mem = NULL; } diff --git a/drivers/video/fbdev/imxfb.c b/drivers/video/fbdev/imxfb.c index 76b6a7784b06..fe0c4eeff2e4 100644 --- a/drivers/video/fbdev/imxfb.c +++ b/drivers/video/fbdev/imxfb.c @@ -473,11 +473,12 @@ static int imxfb_set_par(struct fb_info *info) return 0; } -static void imxfb_enable_controller(struct imxfb_info *fbi) +static int imxfb_enable_controller(struct imxfb_info *fbi) { + int ret; if (fbi->enabled) - return; + return 0; pr_debug("Enabling LCD controller\n"); @@ -496,10 +497,29 @@ static void imxfb_enable_controller(struct imxfb_info *fbi) */ writel(RMCR_LCDC_EN_MX1, fbi->regs + LCDC_RMCR); - clk_prepare_enable(fbi->clk_ipg); - clk_prepare_enable(fbi->clk_ahb); - clk_prepare_enable(fbi->clk_per); + ret = clk_prepare_enable(fbi->clk_ipg); + if (ret) + goto err_enable_ipg; + + ret = clk_prepare_enable(fbi->clk_ahb); + if (ret) + goto err_enable_ahb; + + ret = clk_prepare_enable(fbi->clk_per); + if (ret) + goto err_enable_per; + fbi->enabled = true; + return 0; + +err_enable_per: + clk_disable_unprepare(fbi->clk_ahb); +err_enable_ahb: + clk_disable_unprepare(fbi->clk_ipg); +err_enable_ipg: + writel(0, fbi->regs + LCDC_RMCR); + + return ret; } static void imxfb_disable_controller(struct imxfb_info *fbi) @@ -510,8 +530,8 @@ static void imxfb_disable_controller(struct imxfb_info *fbi) pr_debug("Disabling LCD controller\n"); clk_disable_unprepare(fbi->clk_per); - clk_disable_unprepare(fbi->clk_ipg); clk_disable_unprepare(fbi->clk_ahb); + clk_disable_unprepare(fbi->clk_ipg); fbi->enabled = false; writel(0, fbi->regs + LCDC_RMCR); @@ -532,8 +552,7 @@ static int imxfb_blank(int blank, struct fb_info *info) break; case FB_BLANK_UNBLANK: - imxfb_enable_controller(fbi); - break; + return imxfb_enable_controller(fbi); } return 0; } @@ -758,10 +777,11 @@ static int imxfb_lcd_get_power(struct lcd_device *lcddev) { struct imxfb_info *fbi = dev_get_drvdata(&lcddev->dev); - if (!IS_ERR(fbi->lcd_pwr)) - return regulator_is_enabled(fbi->lcd_pwr); + if (!IS_ERR(fbi->lcd_pwr) && + !regulator_is_enabled(fbi->lcd_pwr)) + return FB_BLANK_POWERDOWN; - return 1; + return FB_BLANK_UNBLANK; } static int imxfb_lcd_set_power(struct lcd_device *lcddev, int power) @@ -769,7 +789,7 @@ static int imxfb_lcd_set_power(struct lcd_device *lcddev, int power) struct imxfb_info *fbi = dev_get_drvdata(&lcddev->dev); if (!IS_ERR(fbi->lcd_pwr)) { - if (power) + if (power == FB_BLANK_UNBLANK) return regulator_enable(fbi->lcd_pwr); else return regulator_disable(fbi->lcd_pwr); diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c index 0eec073b3919..d63e59807707 100644 --- a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c +++ b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c @@ -1180,13 +1180,11 @@ static int dsi_regulator_init(struct platform_device *dsidev) return PTR_ERR(vdds_dsi); } - if (regulator_can_change_voltage(vdds_dsi)) { - r = regulator_set_voltage(vdds_dsi, 1800000, 1800000); - if (r) { - devm_regulator_put(vdds_dsi); - DSSERR("can't set the DSI regulator voltage\n"); - return r; - } + r = regulator_set_voltage(vdds_dsi, 1800000, 1800000); + if (r) { + devm_regulator_put(vdds_dsi); + DSSERR("can't set the DSI regulator voltage\n"); + return r; } dsi->vdds_dsi_reg = vdds_dsi; diff --git a/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c b/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c index 7103c659a534..2e71aec838b1 100644 --- a/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c +++ b/drivers/video/fbdev/omap2/omapfb/dss/hdmi4.c @@ -114,13 +114,11 @@ static int hdmi_init_regulator(void) return PTR_ERR(reg); } - if (regulator_can_change_voltage(reg)) { - r = regulator_set_voltage(reg, 1800000, 1800000); - if (r) { - devm_regulator_put(reg); - DSSWARN("can't set the regulator voltage\n"); - return r; - } + r = regulator_set_voltage(reg, 1800000, 1800000); + if (r) { + devm_regulator_put(reg); + DSSWARN("can't set the regulator voltage\n"); + return r; } hdmi.vdda_reg = reg; diff --git a/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c b/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c index a955a2c4c061..aade6d99662a 100644 --- a/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c +++ b/drivers/video/fbdev/omap2/omapfb/dss/hdmi5.c @@ -131,13 +131,11 @@ static int hdmi_init_regulator(void) return PTR_ERR(reg); } - if (regulator_can_change_voltage(reg)) { - r = regulator_set_voltage(reg, 1800000, 1800000); - if (r) { - devm_regulator_put(reg); - DSSWARN("can't set the regulator voltage\n"); - return r; - } + r = regulator_set_voltage(reg, 1800000, 1800000); + if (r) { + devm_regulator_put(reg); + DSSWARN("can't set the regulator voltage\n"); + return r; } hdmi.vdda_reg = reg; diff --git a/drivers/video/fbdev/omap2/omapfb/dss/hdmi5_core.c b/drivers/video/fbdev/omap2/omapfb/dss/hdmi5_core.c index 8ea531d2652c..bbfe7e2d4332 100644 --- a/drivers/video/fbdev/omap2/omapfb/dss/hdmi5_core.c +++ b/drivers/video/fbdev/omap2/omapfb/dss/hdmi5_core.c @@ -51,8 +51,8 @@ static void hdmi_core_ddc_init(struct hdmi_core_data *core) { void __iomem *base = core->base; const unsigned long long iclk = 266000000; /* DSS L3 ICLK */ - const unsigned ss_scl_high = 4000; /* ns */ - const unsigned ss_scl_low = 4700; /* ns */ + const unsigned ss_scl_high = 4600; /* ns */ + const unsigned ss_scl_low = 5400; /* ns */ const unsigned fs_scl_high = 600; /* ns */ const unsigned fs_scl_low = 1300; /* ns */ const unsigned sda_hold = 1000; /* ns */ @@ -442,7 +442,7 @@ static void hdmi_core_write_avi_infoframe(struct hdmi_core_data *core, c = (ptr[1] >> 6) & 0x3; m = (ptr[1] >> 4) & 0x3; - r = (ptr[1] >> 0) & 0x3; + r = (ptr[1] >> 0) & 0xf; itc = (ptr[2] >> 7) & 0x1; ec = (ptr[2] >> 4) & 0x7; diff --git a/drivers/video/fbdev/sh_mipi_dsi.c b/drivers/video/fbdev/sh_mipi_dsi.c deleted file mode 100644 index 8f6e8ff620d4..000000000000 --- a/drivers/video/fbdev/sh_mipi_dsi.c +++ /dev/null @@ -1,587 +0,0 @@ -/* - * Renesas SH-mobile MIPI DSI support - * - * Copyright (C) 2010 Guennadi Liakhovetski <g.liakhovetski@gmx.de> - * - * This is free software; you can redistribute it and/or modify - * it under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - */ - -#include <linux/bitmap.h> -#include <linux/clk.h> -#include <linux/delay.h> -#include <linux/init.h> -#include <linux/io.h> -#include <linux/platform_device.h> -#include <linux/pm_runtime.h> -#include <linux/slab.h> -#include <linux/string.h> -#include <linux/types.h> -#include <linux/module.h> - -#include <video/mipi_display.h> -#include <video/sh_mipi_dsi.h> -#include <video/sh_mobile_lcdc.h> - -#include "sh_mobile_lcdcfb.h" - -#define SYSCTRL 0x0000 -#define SYSCONF 0x0004 -#define TIMSET 0x0008 -#define RESREQSET0 0x0018 -#define RESREQSET1 0x001c -#define HSTTOVSET 0x0020 -#define LPRTOVSET 0x0024 -#define TATOVSET 0x0028 -#define PRTOVSET 0x002c -#define DSICTRL 0x0030 -#define DSIINTE 0x0060 -#define PHYCTRL 0x0070 - -/* relative to linkbase */ -#define DTCTR 0x0000 -#define VMCTR1 0x0020 -#define VMCTR2 0x0024 -#define VMLEN1 0x0028 -#define VMLEN2 0x002c -#define CMTSRTREQ 0x0070 -#define CMTSRTCTR 0x00d0 - -/* E.g., sh7372 has 2 MIPI-DSIs - one for each LCDC */ -#define MAX_SH_MIPI_DSI 2 - -struct sh_mipi { - struct sh_mobile_lcdc_entity entity; - - void __iomem *base; - void __iomem *linkbase; - struct clk *dsit_clk; - struct platform_device *pdev; -}; - -#define to_sh_mipi(e) container_of(e, struct sh_mipi, entity) - -static struct sh_mipi *mipi_dsi[MAX_SH_MIPI_DSI]; - -/* Protect the above array */ -static DEFINE_MUTEX(array_lock); - -static struct sh_mipi *sh_mipi_by_handle(int handle) -{ - if (handle >= ARRAY_SIZE(mipi_dsi) || handle < 0) - return NULL; - - return mipi_dsi[handle]; -} - -static int sh_mipi_send_short(struct sh_mipi *mipi, u8 dsi_cmd, - u8 cmd, u8 param) -{ - u32 data = (dsi_cmd << 24) | (cmd << 16) | (param << 8); - int cnt = 100; - - /* transmit a short packet to LCD panel */ - iowrite32(1 | data, mipi->linkbase + CMTSRTCTR); - iowrite32(1, mipi->linkbase + CMTSRTREQ); - - while ((ioread32(mipi->linkbase + CMTSRTREQ) & 1) && --cnt) - udelay(1); - - return cnt ? 0 : -ETIMEDOUT; -} - -#define LCD_CHAN2MIPI(c) ((c) < LCDC_CHAN_MAINLCD || (c) > LCDC_CHAN_SUBLCD ? \ - -EINVAL : (c) - 1) - -static int sh_mipi_dcs(int handle, u8 cmd) -{ - struct sh_mipi *mipi = sh_mipi_by_handle(LCD_CHAN2MIPI(handle)); - if (!mipi) - return -ENODEV; - return sh_mipi_send_short(mipi, MIPI_DSI_DCS_SHORT_WRITE, cmd, 0); -} - -static int sh_mipi_dcs_param(int handle, u8 cmd, u8 param) -{ - struct sh_mipi *mipi = sh_mipi_by_handle(LCD_CHAN2MIPI(handle)); - if (!mipi) - return -ENODEV; - return sh_mipi_send_short(mipi, MIPI_DSI_DCS_SHORT_WRITE_PARAM, cmd, - param); -} - -static void sh_mipi_dsi_enable(struct sh_mipi *mipi, bool enable) -{ - /* - * enable LCDC data tx, transition to LPS after completion of each HS - * packet - */ - iowrite32(0x00000002 | enable, mipi->linkbase + DTCTR); -} - -static void sh_mipi_shutdown(struct platform_device *pdev) -{ - struct sh_mipi *mipi = to_sh_mipi(platform_get_drvdata(pdev)); - - sh_mipi_dsi_enable(mipi, false); -} - -static int sh_mipi_setup(struct sh_mipi *mipi, const struct fb_videomode *mode) -{ - void __iomem *base = mipi->base; - struct sh_mipi_dsi_info *pdata = mipi->pdev->dev.platform_data; - u32 pctype, datatype, pixfmt, linelength, vmctr2; - u32 tmp, top, bottom, delay, div; - int bpp; - - /* - * Select data format. MIPI DSI is not hot-pluggable, so, we just use - * the default videomode. If this ever becomes a problem, We'll have to - * move this to mipi_display_on() above and use info->var.xres - */ - switch (pdata->data_format) { - case MIPI_RGB888: - pctype = 0; - datatype = MIPI_DSI_PACKED_PIXEL_STREAM_24; - pixfmt = MIPI_DCS_PIXEL_FMT_24BIT; - linelength = mode->xres * 3; - break; - case MIPI_RGB565: - pctype = 1; - datatype = MIPI_DSI_PACKED_PIXEL_STREAM_16; - pixfmt = MIPI_DCS_PIXEL_FMT_16BIT; - linelength = mode->xres * 2; - break; - case MIPI_RGB666_LP: - pctype = 2; - datatype = MIPI_DSI_PIXEL_STREAM_3BYTE_18; - pixfmt = MIPI_DCS_PIXEL_FMT_24BIT; - linelength = mode->xres * 3; - break; - case MIPI_RGB666: - pctype = 3; - datatype = MIPI_DSI_PACKED_PIXEL_STREAM_18; - pixfmt = MIPI_DCS_PIXEL_FMT_18BIT; - linelength = (mode->xres * 18 + 7) / 8; - break; - case MIPI_BGR888: - pctype = 8; - datatype = MIPI_DSI_PACKED_PIXEL_STREAM_24; - pixfmt = MIPI_DCS_PIXEL_FMT_24BIT; - linelength = mode->xres * 3; - break; - case MIPI_BGR565: - pctype = 9; - datatype = MIPI_DSI_PACKED_PIXEL_STREAM_16; - pixfmt = MIPI_DCS_PIXEL_FMT_16BIT; - linelength = mode->xres * 2; - break; - case MIPI_BGR666_LP: - pctype = 0xa; - datatype = MIPI_DSI_PIXEL_STREAM_3BYTE_18; - pixfmt = MIPI_DCS_PIXEL_FMT_24BIT; - linelength = mode->xres * 3; - break; - case MIPI_BGR666: - pctype = 0xb; - datatype = MIPI_DSI_PACKED_PIXEL_STREAM_18; - pixfmt = MIPI_DCS_PIXEL_FMT_18BIT; - linelength = (mode->xres * 18 + 7) / 8; - break; - case MIPI_YUYV: - pctype = 4; - datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16; - pixfmt = MIPI_DCS_PIXEL_FMT_16BIT; - linelength = mode->xres * 2; - break; - case MIPI_UYVY: - pctype = 5; - datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16; - pixfmt = MIPI_DCS_PIXEL_FMT_16BIT; - linelength = mode->xres * 2; - break; - case MIPI_YUV420_L: - pctype = 6; - datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12; - pixfmt = MIPI_DCS_PIXEL_FMT_12BIT; - linelength = (mode->xres * 12 + 7) / 8; - break; - case MIPI_YUV420: - pctype = 7; - datatype = MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12; - pixfmt = MIPI_DCS_PIXEL_FMT_12BIT; - /* Length of U/V line */ - linelength = (mode->xres + 1) / 2; - break; - default: - return -EINVAL; - } - - if (!pdata->lane) - return -EINVAL; - - /* reset DSI link */ - iowrite32(0x00000001, base + SYSCTRL); - /* Hold reset for 100 cycles of the slowest of bus, HS byte and LP clock */ - udelay(50); - iowrite32(0x00000000, base + SYSCTRL); - - /* setup DSI link */ - - /* - * T_wakeup = 0x7000 - * T_hs-trail = 3 - * T_hs-prepare = 3 - * T_clk-trail = 3 - * T_clk-prepare = 2 - */ - iowrite32(0x70003332, base + TIMSET); - /* no responses requested */ - iowrite32(0x00000000, base + RESREQSET0); - /* request response to packets of type 0x28 */ - iowrite32(0x00000100, base + RESREQSET1); - /* High-speed transmission timeout, default 0xffffffff */ - iowrite32(0x0fffffff, base + HSTTOVSET); - /* LP reception timeout, default 0xffffffff */ - iowrite32(0x0fffffff, base + LPRTOVSET); - /* Turn-around timeout, default 0xffffffff */ - iowrite32(0x0fffffff, base + TATOVSET); - /* Peripheral reset timeout, default 0xffffffff */ - iowrite32(0x0fffffff, base + PRTOVSET); - /* Interrupts not used, disable all */ - iowrite32(0, base + DSIINTE); - /* DSI-Tx bias on */ - iowrite32(0x00000001, base + PHYCTRL); - udelay(200); - /* Deassert resets, power on */ - iowrite32(0x03070001 | pdata->phyctrl, base + PHYCTRL); - - /* - * Default = ULPS enable | - * Contention detection enabled | - * EoT packet transmission enable | - * CRC check enable | - * ECC check enable - */ - bitmap_fill((unsigned long *)&tmp, pdata->lane); - tmp |= 0x00003700; - iowrite32(tmp, base + SYSCONF); - - /* setup l-bridge */ - - /* - * Enable transmission of all packets, - * transmit LPS after each HS packet completion - */ - iowrite32(0x00000006, mipi->linkbase + DTCTR); - /* VSYNC width = 2 (<< 17) */ - iowrite32((mode->vsync_len << pdata->vsynw_offset) | - (pdata->clksrc << 16) | (pctype << 12) | datatype, - mipi->linkbase + VMCTR1); - - /* - * Non-burst mode with sync pulses: VSE and HSE are output, - * HSA period allowed, no commands in LP - */ - vmctr2 = 0; - if (pdata->flags & SH_MIPI_DSI_VSEE) - vmctr2 |= 1 << 23; - if (pdata->flags & SH_MIPI_DSI_HSEE) - vmctr2 |= 1 << 22; - if (pdata->flags & SH_MIPI_DSI_HSAE) - vmctr2 |= 1 << 21; - if (pdata->flags & SH_MIPI_DSI_BL2E) - vmctr2 |= 1 << 17; - if (pdata->flags & SH_MIPI_DSI_HSABM) - vmctr2 |= 1 << 5; - if (pdata->flags & SH_MIPI_DSI_HBPBM) - vmctr2 |= 1 << 4; - if (pdata->flags & SH_MIPI_DSI_HFPBM) - vmctr2 |= 1 << 3; - iowrite32(vmctr2, mipi->linkbase + VMCTR2); - - /* - * VMLEN1 = RGBLEN | HSALEN - * - * see - * Video mode - Blanking Packet setting - */ - top = linelength << 16; /* RGBLEN */ - bottom = 0x00000001; - if (pdata->flags & SH_MIPI_DSI_HSABM) /* HSALEN */ - bottom = (pdata->lane * mode->hsync_len) - 10; - iowrite32(top | bottom , mipi->linkbase + VMLEN1); - - /* - * VMLEN2 = HBPLEN | HFPLEN - * - * see - * Video mode - Blanking Packet setting - */ - top = 0x00010000; - bottom = 0x00000001; - delay = 0; - - div = 1; /* HSbyteCLK is calculation base - * HS4divCLK = HSbyteCLK/2 - * HS6divCLK is not supported for now */ - if (pdata->flags & SH_MIPI_DSI_HS4divCLK) - div = 2; - - if (pdata->flags & SH_MIPI_DSI_HFPBM) { /* HBPLEN */ - top = mode->hsync_len + mode->left_margin; - top = ((pdata->lane * top / div) - 10) << 16; - } - if (pdata->flags & SH_MIPI_DSI_HBPBM) { /* HFPLEN */ - bottom = mode->right_margin; - bottom = (pdata->lane * bottom / div) - 12; - } - - bpp = linelength / mode->xres; /* byte / pixel */ - if ((pdata->lane / div) > bpp) { - tmp = mode->xres / bpp; /* output cycle */ - tmp = mode->xres - tmp; /* (input - output) cycle */ - delay = (pdata->lane * tmp); - } - - iowrite32(top | (bottom + delay) , mipi->linkbase + VMLEN2); - - msleep(5); - - /* setup LCD panel */ - - /* cf. drivers/video/omap/lcd_mipid.c */ - sh_mipi_dcs(pdata->channel, MIPI_DCS_EXIT_SLEEP_MODE); - msleep(120); - /* - * [7] - Page Address Mode - * [6] - Column Address Mode - * [5] - Page / Column Address Mode - * [4] - Display Device Line Refresh Order - * [3] - RGB/BGR Order - * [2] - Display Data Latch Data Order - * [1] - Flip Horizontal - * [0] - Flip Vertical - */ - sh_mipi_dcs_param(pdata->channel, MIPI_DCS_SET_ADDRESS_MODE, 0x00); - /* cf. set_data_lines() */ - sh_mipi_dcs_param(pdata->channel, MIPI_DCS_SET_PIXEL_FORMAT, - pixfmt << 4); - sh_mipi_dcs(pdata->channel, MIPI_DCS_SET_DISPLAY_ON); - - /* Enable timeout counters */ - iowrite32(0x00000f00, base + DSICTRL); - - return 0; -} - -static int mipi_display_on(struct sh_mobile_lcdc_entity *entity) -{ - struct sh_mipi *mipi = to_sh_mipi(entity); - struct sh_mipi_dsi_info *pdata = mipi->pdev->dev.platform_data; - int ret; - - pm_runtime_get_sync(&mipi->pdev->dev); - - ret = pdata->set_dot_clock(mipi->pdev, mipi->base, 1); - if (ret < 0) - goto mipi_display_on_fail1; - - ret = sh_mipi_setup(mipi, &entity->def_mode); - if (ret < 0) - goto mipi_display_on_fail2; - - sh_mipi_dsi_enable(mipi, true); - - return SH_MOBILE_LCDC_DISPLAY_CONNECTED; - -mipi_display_on_fail1: - pm_runtime_put_sync(&mipi->pdev->dev); -mipi_display_on_fail2: - pdata->set_dot_clock(mipi->pdev, mipi->base, 0); - - return ret; -} - -static void mipi_display_off(struct sh_mobile_lcdc_entity *entity) -{ - struct sh_mipi *mipi = to_sh_mipi(entity); - struct sh_mipi_dsi_info *pdata = mipi->pdev->dev.platform_data; - - sh_mipi_dsi_enable(mipi, false); - - pdata->set_dot_clock(mipi->pdev, mipi->base, 0); - - pm_runtime_put_sync(&mipi->pdev->dev); -} - -static const struct sh_mobile_lcdc_entity_ops mipi_ops = { - .display_on = mipi_display_on, - .display_off = mipi_display_off, -}; - -static int __init sh_mipi_probe(struct platform_device *pdev) -{ - struct sh_mipi *mipi; - struct sh_mipi_dsi_info *pdata = pdev->dev.platform_data; - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - struct resource *res2 = platform_get_resource(pdev, IORESOURCE_MEM, 1); - unsigned long rate, f_current; - int idx = pdev->id, ret; - - if (!res || !res2 || idx >= ARRAY_SIZE(mipi_dsi) || !pdata) - return -ENODEV; - - if (!pdata->set_dot_clock) - return -EINVAL; - - mutex_lock(&array_lock); - if (idx < 0) - for (idx = 0; idx < ARRAY_SIZE(mipi_dsi) && mipi_dsi[idx]; idx++) - ; - - if (idx == ARRAY_SIZE(mipi_dsi)) { - ret = -EBUSY; - goto efindslot; - } - - mipi = kzalloc(sizeof(*mipi), GFP_KERNEL); - if (!mipi) { - ret = -ENOMEM; - goto ealloc; - } - - mipi->entity.owner = THIS_MODULE; - mipi->entity.ops = &mipi_ops; - - if (!request_mem_region(res->start, resource_size(res), pdev->name)) { - dev_err(&pdev->dev, "MIPI register region already claimed\n"); - ret = -EBUSY; - goto ereqreg; - } - - mipi->base = ioremap(res->start, resource_size(res)); - if (!mipi->base) { - ret = -ENOMEM; - goto emap; - } - - if (!request_mem_region(res2->start, resource_size(res2), pdev->name)) { - dev_err(&pdev->dev, "MIPI register region 2 already claimed\n"); - ret = -EBUSY; - goto ereqreg2; - } - - mipi->linkbase = ioremap(res2->start, resource_size(res2)); - if (!mipi->linkbase) { - ret = -ENOMEM; - goto emap2; - } - - mipi->pdev = pdev; - - mipi->dsit_clk = clk_get(&pdev->dev, "dsit_clk"); - if (IS_ERR(mipi->dsit_clk)) { - ret = PTR_ERR(mipi->dsit_clk); - goto eclktget; - } - - f_current = clk_get_rate(mipi->dsit_clk); - /* 80MHz required by the datasheet */ - rate = clk_round_rate(mipi->dsit_clk, 80000000); - if (rate > 0 && rate != f_current) - ret = clk_set_rate(mipi->dsit_clk, rate); - else - ret = rate; - if (ret < 0) - goto esettrate; - - dev_dbg(&pdev->dev, "DSI-T clk %lu -> %lu\n", f_current, rate); - - ret = clk_enable(mipi->dsit_clk); - if (ret < 0) - goto eclkton; - - mipi_dsi[idx] = mipi; - - pm_runtime_enable(&pdev->dev); - pm_runtime_resume(&pdev->dev); - - mutex_unlock(&array_lock); - platform_set_drvdata(pdev, &mipi->entity); - - return 0; - -eclkton: -esettrate: - clk_put(mipi->dsit_clk); -eclktget: - iounmap(mipi->linkbase); -emap2: - release_mem_region(res2->start, resource_size(res2)); -ereqreg2: - iounmap(mipi->base); -emap: - release_mem_region(res->start, resource_size(res)); -ereqreg: - kfree(mipi); -ealloc: -efindslot: - mutex_unlock(&array_lock); - - return ret; -} - -static int sh_mipi_remove(struct platform_device *pdev) -{ - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - struct resource *res2 = platform_get_resource(pdev, IORESOURCE_MEM, 1); - struct sh_mipi *mipi = to_sh_mipi(platform_get_drvdata(pdev)); - int i, ret; - - mutex_lock(&array_lock); - - for (i = 0; i < ARRAY_SIZE(mipi_dsi) && mipi_dsi[i] != mipi; i++) - ; - - if (i == ARRAY_SIZE(mipi_dsi)) { - ret = -EINVAL; - } else { - ret = 0; - mipi_dsi[i] = NULL; - } - - mutex_unlock(&array_lock); - - if (ret < 0) - return ret; - - pm_runtime_disable(&pdev->dev); - clk_disable(mipi->dsit_clk); - clk_put(mipi->dsit_clk); - - iounmap(mipi->linkbase); - if (res2) - release_mem_region(res2->start, resource_size(res2)); - iounmap(mipi->base); - if (res) - release_mem_region(res->start, resource_size(res)); - kfree(mipi); - - return 0; -} - -static struct platform_driver sh_mipi_driver = { - .remove = sh_mipi_remove, - .shutdown = sh_mipi_shutdown, - .driver = { - .name = "sh-mipi-dsi", - }, -}; - -module_platform_driver_probe(sh_mipi_driver, sh_mipi_probe); - -MODULE_AUTHOR("Guennadi Liakhovetski <g.liakhovetski@gmx.de>"); -MODULE_DESCRIPTION("SuperH / ARM-shmobile MIPI DSI driver"); -MODULE_LICENSE("GPL v2"); diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c index fa3480815cdb..a9c45c89b15e 100644 --- a/drivers/video/fbdev/ssd1307fb.c +++ b/drivers/video/fbdev/ssd1307fb.c @@ -286,6 +286,7 @@ static int ssd1307fb_init(struct ssd1307fb_par *par) { int ret; u32 precharge, dclk, com_invdir, compins; + struct pwm_args pargs; if (par->device_info->need_pwm) { par->pwm = pwm_get(&par->client->dev, NULL); @@ -294,7 +295,15 @@ static int ssd1307fb_init(struct ssd1307fb_par *par) return PTR_ERR(par->pwm); } - par->pwm_period = pwm_get_period(par->pwm); + /* + * FIXME: pwm_apply_args() should be removed when switching to + * the atomic PWM API. + */ + pwm_apply_args(par->pwm); + + pwm_get_args(par->pwm, &pargs); + + par->pwm_period = pargs.period; /* Enable the PWM */ pwm_config(par->pwm, par->pwm_period / 2, par->pwm_period); pwm_enable(par->pwm); @@ -389,7 +398,7 @@ static int ssd1307fb_init(struct ssd1307fb_par *par) return ret; ret = ssd1307fb_write_cmd(par->client, - (par->device_info->need_chargepump & 0x1 << 2) & 0x14); + BIT(4) | (par->device_info->need_chargepump ? BIT(2) : 0)); if (ret < 0) return ret; diff --git a/drivers/video/fbdev/via/accel.c b/drivers/video/fbdev/via/accel.c index 4b67b8e6030a..eb3615c69987 100644 --- a/drivers/video/fbdev/via/accel.c +++ b/drivers/video/fbdev/via/accel.c @@ -358,7 +358,7 @@ int viafb_setup_engine(struct fb_info *info) viapar->shared->vq_vram_addr = viapar->fbmem_free; viapar->fbmem_used += VQ_SIZE; -#if defined(CONFIG_VIDEO_VIA_CAMERA) || defined(CONFIG_VIDEO_VIA_CAMERA_MODULE) +#if IS_ENABLED(CONFIG_VIDEO_VIA_CAMERA) /* * Set aside a chunk of framebuffer memory for the camera * driver. Someday this driver probably needs a proper allocator diff --git a/drivers/video/fbdev/via/via-core.c b/drivers/video/fbdev/via/via-core.c index 6e274825fb31..1d28e16888e9 100644 --- a/drivers/video/fbdev/via/via-core.c +++ b/drivers/video/fbdev/via/via-core.c @@ -116,7 +116,7 @@ EXPORT_SYMBOL_GPL(viafb_irq_disable); * most viafb systems will not need to have this extra code for a while. * As soon as another user comes long, the ifdef can be removed. */ -#if defined(CONFIG_VIDEO_VIA_CAMERA) || defined(CONFIG_VIDEO_VIA_CAMERA_MODULE) +#if IS_ENABLED(CONFIG_VIDEO_VIA_CAMERA) /* * Access to the DMA engine. This currently provides what the camera * driver needs (i.e. outgoing only) but is easily expandable if need @@ -542,7 +542,7 @@ static struct viafb_subdev_info { { .name = "viafb-i2c", }, -#if defined(CONFIG_VIDEO_VIA_CAMERA) || defined(CONFIG_VIDEO_VIA_CAMERA_MODULE) +#if IS_ENABLED(CONFIG_VIDEO_VIA_CAMERA) { .name = "viafb-camera", }, |