Revert "block: remove __blkdev_driver_ioctl"
[platform/kernel/linux-rpi.git] / drivers / auxdisplay / ht16k33.c
index 1e69cc6..ed58083 100644 (file)
@@ -219,6 +219,15 @@ static const struct backlight_ops ht16k33_bl_ops = {
        .check_fb       = ht16k33_bl_check_fb,
 };
 
+/*
+ * Blank events will be passed to the actual device handling the backlight when
+ * we return zero here.
+ */
+static int ht16k33_blank(int blank, struct fb_info *info)
+{
+       return 0;
+}
+
 static int ht16k33_mmap(struct fb_info *info, struct vm_area_struct *vma)
 {
        struct ht16k33_priv *priv = info->par;
@@ -231,6 +240,7 @@ static const struct fb_ops ht16k33_fb_ops = {
        .owner = THIS_MODULE,
        .fb_read = fb_sys_read,
        .fb_write = fb_sys_write,
+       .fb_blank = ht16k33_blank,
        .fb_fillrect = sys_fillrect,
        .fb_copyarea = sys_copyarea,
        .fb_imageblit = sys_imageblit,
@@ -413,6 +423,33 @@ static int ht16k33_probe(struct i2c_client *client,
        if (err)
                return err;
 
+       /* Backlight */
+       memset(&bl_props, 0, sizeof(struct backlight_properties));
+       bl_props.type = BACKLIGHT_RAW;
+       bl_props.max_brightness = MAX_BRIGHTNESS;
+
+       bl = devm_backlight_device_register(&client->dev, DRIVER_NAME"-bl",
+                                           &client->dev, priv,
+                                           &ht16k33_bl_ops, &bl_props);
+       if (IS_ERR(bl)) {
+               dev_err(&client->dev, "failed to register backlight\n");
+               return PTR_ERR(bl);
+       }
+
+       err = of_property_read_u32(node, "default-brightness-level",
+                                  &dft_brightness);
+       if (err) {
+               dft_brightness = MAX_BRIGHTNESS;
+       } else if (dft_brightness > MAX_BRIGHTNESS) {
+               dev_warn(&client->dev,
+                        "invalid default brightness level: %u, using %u\n",
+                        dft_brightness, MAX_BRIGHTNESS);
+               dft_brightness = MAX_BRIGHTNESS;
+       }
+
+       bl->props.brightness = dft_brightness;
+       ht16k33_bl_update_status(bl);
+
        /* Framebuffer (2 bytes per column) */
        BUILD_BUG_ON(PAGE_SIZE < HT16K33_FB_SIZE);
        fbdev->buffer = (unsigned char *) get_zeroed_page(GFP_KERNEL);
@@ -445,6 +482,7 @@ static int ht16k33_probe(struct i2c_client *client,
        fbdev->info->screen_size = HT16K33_FB_SIZE;
        fbdev->info->fix = ht16k33_fb_fix;
        fbdev->info->var = ht16k33_fb_var;
+       fbdev->info->bl_dev = bl;
        fbdev->info->pseudo_palette = NULL;
        fbdev->info->flags = FBINFO_FLAG_DEFAULT;
        fbdev->info->par = priv;
@@ -460,34 +498,6 @@ static int ht16k33_probe(struct i2c_client *client,
                        goto err_fbdev_unregister;
        }
 
-       /* Backlight */
-       memset(&bl_props, 0, sizeof(struct backlight_properties));
-       bl_props.type = BACKLIGHT_RAW;
-       bl_props.max_brightness = MAX_BRIGHTNESS;
-
-       bl = devm_backlight_device_register(&client->dev, DRIVER_NAME"-bl",
-                                           &client->dev, priv,
-                                           &ht16k33_bl_ops, &bl_props);
-       if (IS_ERR(bl)) {
-               dev_err(&client->dev, "failed to register backlight\n");
-               err = PTR_ERR(bl);
-               goto err_fbdev_unregister;
-       }
-
-       err = of_property_read_u32(node, "default-brightness-level",
-                                  &dft_brightness);
-       if (err) {
-               dft_brightness = MAX_BRIGHTNESS;
-       } else if (dft_brightness > MAX_BRIGHTNESS) {
-               dev_warn(&client->dev,
-                        "invalid default brightness level: %u, using %u\n",
-                        dft_brightness, MAX_BRIGHTNESS);
-               dft_brightness = MAX_BRIGHTNESS;
-       }
-
-       bl->props.brightness = dft_brightness;
-       ht16k33_bl_update_status(bl);
-
        ht16k33_fb_queue(priv);
        return 0;