fbdev: ssd1307fb: Add a module parameter to set the refresh rate
authorThomas Niederprüm <niederp@physik.uni-kl.de>
Tue, 31 Mar 2015 18:27:13 +0000 (20:27 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 27 May 2015 09:54:32 +0000 (12:54 +0300)
This patch adds the module parameter "refreshrate" to set delay for the
deferred io. The refresh rate is given in units of Hertz. The default
refresh rate is 1 Hz. The refresh rate set through the newly introduced
parameter applies to all instances of the driver and for now it is not
possible to change it individually.

Signed-off-by: Thomas Niederprüm <niederp@physik.uni-kl.de>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/fbdev/ssd1307fb.c

index f685d244fa2a6362d7a408f3e73e2419bf8e1e2b..85eeda0fc2e470e7acc16f17589075f2697b3ff3 100644 (file)
 #define        SSD1307FB_SET_COM_PINS_CONFIG   0xda
 #define        SSD1307FB_SET_VCOMH             0xdb
 
+#define REFRESHRATE 1
+
+static u_int refreshrate = REFRESHRATE;
+module_param(refreshrate, uint, 0);
+
 struct ssd1307fb_par;
 
 struct ssd1307fb_deviceinfo {
@@ -263,11 +268,6 @@ static void ssd1307fb_deferred_io(struct fb_info *info,
        ssd1307fb_update_display(info->par);
 }
 
-static struct fb_deferred_io ssd1307fb_defio = {
-       .delay          = HZ,
-       .deferred_io    = ssd1307fb_deferred_io,
-};
-
 static int ssd1307fb_init(struct ssd1307fb_par *par)
 {
        int ret;
@@ -466,6 +466,7 @@ static int ssd1307fb_probe(struct i2c_client *client,
 {
        struct fb_info *info;
        struct device_node *node = client->dev.of_node;
+       struct fb_deferred_io *ssd1307fb_defio;
        u32 vmem_size;
        struct ssd1307fb_par *par;
        u8 *vmem;
@@ -536,10 +537,20 @@ static int ssd1307fb_probe(struct i2c_client *client,
                goto fb_alloc_error;
        }
 
+       ssd1307fb_defio = devm_kzalloc(&client->dev, sizeof(struct fb_deferred_io), GFP_KERNEL);
+       if (!ssd1307fb_defio) {
+               dev_err(&client->dev, "Couldn't allocate deferred io.\n");
+               ret = -ENOMEM;
+               goto fb_alloc_error;
+       }
+
+       ssd1307fb_defio->delay = HZ / refreshrate;
+       ssd1307fb_defio->deferred_io = ssd1307fb_deferred_io;
+
        info->fbops = &ssd1307fb_ops;
        info->fix = ssd1307fb_fix;
        info->fix.line_length = par->width / 8;
-       info->fbdefio = &ssd1307fb_defio;
+       info->fbdefio = ssd1307fb_defio;
 
        info->var = ssd1307fb_var;
        info->var.xres = par->width;