aboutsummaryrefslogtreecommitdiffstats
path: root/patches.at91/0133-video-atmelfb-refactor-limit_screeninfo.patch
blob: 4c42c89fd46e7aec144e06ffc7e9312f54cd7ce6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
From 005b72392f702b19971e90e6be15c87a37df492c Mon Sep 17 00:00:00 2001
From: Wolfram Sang <w.sang@pengutronix.de>
Date: Fri, 20 May 2011 15:04:10 +0200
Subject: video: atmelfb: refactor limit_screeninfo
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/video/atmel_lcdfb.c      | 18 ++++++++++++++++++
 drivers/video/atmel_lcdfb_core.c | 14 ++------------
 include/video/atmel_lcdc.h       |  1 +
 3 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
index f8993cd..7a48e9c 100644
--- a/drivers/video/atmel_lcdfb.c
+++ b/drivers/video/atmel_lcdfb.c
@@ -306,6 +306,23 @@ static int atmel_lcdfb_setup_core(struct fb_info *info)
 	return 0;
 }
 
+static void atmelfb_limit_screeninfo(struct fb_var_screeninfo *var)
+{
+	/* Saturate vertical and horizontal timings at maximum values */
+	var->vsync_len = min_t(u32, var->vsync_len,
+			(ATMEL_LCDC_VPW >> ATMEL_LCDC_VPW_OFFSET) + 1);
+	var->upper_margin = min_t(u32, var->upper_margin,
+			ATMEL_LCDC_VBP >> ATMEL_LCDC_VBP_OFFSET);
+	var->lower_margin = min_t(u32, var->lower_margin,
+			ATMEL_LCDC_VFP);
+	var->right_margin = min_t(u32, var->right_margin,
+			(ATMEL_LCDC_HFP >> ATMEL_LCDC_HFP_OFFSET) + 1);
+	var->hsync_len = min_t(u32, var->hsync_len,
+			(ATMEL_LCDC_HPW >> ATMEL_LCDC_HPW_OFFSET) + 1);
+	var->left_margin = min_t(u32, var->left_margin,
+			ATMEL_LCDC_HBP + 1);
+}
+
 static irqreturn_t atmel_lcdfb_interrupt(int irq, void *dev_id)
 {
 	struct fb_info *info = dev_id;
@@ -379,6 +396,7 @@ static struct atmel_lcdfb_devdata dev_data = {
 	.update_dma = atmel_lcdfb_update_dma,
 	.bl_ops = &atmel_lcdc_bl_ops,
 	.init_contrast = atmel_lcdfb_init_contrast,
+	.limit_screeninfo = atmelfb_limit_screeninfo,
 	.fbinfo_flags = ATMEL_LCDFB_FBINFO_DEFAULT,
 	.lut_base = ATMEL_LCDC_LUT,
 };
diff --git a/drivers/video/atmel_lcdfb_core.c b/drivers/video/atmel_lcdfb_core.c
index 0edafb6..20a4e4f 100644
--- a/drivers/video/atmel_lcdfb_core.c
+++ b/drivers/video/atmel_lcdfb_core.c
@@ -211,18 +211,8 @@ static int atmel_lcdfb_check_var(struct fb_var_screeninfo *var,
 	}
 
 	/* Saturate vertical and horizontal timings at maximum values */
-	var->vsync_len = min_t(u32, var->vsync_len,
-			(ATMEL_LCDC_VPW >> ATMEL_LCDC_VPW_OFFSET) + 1);
-	var->upper_margin = min_t(u32, var->upper_margin,
-			ATMEL_LCDC_VBP >> ATMEL_LCDC_VBP_OFFSET);
-	var->lower_margin = min_t(u32, var->lower_margin,
-			ATMEL_LCDC_VFP);
-	var->right_margin = min_t(u32, var->right_margin,
-			(ATMEL_LCDC_HFP >> ATMEL_LCDC_HFP_OFFSET) + 1);
-	var->hsync_len = min_t(u32, var->hsync_len,
-			(ATMEL_LCDC_HPW >> ATMEL_LCDC_HPW_OFFSET) + 1);
-	var->left_margin = min_t(u32, var->left_margin,
-			ATMEL_LCDC_HBP + 1);
+	if (sinfo->dev_data->limit_screeninfo)
+		sinfo->dev_data->limit_screeninfo(var);
 
 	/* Some parameters can't be zero */
 	var->vsync_len = max_t(u32, var->vsync_len, 1);
diff --git a/include/video/atmel_lcdc.h b/include/video/atmel_lcdc.h
index 6c470c4..6031b5a 100644
--- a/include/video/atmel_lcdc.h
+++ b/include/video/atmel_lcdc.h
@@ -51,6 +51,7 @@ struct atmel_lcdfb_devdata {
 	irqreturn_t (*isr)(int irq, void *dev_id);
 	void (*update_dma)(struct fb_info *info, struct fb_var_screeninfo *var);
 	void (*init_contrast)(struct atmel_lcdfb_info *sinfo);
+	void (*limit_screeninfo)(struct fb_var_screeninfo *var);
 	const struct backlight_ops *bl_ops;
 	int fbinfo_flags;
 	u32 lut_base;
-- 
1.8.0.197.g5a90748