Skip to content

Commit

Permalink
staging: vc04_services: isp: Make all references to bcm2835_isp_fmt c…
Browse files Browse the repository at this point in the history
…onst

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 <[email protected]>
  • Loading branch information
6by9 committed May 1, 2020
1 parent af46379 commit 6326016
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 17 deletions.
34 changes: 18 additions & 16 deletions drivers/staging/vc04_services/bcm2835-isp/bcm2835-v4l2-isp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};

/*
Expand Down Expand Up @@ -232,20 +232,21 @@ struct bcm2835_isp_fmt *find_format_by_fourcc(unsigned int fourcc,
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;
}

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 :
Expand Down Expand Up @@ -666,19 +667,20 @@ static const struct vb2_ops bcm2835_isp_node_queue_ops = {
.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;
}
Expand Down Expand Up @@ -892,8 +894,8 @@ static int bcm2835_isp_node_enum_fmt(struct file *file, void *priv,

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;
}

Expand All @@ -905,7 +907,7 @@ static int bcm2835_isp_enum_framesizes(struct file *file, void *priv,
{
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;
Expand Down Expand Up @@ -933,7 +935,7 @@ static int bcm2835_isp_node_try_fmt(struct file *file, void *priv,
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;
Expand Down Expand Up @@ -1113,7 +1115,7 @@ static const struct v4l2_ioctl_ops bcm2835_isp_node_ioctl_ops = {
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);
Expand Down Expand Up @@ -1144,7 +1146,7 @@ static int bcm2835_isp_get_supported_fmts(struct bcm2835_isp_node *node)
* 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;
Expand All @@ -1154,7 +1156,7 @@ static int bcm2835_isp_get_supported_fmts(struct bcm2835_isp_node *node)
const struct bcm2835_isp_fmt *fmt = get_fmt(fourccs[i]);

if (fmt) {
list[j] = *fmt;
list[j] = fmt;
j++;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};

Expand Down

0 comments on commit 6326016

Please sign in to comment.