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 <nied...@physik.uni-kl.de>
---
 drivers/video/fbdev/ssd1307fb.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c
index 284c527..b38973e 100644
--- a/drivers/video/fbdev/ssd1307fb.c
+++ b/drivers/video/fbdev/ssd1307fb.c
@@ -38,6 +38,11 @@
 #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;
@@ -471,6 +471,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;
@@ -541,10 +542,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;
-- 
2.3.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to