media: smiapp: Calculate CCS limit offsets and limit buffer size

Calculate the limit offsets and the size of the limit buffer. CCS limits
are read into this buffer, and the offsets are helpful in accessing the
information in it.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
Sakari Ailus 2020-02-05 15:21:06 +01:00 committed by Mauro Carvalho Chehab
parent 82731a194f
commit ab47d5cd82
2 changed files with 40 additions and 2 deletions

View File

@ -1,6 +1,6 @@
# SPDX-License-Identifier: GPL-2.0-only
smiapp-objs += smiapp-core.o smiapp-regs.o \
smiapp-quirk.o smiapp-limits.o
smiapp-quirk.o smiapp-limits.o ccs-limits.o
obj-$(CONFIG_VIDEO_SMIAPP) += smiapp.o
ccflags-y += -I $(srctree)/drivers/media/i2c

View File

@ -27,6 +27,7 @@
#include <media/v4l2-fwnode.h>
#include <media/v4l2-device.h>
#include "ccs-limits.h"
#include "smiapp.h"
#define SMIAPP_ALIGN_DIM(dim, flags) \
@ -34,6 +35,11 @@
? ALIGN((dim), 2) \
: (dim) & ~1)
static struct ccs_limit_offset {
u16 lim;
u16 info;
} ccs_limit_offsets[CCS_L_LAST + 1];
/*
* smiapp_module_idents - supported camera modules
*/
@ -3166,7 +3172,39 @@ static struct i2c_driver smiapp_i2c_driver = {
.id_table = smiapp_id_table,
};
module_i2c_driver(smiapp_i2c_driver);
static int smiapp_module_init(void)
{
unsigned int i, l;
for (i = 0, l = 0; ccs_limits[i].size && l < CCS_L_LAST; i++) {
if (!(ccs_limits[i].flags & CCS_L_FL_SAME_REG)) {
ccs_limit_offsets[l + 1].lim =
ALIGN(ccs_limit_offsets[l].lim +
ccs_limits[i].size,
ccs_reg_width(ccs_limits[i + 1].reg));
ccs_limit_offsets[l].info = i;
l++;
} else {
ccs_limit_offsets[l].lim += ccs_limits[i].size;
}
}
if (WARN_ON(ccs_limits[i].size))
return -EINVAL;
if (WARN_ON(l != CCS_L_LAST))
return -EINVAL;
return i2c_register_driver(THIS_MODULE, &smiapp_i2c_driver);
}
static void smiapp_module_cleanup(void)
{
i2c_del_driver(&smiapp_i2c_driver);
}
module_init(smiapp_module_init);
module_exit(smiapp_module_cleanup);
MODULE_AUTHOR("Sakari Ailus <sakari.ailus@iki.fi>");
MODULE_DESCRIPTION("Generic SMIA/SMIA++ camera module driver");