All of lore.kernel.org
 help / color / mirror / Atom feed
From: Icenowy Zheng <icenowy-h8G6r0blFSE@public.gmane.org>
To: Sean Paul <seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
Cc: Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Maxime Ripard
	<maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>,
	Jernej Skrabec <jernej.skrabec-gGgVlfcn5nU@public.gmane.org>,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org,
	linux-clk-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH v3 04/11] drm/sun4i: abstract the layer type
Date: Wed, 5 Apr 2017 03:53:22 +0800	[thread overview]
Message-ID: <dbf0f478-ff53-0ced-24a3-e9de7077efd9@aosc.io> (raw)
In-Reply-To: <20170404192837.pvlhwyeut45vg2wg@art_vandelay>



在 2017年04月05日 03:28, Sean Paul 写道:
> On Thu, Mar 30, 2017 at 03:46:06AM +0800, Icenowy Zheng wrote:
>> As we are going to add support for the Allwinner DE2 Mixer in sun4i-drm
>> driver, we will finally have two types of layer.
>>
>> Abstract the layer type to void * and a ops struct, which contains the
>> only function used by crtc -- get the drm_plane struct of the layer.
>>
>> Signed-off-by: Icenowy Zheng <icenowy-h8G6r0blFSE@public.gmane.org>
>> ---
>> Refactored patch in v3.
>>
>>  drivers/gpu/drm/sun4i/sun4i_crtc.c  | 19 +++++++++++--------
>>  drivers/gpu/drm/sun4i/sun4i_crtc.h  |  3 ++-
>>  drivers/gpu/drm/sun4i/sun4i_layer.c | 19 ++++++++++++++++++-
>>  drivers/gpu/drm/sun4i/sun4i_layer.h |  2 +-
>>  drivers/gpu/drm/sun4i/sunxi_layer.h | 17 +++++++++++++++++
>>  5 files changed, 49 insertions(+), 11 deletions(-)
>>  create mode 100644 drivers/gpu/drm/sun4i/sunxi_layer.h
>>
>> diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
>> index 3c876c3a356a..33854ee7f636 100644
>> --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
>> +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
>> @@ -29,6 +29,7 @@
>>  #include "sun4i_crtc.h"
>>  #include "sun4i_drv.h"
>>  #include "sun4i_layer.h"
>> +#include "sunxi_layer.h"
>>  #include "sun4i_tcon.h"
>>
>>  static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc,
>> @@ -149,7 +150,7 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm,
>>  	scrtc->tcon = tcon;
>>
>>  	/* Create our layers */
>> -	scrtc->layers = sun4i_layers_init(drm, scrtc->backend);
>> +	scrtc->layers = (void **)sun4i_layers_init(drm, scrtc);
>>  	if (IS_ERR(scrtc->layers)) {
>>  		dev_err(drm->dev, "Couldn't create the planes\n");
>>  		return NULL;
>> @@ -157,14 +158,15 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm,
>>
>>  	/* find primary and cursor planes for drm_crtc_init_with_planes */
>>  	for (i = 0; scrtc->layers[i]; i++) {
>> -		struct sun4i_layer *layer = scrtc->layers[i];
>> +		void *layer = scrtc->layers[i];
>> +		struct drm_plane *plane = scrtc->layer_ops->get_plane(layer);
>>
>> -		switch (layer->plane.type) {
>> +		switch (plane->type) {
>>  		case DRM_PLANE_TYPE_PRIMARY:
>> -			primary = &layer->plane;
>> +			primary = plane;
>>  			break;
>>  		case DRM_PLANE_TYPE_CURSOR:
>> -			cursor = &layer->plane;
>> +			cursor = plane;
>>  			break;
>>  		default:
>>  			break;
>> @@ -190,10 +192,11 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm,
>>  	/* Set possible_crtcs to this crtc for overlay planes */
>>  	for (i = 0; scrtc->layers[i]; i++) {
>>  		uint32_t possible_crtcs = BIT(drm_crtc_index(&scrtc->crtc));
>> -		struct sun4i_layer *layer = scrtc->layers[i];
>> +		void *layer = scrtc->layers[i];
>> +		struct drm_plane *plane = scrtc->layer_ops->get_plane(layer);
>>
>> -		if (layer->plane.type == DRM_PLANE_TYPE_OVERLAY)
>> -			layer->plane.possible_crtcs = possible_crtcs;
>> +		if (plane->type == DRM_PLANE_TYPE_OVERLAY)
>> +			plane->possible_crtcs = possible_crtcs;
>>  	}
>>
>>  	return scrtc;
>> diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.h b/drivers/gpu/drm/sun4i/sun4i_crtc.h
>> index 230cb8f0d601..a4036ee44cf8 100644
>> --- a/drivers/gpu/drm/sun4i/sun4i_crtc.h
>> +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.h
>> @@ -19,7 +19,8 @@ struct sun4i_crtc {
>>
>>  	struct sun4i_backend		*backend;
>>  	struct sun4i_tcon		*tcon;
>> -	struct sun4i_layer		**layers;
>> +	void				**layers;
>> +	const struct sunxi_layer_ops	*layer_ops;
>
> I think you should probably take a different approach to abstract the layer
> type. How about creating
>
> struct sunxi_layer {
>         struct drm_plane plane;
> }
>
> base and then subclassing that for sun4i and sun8i? By doing this you can avoid
> the nasty casting and you can also get rid of the get_plane() hook and
> layer_ops.

For the situation that using ** things are easily to get weird.

>
> Sean
>
>
>
>>  };
>>
>>  static inline struct sun4i_crtc *drm_crtc_to_sun4i_crtc(struct drm_crtc *crtc)
>> diff --git a/drivers/gpu/drm/sun4i/sun4i_layer.c b/drivers/gpu/drm/sun4i/sun4i_layer.c
>> index f26bde5b9117..bc4a70d6968b 100644
>> --- a/drivers/gpu/drm/sun4i/sun4i_layer.c
>> +++ b/drivers/gpu/drm/sun4i/sun4i_layer.c
>> @@ -16,7 +16,9 @@
>>  #include <drm/drmP.h>
>>
>>  #include "sun4i_backend.h"
>> +#include "sun4i_crtc.h"
>>  #include "sun4i_layer.h"
>> +#include "sunxi_layer.h"
>>
>>  struct sun4i_plane_desc {
>>  	       enum drm_plane_type     type;
>> @@ -100,6 +102,17 @@ static const struct sun4i_plane_desc sun4i_backend_planes[] = {
>>  	},
>>  };
>>
>> +static struct drm_plane *sun4i_layer_get_plane(void *layer)
>> +{
>> +	struct sun4i_layer *sun4i_layer = layer;
>> +
>> +	return &sun4i_layer->plane;
>> +}
>> +
>> +static const struct sunxi_layer_ops layer_ops = {
>> +	.get_plane = sun4i_layer_get_plane,
>> +};
>> +
>>  static struct sun4i_layer *sun4i_layer_init_one(struct drm_device *drm,
>>  						struct sun4i_backend *backend,
>>  						const struct sun4i_plane_desc *plane)
>> @@ -129,9 +142,10 @@ static struct sun4i_layer *sun4i_layer_init_one(struct drm_device *drm,
>>  }
>>
>>  struct sun4i_layer **sun4i_layers_init(struct drm_device *drm,
>> -				       struct sun4i_backend *backend)
>> +				       struct sun4i_crtc *crtc)
>>  {
>>  	struct sun4i_layer **layers;
>> +	struct sun4i_backend *backend = crtc->backend;
>>  	int i;
>>
>>  	layers = devm_kcalloc(drm->dev, ARRAY_SIZE(sun4i_backend_planes) + 1,
>> @@ -181,5 +195,8 @@ struct sun4i_layer **sun4i_layers_init(struct drm_device *drm,
>>  		layers[i] = layer;
>>  	};
>>
>> +	/* Assign layer ops to the CRTC */
>> +	crtc->layer_ops = &layer_ops;
>> +
>>  	return layers;
>>  }
>> diff --git a/drivers/gpu/drm/sun4i/sun4i_layer.h b/drivers/gpu/drm/sun4i/sun4i_layer.h
>> index 4be1f0919df2..425eea7b9e3b 100644
>> --- a/drivers/gpu/drm/sun4i/sun4i_layer.h
>> +++ b/drivers/gpu/drm/sun4i/sun4i_layer.h
>> @@ -27,6 +27,6 @@ plane_to_sun4i_layer(struct drm_plane *plane)
>>  }
>>
>>  struct sun4i_layer **sun4i_layers_init(struct drm_device *drm,
>> -				       struct sun4i_backend *backend);
>> +				       struct sun4i_crtc *crtc);
>>
>>  #endif /* _SUN4I_LAYER_H_ */
>> diff --git a/drivers/gpu/drm/sun4i/sunxi_layer.h b/drivers/gpu/drm/sun4i/sunxi_layer.h
>> new file mode 100644
>> index 000000000000..d8838ec39299
>> --- /dev/null
>> +++ b/drivers/gpu/drm/sun4i/sunxi_layer.h
>> @@ -0,0 +1,17 @@
>> +/*
>> + * Copyright (C) 2017 Icenowy Zheng <icenowy-ymACFijhrKM@public.gmane.org>
>> + *
>> + * This program is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU General Public License as
>> + * published by the Free Software Foundation; either version 2 of
>> + * the License, or (at your option) any later version.
>> + */
>> +
>> +#ifndef _SUNXI_LAYER_H_
>> +#define _SUNXI_LAYER_H_
>> +
>> +struct sunxi_layer_ops {
>> +	struct drm_plane *(*get_plane)(void *layer);
>> +};
>> +
>> +#endif /* _SUNXI_LAYER_H_ */
>> --
>> 2.12.0
>>
>>
>> _______________________________________________
>> linux-arm-kernel mailing list
>> linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit https://groups.google.com/d/optout.

WARNING: multiple messages have this Message-ID (diff)
From: Icenowy Zheng <icenowy@aosc.io>
To: Sean Paul <seanpaul@chromium.org>
Cc: devicetree@vger.kernel.org,
	Jernej Skrabec <jernej.skrabec@siol.net>,
	linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org, Chen-Yu Tsai <wens@csie.org>,
	Rob Herring <robh+dt@kernel.org>,
	Maxime Ripard <maxime.ripard@free-electrons.com>,
	linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 04/11] drm/sun4i: abstract the layer type
Date: Wed, 5 Apr 2017 03:53:22 +0800	[thread overview]
Message-ID: <dbf0f478-ff53-0ced-24a3-e9de7077efd9@aosc.io> (raw)
In-Reply-To: <20170404192837.pvlhwyeut45vg2wg@art_vandelay>

CgrlnKggMjAxN+W5tDA05pyIMDXml6UgMDM6MjgsIFNlYW4gUGF1bCDlhpnpgZM6Cj4gT24gVGh1
LCBNYXIgMzAsIDIwMTcgYXQgMDM6NDY6MDZBTSArMDgwMCwgSWNlbm93eSBaaGVuZyB3cm90ZToK
Pj4gQXMgd2UgYXJlIGdvaW5nIHRvIGFkZCBzdXBwb3J0IGZvciB0aGUgQWxsd2lubmVyIERFMiBN
aXhlciBpbiBzdW40aS1kcm0KPj4gZHJpdmVyLCB3ZSB3aWxsIGZpbmFsbHkgaGF2ZSB0d28gdHlw
ZXMgb2YgbGF5ZXIuCj4+Cj4+IEFic3RyYWN0IHRoZSBsYXllciB0eXBlIHRvIHZvaWQgKiBhbmQg
YSBvcHMgc3RydWN0LCB3aGljaCBjb250YWlucyB0aGUKPj4gb25seSBmdW5jdGlvbiB1c2VkIGJ5
IGNydGMgLS0gZ2V0IHRoZSBkcm1fcGxhbmUgc3RydWN0IG9mIHRoZSBsYXllci4KPj4KPj4gU2ln
bmVkLW9mZi1ieTogSWNlbm93eSBaaGVuZyA8aWNlbm93eUBhb3NjLmlvPgo+PiAtLS0KPj4gUmVm
YWN0b3JlZCBwYXRjaCBpbiB2My4KPj4KPj4gIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9j
cnRjLmMgIHwgMTkgKysrKysrKysrKystLS0tLS0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL3N1bjRp
L3N1bjRpX2NydGMuaCAgfCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9s
YXllci5jIHwgMTkgKysrKysrKysrKysrKysrKysrLQo+PiAgZHJpdmVycy9ncHUvZHJtL3N1bjRp
L3N1bjRpX2xheWVyLmggfCAgMiArLQo+PiAgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bnhpX2xh
eWVyLmggfCAxNyArKysrKysrKysrKysrKysrKwo+PiAgNSBmaWxlcyBjaGFuZ2VkLCA0OSBpbnNl
cnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz
L2dwdS9kcm0vc3VuNGkvc3VueGlfbGF5ZXIuaAo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL3N1bjRpL3N1bjRpX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9j
cnRjLmMKPj4gaW5kZXggM2M4NzZjM2EzNTZhLi4zMzg1NGVlN2Y2MzYgMTAwNjQ0Cj4+IC0tLSBh
L2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9jcnRjLmMKPj4gKysrIGIvZHJpdmVycy9ncHUv
ZHJtL3N1bjRpL3N1bjRpX2NydGMuYwo+PiBAQCAtMjksNiArMjksNyBAQAo+PiAgI2luY2x1ZGUg
InN1bjRpX2NydGMuaCIKPj4gICNpbmNsdWRlICJzdW40aV9kcnYuaCIKPj4gICNpbmNsdWRlICJz
dW40aV9sYXllci5oIgo+PiArI2luY2x1ZGUgInN1bnhpX2xheWVyLmgiCj4+ICAjaW5jbHVkZSAi
c3VuNGlfdGNvbi5oIgo+Pgo+PiAgc3RhdGljIHZvaWQgc3VuNGlfY3J0Y19hdG9taWNfYmVnaW4o
c3RydWN0IGRybV9jcnRjICpjcnRjLAo+PiBAQCAtMTQ5LDcgKzE1MCw3IEBAIHN0cnVjdCBzdW40
aV9jcnRjICpzdW40aV9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPj4gIAlzY3J0
Yy0+dGNvbiA9IHRjb247Cj4+Cj4+ICAJLyogQ3JlYXRlIG91ciBsYXllcnMgKi8KPj4gLQlzY3J0
Yy0+bGF5ZXJzID0gc3VuNGlfbGF5ZXJzX2luaXQoZHJtLCBzY3J0Yy0+YmFja2VuZCk7Cj4+ICsJ
c2NydGMtPmxheWVycyA9ICh2b2lkICoqKXN1bjRpX2xheWVyc19pbml0KGRybSwgc2NydGMpOwo+
PiAgCWlmIChJU19FUlIoc2NydGMtPmxheWVycykpIHsKPj4gIAkJZGV2X2Vycihkcm0tPmRldiwg
IkNvdWxkbid0IGNyZWF0ZSB0aGUgcGxhbmVzXG4iKTsKPj4gIAkJcmV0dXJuIE5VTEw7Cj4+IEBA
IC0xNTcsMTQgKzE1OCwxNSBAQCBzdHJ1Y3Qgc3VuNGlfY3J0YyAqc3VuNGlfY3J0Y19pbml0KHN0
cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4+Cj4+ICAJLyogZmluZCBwcmltYXJ5IGFuZCBjdXJzb3Ig
cGxhbmVzIGZvciBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzICovCj4+ICAJZm9yIChpID0gMDsg
c2NydGMtPmxheWVyc1tpXTsgaSsrKSB7Cj4+IC0JCXN0cnVjdCBzdW40aV9sYXllciAqbGF5ZXIg
PSBzY3J0Yy0+bGF5ZXJzW2ldOwo+PiArCQl2b2lkICpsYXllciA9IHNjcnRjLT5sYXllcnNbaV07
Cj4+ICsJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gc2NydGMtPmxheWVyX29wcy0+Z2V0X3Bs
YW5lKGxheWVyKTsKPj4KPj4gLQkJc3dpdGNoIChsYXllci0+cGxhbmUudHlwZSkgewo+PiArCQlz
d2l0Y2ggKHBsYW5lLT50eXBlKSB7Cj4+ICAJCWNhc2UgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWToK
Pj4gLQkJCXByaW1hcnkgPSAmbGF5ZXItPnBsYW5lOwo+PiArCQkJcHJpbWFyeSA9IHBsYW5lOwo+
PiAgCQkJYnJlYWs7Cj4+ICAJCWNhc2UgRFJNX1BMQU5FX1RZUEVfQ1VSU09SOgo+PiAtCQkJY3Vy
c29yID0gJmxheWVyLT5wbGFuZTsKPj4gKwkJCWN1cnNvciA9IHBsYW5lOwo+PiAgCQkJYnJlYWs7
Cj4+ICAJCWRlZmF1bHQ6Cj4+ICAJCQlicmVhazsKPj4gQEAgLTE5MCwxMCArMTkyLDExIEBAIHN0
cnVjdCBzdW40aV9jcnRjICpzdW40aV9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwK
Pj4gIAkvKiBTZXQgcG9zc2libGVfY3J0Y3MgdG8gdGhpcyBjcnRjIGZvciBvdmVybGF5IHBsYW5l
cyAqLwo+PiAgCWZvciAoaSA9IDA7IHNjcnRjLT5sYXllcnNbaV07IGkrKykgewo+PiAgCQl1aW50
MzJfdCBwb3NzaWJsZV9jcnRjcyA9IEJJVChkcm1fY3J0Y19pbmRleCgmc2NydGMtPmNydGMpKTsK
Pj4gLQkJc3RydWN0IHN1bjRpX2xheWVyICpsYXllciA9IHNjcnRjLT5sYXllcnNbaV07Cj4+ICsJ
CXZvaWQgKmxheWVyID0gc2NydGMtPmxheWVyc1tpXTsKPj4gKwkJc3RydWN0IGRybV9wbGFuZSAq
cGxhbmUgPSBzY3J0Yy0+bGF5ZXJfb3BzLT5nZXRfcGxhbmUobGF5ZXIpOwo+Pgo+PiAtCQlpZiAo
bGF5ZXItPnBsYW5lLnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSkKPj4gLQkJCWxheWVy
LT5wbGFuZS5wb3NzaWJsZV9jcnRjcyA9IHBvc3NpYmxlX2NydGNzOwo+PiArCQlpZiAocGxhbmUt
PnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSkKPj4gKwkJCXBsYW5lLT5wb3NzaWJsZV9j
cnRjcyA9IHBvc3NpYmxlX2NydGNzOwo+PiAgCX0KPj4KPj4gIAlyZXR1cm4gc2NydGM7Cj4+IGRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfY3J0Yy5oIGIvZHJpdmVycy9n
cHUvZHJtL3N1bjRpL3N1bjRpX2NydGMuaAo+PiBpbmRleCAyMzBjYjhmMGQ2MDEuLmE0MDM2ZWU0
NGNmOCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2NydGMuaAo+
PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfY3J0Yy5oCj4+IEBAIC0xOSw3ICsx
OSw4IEBAIHN0cnVjdCBzdW40aV9jcnRjIHsKPj4KPj4gIAlzdHJ1Y3Qgc3VuNGlfYmFja2VuZAkJ
KmJhY2tlbmQ7Cj4+ICAJc3RydWN0IHN1bjRpX3Rjb24JCSp0Y29uOwo+PiAtCXN0cnVjdCBzdW40
aV9sYXllcgkJKipsYXllcnM7Cj4+ICsJdm9pZAkJCQkqKmxheWVyczsKPj4gKwljb25zdCBzdHJ1
Y3Qgc3VueGlfbGF5ZXJfb3BzCSpsYXllcl9vcHM7Cj4KPiBJIHRoaW5rIHlvdSBzaG91bGQgcHJv
YmFibHkgdGFrZSBhIGRpZmZlcmVudCBhcHByb2FjaCB0byBhYnN0cmFjdCB0aGUgbGF5ZXIKPiB0
eXBlLiBIb3cgYWJvdXQgY3JlYXRpbmcKPgo+IHN0cnVjdCBzdW54aV9sYXllciB7Cj4gICAgICAg
ICBzdHJ1Y3QgZHJtX3BsYW5lIHBsYW5lOwo+IH0KPgo+IGJhc2UgYW5kIHRoZW4gc3ViY2xhc3Np
bmcgdGhhdCBmb3Igc3VuNGkgYW5kIHN1bjhpPyBCeSBkb2luZyB0aGlzIHlvdSBjYW4gYXZvaWQK
PiB0aGUgbmFzdHkgY2FzdGluZyBhbmQgeW91IGNhbiBhbHNvIGdldCByaWQgb2YgdGhlIGdldF9w
bGFuZSgpIGhvb2sgYW5kCj4gbGF5ZXJfb3BzLgoKRm9yIHRoZSBzaXR1YXRpb24gdGhhdCB1c2lu
ZyAqKiB0aGluZ3MgYXJlIGVhc2lseSB0byBnZXQgd2VpcmQuCgo+Cj4gU2Vhbgo+Cj4KPgo+PiAg
fTsKPj4KPj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN1bjRpX2NydGMgKmRybV9jcnRjX3RvX3N1
bjRpX2NydGMoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlf
bGF5ZXIuYwo+PiBpbmRleCBmMjZiZGU1YjkxMTcuLmJjNGE3MGQ2OTY4YiAxMDA2NDQKPj4gLS0t
IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmMKPj4gKysrIGIvZHJpdmVycy9n
cHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmMKPj4gQEAgLTE2LDcgKzE2LDkgQEAKPj4gICNpbmNs
dWRlIDxkcm0vZHJtUC5oPgo+Pgo+PiAgI2luY2x1ZGUgInN1bjRpX2JhY2tlbmQuaCIKPj4gKyNp
bmNsdWRlICJzdW40aV9jcnRjLmgiCj4+ICAjaW5jbHVkZSAic3VuNGlfbGF5ZXIuaCIKPj4gKyNp
bmNsdWRlICJzdW54aV9sYXllci5oIgo+Pgo+PiAgc3RydWN0IHN1bjRpX3BsYW5lX2Rlc2Mgewo+
PiAgCSAgICAgICBlbnVtIGRybV9wbGFuZV90eXBlICAgICB0eXBlOwo+PiBAQCAtMTAwLDYgKzEw
MiwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1bjRpX3BsYW5lX2Rlc2Mgc3VuNGlfYmFja2Vu
ZF9wbGFuZXNbXSA9IHsKPj4gIAl9LAo+PiAgfTsKPj4KPj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3Bs
YW5lICpzdW40aV9sYXllcl9nZXRfcGxhbmUodm9pZCAqbGF5ZXIpCj4+ICt7Cj4+ICsJc3RydWN0
IHN1bjRpX2xheWVyICpzdW40aV9sYXllciA9IGxheWVyOwo+PiArCj4+ICsJcmV0dXJuICZzdW40
aV9sYXllci0+cGxhbmU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlf
bGF5ZXJfb3BzIGxheWVyX29wcyA9IHsKPj4gKwkuZ2V0X3BsYW5lID0gc3VuNGlfbGF5ZXJfZ2V0
X3BsYW5lLAo+PiArfTsKPj4gKwo+PiAgc3RhdGljIHN0cnVjdCBzdW40aV9sYXllciAqc3VuNGlf
bGF5ZXJfaW5pdF9vbmUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPj4gIAkJCQkJCXN0cnVjdCBz
dW40aV9iYWNrZW5kICpiYWNrZW5kLAo+PiAgCQkJCQkJY29uc3Qgc3RydWN0IHN1bjRpX3BsYW5l
X2Rlc2MgKnBsYW5lKQo+PiBAQCAtMTI5LDkgKzE0MiwxMCBAQCBzdGF0aWMgc3RydWN0IHN1bjRp
X2xheWVyICpzdW40aV9sYXllcl9pbml0X29uZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+PiAg
fQo+Pgo+PiAgc3RydWN0IHN1bjRpX2xheWVyICoqc3VuNGlfbGF5ZXJzX2luaXQoc3RydWN0IGRy
bV9kZXZpY2UgKmRybSwKPj4gLQkJCQkgICAgICAgc3RydWN0IHN1bjRpX2JhY2tlbmQgKmJhY2tl
bmQpCj4+ICsJCQkJICAgICAgIHN0cnVjdCBzdW40aV9jcnRjICpjcnRjKQo+PiAgewo+PiAgCXN0
cnVjdCBzdW40aV9sYXllciAqKmxheWVyczsKPj4gKwlzdHJ1Y3Qgc3VuNGlfYmFja2VuZCAqYmFj
a2VuZCA9IGNydGMtPmJhY2tlbmQ7Cj4+ICAJaW50IGk7Cj4+Cj4+ICAJbGF5ZXJzID0gZGV2bV9r
Y2FsbG9jKGRybS0+ZGV2LCBBUlJBWV9TSVpFKHN1bjRpX2JhY2tlbmRfcGxhbmVzKSArIDEsCj4+
IEBAIC0xODEsNSArMTk1LDggQEAgc3RydWN0IHN1bjRpX2xheWVyICoqc3VuNGlfbGF5ZXJzX2lu
aXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPj4gIAkJbGF5ZXJzW2ldID0gbGF5ZXI7Cj4+ICAJ
fTsKPj4KPj4gKwkvKiBBc3NpZ24gbGF5ZXIgb3BzIHRvIHRoZSBDUlRDICovCj4+ICsJY3J0Yy0+
bGF5ZXJfb3BzID0gJmxheWVyX29wczsKPj4gKwo+PiAgCXJldHVybiBsYXllcnM7Cj4+ICB9Cj4+
IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfbGF5ZXIuaCBiL2RyaXZl
cnMvZ3B1L2RybS9zdW40aS9zdW40aV9sYXllci5oCj4+IGluZGV4IDRiZTFmMDkxOWRmMi4uNDI1
ZWVhN2I5ZTNiIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfbGF5
ZXIuaAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfbGF5ZXIuaAo+PiBAQCAt
MjcsNiArMjcsNiBAQCBwbGFuZV90b19zdW40aV9sYXllcihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu
ZSkKPj4gIH0KPj4KPj4gIHN0cnVjdCBzdW40aV9sYXllciAqKnN1bjRpX2xheWVyc19pbml0KHN0
cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4+IC0JCQkJICAgICAgIHN0cnVjdCBzdW40aV9iYWNrZW5k
ICpiYWNrZW5kKTsKPj4gKwkJCQkgICAgICAgc3RydWN0IHN1bjRpX2NydGMgKmNydGMpOwo+Pgo+
PiAgI2VuZGlmIC8qIF9TVU40SV9MQVlFUl9IXyAqLwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL3N1bjRpL3N1bnhpX2xheWVyLmggYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VueGlf
bGF5ZXIuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmQ4
ODM4ZWMzOTI5OQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40
aS9zdW54aV9sYXllci5oCj4+IEBAIC0wLDAgKzEsMTcgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmln
aHQgKEMpIDIwMTcgSWNlbm93eSBaaGVuZyA8aWNlbm93eUBhb3NjLnh5ej4KPj4gKyAqCj4+ICsg
KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCj4+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBhcwo+PiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKPj4gKyAqIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+PiArICovCj4+ICsKPj4gKyNpZm5k
ZWYgX1NVTlhJX0xBWUVSX0hfCj4+ICsjZGVmaW5lIF9TVU5YSV9MQVlFUl9IXwo+PiArCj4+ICtz
dHJ1Y3Qgc3VueGlfbGF5ZXJfb3BzIHsKPj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICooKmdldF9wbGFu
ZSkodm9pZCAqbGF5ZXIpOwo+PiArfTsKPj4gKwo+PiArI2VuZGlmIC8qIF9TVU5YSV9MQVlFUl9I
XyAqLwo+PiAtLQo+PiAyLjEyLjAKPj4KPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KPj4gbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKPj4g
bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4+IGh0dHA6Ly9saXN0cy5pbmZy
YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo+CgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1h
aWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp
c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==

WARNING: multiple messages have this Message-ID (diff)
From: icenowy@aosc.io (Icenowy Zheng)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 04/11] drm/sun4i: abstract the layer type
Date: Wed, 5 Apr 2017 03:53:22 +0800	[thread overview]
Message-ID: <dbf0f478-ff53-0ced-24a3-e9de7077efd9@aosc.io> (raw)
In-Reply-To: <20170404192837.pvlhwyeut45vg2wg@art_vandelay>



? 2017?04?05? 03:28, Sean Paul ??:
> On Thu, Mar 30, 2017 at 03:46:06AM +0800, Icenowy Zheng wrote:
>> As we are going to add support for the Allwinner DE2 Mixer in sun4i-drm
>> driver, we will finally have two types of layer.
>>
>> Abstract the layer type to void * and a ops struct, which contains the
>> only function used by crtc -- get the drm_plane struct of the layer.
>>
>> Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
>> ---
>> Refactored patch in v3.
>>
>>  drivers/gpu/drm/sun4i/sun4i_crtc.c  | 19 +++++++++++--------
>>  drivers/gpu/drm/sun4i/sun4i_crtc.h  |  3 ++-
>>  drivers/gpu/drm/sun4i/sun4i_layer.c | 19 ++++++++++++++++++-
>>  drivers/gpu/drm/sun4i/sun4i_layer.h |  2 +-
>>  drivers/gpu/drm/sun4i/sunxi_layer.h | 17 +++++++++++++++++
>>  5 files changed, 49 insertions(+), 11 deletions(-)
>>  create mode 100644 drivers/gpu/drm/sun4i/sunxi_layer.h
>>
>> diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
>> index 3c876c3a356a..33854ee7f636 100644
>> --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
>> +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
>> @@ -29,6 +29,7 @@
>>  #include "sun4i_crtc.h"
>>  #include "sun4i_drv.h"
>>  #include "sun4i_layer.h"
>> +#include "sunxi_layer.h"
>>  #include "sun4i_tcon.h"
>>
>>  static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc,
>> @@ -149,7 +150,7 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm,
>>  	scrtc->tcon = tcon;
>>
>>  	/* Create our layers */
>> -	scrtc->layers = sun4i_layers_init(drm, scrtc->backend);
>> +	scrtc->layers = (void **)sun4i_layers_init(drm, scrtc);
>>  	if (IS_ERR(scrtc->layers)) {
>>  		dev_err(drm->dev, "Couldn't create the planes\n");
>>  		return NULL;
>> @@ -157,14 +158,15 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm,
>>
>>  	/* find primary and cursor planes for drm_crtc_init_with_planes */
>>  	for (i = 0; scrtc->layers[i]; i++) {
>> -		struct sun4i_layer *layer = scrtc->layers[i];
>> +		void *layer = scrtc->layers[i];
>> +		struct drm_plane *plane = scrtc->layer_ops->get_plane(layer);
>>
>> -		switch (layer->plane.type) {
>> +		switch (plane->type) {
>>  		case DRM_PLANE_TYPE_PRIMARY:
>> -			primary = &layer->plane;
>> +			primary = plane;
>>  			break;
>>  		case DRM_PLANE_TYPE_CURSOR:
>> -			cursor = &layer->plane;
>> +			cursor = plane;
>>  			break;
>>  		default:
>>  			break;
>> @@ -190,10 +192,11 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm,
>>  	/* Set possible_crtcs to this crtc for overlay planes */
>>  	for (i = 0; scrtc->layers[i]; i++) {
>>  		uint32_t possible_crtcs = BIT(drm_crtc_index(&scrtc->crtc));
>> -		struct sun4i_layer *layer = scrtc->layers[i];
>> +		void *layer = scrtc->layers[i];
>> +		struct drm_plane *plane = scrtc->layer_ops->get_plane(layer);
>>
>> -		if (layer->plane.type == DRM_PLANE_TYPE_OVERLAY)
>> -			layer->plane.possible_crtcs = possible_crtcs;
>> +		if (plane->type == DRM_PLANE_TYPE_OVERLAY)
>> +			plane->possible_crtcs = possible_crtcs;
>>  	}
>>
>>  	return scrtc;
>> diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.h b/drivers/gpu/drm/sun4i/sun4i_crtc.h
>> index 230cb8f0d601..a4036ee44cf8 100644
>> --- a/drivers/gpu/drm/sun4i/sun4i_crtc.h
>> +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.h
>> @@ -19,7 +19,8 @@ struct sun4i_crtc {
>>
>>  	struct sun4i_backend		*backend;
>>  	struct sun4i_tcon		*tcon;
>> -	struct sun4i_layer		**layers;
>> +	void				**layers;
>> +	const struct sunxi_layer_ops	*layer_ops;
>
> I think you should probably take a different approach to abstract the layer
> type. How about creating
>
> struct sunxi_layer {
>         struct drm_plane plane;
> }
>
> base and then subclassing that for sun4i and sun8i? By doing this you can avoid
> the nasty casting and you can also get rid of the get_plane() hook and
> layer_ops.

For the situation that using ** things are easily to get weird.

>
> Sean
>
>
>
>>  };
>>
>>  static inline struct sun4i_crtc *drm_crtc_to_sun4i_crtc(struct drm_crtc *crtc)
>> diff --git a/drivers/gpu/drm/sun4i/sun4i_layer.c b/drivers/gpu/drm/sun4i/sun4i_layer.c
>> index f26bde5b9117..bc4a70d6968b 100644
>> --- a/drivers/gpu/drm/sun4i/sun4i_layer.c
>> +++ b/drivers/gpu/drm/sun4i/sun4i_layer.c
>> @@ -16,7 +16,9 @@
>>  #include <drm/drmP.h>
>>
>>  #include "sun4i_backend.h"
>> +#include "sun4i_crtc.h"
>>  #include "sun4i_layer.h"
>> +#include "sunxi_layer.h"
>>
>>  struct sun4i_plane_desc {
>>  	       enum drm_plane_type     type;
>> @@ -100,6 +102,17 @@ static const struct sun4i_plane_desc sun4i_backend_planes[] = {
>>  	},
>>  };
>>
>> +static struct drm_plane *sun4i_layer_get_plane(void *layer)
>> +{
>> +	struct sun4i_layer *sun4i_layer = layer;
>> +
>> +	return &sun4i_layer->plane;
>> +}
>> +
>> +static const struct sunxi_layer_ops layer_ops = {
>> +	.get_plane = sun4i_layer_get_plane,
>> +};
>> +
>>  static struct sun4i_layer *sun4i_layer_init_one(struct drm_device *drm,
>>  						struct sun4i_backend *backend,
>>  						const struct sun4i_plane_desc *plane)
>> @@ -129,9 +142,10 @@ static struct sun4i_layer *sun4i_layer_init_one(struct drm_device *drm,
>>  }
>>
>>  struct sun4i_layer **sun4i_layers_init(struct drm_device *drm,
>> -				       struct sun4i_backend *backend)
>> +				       struct sun4i_crtc *crtc)
>>  {
>>  	struct sun4i_layer **layers;
>> +	struct sun4i_backend *backend = crtc->backend;
>>  	int i;
>>
>>  	layers = devm_kcalloc(drm->dev, ARRAY_SIZE(sun4i_backend_planes) + 1,
>> @@ -181,5 +195,8 @@ struct sun4i_layer **sun4i_layers_init(struct drm_device *drm,
>>  		layers[i] = layer;
>>  	};
>>
>> +	/* Assign layer ops to the CRTC */
>> +	crtc->layer_ops = &layer_ops;
>> +
>>  	return layers;
>>  }
>> diff --git a/drivers/gpu/drm/sun4i/sun4i_layer.h b/drivers/gpu/drm/sun4i/sun4i_layer.h
>> index 4be1f0919df2..425eea7b9e3b 100644
>> --- a/drivers/gpu/drm/sun4i/sun4i_layer.h
>> +++ b/drivers/gpu/drm/sun4i/sun4i_layer.h
>> @@ -27,6 +27,6 @@ plane_to_sun4i_layer(struct drm_plane *plane)
>>  }
>>
>>  struct sun4i_layer **sun4i_layers_init(struct drm_device *drm,
>> -				       struct sun4i_backend *backend);
>> +				       struct sun4i_crtc *crtc);
>>
>>  #endif /* _SUN4I_LAYER_H_ */
>> diff --git a/drivers/gpu/drm/sun4i/sunxi_layer.h b/drivers/gpu/drm/sun4i/sunxi_layer.h
>> new file mode 100644
>> index 000000000000..d8838ec39299
>> --- /dev/null
>> +++ b/drivers/gpu/drm/sun4i/sunxi_layer.h
>> @@ -0,0 +1,17 @@
>> +/*
>> + * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.xyz>
>> + *
>> + * This program is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU General Public License as
>> + * published by the Free Software Foundation; either version 2 of
>> + * the License, or (at your option) any later version.
>> + */
>> +
>> +#ifndef _SUNXI_LAYER_H_
>> +#define _SUNXI_LAYER_H_
>> +
>> +struct sunxi_layer_ops {
>> +	struct drm_plane *(*get_plane)(void *layer);
>> +};
>> +
>> +#endif /* _SUNXI_LAYER_H_ */
>> --
>> 2.12.0
>>
>>
>> _______________________________________________
>> linux-arm-kernel mailing list
>> linux-arm-kernel at lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>

  reply	other threads:[~2017-04-04 19:53 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-29 19:46 [PATCH v3 00/11] Initial Allwinner Display Engine 2.0 Support Icenowy Zheng
2017-03-29 19:46 ` Icenowy Zheng
2017-03-29 19:46 ` Icenowy Zheng
2017-03-29 19:46 ` [PATCH v3 01/11] dt-bindings: add binding for the Allwinner DE2 CCU Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-04-03 15:33   ` Rob Herring
2017-04-03 15:33     ` Rob Herring
2017-04-03 15:33     ` Rob Herring
2017-04-03 15:33     ` Rob Herring
2017-04-03 16:18     ` Icenowy Zheng
2017-04-03 16:18       ` Icenowy Zheng
2017-04-03 16:18       ` Icenowy Zheng
2017-03-29 19:46 ` [PATCH v3 02/11] clk: sunxi-ng: add support for " Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46 ` [PATCH v3 03/11] dt-bindings: add bindings for DE2 on V3s SoC Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-04-03  8:00   ` Maxime Ripard
2017-04-03  8:00     ` Maxime Ripard
2017-04-03  8:00     ` Maxime Ripard
2017-04-03  8:00     ` Maxime Ripard
2017-03-29 19:46 ` [PATCH v3 04/11] drm/sun4i: abstract the layer type Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-04-03  8:14   ` Maxime Ripard
2017-04-03  8:14     ` Maxime Ripard
2017-04-03  8:14     ` Maxime Ripard
2017-04-03  8:14     ` Maxime Ripard
2017-04-03 10:51     ` Chen-Yu Tsai
2017-04-03 10:51       ` Chen-Yu Tsai
2017-04-03 10:51       ` Chen-Yu Tsai
2017-04-04 19:28   ` Sean Paul
2017-04-04 19:28     ` Sean Paul
2017-04-04 19:53     ` Icenowy Zheng [this message]
2017-04-04 19:53       ` Icenowy Zheng
2017-04-04 19:53       ` Icenowy Zheng
2017-04-05  2:27       ` [linux-sunxi] " Chen-Yu Tsai
2017-04-05  2:27         ` Chen-Yu Tsai
2017-04-05  2:27         ` Chen-Yu Tsai
2017-04-05 17:14         ` [linux-sunxi] " icenowy
2017-04-05 17:14           ` icenowy at aosc.io
2017-04-05 17:14           ` icenowy
2017-04-05 17:14           ` icenowy-h8G6r0blFSE
2017-03-29 19:46 ` [PATCH v3 05/11] drm/sun4i: abstract a mixer type Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-04-03  8:24   ` Maxime Ripard
2017-04-03  8:24     ` Maxime Ripard
2017-04-03  8:24     ` Maxime Ripard
2017-03-29 19:46 ` [PATCH v3 06/11] drm/sun4i: add support for Allwinner DE2 mixers Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 22:33   ` [linux-sunxi] " Jernej Škrabec
2017-03-29 22:33     ` Jernej Škrabec
2017-03-29 22:33     ` Jernej Škrabec
2017-03-29 19:46 ` [PATCH v3 07/11] drm/sun4i: Add compatible string for V3s display engine Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46 ` [PATCH v3 08/11] drm/sun4i: tcon: add support for V3s TCON Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46 ` [PATCH v3 09/11] ARM: dts: sun8i: add DE2 nodes for V3s SoC Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46 ` [PATCH v3 10/11] ARM: dts: sun8i: add pinmux for LCD pins of " Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46 ` [PATCH v3 11/11] [DO NOT MERGE] ARM: dts: sun8i: enable LCD panel of Lichee Pi Zero Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng
2017-03-29 19:46   ` Icenowy Zheng

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=dbf0f478-ff53-0ced-24a3-e9de7077efd9@aosc.io \
    --to=icenowy-h8g6r0blfse@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=jernej.skrabec-gGgVlfcn5nU@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-clk-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
    --cc=maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
    --cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
    --cc=wens-jdAy2FN1RRM@public.gmane.org \
    /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.