Skip to content

Commit

Permalink
fbdev: ssd1307fb: Init backlight before registering framebuffer
Browse files Browse the repository at this point in the history
For drivers that support backlight, LCD and fbdev devices, fbdev has
to be initialized last. See documentation for struct fbinfo.bl_dev.

The backlight name's index number comes from register_framebuffer(),
which now happens after initializing the backlight device. So like
in all other backlight drivers, we now give the backlight device a
generic name without the fbdev index.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://lore.kernel.org/r/20240305162425.23845-9-tzimmermann@suse.de
Signed-off-by: Lee Jones <lee@kernel.org>
  • Loading branch information
Thomas Zimmermann authored and Lee Jones committed Mar 28, 2024
1 parent 8a8e7f8 commit 56a6f83
Showing 1 changed file with 11 additions and 13 deletions.
24 changes: 11 additions & 13 deletions drivers/video/fbdev/ssd1307fb.c
Original file line number Diff line number Diff line change
@@ -594,7 +594,6 @@ static int ssd1307fb_probe(struct i2c_client *client)
{
struct device *dev = &client->dev;
struct backlight_device *bl;
char bl_name[12];
struct fb_info *info;
struct fb_deferred_io *ssd1307fb_defio;
u32 vmem_size;
@@ -733,31 +732,30 @@ static int ssd1307fb_probe(struct i2c_client *client)
if (ret)
goto regulator_enable_error;

ret = register_framebuffer(info);
if (ret) {
dev_err(dev, "Couldn't register the framebuffer\n");
goto panel_init_error;
}

snprintf(bl_name, sizeof(bl_name), "ssd1307fb%d", info->node);
bl = backlight_device_register(bl_name, dev, par, &ssd1307fb_bl_ops,
bl = backlight_device_register("ssd1307fb-bl", dev, par, &ssd1307fb_bl_ops,
NULL);
if (IS_ERR(bl)) {
ret = PTR_ERR(bl);
dev_err(dev, "unable to register backlight device: %d\n", ret);
goto bl_init_error;
goto panel_init_error;
}
info->bl_dev = bl;

ret = register_framebuffer(info);
if (ret) {
dev_err(dev, "Couldn't register the framebuffer\n");
goto fb_init_error;
}

bl->props.brightness = par->contrast;
bl->props.max_brightness = MAX_CONTRAST;
info->bl_dev = bl;

dev_info(dev, "fb%d: %s framebuffer device registered, using %d bytes of video memory\n", info->node, info->fix.id, vmem_size);

return 0;

bl_init_error:
unregister_framebuffer(info);
fb_init_error:
backlight_device_unregister(bl);
panel_init_error:
pwm_disable(par->pwm);
pwm_put(par->pwm);

0 comments on commit 56a6f83

Please sign in to comment.