Skip to content

Commit ff0b6c0

Browse files
Andy Yanmmind
authored andcommitted
drm/rockchip: vop2: use devm_regmap_field_alloc for cluster-regs
Right now vop2_cluster_init() copies the base vop2_cluster_regs and adapts the reg value with the current window's offset before adding the fields to the regmap. This conflicts with the notion of reg_fields being const, see https://lore.kernel.org/all/[email protected]/ for reference, which now causes checkpatch to actually warn about that. So instead of creating one big copy and changing it afterwards, add the reg_fields individually using devm_regmap_field_alloc(). Functional it is the same, just that the reg_field we're handling can stay const. Signed-off-by: Andy Yan <[email protected]> Signed-off-by: Heiko Stuebner <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 2800028 commit ff0b6c0

File tree

1 file changed

+31
-35
lines changed

1 file changed

+31
-35
lines changed

drivers/gpu/drm/rockchip/rockchip_drm_vop2.c

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3412,7 +3412,7 @@ static int vop2_find_rgb_encoder(struct vop2 *vop2)
34123412
return -ENOENT;
34133413
}
34143414

3415-
static struct reg_field vop2_cluster_regs[VOP2_WIN_MAX_REG] = {
3415+
static const struct reg_field vop2_cluster_regs[VOP2_WIN_MAX_REG] = {
34163416
[VOP2_WIN_ENABLE] = REG_FIELD(RK3568_CLUSTER_WIN_CTRL0, 0, 0),
34173417
[VOP2_WIN_FORMAT] = REG_FIELD(RK3568_CLUSTER_WIN_CTRL0, 1, 5),
34183418
[VOP2_WIN_RB_SWAP] = REG_FIELD(RK3568_CLUSTER_WIN_CTRL0, 14, 14),
@@ -3483,28 +3483,26 @@ static struct reg_field vop2_cluster_regs[VOP2_WIN_MAX_REG] = {
34833483
static int vop2_cluster_init(struct vop2_win *win)
34843484
{
34853485
struct vop2 *vop2 = win->vop2;
3486-
struct reg_field *cluster_regs;
3487-
int ret, i;
3488-
3489-
cluster_regs = kmemdup(vop2_cluster_regs, sizeof(vop2_cluster_regs),
3490-
GFP_KERNEL);
3491-
if (!cluster_regs)
3492-
return -ENOMEM;
3493-
3494-
for (i = 0; i < ARRAY_SIZE(vop2_cluster_regs); i++)
3495-
if (cluster_regs[i].reg != 0xffffffff)
3496-
cluster_regs[i].reg += win->offset;
3486+
int i;
34973487

3498-
ret = devm_regmap_field_bulk_alloc(vop2->dev, vop2->map, win->reg,
3499-
cluster_regs,
3500-
ARRAY_SIZE(vop2_cluster_regs));
3488+
for (i = 0; i < ARRAY_SIZE(vop2_cluster_regs); i++) {
3489+
const struct reg_field field = {
3490+
.reg = (vop2_cluster_regs[i].reg != 0xffffffff) ?
3491+
vop2_cluster_regs[i].reg + win->offset :
3492+
vop2_cluster_regs[i].reg,
3493+
.lsb = vop2_cluster_regs[i].lsb,
3494+
.msb = vop2_cluster_regs[i].msb
3495+
};
35013496

3502-
kfree(cluster_regs);
3497+
win->reg[i] = devm_regmap_field_alloc(vop2->dev, vop2->map, field);
3498+
if (IS_ERR(win->reg[i]))
3499+
return PTR_ERR(win->reg[i]);
3500+
}
35033501

3504-
return ret;
3502+
return 0;
35053503
};
35063504

3507-
static struct reg_field vop2_esmart_regs[VOP2_WIN_MAX_REG] = {
3505+
static const struct reg_field vop2_esmart_regs[VOP2_WIN_MAX_REG] = {
35083506
[VOP2_WIN_ENABLE] = REG_FIELD(RK3568_SMART_REGION0_CTRL, 0, 0),
35093507
[VOP2_WIN_FORMAT] = REG_FIELD(RK3568_SMART_REGION0_CTRL, 1, 5),
35103508
[VOP2_WIN_DITHER_UP] = REG_FIELD(RK3568_SMART_REGION0_CTRL, 12, 12),
@@ -3571,26 +3569,24 @@ static struct reg_field vop2_esmart_regs[VOP2_WIN_MAX_REG] = {
35713569
static int vop2_esmart_init(struct vop2_win *win)
35723570
{
35733571
struct vop2 *vop2 = win->vop2;
3574-
struct reg_field *esmart_regs;
3575-
int ret, i;
3576-
3577-
esmart_regs = kmemdup(vop2_esmart_regs, sizeof(vop2_esmart_regs),
3578-
GFP_KERNEL);
3579-
if (!esmart_regs)
3580-
return -ENOMEM;
3581-
3582-
for (i = 0; i < ARRAY_SIZE(vop2_esmart_regs); i++)
3583-
if (esmart_regs[i].reg != 0xffffffff)
3584-
esmart_regs[i].reg += win->offset;
3572+
int i;
35853573

3586-
ret = devm_regmap_field_bulk_alloc(vop2->dev, vop2->map, win->reg,
3587-
esmart_regs,
3588-
ARRAY_SIZE(vop2_esmart_regs));
3574+
for (i = 0; i < ARRAY_SIZE(vop2_esmart_regs); i++) {
3575+
const struct reg_field field = {
3576+
.reg = (vop2_esmart_regs[i].reg != 0xffffffff) ?
3577+
vop2_esmart_regs[i].reg + win->offset :
3578+
vop2_esmart_regs[i].reg,
3579+
.lsb = vop2_esmart_regs[i].lsb,
3580+
.msb = vop2_esmart_regs[i].msb
3581+
};
35893582

3590-
kfree(esmart_regs);
3583+
win->reg[i] = devm_regmap_field_alloc(vop2->dev, vop2->map, field);
3584+
if (IS_ERR(win->reg[i]))
3585+
return PTR_ERR(win->reg[i]);
3586+
}
35913587

3592-
return ret;
3593-
};
3588+
return 0;
3589+
}
35943590

35953591
static int vop2_win_init(struct vop2 *vop2)
35963592
{

0 commit comments

Comments
 (0)