Re: [PATCH RFC 00/11] drm/tilcdc: Atomic modeset support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Den 10.05.2016 11:14, skrev Jyri Sarha:
On 05/10/16 09:34, Daniel Vetter wrote:
There's a drm_simple_display_pipe floating around which seems perfectly
suited to tilcdc. It's meant for the case where you have 1 plane, 1 crtc
and 1 encoder maybe linking to different connectors. And it takes care of
all the small bits for you, with a grand total of 5 callbacks, all of them
optional.

Might indeed be useful to rebase tilcdc on top of that, should be possible
to nuke piles of code.

Looks interesting. Does it look like it is getting ready to be merged soon?
Should be landind soon, yes. Probably not for 4.7, that's closed now, but
I can still pick it up into drm-misc right away when it's ready. Open
review comments are all just small things, you could pick the latest
version to start prototyping a conversion and there shouldn't be any
surprises when you rebase onto the merged version.
Hmmm, too bad it wants to own its encoder. LCDC on Beaglebone-Black
needs the componentized external tda998x driver. So at least in its
current form the drm_simple_display_pipe wont work for tilcdc.

It may not be too big a job to add an external encoder support, but
would it complicate currently so nice and simple driver structure too much?

How about we add an argument for encoder and if it is NULL, then the no-op
encoder is used:

int drm_simple_display_pipe_init(struct drm_device *dev,
                 struct drm_simple_display_pipe *pipe,
                 struct drm_simple_display_pipe_funcs *funcs,
                 const uint32_t *formats,
                 unsigned int format_count,
                 struct drm_encoder *encoder,
                 struct drm_connector *connector)
{
    struct drm_plane *plane = &pipe->plane;
    struct drm_crtc *crtc = &pipe->crtc;
    int ret;

    pipe->funcs = funcs;

    drm_plane_helper_add(plane, &drm_simple_kms_plane_helper_funcs);
    ret = drm_universal_plane_init(dev, plane, 0,
                       &drm_simple_kms_plane_funcs,
                       formats, format_count,
                       DRM_PLANE_TYPE_PRIMARY, NULL);
    if (ret)
        return ret;

    drm_crtc_helper_add(crtc, &drm_simple_kms_crtc_helper_funcs);
    ret = drm_crtc_init_with_planes(dev, crtc, plane, NULL,
                    &drm_simple_kms_crtc_funcs, NULL);
    if (ret)
        return ret;

    if (!encoder) {
        encoder = kzalloc(sizeof(*encoder), GFP_KERNEL);
        if (!encoder)
            return -ENOMEM;

        ret = drm_encoder_init(dev, encoder,
                       &drm_simple_kms_encoder_funcs,
                       DRM_MODE_ENCODER_NONE, NULL);
        if (ret)
            return ret;
    }

    encoder->possible_crtcs = 1 << drm_crtc_index(crtc);
    ret = drm_mode_connector_attach_encoder(connector, encoder);
    if (ret)
        return ret;

    return drm_connector_register(connector);
}

static void drm_simple_kms_encoder_cleanup(struct drm_encoder *encoder)
{
    drm_encoder_cleanup(encoder);
    kfree(encoder);
}

static const struct drm_encoder_funcs drm_simple_kms_encoder_funcs = {
    .destroy = drm_simple_kms_encoder_cleanup,
};


Noralf.

	Jyri

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux