You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.7 KiB
Diff
149 lines
4.7 KiB
Diff
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;
|
|
};
|
|
|