From: Daniel Vetter <daniel@ffwll.ch>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Dave Airlie <airlied@redhat.com>, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v2] drm: Add Grain Media GM12U320 kms driver
Date: Sat, 4 Jun 2016 01:19:53 +0200 [thread overview]
Message-ID: <20160603231952.GD14529@phenom.ffwll.local> (raw)
In-Reply-To: <e561b884-0eb6-7e96-0df2-35e6a5b1b6db@redhat.com>
On Fri, Jun 03, 2016 at 07:58:57PM +0200, Hans de Goede wrote:
> Hi,
>
> Thanks for the review!
>
> On 03-06-16 19:27, Thierry Reding wrote:
> > On Fri, Jun 03, 2016 at 03:06:32PM +0200, Hans de Goede wrote:
> > > Grain-media GM12U320 based devices are mini video projectors using USB for
> > > both power and video data transport.
> > >
> > > This commit adds a kms driver for these devices, including prime support.
> > >
> > > This driver is based on the existing udl kms driver, and the gm12u320
> > > fb driver by Viacheslav Nurmekhamitov <slavrn@yandex.ru>.
> > >
> > > Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> > > ---
> > > Changes in v2:
> > > -Rebase on 4.7-rc1
> > > -Sync with udl, bring in any fixes done to udl since v1
> >
> > This sounds a little nightmarish in the long term. From a cursory look
> > this duplicates a bunch of code that's present in UDL, where the main
> > differences are EDID handling and data transfer. I wonder if we can't
> > find a better way of reusing code than duplicating it.
>
> I was planning on eventually moving the shared code to some kms-usb helper
> lib, I was thinking it would be good to have more then one user first,
> but if people prefer me first factoring out some code from udl into
> a lib I can do that instead.
Yeah I think waiting for more usb drivers is probably better. I don't want
to resurrect all the drm_bus mistakes once more, we're still working to
get rid of them all.
The other bit: Can I haz this in atomic, plz?
And when you look at atomic, it would probably be worth it to check out
Noralf's drm_simple_display_pipe helpers. They're made exactly for dumb
devices like this one here. It would cut out a lof of code.
The one thing you might need on top of Noralf's patches is some
super-simple support for cursors. That should be easy to add though.
-Daniel
>
> > > diff --git a/drivers/gpu/drm/gm12u320/gm12u320_connector.c b/drivers/gpu/drm/gm12u320/gm12u320_connector.c
> > [...]
> > > +/*
> > > + * Note this assumes this driver is only ever used with the Acer C120, if we
> > > + * add support for other devices the vendor and model should be parameterized.
> > > + */
> > > +static struct edid gm12u320_edid = {
> > > + .header = { 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00 },
> > > + .mfg_id = { 0x04, 0x72 }, /* "ACR" */
> > > + .prod_code = { 0x20, 0xc1 }, /* C120h */
> > > + .mfg_week = 1,
> > > + .mfg_year = 1,
> > > + .version = 1, /* EDID 1.3 */
> > > + .revision = 3, /* EDID 1.3 */
> > > + .input = 0x80, /* Digital input */
> > > + .features = 0x02, /* Pref timing in DTD 1 */
> > > + .standard_timings = { { 1, 1 }, { 1, 1 }, { 1, 1 }, { 1, 1 },
> > > + { 1, 1 }, { 1, 1 }, { 1, 1 }, { 1, 1 } },
> > > + .detailed_timings = { {
> > > + .pixel_clock = 3383,
> > > + /* hactive = 852, hblank = 256 */
> > > + .data.pixel_data.hactive_lo = 0x54,
> > > + .data.pixel_data.hblank_lo = 0x00,
> > > + .data.pixel_data.hactive_hblank_hi = 0x31,
> > > + /* vactive = 480, vblank = 28 */
> > > + .data.pixel_data.vactive_lo = 0xe0,
> > > + .data.pixel_data.vblank_lo = 0x1c,
> > > + .data.pixel_data.vactive_vblank_hi = 0x10,
> > > + /* hsync offset 40 pw 128, vsync offset 1 pw 4 */
> > > + .data.pixel_data.hsync_offset_lo = 0x28,
> > > + .data.pixel_data.hsync_pulse_width_lo = 0x80,
> > > + .data.pixel_data.vsync_offset_pulse_width_lo = 0x14,
> > > + .data.pixel_data.hsync_vsync_offset_pulse_width_hi = 0x00,
> > > + /* Digital separate syncs, hsync+, vsync+ */
> > > + .data.pixel_data.misc = 0x1e,
> > > + }, {
> > > + .pixel_clock = 0,
> > > + .data.other_data.type = 0xfd, /* Monitor ranges */
> > > + .data.other_data.data.range.min_vfreq = 59,
> > > + .data.other_data.data.range.max_vfreq = 61,
> > > + .data.other_data.data.range.min_hfreq_khz = 29,
> > > + .data.other_data.data.range.max_hfreq_khz = 32,
> > > + .data.other_data.data.range.pixel_clock_mhz = 4, /* 40 MHz */
> > > + .data.other_data.data.range.flags = 0,
> > > + .data.other_data.data.range.formula.cvt = {
> > > + 0xa0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 },
> > > + }, {
> > > + .pixel_clock = 0,
> > > + .data.other_data.type = 0xfc, /* Model string */
> > > + .data.other_data.data.str.str = {
> > > + 'C', '1', '2', '0', 'P', 'r', 'o', 'j', 'e', 'c',
> > > + 't', 'o', 'r' },
> > > + }, {
> > > + .pixel_clock = 0,
> > > + .data.other_data.type = 0xfe, /* Unspecified text / padding */
> > > + .data.other_data.data.str.str = {
> > > + '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
> > > + ' ', ' ', ' ' },
> > > + } },
> > > + .checksum = 0x40,
> > > +};
> >
> > Where did you get this from?
>
> I completely made it up, other then for the resolution which is the native
> resolution of the lcd in the projector
>
> > Doesn't this device have a chip that you can query at runtime?
>
> Not to my knowledge.
>
> > > +static int gm12u320_connector_set_property(struct drm_connector *connector,
> > > + struct drm_property *property,
> > > + uint64_t val)
> > > +{
> > > + return 0;
> > > +}
> >
> > Just drop it if it doesn't do anything.
>
> Ok, then it should probably be dropped from udl too, I'll check and submit
> a separate patch for this.
>
> > > +int gm12u320_connector_init(struct drm_device *dev,
> > > + struct drm_encoder *encoder)
> > > +{
> > > + struct drm_connector *connector;
> > > +
> > > + connector = kzalloc(sizeof(struct drm_connector), GFP_KERNEL);
> > > + if (!connector)
> > > + return -ENOMEM;
> > > +
> > > + drm_connector_init(dev, connector, &gm12u320_connector_funcs,
> > > + DRM_MODE_CONNECTOR_Unknown);
> >
> > According to the Grain Media website this chip is a USB 3.0-to-HDMI
> > bridge, so DRM_MODE_CONNECTOR_HDMIA might be a better choice here.
>
> Hmm, where did you find this ? Note I've never actually verified
> the gm12u320 name this comes from previous reverse engineering
> work done on the projector.
>
> HDMI for what is in essence a lcd panel seems wrong, maybe lvds
> if you want to avoid Unknown ?
>
> > > diff --git a/drivers/gpu/drm/gm12u320/gm12u320_drv.c b/drivers/gpu/drm/gm12u320/gm12u320_drv.c
> > [...]
> > > new file mode 100644
> > > index 0000000..eff3a44
> > > --- /dev/null
> > > +++ b/drivers/gpu/drm/gm12u320/gm12u320_drv.c
> > > @@ -0,0 +1,160 @@
> > > +/*
> > > + * Copyright (C) 2012-2016 Red Hat Inc.
> > > + *
> > > + * This file is subject to the terms and conditions of the GNU General Public
> > > + * License v2. See the file COPYING in the main directory of this archive for
> > > + * more details.
> > > + */
> > > +
> > > +#include <linux/module.h>
> > > +#include <drm/drmP.h>
> > > +#include <drm/drm_crtc_helper.h>
> > > +#include "gm12u320_drv.h"
> > > +
> > > +static int gm12u320_driver_set_busid(struct drm_device *d, struct drm_master *m)
> > > +{
> > > + return 0;
> > > +}
> >
> > This is optional, you can drop it.
>
> Idem. as above, then it should probably be dropped from udl too, I'll check and
> submit a separate patch for this.
>
> Regards,
>
> Hans
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
prev parent reply other threads:[~2016-06-03 23:19 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-03 13:06 [PATCH v2] drm: Add Grain Media GM12U320 kms driver Hans de Goede
2016-06-03 17:27 ` Thierry Reding
2016-06-03 17:58 ` Hans de Goede
2016-06-03 23:19 ` Daniel Vetter [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160603231952.GD14529@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=airlied@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=hdegoede@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.