aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.4/950-0695-staging-vc04_services-isp-Make-all-references-to-bcm.patch
blob: 97ca47bcd0577ae04c18b850d1633785f93eeced (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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
From 9ecf10bfe3e501b10cc72d710a70150640a0b266 Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Fri, 1 May 2020 16:54:20 +0100
Subject: [PATCH] staging: vc04_services: isp: Make all references to
 bcm2835_isp_fmt const

The array of potential formats and their configuration should be const.
Rework all accesses so that this is possible.

The list of supported formats was taking a copy of entries from this table.
This is unnecessary, therefore allocate an array of pointers instead of
an array of entries.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
 .../bcm2835-isp/bcm2835-v4l2-isp.c            | 34 ++++++++++---------
 .../bcm2835-isp/bcm2835_isp_fmts.h            |  2 +-
 2 files changed, 19 insertions(+), 17 deletions(-)

--- a/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c
+++ b/drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c
@@ -67,7 +67,7 @@ struct bcm2835_isp_q_data {
 	unsigned int width;
 	unsigned int height;
 	unsigned int sizeimage;
-	struct bcm2835_isp_fmt *fmt;
+	const struct bcm2835_isp_fmt *fmt;
 };
 
 /*
@@ -232,11 +232,11 @@ struct bcm2835_isp_fmt *find_format_by_f
 					      struct bcm2835_isp_node *node)
 {
 	struct bcm2835_isp_fmt_list *fmts = &node->supported_fmts;
-	struct bcm2835_isp_fmt *fmt;
+	const struct bcm2835_isp_fmt *fmt;
 	unsigned int i;
 
 	for (i = 0; i < fmts->num_entries; i++) {
-		fmt = &fmts->list[i];
+		fmt = fmts->list[i];
 		if (fmt->fourcc == fourcc)
 			return fmt;
 	}
@@ -244,8 +244,9 @@ struct bcm2835_isp_fmt *find_format_by_f
 	return NULL;
 }
 
-static struct bcm2835_isp_fmt *find_format(struct v4l2_format *f,
-					   struct bcm2835_isp_node *node)
+static const
+struct bcm2835_isp_fmt *find_format(struct v4l2_format *f,
+				    struct bcm2835_isp_node *node)
 {
 	return find_format_by_fourcc(node_is_stats(node) ?
 				     f->fmt.meta.dataformat :
@@ -666,19 +667,20 @@ static const struct vb2_ops bcm2835_isp_
 	.stop_streaming		= bcm2835_isp_node_stop_streaming,
 };
 
-static struct bcm2835_isp_fmt *get_default_format(struct bcm2835_isp_node *node)
+static const
+struct bcm2835_isp_fmt *get_default_format(struct bcm2835_isp_node *node)
 {
-	return &node->supported_fmts.list[0];
+	return node->supported_fmts.list[0];
 }
 
 static inline unsigned int get_bytesperline(int width,
-					    struct bcm2835_isp_fmt *fmt)
+					    const struct bcm2835_isp_fmt *fmt)
 {
 	return ALIGN((width * fmt->depth) >> 3, fmt->bytesperline_align);
 }
 
 static inline unsigned int get_sizeimage(int bpl, int width, int height,
-					 struct bcm2835_isp_fmt *fmt)
+					 const struct bcm2835_isp_fmt *fmt)
 {
 	return (bpl * height * fmt->size_multiplier_x2) >> 1;
 }
@@ -892,8 +894,8 @@ static int bcm2835_isp_node_enum_fmt(str
 
 	if (f->index < fmts->num_entries) {
 		/* Format found */
-		f->pixelformat = fmts->list[f->index].fourcc;
-		f->flags = fmts->list[f->index].flags;
+		f->pixelformat = fmts->list[f->index]->fourcc;
+		f->flags = fmts->list[f->index]->flags;
 		return 0;
 	}
 
@@ -905,7 +907,7 @@ static int bcm2835_isp_enum_framesizes(s
 {
 	struct bcm2835_isp_node *node = video_drvdata(file);
 	struct bcm2835_isp_dev *dev = node_get_dev(node);
-	struct bcm2835_isp_fmt *fmt;
+	const struct bcm2835_isp_fmt *fmt;
 
 	if (node_is_stats(node) || fsize->index)
 		return -EINVAL;
@@ -933,7 +935,7 @@ static int bcm2835_isp_node_try_fmt(stru
 				    struct v4l2_format *f)
 {
 	struct bcm2835_isp_node *node = video_drvdata(file);
-	struct bcm2835_isp_fmt *fmt;
+	const struct bcm2835_isp_fmt *fmt;
 
 	if (f->type != node->queue.type)
 		return -EINVAL;
@@ -1113,7 +1115,7 @@ static const struct v4l2_ioctl_ops bcm28
 static int bcm2835_isp_get_supported_fmts(struct bcm2835_isp_node *node)
 {
 	struct bcm2835_isp_dev *dev = node_get_dev(node);
-	struct bcm2835_isp_fmt *list;
+	struct bcm2835_isp_fmt const **list;
 	unsigned int i, j, num_encodings;
 	u32 fourccs[MAX_SUPPORTED_ENCODINGS];
 	u32 param_size = sizeof(fourccs);
@@ -1144,7 +1146,7 @@ static int bcm2835_isp_get_supported_fmt
 	 * Any that aren't supported will waste a very small amount of memory.
 	 */
 	list = devm_kzalloc(dev->dev,
-			    sizeof(struct bcm2835_isp_fmt) * num_encodings,
+			    sizeof(struct bcm2835_isp_fmt *) * num_encodings,
 			    GFP_KERNEL);
 	if (!list)
 		return -ENOMEM;
@@ -1154,7 +1156,7 @@ static int bcm2835_isp_get_supported_fmt
 		const struct bcm2835_isp_fmt *fmt = get_fmt(fourccs[i]);
 
 		if (fmt) {
-			list[j] = *fmt;
+			list[j] = fmt;
 			j++;
 		}
 	}
--- a/drivers/staging/vc04_services/bcm2835-isp/bcm2835_isp_fmts.h
+++ b/drivers/staging/vc04_services/bcm2835-isp/bcm2835_isp_fmts.h
@@ -26,7 +26,7 @@ struct bcm2835_isp_fmt {
 };
 
 struct bcm2835_isp_fmt_list {
-	struct bcm2835_isp_fmt *list;
+	struct bcm2835_isp_fmt const **list;
 	unsigned int num_entries;
 };