Commit 649e9535 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

media: ti-vpe: cal: Don't modify cal_csi2_phy base_fields

In preparation to constify cal_csi2_phy, avoid modifying the base_fields
array at runtime. As the array now only needs to stored two values
instead of a full struct reg_field instance, save memory by using a
custom structure for the base_fields elements.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: default avatarBenoit Parrot <bparrot@ti.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 5b4426e3
...@@ -234,7 +234,10 @@ enum cal_camerarx_field { ...@@ -234,7 +234,10 @@ enum cal_camerarx_field {
struct cal_csi2_phy { struct cal_csi2_phy {
struct regmap_field *fields[F_MAX_FIELDS]; struct regmap_field *fields[F_MAX_FIELDS];
struct reg_field base_fields[F_MAX_FIELDS]; struct {
unsigned int lsb;
unsigned int msb;
} base_fields[F_MAX_FIELDS];
const int num_lanes; const int num_lanes;
}; };
...@@ -248,19 +251,19 @@ struct cal_data { ...@@ -248,19 +251,19 @@ struct cal_data {
static struct cal_csi2_phy dra72x_cal_csi_phy[] = { static struct cal_csi2_phy dra72x_cal_csi_phy[] = {
{ {
.base_fields = { .base_fields = {
[F_CTRLCLKEN] = REG_FIELD(0, 10, 10), [F_CTRLCLKEN] = { 10, 10 },
[F_CAMMODE] = REG_FIELD(0, 11, 12), [F_CAMMODE] = { 11, 12 },
[F_LANEENABLE] = REG_FIELD(0, 13, 16), [F_LANEENABLE] = { 13, 16 },
[F_CSI_MODE] = REG_FIELD(0, 17, 17), [F_CSI_MODE] = { 17, 17 },
}, },
.num_lanes = 4, .num_lanes = 4,
}, },
{ {
.base_fields = { .base_fields = {
[F_CTRLCLKEN] = REG_FIELD(0, 0, 0), [F_CTRLCLKEN] = { 0, 0 },
[F_CAMMODE] = REG_FIELD(0, 1, 2), [F_CAMMODE] = { 1, 2 },
[F_LANEENABLE] = REG_FIELD(0, 3, 4), [F_LANEENABLE] = { 3, 4 },
[F_CSI_MODE] = REG_FIELD(0, 5, 5), [F_CSI_MODE] = { 5, 5 },
}, },
.num_lanes = 2, .num_lanes = 2,
}, },
...@@ -280,19 +283,19 @@ static const struct cal_data dra72x_es1_cal_data = { ...@@ -280,19 +283,19 @@ static const struct cal_data dra72x_es1_cal_data = {
static struct cal_csi2_phy dra76x_cal_csi_phy[] = { static struct cal_csi2_phy dra76x_cal_csi_phy[] = {
{ {
.base_fields = { .base_fields = {
[F_CTRLCLKEN] = REG_FIELD(0, 8, 8), [F_CTRLCLKEN] = { 8, 8 },
[F_CAMMODE] = REG_FIELD(0, 9, 10), [F_CAMMODE] = { 9, 10 },
[F_CSI_MODE] = REG_FIELD(0, 11, 11), [F_CSI_MODE] = { 11, 11 },
[F_LANEENABLE] = REG_FIELD(0, 27, 31), [F_LANEENABLE] = { 27, 31 },
}, },
.num_lanes = 5, .num_lanes = 5,
}, },
{ {
.base_fields = { .base_fields = {
[F_CTRLCLKEN] = REG_FIELD(0, 0, 0), [F_CTRLCLKEN] = { 0, 0 },
[F_CAMMODE] = REG_FIELD(0, 1, 2), [F_CAMMODE] = { 1, 2 },
[F_CSI_MODE] = REG_FIELD(0, 3, 3), [F_CSI_MODE] = { 3, 3 },
[F_LANEENABLE] = REG_FIELD(0, 24, 26), [F_LANEENABLE] = { 24, 26 },
}, },
.num_lanes = 3, .num_lanes = 3,
}, },
...@@ -306,9 +309,9 @@ static const struct cal_data dra76x_cal_data = { ...@@ -306,9 +309,9 @@ static const struct cal_data dra76x_cal_data = {
static struct cal_csi2_phy am654_cal_csi_phy[] = { static struct cal_csi2_phy am654_cal_csi_phy[] = {
{ {
.base_fields = { .base_fields = {
[F_CTRLCLKEN] = REG_FIELD(0, 15, 15), [F_CTRLCLKEN] = { 15, 15 },
[F_CAMMODE] = REG_FIELD(0, 24, 25), [F_CAMMODE] = { 24, 25 },
[F_LANEENABLE] = REG_FIELD(0, 0, 4), [F_LANEENABLE] = { 0, 4 },
}, },
.num_lanes = 5, .num_lanes = 5,
}, },
...@@ -476,7 +479,6 @@ static u32 cal_data_get_num_csi2_phy(struct cal_dev *dev) ...@@ -476,7 +479,6 @@ static u32 cal_data_get_num_csi2_phy(struct cal_dev *dev)
static int cal_camerarx_regmap_init(struct cal_dev *dev) static int cal_camerarx_regmap_init(struct cal_dev *dev)
{ {
struct reg_field *field;
struct cal_csi2_phy *phy; struct cal_csi2_phy *phy;
unsigned int i, j; unsigned int i, j;
...@@ -486,16 +488,20 @@ static int cal_camerarx_regmap_init(struct cal_dev *dev) ...@@ -486,16 +488,20 @@ static int cal_camerarx_regmap_init(struct cal_dev *dev)
for (i = 0; i < cal_data_get_num_csi2_phy(dev); i++) { for (i = 0; i < cal_data_get_num_csi2_phy(dev); i++) {
phy = &dev->data->csi2_phy_core[i]; phy = &dev->data->csi2_phy_core[i];
for (j = 0; j < F_MAX_FIELDS; j++) { for (j = 0; j < F_MAX_FIELDS; j++) {
field = &phy->base_fields[j]; struct reg_field field = {
.reg = dev->syscon_camerrx_offset,
.lsb = phy->base_fields[j].lsb,
.msb = phy->base_fields[j].msb,
};
/* /*
* Here we update the reg offset with the * Here we update the reg offset with the
* value found in DT * value found in DT
*/ */
field->reg = dev->syscon_camerrx_offset;
phy->fields[j] = phy->fields[j] =
devm_regmap_field_alloc(&dev->pdev->dev, devm_regmap_field_alloc(&dev->pdev->dev,
dev->syscon_camerrx, dev->syscon_camerrx,
*field); field);
if (IS_ERR(phy->fields[j])) { if (IS_ERR(phy->fields[j])) {
cal_err(dev, "Unable to allocate regmap fields\n"); cal_err(dev, "Unable to allocate regmap fields\n");
return PTR_ERR(phy->fields[j]); return PTR_ERR(phy->fields[j]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment