lkml.org 
[lkml]   [2019]   [Apr]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 1/6] drm/komeda: Attach scaler to drm as private object
    Date
    According to the komeda pipeline configuration, attach scaler to drm as
    private object.

    Signed-off-by: James Qian Wang (Arm Technology China) <james.qian.wang@arm.com>
    ---
    .../arm/display/komeda/komeda_private_obj.c | 49 +++++++++++++++++++
    1 file changed, 49 insertions(+)

    diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c
    index d53bd6c23c5d..bac90ab8fdc9 100644
    --- a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c
    +++ b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c
    @@ -60,6 +60,49 @@ static int komeda_layer_obj_add(struct komeda_kms_dev *kms,
    return 0;
    }

    +static struct drm_private_state *
    +komeda_scaler_atomic_duplicate_state(struct drm_private_obj *obj)
    +{
    + struct komeda_scaler_state *st;
    +
    + st = kmemdup(obj->state, sizeof(*st), GFP_KERNEL);
    + if (!st)
    + return NULL;
    +
    + komeda_component_state_reset(&st->base);
    + __drm_atomic_helper_private_obj_duplicate_state(obj, &st->base.obj);
    +
    + return &st->base.obj;
    +}
    +
    +static void
    +komeda_scaler_atomic_destroy_state(struct drm_private_obj *obj,
    + struct drm_private_state *state)
    +{
    + kfree(to_scaler_st(priv_to_comp_st(state)));
    +}
    +
    +static const struct drm_private_state_funcs komeda_scaler_obj_funcs = {
    + .atomic_duplicate_state = komeda_scaler_atomic_duplicate_state,
    + .atomic_destroy_state = komeda_scaler_atomic_destroy_state,
    +};
    +
    +static int komeda_scaler_obj_add(struct komeda_kms_dev *kms,
    + struct komeda_scaler *scaler)
    +{
    + struct komeda_scaler_state *st;
    +
    + st = kzalloc(sizeof(*st), GFP_KERNEL);
    + if (!st)
    + return -ENOMEM;
    +
    + st->base.component = &scaler->base;
    + drm_atomic_private_obj_init(&kms->base,
    + &scaler->base.obj, &st->base.obj,
    + &komeda_scaler_obj_funcs);
    + return 0;
    +}
    +
    static struct drm_private_state *
    komeda_compiz_atomic_duplicate_state(struct drm_private_obj *obj)
    {
    @@ -258,6 +301,12 @@ int komeda_kms_add_private_objs(struct komeda_kms_dev *kms,
    return err;
    }

    + for (j = 0; j < pipe->n_scalers; j++) {
    + err = komeda_scaler_obj_add(kms, pipe->scalers[j]);
    + if (err)
    + return err;
    + }
    +
    err = komeda_compiz_obj_add(kms, pipe->compiz);
    if (err)
    return err;
    --
    2.17.1
    \
     
     \ /
      Last update: 2019-04-15 09:10    [W:4.117 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site