mirror of https://gitee.com/openkylin/linux.git
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:
parent
82731a194f
commit
ab47d5cd82
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue