* Re: [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi
From: Kukjin Kim @ 2013-10-06 0:09 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <524AE9BC.6060103@ti.com>
On 10/02/13 00:26, Kishon Vijay Abraham I wrote:
> On Wednesday 02 October 2013 02:43 AM, Sylwester Nawrocki wrote:
>> On 10/01/2013 07:28 AM, Kishon Vijay Abraham I wrote:
>>> On Sunday 29 September 2013 12:57 AM, Sylwester Nawrocki wrote:
>>>>> Add PHY provider node for the MIPI CSIS and MIPI DSIM PHYs.
>>>>>
>>>>> Signed-off-by: Sylwester Nawrocki<s.nawrocki@samsung.com>
>>>>> Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
>>>>> Acked-by: Felipe Balbi<balbi@ti.com>
>>>
>>> Can this patch be taken through exynos dt tree?
>>
>> Yes, that makes more sense indeed. Kukjin, would you mind taking
>> this patch to your tree ?
>
Sure. Applied this whole series.
> FWIW
> Acked-by: Kishon Vijay Abraham I<kishon@ti.com>
>>
Thanks,
Kukjin
^ permalink raw reply
* Re: [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi
From: Kukjin Kim @ 2013-10-06 0:11 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <5250AA3F.6030701@samsung.com>
On 10/06/13 09:09, Kukjin Kim wrote:
>
> On 10/02/13 00:26, Kishon Vijay Abraham I wrote:
>> On Wednesday 02 October 2013 02:43 AM, Sylwester Nawrocki wrote:
>>> On 10/01/2013 07:28 AM, Kishon Vijay Abraham I wrote:
>>>> On Sunday 29 September 2013 12:57 AM, Sylwester Nawrocki wrote:
>>>>>> Add PHY provider node for the MIPI CSIS and MIPI DSIM PHYs.
>>>>>>
>>>>>> Signed-off-by: Sylwester Nawrocki<s.nawrocki@samsung.com>
>>>>>> Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
>>>>>> Acked-by: Felipe Balbi<balbi@ti.com>
>>>>
>>>> Can this patch be taken through exynos dt tree?
>>>
>>> Yes, that makes more sense indeed. Kukjin, would you mind taking
>>> this patch to your tree ?
>>
> Sure. Applied this whole series.
>
Oops, sorry. Only this patch ;-)
>> FWIW
>> Acked-by: Kishon Vijay Abraham I<kishon@ti.com>
>>>
Thanks,
Kukjin
^ permalink raw reply
* Re: [PATCH 1/2] hyperv-fb: add pci stub
From: Gerd Hoffmann @ 2013-10-07 6:50 UTC (permalink / raw)
To: KY Srinivasan
Cc: Haiyang Zhang, Jean-Christophe Plagniol-Villard, Tomi Valkeinen,
open list:Hyper-V CORE AND..., open list:FRAMEBUFFER LAYER,
open list
In-Reply-To: <465ef0cb45e04bcc94c4788c0d930c4d@SN2PR03MB061.namprd03.prod.outlook.com>
On Mi, 2013-10-02 at 14:29 +0000, KY Srinivasan wrote:
>
> > This patch adds a pci stub driver to hyper-fb. The hyperv framebuffer
> > driver will bind to the pci device then, so linux kernel and userspace
> > know there is a proper kernel driver for the device active. lspci shows
> > this for example:
> Gerd,
>
> Thanks for doing this. This certainly will address some of the issues that are reported. I do have a question though - how would this work if we don't have PCI bus in the guest.
The hyperv framebuffer driver wouldn't work in the first place then as
it looks up the framebuffer address in pci config space (see hvfb_getmem
function).
cheers,
Gerd
^ permalink raw reply
* RE: [RFC PATCH 1/4] mipi-dsi-bus: add MIPI DSI bus support
From: Bert Kenward @ 2013-10-07 10:47 UTC (permalink / raw)
To: Andrzej Hajda, Laurent Pinchart
Cc: linux-fbdev@vger.kernel.org, Kyungmin Park,
dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org
In-Reply-To: <1380032596-18612-2-git-send-email-a.hajda@samsung.com>
T24gVHVlc2RheSBTZXB0ZW1iZXIgMjQgMjAxMyBhdCAxNToyMywgQW5kcnplaiBIYWpkYSB3cm90
ZToNCj4gTUlQSSBEU0kgaXMgYSBoaWdoLXNwZWVkIHNlcmlhbCBpbnRlcmZhY2UgdG8gdHJhbnNt
aXQNCj4gZGF0YSBmcm9tL3RvIGhvc3QgdG8gZGlzcGxheSBtb2R1bGUuDQo+IA0KPiBTaWduZWQt
b2ZmLWJ5OiBBbmRyemVqIEhhamRhIDxhLmhhamRhQHNhbXN1bmcuY29tPg0KPiBTaWduZWQtb2Zm
LWJ5OiBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPg0KPiAtLS0NCj4g
IGRyaXZlcnMvdmlkZW8vZGlzcGxheS9LY29uZmlnICAgICAgICB8ICAgNCArDQo+ICBkcml2ZXJz
L3ZpZGVvL2Rpc3BsYXkvTWFrZWZpbGUgICAgICAgfCAgIDEgKw0KPiAgZHJpdmVycy92aWRlby9k
aXNwbGF5L21pcGktZHNpLWJ1cy5jIHwgMzMyDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrDQo+ICBpbmNsdWRlL3ZpZGVvL2Rpc3BsYXkuaCAgICAgICAgICAgICAgfCAgIDMg
Kw0KPiAgaW5jbHVkZS92aWRlby9taXBpLWRzaS1idXMuaCAgICAgICAgIHwgMTQ0ICsrKysrKysr
KysrKysrKw0KPiAgNSBmaWxlcyBjaGFuZ2VkLCA0ODQgaW5zZXJ0aW9ucygrKQ0KDQo8c25pcHBl
ZCBhcyBmYXIgYXMgbWlwaS1kc2ktYnVzLmgNCg0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRl
by9taXBpLWRzaS1idXMuaCBiL2luY2x1ZGUvdmlkZW8vbWlwaS1kc2ktYnVzLmgNCj4gbmV3IGZp
bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uYTc4NzkyZA0KPiAtLS0gL2Rldi9udWxs
DQo+ICsrKyBiL2luY2x1ZGUvdmlkZW8vbWlwaS1kc2ktYnVzLmgNCj4gQEAgLTAsMCArMSwxNDQg
QEANCj4gKy8qDQo+ICsgKiBNSVBJIERTSSBCdXMNCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIFNhbXN1bmcgRWxlY3Ryb25pY3MsIENvLiwgTHRkLg0KPiArICogQW5kcnplaiBIYWpk
YSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4NCj4gKyAqDQo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KPiArICog
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz
aW9uIDIgYXMNCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
Lg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX19NSVBJX0RTSV9CVVNfSF9fDQo+ICsjZGVmaW5l
IF9fTUlQSV9EU0lfQlVTX0hfXw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+
ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+DQo+ICsNCj4gK3N0cnVjdCBtaXBpX2RzaV9i
dXM7DQo+ICtzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlOw0KPiArDQo+ICtzdHJ1Y3QgbWlwaV9kc2lf
YnVzX29wcyB7DQo+ICsJaW50ICgqc2V0X3Bvd2VyKShzdHJ1Y3QgbWlwaV9kc2lfYnVzICpidXMs
IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UNCj4gKmRldiwNCj4gKwkJCSBib29sIG9uKTsNCj4gKwlp
bnQgKCpzZXRfc3RyZWFtKShzdHJ1Y3QgbWlwaV9kc2lfYnVzICpidXMsIHN0cnVjdCBtaXBpX2Rz
aV9kZXZpY2UNCj4gKmRldiwNCj4gKwkJCSAgYm9vbCBvbik7DQo+ICsJaW50ICgqdHJhbnNmZXIp
KHN0cnVjdCBtaXBpX2RzaV9idXMgKmJ1cywgc3RydWN0IG1pcGlfZHNpX2RldmljZQ0KPiAqZGV2
LA0KPiArCQkJdTggdHlwZSwgY29uc3QgdTggKnR4X2J1Ziwgc2l6ZV90IHR4X2xlbiwgdTggKnJ4
X2J1ZiwNCj4gKwkJCXNpemVfdCByeF9sZW4pOw0KPiArfTsNCj4gKw0KPiArI2RlZmluZSBEU0lf
TU9ERV9WSURFTwkJCSgxIDw8IDApDQo+ICsjZGVmaW5lIERTSV9NT0RFX1ZJREVPX0JVUlNUCQko
MSA8PCAxKQ0KPiArI2RlZmluZSBEU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFCSgxIDw8IDIpDQo+
ICsjZGVmaW5lIERTSV9NT0RFX1ZJREVPX0FVVE9fVkVSVAkoMSA8PCAzKQ0KPiArI2RlZmluZSBE
U0lfTU9ERV9WSURFT19IU0UJCSgxIDw8IDQpDQo+ICsjZGVmaW5lIERTSV9NT0RFX1ZJREVPX0hG
UAkJKDEgPDwgNSkNCj4gKyNkZWZpbmUgRFNJX01PREVfVklERU9fSEJQCQkoMSA8PCA2KQ0KPiAr
I2RlZmluZSBEU0lfTU9ERV9WSURFT19IU0EJCSgxIDw8IDcpDQo+ICsjZGVmaW5lIERTSV9NT0RF
X1ZTWU5DX0ZMVVNICQkoMSA8PCA4KQ0KPiArI2RlZmluZSBEU0lfTU9ERV9FT1RfUEFDS0VUCQko
MSA8PCA5KQ0KPiArDQo+ICtlbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCB7DQo+ICsJRFNJX0ZN
VF9SR0I4ODgsDQo+ICsJRFNJX0ZNVF9SR0I2NjYsDQo+ICsJRFNJX0ZNVF9SR0I2NjZfUEFDS0VE
LA0KPiArCURTSV9GTVRfUkdCNTY1LA0KPiArfTsNCj4gKw0KPiArc3RydWN0IG1pcGlfZHNpX2lu
dGVyZmFjZV9wYXJhbXMgew0KPiArCWVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZvcm1hdDsN
Cj4gKwl1bnNpZ25lZCBsb25nIG1vZGU7DQo+ICsJdW5zaWduZWQgbG9uZyBoc19jbGtfZnJlcTsN
Cj4gKwl1bnNpZ25lZCBsb25nIGVzY19jbGtfZnJlcTsNCj4gKwl1bnNpZ25lZCBjaGFyIGRhdGFf
bGFuZXM7DQo+ICsJdW5zaWduZWQgY2hhciBjbWRfYWxsb3c7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1
Y3QgbWlwaV9kc2lfYnVzIHsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ICsJY29uc3Qgc3Ry
dWN0IG1pcGlfZHNpX2J1c19vcHMgKm9wczsNCj4gK307DQo+ICsNCj4gKyNkZWZpbmUgTUlQSV9E
U0lfTU9EVUxFX1BSRUZJWAkJIm1pcGktZHNpOiINCj4gKyNkZWZpbmUgTUlQSV9EU0lfTkFNRV9T
SVpFCQkzMg0KPiArDQo+ICtzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2lkIHsNCj4gKwljaGFyIG5h
bWVbTUlQSV9EU0lfTkFNRV9TSVpFXTsNCj4gKwlfX2tlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRh
CS8qIERhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyICovDQo+ICsJCQlfX2FsaWduZWQoc2l6ZW9m
KF9fa2VybmVsX3Vsb25nX3QpKTsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBtaXBpX2RzaV9kZXZp
Y2Ugew0KPiArCWNoYXIgbmFtZVtNSVBJX0RTSV9OQU1FX1NJWkVdOw0KPiArCWludCBpZDsNCj4g
KwlzdHJ1Y3QgZGV2aWNlIGRldjsNCj4gKw0KPiArCWNvbnN0IHN0cnVjdCBtaXBpX2RzaV9kZXZp
Y2VfaWQgKmlkX2VudHJ5Ow0KPiArCXN0cnVjdCBtaXBpX2RzaV9idXMgKmJ1czsNCj4gKwlzdHJ1
Y3QgdmlkZW9tb2RlIHZtOw0KPiArCXN0cnVjdCBtaXBpX2RzaV9pbnRlcmZhY2VfcGFyYW1zIHBh
cmFtczsNCj4gK307DQo+ICsNCj4gKyNkZWZpbmUgdG9fbWlwaV9kc2lfZGV2aWNlKGQpCWNvbnRh
aW5lcl9vZihkLCBzdHJ1Y3QNCj4gbWlwaV9kc2lfZGV2aWNlLCBkZXYpDQo+ICsNCj4gK2ludCBt
aXBpX2RzaV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2LA0KPiAr
CQkJICAgICBzdHJ1Y3QgbWlwaV9kc2lfYnVzICpidXMpOw0KPiArdm9pZCBtaXBpX2RzaV9kZXZp
Y2VfdW5yZWdpc3RlcihzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXYpOw0KPiArDQo+ICtzdHJ1
Y3QgbWlwaV9kc2lfZHJpdmVyIHsNCj4gKwlpbnQoKnByb2JlKShzdHJ1Y3QgbWlwaV9kc2lfZGV2
aWNlICopOw0KPiArCWludCgqcmVtb3ZlKShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICopOw0KPiAr
CXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsNCj4gKwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lf
ZGV2aWNlX2lkICppZF90YWJsZTsNCj4gK307DQo+ICsNCj4gKyNkZWZpbmUgdG9fbWlwaV9kc2lf
ZHJpdmVyKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QNCj4gbWlwaV9kc2lfZHJpdmVyLCBkcml2
ZXIpDQo+ICsNCj4gK2ludCBtaXBpX2RzaV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IG1pcGlfZHNp
X2RyaXZlciAqZHJ2KTsNCj4gK3ZvaWQgbWlwaV9kc2lfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0
IG1pcGlfZHNpX2RyaXZlciAqZHJ2KTsNCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkICptaXBp
X2RzaV9nZXRfZHJ2ZGF0YShjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlDQo+ICpkZXYpDQo+
ICt7DQo+ICsJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOw0KPiArfQ0KPiArDQo+
ICtzdGF0aWMgaW5saW5lIHZvaWQgbWlwaV9kc2lfc2V0X2RydmRhdGEoc3RydWN0IG1pcGlfZHNp
X2RldmljZSAqZGV2LA0KPiArCQkJCQl2b2lkICpkYXRhKQ0KPiArew0KPiArCWRldl9zZXRfZHJ2
ZGF0YSgmZGV2LT5kZXYsIGRhdGEpOw0KPiArfQ0KPiArDQo+ICtpbnQgb2ZfbWlwaV9kc2lfcmVn
aXN0ZXJfZGV2aWNlcyhzdHJ1Y3QgbWlwaV9kc2lfYnVzICpidXMpOw0KPiArdm9pZCBtaXBpX2Rz
aV91bnJlZ2lzdGVyX2RldmljZXMoc3RydWN0IG1pcGlfZHNpX2J1cyAqYnVzKTsNCj4gKw0KPiAr
LyogbW9kdWxlX21pcGlfZHNpX2RyaXZlcigpIC0gSGVscGVyIG1hY3JvIGZvciBkcml2ZXJzIHRo
YXQgZG9uJ3QgZG8NCj4gKyAqIGFueXRoaW5nIHNwZWNpYWwgaW4gbW9kdWxlIGluaXQvZXhpdC4g
IFRoaXMgZWxpbWluYXRlcyBhIGxvdCBvZg0KPiArICogYm9pbGVycGxhdGUuICBFYWNoIG1vZHVs
ZSBtYXkgb25seSB1c2UgdGhpcyBtYWNybyBvbmNlLCBhbmQNCj4gKyAqIGNhbGxpbmcgaXQgcmVw
bGFjZXMgbW9kdWxlX2luaXQoKSBhbmQgbW9kdWxlX2V4aXQoKQ0KPiArICovDQo+ICsjZGVmaW5l
IG1vZHVsZV9taXBpX2RzaV9kcml2ZXIoX19taXBpX2RzaV9kcml2ZXIpIFwNCj4gKwltb2R1bGVf
ZHJpdmVyKF9fbWlwaV9kc2lfZHJpdmVyLCBtaXBpX2RzaV9kcml2ZXJfcmVnaXN0ZXIsIFwNCj4g
KwkJCW1pcGlfZHNpX2RyaXZlcl91bnJlZ2lzdGVyKQ0KPiArDQo+ICtpbnQgbWlwaV9kc2lfc2V0
X3Bvd2VyKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldiwgYm9vbCBvbik7DQo+ICtpbnQgbWlw
aV9kc2lfc2V0X3N0cmVhbShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXYsIGJvb2wgb24pOw0K
PiAraW50IG1pcGlfZHNpX2Rjc193cml0ZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXYsIGlu
dCBjaGFubmVsLCBjb25zdCB1OA0KPiAqZGF0YSwNCj4gKwkJICAgICAgIHNpemVfdCBsZW4pOw0K
PiAraW50IG1pcGlfZHNpX2Rjc19yZWFkKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldiwgaW50
IGNoYW5uZWwsIHU4IGNtZCwNCj4gKwkJICAgICAgdTggKmRhdGEsIHNpemVfdCBsZW4pOw0KPiAr
DQo+ICsjZGVmaW5lIG1pcGlfZHNpX2Rjc193cml0ZV9zZXEoZGV2LCBjaGFubmVsLCBzZXEuLi4p
IFwNCj4gKyh7XA0KPiArCWNvbnN0IHU4IGRbXSA9IHsgc2VxIH07XA0KPiArCUJVSUxEX0JVR19P
Tl9NU0coQVJSQVlfU0laRShkKSA+IDY0LCAiRENTIHNlcXVlbmNlIHRvbyBsb25nIGZvcg0KPiBz
dGFjayIpO1wNCj4gKwltaXBpX2RzaV9kY3Nfd3JpdGUoZGV2LCBjaGFubmVsLCBkLCBBUlJBWV9T
SVpFKGQpKTtcDQo+ICt9KQ0KPiArDQo+ICsjZGVmaW5lIG1pcGlfZHNpX2Rjc193cml0ZV9zdGF0
aWNfc2VxKGRldiwgY2hhbm5lbCwgc2VxLi4uKSBcDQo+ICsoe1wNCj4gKwlzdGF0aWMgY29uc3Qg
dTggZFtdID0geyBzZXEgfTtcDQo+ICsJbWlwaV9kc2lfZGNzX3dyaXRlKGRldiwgY2hhbm5lbCwg
ZCwgQVJSQVlfU0laRShkKSk7XA0KPiArfSkNCj4gKw0KPiArI2VuZGlmIC8qIF9fTUlQSV9EU0lf
QlVTX18gKi8NCg0KSSBtYXkgd2VsbCBoYXZlIG1pc3NlZCBzb21ldGhpbmcsIGJ1dCBJIGNhbid0
IHNlZSBleGFjdGx5IGhvdyBhIGNvbW1hbmQgbW9kZQ0KdXBkYXRlIHdvdWxkIGJlIGRvbmUgd2l0
aCB0aGlzIGludGVyZmFjZS4gV291bGQgdGhpcyByZXF1aXJlIHJlcGVhdGVkIGNhbGxzIHRvDQou
dHJhbnNmZXI/IFN1Y2ggdHJhbnNmZXJzIHdvdWxkIG5lZWQgdG8gYmUgZmxhZ2dlZCBhcyByZXF1
aXJpbmcNCnN5bmNocm9uaXNhdGlvbiB3aXRoIGEgdGVhcmluZyBlZmZlY3QgY29udHJvbCBzaWdu
YWwgLSBlaXRoZXIgdGhlIGluYmFuZA0KbWV0aG9kIG9yIGEgZGVkaWNhdGVkIGxpbmUuIEkgc3Vz
cGVjdCBtYW55IGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucyB3aWxsIGhhdmUNCmEgc3BlY2lmaWMg
bWV0aG9kIGZvciB0cmFuc2ZlcnJpbmcgcGl4ZWwgZGF0YSBpbiBhIERTSSBjb21tYW5kIG1vZGUg
dHJhbnNmZXIuDQoNClRoZSBjb21tYW5kIHNlbmRpbmcgcGVyaW9kIGR1cmluZyB2aWRlbyBtb2Rl
IHNob3VsZCBwcm9iYWJseSBiZSBjb25maWd1cmFibGUNCm9uIGEgcGVyLXRyYW5zZmVyIGJhc2lz
LiBTb21lIGNvbW1hbmRzIGhhdmUgdG8gYmUgc3luY2hyb25pc2VkIHdpdGggdmVydGljYWwNCmJs
YW5raW5nLCBvdGhlcnMgZG8gbm90LiBUaGlzIGNvdWxkIHBlcmhhcHMgYmUgY29tYmluZWQgd2l0
aCBhIHdpZGVyDQpjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYSBnaXZlbiBwYW5lbCBvciBpbnRl
cmZhY2UuIFNpbWlsYXJseSwgc2VsZWN0aW9uIG9mDQpsb3cgcG93ZXIgKExQKSBhbmQgaGlnaCBz
cGVlZCAoSFMpIG1vZGUgb24gYSBwZXItdHJhbnNmZXIgYmFzaXMgY2FuIGJlIG5lZWRlZA0KZm9y
IHNvbWUgcGFuZWxzLg0KDQpJcyB0aGVyZSBhIG1lY2hhbmlzbSBmb3IgY29udHJvbGxpbmcgdWx0
cmEtbG93IHBvd2VyIHN0YXRlIChVTFBTKSBlbnRyeT8gQWxzbywNCmlzIHRoZXJlIGEgbWV0aG9k
IGZvciBzZW5kaW5nIGFyYml0cmFyeSB0cmlnZ2VyIG1lc3NhZ2VzIChlZyB0aGUgcmVzZXQNCnRy
aWdnZXIpPw0KDQpUaGFua3MsDQoNCkJlcnQuDQotLSANCkJlcnQgS2Vud2FyZA0KU29mdHdhcmUg
RW5naW5lZXINCkJyb2FkY29tIE1vYmlsZSBQbGF0Zm9ybSBTb2x1dGlvbnMNCkNhbWJyaWRnZSwg
VUsNCg=
^ permalink raw reply
* RE: [PATCH 1/2] hyperv-fb: add pci stub
From: KY Srinivasan @ 2013-10-07 17:12 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Haiyang Zhang, Jean-Christophe Plagniol-Villard, Tomi Valkeinen,
open list:Hyper-V CORE AND..., open list:FRAMEBUFFER LAYER,
open list
In-Reply-To: <1381128633.13574.3.camel@nilsson.home.kraxel.org>
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogR2VyZCBIb2ZmbWFubiBb
bWFpbHRvOmtyYXhlbEByZWRoYXQuY29tXQ0KPiBTZW50OiBTdW5kYXksIE9jdG9iZXIgMDYsIDIw
MTMgMTE6NTEgUE0NCj4gVG86IEtZIFNyaW5pdmFzYW4NCj4gQ2M6IEhhaXlhbmcgWmhhbmc7IEpl
YW4tQ2hyaXN0b3BoZSBQbGFnbmlvbC1WaWxsYXJkOyBUb21pIFZhbGtlaW5lbjsgb3Blbg0KPiBs
aXN0Okh5cGVyLVYgQ09SRSBBTkQuLi47IG9wZW4gbGlzdDpGUkFNRUJVRkZFUiBMQVlFUjsgb3Bl
biBsaXN0DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMS8yXSBoeXBlcnYtZmI6IGFkZCBwY2kgc3R1
Yg0KPiANCj4gT24gTWksIDIwMTMtMTAtMDIgYXQgMTQ6MjkgKzAwMDAsIEtZIFNyaW5pdmFzYW4g
d3JvdGU6DQo+ID4NCj4gPiA+IFRoaXMgcGF0Y2ggYWRkcyBhIHBjaSBzdHViIGRyaXZlciB0byBo
eXBlci1mYi4gIFRoZSBoeXBlcnYgZnJhbWVidWZmZXINCj4gPiA+IGRyaXZlciB3aWxsIGJpbmQg
dG8gdGhlIHBjaSBkZXZpY2UgdGhlbiwgc28gbGludXgga2VybmVsIGFuZCB1c2Vyc3BhY2UNCj4g
PiA+IGtub3cgdGhlcmUgaXMgYSBwcm9wZXIga2VybmVsIGRyaXZlciBmb3IgdGhlIGRldmljZSBh
Y3RpdmUuICBsc3BjaSBzaG93cw0KPiA+ID4gdGhpcyBmb3IgZXhhbXBsZToNCj4gDQo+ID4gR2Vy
ZCwNCj4gPg0KPiA+IFRoYW5rcyBmb3IgZG9pbmcgdGhpcy4gVGhpcyBjZXJ0YWlubHkgd2lsbCBh
ZGRyZXNzIHNvbWUgb2YgdGhlIGlzc3VlcyB0aGF0IGFyZQ0KPiByZXBvcnRlZC4gSSBkbyBoYXZl
IGEgcXVlc3Rpb24gdGhvdWdoIC0gaG93IHdvdWxkIHRoaXMgd29yayBpZiB3ZSBkb24ndCBoYXZl
IFBDSQ0KPiBidXMgaW4gdGhlIGd1ZXN0Lg0KPiANCj4gVGhlIGh5cGVydiBmcmFtZWJ1ZmZlciBk
cml2ZXIgd291bGRuJ3Qgd29yayBpbiB0aGUgZmlyc3QgcGxhY2UgdGhlbiBhcw0KPiBpdCBsb29r
cyB1cCB0aGUgZnJhbWVidWZmZXIgYWRkcmVzcyBpbiBwY2kgY29uZmlnIHNwYWNlIChzZWUgaHZm
Yl9nZXRtZW0NCj4gZnVuY3Rpb24pLg0KDQpXZSBhcmUgZ29pbmcgdG8gZml4IHRoaXMgYXMgd2Ug
bW92ZSB0aGlzIGNvZGUgdG8gcnVuIG9uIG91ciBVRUZJIGZpcm13YXJlLiANCg0KUmVnYXJkcywN
Cg0KSy4gWQ0KDQo
^ permalink raw reply
* Re: [PATCH 1/2] hyperv-fb: add pci stub
From: Gerd Hoffmann @ 2013-10-08 8:41 UTC (permalink / raw)
To: KY Srinivasan
Cc: Haiyang Zhang, Jean-Christophe Plagniol-Villard, Tomi Valkeinen,
open list:Hyper-V CORE AND..., open list:FRAMEBUFFER LAYER,
open list
In-Reply-To: <f5746838b7654aac98a5753d669196b4@SN2PR03MB061.namprd03.prod.outlook.com>
On Mo, 2013-10-07 at 17:12 +0000, KY Srinivasan wrote:
>
> > -----Original Message-----
> > From: Gerd Hoffmann [mailto:kraxel@redhat.com]
> > Sent: Sunday, October 06, 2013 11:51 PM
> > To: KY Srinivasan
> > Cc: Haiyang Zhang; Jean-Christophe Plagniol-Villard; Tomi Valkeinen; open
> > list:Hyper-V CORE AND...; open list:FRAMEBUFFER LAYER; open list
> > Subject: Re: [PATCH 1/2] hyperv-fb: add pci stub
> >
> > On Mi, 2013-10-02 at 14:29 +0000, KY Srinivasan wrote:
> > >
> > > > This patch adds a pci stub driver to hyper-fb. The hyperv framebuffer
> > > > driver will bind to the pci device then, so linux kernel and userspace
> > > > know there is a proper kernel driver for the device active. lspci shows
> > > > this for example:
> >
> > > Gerd,
> > >
> > > Thanks for doing this. This certainly will address some of the issues that are
> > reported. I do have a question though - how would this work if we don't have PCI
> > bus in the guest.
> >
> > The hyperv framebuffer driver wouldn't work in the first place then as
> > it looks up the framebuffer address in pci config space (see hvfb_getmem
> > function).
>
> We are going to fix this as we move this code to run on our UEFI firmware.
Hmm, windows server 2012 seems to have no option to enable uefi. So I
guess this is still in development? How this is going to look like?
Probably you are going for pure uefi firmware, without csm, to be able
to leave all the legacy bios stuff behind in uefi mode. Therefore no
vesa bios support. efi drivers for vmbus network/storage/display/input
in the firmware. No legacy ide/vga pci devices. Correct?
The linux kernel will come up with efifb then, switching over to
hyperv-fb once the driver is loaded. The hyperv-fb pci stub driver will
not bind to the hyperv vga pci device if it isn't present in the guest.
hyperv-fb will load just fine nevertheless (once hvfb_getmem is fixed to
not depend on the pci device config space). The pci stub added by the
patch and the vmbus driver in hyperv-fb are completely independent.
cheers,
Gerd
^ permalink raw reply
* RE: [PATCH 1/2] hyperv-fb: add pci stub
From: KY Srinivasan @ 2013-10-08 14:48 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Haiyang Zhang, Jean-Christophe Plagniol-Villard, Tomi Valkeinen,
open list:Hyper-V CORE AND..., open list:FRAMEBUFFER LAYER,
open list
In-Reply-To: <1381221672.5823.30.camel@nilsson.home.kraxel.org>
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogR2VyZCBIb2ZmbWFubiBb
bWFpbHRvOmtyYXhlbEByZWRoYXQuY29tXQ0KPiBTZW50OiBUdWVzZGF5LCBPY3RvYmVyIDA4LCAy
MDEzIDE6NDEgQU0NCj4gVG86IEtZIFNyaW5pdmFzYW4NCj4gQ2M6IEhhaXlhbmcgWmhhbmc7IEpl
YW4tQ2hyaXN0b3BoZSBQbGFnbmlvbC1WaWxsYXJkOyBUb21pIFZhbGtlaW5lbjsgb3Blbg0KPiBs
aXN0Okh5cGVyLVYgQ09SRSBBTkQuLi47IG9wZW4gbGlzdDpGUkFNRUJVRkZFUiBMQVlFUjsgb3Bl
biBsaXN0DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMS8yXSBoeXBlcnYtZmI6IGFkZCBwY2kgc3R1
Yg0KPiANCj4gT24gTW8sIDIwMTMtMTAtMDcgYXQgMTc6MTIgKzAwMDAsIEtZIFNyaW5pdmFzYW4g
d3JvdGU6DQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9t
OiBHZXJkIEhvZmZtYW5uIFttYWlsdG86a3JheGVsQHJlZGhhdC5jb21dDQo+ID4gPiBTZW50OiBT
dW5kYXksIE9jdG9iZXIgMDYsIDIwMTMgMTE6NTEgUE0NCj4gPiA+IFRvOiBLWSBTcmluaXZhc2Fu
DQo+ID4gPiBDYzogSGFpeWFuZyBaaGFuZzsgSmVhbi1DaHJpc3RvcGhlIFBsYWduaW9sLVZpbGxh
cmQ7IFRvbWkgVmFsa2VpbmVuOyBvcGVuDQo+ID4gPiBsaXN0Okh5cGVyLVYgQ09SRSBBTkQuLi47
IG9wZW4gbGlzdDpGUkFNRUJVRkZFUiBMQVlFUjsgb3BlbiBsaXN0DQo+ID4gPiBTdWJqZWN0OiBS
ZTogW1BBVENIIDEvMl0gaHlwZXJ2LWZiOiBhZGQgcGNpIHN0dWINCj4gPiA+DQo+ID4gPiBPbiBN
aSwgMjAxMy0xMC0wMiBhdCAxNDoyOSArMDAwMCwgS1kgU3Jpbml2YXNhbiB3cm90ZToNCj4gPiA+
ID4NCj4gPiA+ID4gPiBUaGlzIHBhdGNoIGFkZHMgYSBwY2kgc3R1YiBkcml2ZXIgdG8gaHlwZXIt
ZmIuICBUaGUgaHlwZXJ2IGZyYW1lYnVmZmVyDQo+ID4gPiA+ID4gZHJpdmVyIHdpbGwgYmluZCB0
byB0aGUgcGNpIGRldmljZSB0aGVuLCBzbyBsaW51eCBrZXJuZWwgYW5kIHVzZXJzcGFjZQ0KPiA+
ID4gPiA+IGtub3cgdGhlcmUgaXMgYSBwcm9wZXIga2VybmVsIGRyaXZlciBmb3IgdGhlIGRldmlj
ZSBhY3RpdmUuICBsc3BjaSBzaG93cw0KPiA+ID4gPiA+IHRoaXMgZm9yIGV4YW1wbGU6DQo+ID4g
Pg0KPiA+ID4gPiBHZXJkLA0KPiA+ID4gPg0KPiA+ID4gPiBUaGFua3MgZm9yIGRvaW5nIHRoaXMu
IFRoaXMgY2VydGFpbmx5IHdpbGwgYWRkcmVzcyBzb21lIG9mIHRoZSBpc3N1ZXMgdGhhdCBhcmUN
Cj4gPiA+IHJlcG9ydGVkLiBJIGRvIGhhdmUgYSBxdWVzdGlvbiB0aG91Z2ggLSBob3cgd291bGQg
dGhpcyB3b3JrIGlmIHdlIGRvbid0IGhhdmUNCj4gUENJDQo+ID4gPiBidXMgaW4gdGhlIGd1ZXN0
Lg0KPiA+ID4NCj4gPiA+IFRoZSBoeXBlcnYgZnJhbWVidWZmZXIgZHJpdmVyIHdvdWxkbid0IHdv
cmsgaW4gdGhlIGZpcnN0IHBsYWNlIHRoZW4gYXMNCj4gPiA+IGl0IGxvb2tzIHVwIHRoZSBmcmFt
ZWJ1ZmZlciBhZGRyZXNzIGluIHBjaSBjb25maWcgc3BhY2UgKHNlZSBodmZiX2dldG1lbQ0KPiA+
ID4gZnVuY3Rpb24pLg0KPiA+DQo+ID4gV2UgYXJlIGdvaW5nIHRvIGZpeCB0aGlzIGFzIHdlIG1v
dmUgdGhpcyBjb2RlIHRvIHJ1biBvbiBvdXIgVUVGSSBmaXJtd2FyZS4NCj4gDQo+IEhtbSwgd2lu
ZG93cyBzZXJ2ZXIgMjAxMiBzZWVtcyB0byBoYXZlIG5vIG9wdGlvbiB0byBlbmFibGUgdWVmaS4g
IFNvIEkNCj4gZ3Vlc3MgdGhpcyBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudD8gIEhvdyB0aGlzIGlz
IGdvaW5nIHRvIGxvb2sgbGlrZT8NCg0KVGhpcyBmZWF0dXJlIGlzIHRoZXJlIGluIFdTMjAxMiBS
Mg0KPiANCj4gUHJvYmFibHkgeW91IGFyZSBnb2luZyBmb3IgcHVyZSB1ZWZpIGZpcm13YXJlLCB3
aXRob3V0IGNzbSwgdG8gYmUgYWJsZQ0KPiB0byBsZWF2ZSBhbGwgdGhlIGxlZ2FjeSBiaW9zIHN0
dWZmIGJlaGluZCBpbiB1ZWZpIG1vZGUuICBUaGVyZWZvcmUgbm8NCj4gdmVzYSBiaW9zIHN1cHBv
cnQuICBlZmkgZHJpdmVycyBmb3Igdm1idXMgbmV0d29yay9zdG9yYWdlL2Rpc3BsYXkvaW5wdXQN
Cj4gaW4gdGhlIGZpcm13YXJlLiAgTm8gbGVnYWN5IGlkZS92Z2EgcGNpIGRldmljZXMuICBDb3Jy
ZWN0Pw0KPiANClNvbWV0aGluZyBvbiB0aGVzZSBsaW5lcy4NCg0KPiBUaGUgbGludXgga2VybmVs
IHdpbGwgY29tZSB1cCB3aXRoIGVmaWZiIHRoZW4sIHN3aXRjaGluZyBvdmVyIHRvDQo+IGh5cGVy
di1mYiBvbmNlIHRoZSBkcml2ZXIgaXMgbG9hZGVkLiAgVGhlIGh5cGVydi1mYiBwY2kgc3R1YiBk
cml2ZXIgd2lsbA0KPiBub3QgYmluZCB0byB0aGUgaHlwZXJ2IHZnYSBwY2kgZGV2aWNlIGlmIGl0
IGlzbid0IHByZXNlbnQgaW4gdGhlIGd1ZXN0Lg0KPiBoeXBlcnYtZmIgd2lsbCBsb2FkIGp1c3Qg
ZmluZSBuZXZlcnRoZWxlc3MgKG9uY2UgaHZmYl9nZXRtZW0gaXMgZml4ZWQgdG8NCj4gbm90IGRl
cGVuZCBvbiB0aGUgcGNpIGRldmljZSBjb25maWcgc3BhY2UpLiAgVGhlIHBjaSBzdHViIGFkZGVk
IGJ5IHRoZQ0KPiBwYXRjaCBhbmQgdGhlIHZtYnVzIGRyaXZlciBpbiBoeXBlcnYtZmIgYXJlIGNv
bXBsZXRlbHkgaW5kZXBlbmRlbnQuDQoNCk9rOyB0aGFua3MuDQoNCksuIFkNCiANCg0K
^ permalink raw reply
* [Trivial PATCH] video: Remove unnecessary semicolons
From: Joe Perches @ 2013-10-08 23:23 UTC (permalink / raw)
To: Tomi Valkeinen; +Cc: linux-fbdev, LKML
These aren't necessary after switch, for, and if blocks.
Signed-off-by: Joe Perches <joe@perches.com>
---
drivers/video/cfbimgblt.c | 2 +-
drivers/video/cg14.c | 4 ++--
drivers/video/cg6.c | 2 +-
drivers/video/exynos/exynos_mipi_dsi_common.c | 2 +-
drivers/video/fsl-diu-fb.c | 2 +-
drivers/video/leo.c | 2 +-
drivers/video/matrox/matroxfb_DAC1064.c | 4 ++--
drivers/video/matrox/matroxfb_Ti3026.c | 2 +-
drivers/video/nvidia/nv_hw.c | 2 +-
drivers/video/omap2/displays-new/panel-dsi-cm.c | 2 +-
drivers/video/omap2/dss/dispc.c | 2 +-
drivers/video/omap2/dss/dsi.c | 2 +-
drivers/video/sbuslib.c | 2 +-
drivers/video/sysimgblt.c | 2 +-
drivers/video/tcx.c | 4 ++--
drivers/video/vt8500lcdfb.c | 2 +-
16 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/drivers/video/cfbimgblt.c b/drivers/video/cfbimgblt.c
index baed57d..a2bb276 100644
--- a/drivers/video/cfbimgblt.c
+++ b/drivers/video/cfbimgblt.c
@@ -181,7 +181,7 @@ static inline void slow_imageblit(const struct fb_image *image, struct fb_info *
}
shift += bpp;
shift &= (32 - 1);
- if (!l) { l = 8; s++; };
+ if (!l) { l = 8; s++; }
}
/* write trailing bits */
diff --git a/drivers/video/cg14.c b/drivers/video/cg14.c
index ed3b889..e220e69 100644
--- a/drivers/video/cg14.c
+++ b/drivers/video/cg14.c
@@ -330,7 +330,7 @@ static int cg14_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
default:
ret = -ENOSYS;
break;
- };
+ }
if (!ret) {
sbus_writeb(cur_mode, ®s->mcr);
par->mode = mode;
@@ -343,7 +343,7 @@ static int cg14_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
FBTYPE_MDICOLOR, 8,
info->fix.smem_len);
break;
- };
+ }
return ret;
}
diff --git a/drivers/video/cg6.c b/drivers/video/cg6.c
index 3545dec..f50f61c 100644
--- a/drivers/video/cg6.c
+++ b/drivers/video/cg6.c
@@ -624,7 +624,7 @@ static void cg6_init_fix(struct fb_info *info, int linebytes)
default:
cg6_cpu_name = "i386";
break;
- };
+ }
if (((conf >> CG6_FHC_REV_SHIFT) & CG6_FHC_REV_MASK) >= 11) {
if (info->fix.smem_len <= 0x100000)
cg6_card_name = "TGX";
diff --git a/drivers/video/exynos/exynos_mipi_dsi_common.c b/drivers/video/exynos/exynos_mipi_dsi_common.c
index 520fc9b..9b32165 100644
--- a/drivers/video/exynos/exynos_mipi_dsi_common.c
+++ b/drivers/video/exynos/exynos_mipi_dsi_common.c
@@ -667,7 +667,7 @@ int exynos_mipi_dsi_init_dsim(struct mipi_dsim_device *dsim)
default:
dev_info(dsim->dev, "data lane is invalid.\n");
return -EINVAL;
- };
+ }
exynos_mipi_dsi_sw_reset(dsim);
exynos_mipi_dsi_func_reset(dsim);
diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fsl-diu-fb.c
index 6dd7225..6c71bb6 100644
--- a/drivers/video/fsl-diu-fb.c
+++ b/drivers/video/fsl-diu-fb.c
@@ -1102,7 +1102,7 @@ static int fsl_diu_cursor(struct fb_info *info, struct fb_cursor *cursor)
fsl_diu_load_cursor_image(info, image, bg, fg,
cursor->image.width, cursor->image.height);
- };
+ }
/*
* Show or hide the cursor. The cursor data is always stored in the
diff --git a/drivers/video/leo.c b/drivers/video/leo.c
index b17f500..c36f013 100644
--- a/drivers/video/leo.c
+++ b/drivers/video/leo.c
@@ -469,7 +469,7 @@ static void leo_wid_put(struct fb_info *info, struct fb_wid_list *wl)
default:
continue;
- };
+ }
sbus_writel(0x5800 + j, &lx_krn->krn_type);
sbus_writel(wi->wi_values[0], &lx_krn->krn_value);
}
diff --git a/drivers/video/matrox/matroxfb_DAC1064.c b/drivers/video/matrox/matroxfb_DAC1064.c
index 1717623..a01147f 100644
--- a/drivers/video/matrox/matroxfb_DAC1064.c
+++ b/drivers/video/matrox/matroxfb_DAC1064.c
@@ -494,7 +494,7 @@ static int m1064_compute(void* out, struct my_timming* m) {
if (inDAC1064(minfo, M1064_XPIXPLLSTAT) & 0x40)
break;
udelay(10);
- };
+ }
CRITEND
@@ -639,7 +639,7 @@ static void MGAG100_progPixClock(const struct matrox_fb_info *minfo, int flags,
if (inDAC1064(minfo, M1064_XPIXPLLSTAT) & 0x40)
break;
udelay(10);
- };
+ }
if (!clk)
printk(KERN_ERR "matroxfb: Pixel PLL%c not locked after usual time\n", (reg-M1064_XPIXPLLAM-2)/4 + 'A');
selClk = inDAC1064(minfo, M1064_XPIXCLKCTRL) & ~M1064_XPIXCLKCTRL_SRC_MASK;
diff --git a/drivers/video/matrox/matroxfb_Ti3026.c b/drivers/video/matrox/matroxfb_Ti3026.c
index 9a44cec..195ad7c 100644
--- a/drivers/video/matrox/matroxfb_Ti3026.c
+++ b/drivers/video/matrox/matroxfb_Ti3026.c
@@ -473,7 +473,7 @@ static void ti3026_setMCLK(struct matrox_fb_info *minfo, int fout)
if (inTi3026(minfo, TVP3026_XPIXPLLDATA) & 0x40)
break;
udelay(10);
- };
+ }
if (!tmout)
printk(KERN_ERR "matroxfb: Temporary pixel PLL not locked after 5 secs\n");
diff --git a/drivers/video/nvidia/nv_hw.c b/drivers/video/nvidia/nv_hw.c
index ed20a98..81c80ac 100644
--- a/drivers/video/nvidia/nv_hw.c
+++ b/drivers/video/nvidia/nv_hw.c
@@ -1300,7 +1300,7 @@ void NVLoadStateExt(struct nvidia_par *par, RIVA_HW_STATE * state)
break;
default:
break;
- };
+ }
NV_WR32(par->PGRAPH, 0x0b38, 0x2ffff800);
NV_WR32(par->PGRAPH, 0x0b3c, 0x00006000);
diff --git a/drivers/video/omap2/displays-new/panel-dsi-cm.c b/drivers/video/omap2/displays-new/panel-dsi-cm.c
index aaaea64..b7baafe 100644
--- a/drivers/video/omap2/displays-new/panel-dsi-cm.c
+++ b/drivers/video/omap2/displays-new/panel-dsi-cm.c
@@ -599,7 +599,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
if (r) {
dev_err(&ddata->pdev->dev, "failed to configure DSI pins\n");
goto err0;
- };
+ }
r = in->ops.dsi->set_config(in, &dsi_config);
if (r) {
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index 4779750..96a1ea3 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -2918,7 +2918,7 @@ static void _dispc_mgr_set_lcd_timings(enum omap_channel channel, int hsw,
break;
default:
BUG();
- };
+ }
l = dispc_read_reg(DISPC_POL_FREQ(channel));
l |= FLD_VAL(onoff, 17, 17);
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index a598b58..b79f2aa 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -4066,7 +4066,7 @@ static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
default:
r = -EINVAL;
goto err_pix_fmt;
- };
+ }
dsi_if_enable(dsidev, false);
dsi_vc_enable(dsidev, channel, false);
diff --git a/drivers/video/sbuslib.c b/drivers/video/sbuslib.c
index 296afae..a350209 100644
--- a/drivers/video/sbuslib.c
+++ b/drivers/video/sbuslib.c
@@ -186,7 +186,7 @@ int sbusfb_ioctl_helper(unsigned long cmd, unsigned long arg,
}
default:
return -EINVAL;
- };
+ }
}
EXPORT_SYMBOL(sbusfb_ioctl_helper);
diff --git a/drivers/video/sysimgblt.c b/drivers/video/sysimgblt.c
index 186c6f6..a4d05b1 100644
--- a/drivers/video/sysimgblt.c
+++ b/drivers/video/sysimgblt.c
@@ -152,7 +152,7 @@ static void slow_imageblit(const struct fb_image *image, struct fb_info *p,
}
shift += bpp;
shift &= (32 - 1);
- if (!l) { l = 8; s++; };
+ if (!l) { l = 8; s++; }
}
/* write trailing bits */
diff --git a/drivers/video/tcx.c b/drivers/video/tcx.c
index c000852..634f60e 100644
--- a/drivers/video/tcx.c
+++ b/drivers/video/tcx.c
@@ -232,7 +232,7 @@ tcx_blank(int blank, struct fb_info *info)
case FB_BLANK_POWERDOWN: /* Poweroff */
break;
- };
+ }
sbus_writel(val, &thc->thc_misc);
@@ -434,7 +434,7 @@ static int tcx_probe(struct platform_device *op)
default:
j = i;
break;
- };
+ }
par->mmap_map[i].poff = op->resource[j].start;
}
diff --git a/drivers/video/vt8500lcdfb.c b/drivers/video/vt8500lcdfb.c
index 897484903..b30e5a4 100644
--- a/drivers/video/vt8500lcdfb.c
+++ b/drivers/video/vt8500lcdfb.c
@@ -365,7 +365,7 @@ static int vt8500lcd_probe(struct platform_device *pdev)
if (!fb_mem_virt) {
pr_err("%s: Failed to allocate framebuffer\n", __func__);
return -ENOMEM;
- };
+ }
fbi->fb.fix.smem_start = fb_mem_phys;
fbi->fb.fix.smem_len = fb_mem_len;
^ permalink raw reply related
* Re: [PATCH V5 4/5] video: exynos_mipi_dsim: Use the generic PHY driver
From: Tomi Valkeinen @ 2013-10-09 8:32 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1380396467-29278-5-git-send-email-s.nawrocki@samsung.com>
[-- Attachment #1: Type: text/plain, Size: 760 bytes --]
On 28/09/13 22:27, Sylwester Nawrocki wrote:
> Use the generic PHY API instead of the platform callback
> for the MIPI DSIM DPHY enable/reset control.
>
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> Acked-by: Felipe Balbi <balbi@ti.com>
> Acked-by: Donghwa Lee <dh09.lee@samsung.com>
> ---
> Changes since v4:
> - PHY label removed from the platform data structure.
> ---
> drivers/video/exynos/Kconfig | 1 +
> drivers/video/exynos/exynos_mipi_dsi.c | 19 ++++++++++---------
> include/video/exynos_mipi_dsim.h | 5 ++---
> 3 files changed, 13 insertions(+), 12 deletions(-)
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]
^ permalink raw reply
* Re: [PATCH 9/9] video: amba-clcd: Remove unnecessary amba_set_drvdata()
From: Tomi Valkeinen @ 2013-10-09 8:44 UTC (permalink / raw)
To: Michal Simek
Cc: linux-kernel, monstr, Russell King,
Jean-Christophe Plagniol-Villard, linux-fbdev
In-Reply-To: <2f12a1d7caba382efe8d361b373da60c08e70622.1380793579.git.michal.simek@xilinx.com>
[-- Attachment #1: Type: text/plain, Size: 944 bytes --]
On 03/10/13 12:46, Michal Simek wrote:
> Driver core clears the driver data to NULL after device_release
> or on probe failure, so just remove it from here.
>
> Driver core change:
> "device-core: Ensure drvdata = NULL when no driver is bound"
> (sha1: 0998d0631001288a5974afc0b2a5f568bcdecb4d)
>
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> ---
> drivers/video/amba-clcd.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/drivers/video/amba-clcd.c b/drivers/video/amba-clcd.c
> index 0a2cce7..0bab6ab 100644
> --- a/drivers/video/amba-clcd.c
> +++ b/drivers/video/amba-clcd.c
> @@ -594,8 +594,6 @@ static int clcdfb_remove(struct amba_device *dev)
> {
> struct clcd_fb *fb = amba_get_drvdata(dev);
>
> - amba_set_drvdata(dev, NULL);
> -
> clcdfb_disable(fb);
> unregister_framebuffer(&fb->fb);
> if (fb->fb.cmap.len)
> --
> 1.8.2.3
>
Thanks, queued for 3.13.
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]
^ permalink raw reply
* Re: [PATCH 1/3] video: ssd1307fb: Remove redundant of_match_ptr
From: Tomi Valkeinen @ 2013-10-09 8:48 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1380530733-9070-1-git-send-email-sachin.kamat@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 890 bytes --]
On 30/09/13 11:45, Sachin Kamat wrote:
> The data structure of_match_ptr() protects is always compiled in.
> Hence of_match_ptr() is not needed.
>
> Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> ---
> drivers/video/ssd1307fb.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/video/ssd1307fb.c b/drivers/video/ssd1307fb.c
> index 44967c8..f4daa59 100644
> --- a/drivers/video/ssd1307fb.c
> +++ b/drivers/video/ssd1307fb.c
> @@ -569,7 +569,7 @@ static struct i2c_driver ssd1307fb_driver = {
> .id_table = ssd1307fb_i2c_id,
> .driver = {
> .name = "ssd1307fb",
> - .of_match_table = of_match_ptr(ssd1307fb_of_match),
> + .of_match_table = ssd1307fb_of_match,
> .owner = THIS_MODULE,
> },
> };
>
Thanks, queuing this series for 3.13.
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]
^ permalink raw reply
* Re: [PATCH 1/1] video: wmt_ge_rops: Fix a trivial typo
From: Tomi Valkeinen @ 2013-10-09 8:52 UTC (permalink / raw)
To: linux-fbdev
[-- Attachment #1: Type: text/plain, Size: 908 bytes --]
On 30/09/13 11:50, Sachin Kamat wrote:
> Add a missing closing brace for email address.
>
> Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
> Cc: Alexey Charkov <alchark@gmail.com>
> ---
> drivers/video/wmt_ge_rops.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/video/wmt_ge_rops.c b/drivers/video/wmt_ge_rops.c
> index d4ef841..b0a9f34 100644
> --- a/drivers/video/wmt_ge_rops.c
> +++ b/drivers/video/wmt_ge_rops.c
> @@ -175,7 +175,7 @@ static struct platform_driver wmt_ge_rops_driver = {
>
> module_platform_driver(wmt_ge_rops_driver);
>
> -MODULE_AUTHOR("Alexey Charkov <alchark@gmail.com");
> +MODULE_AUTHOR("Alexey Charkov <alchark@gmail.com>");
> MODULE_DESCRIPTION("Accelerators for raster operations using "
> "WonderMedia Graphics Engine");
> MODULE_LICENSE("GPL v2");
>
Thanks, queuing for 3.13.
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]
^ permalink raw reply
* Re: [PATCH 3/3] video: xilinxfb: Simplify error path
From: Tomi Valkeinen @ 2013-10-09 9:02 UTC (permalink / raw)
To: monstr
Cc: Michal Simek, linux-kernel, Jean-Christophe Plagniol-Villard,
linux-fbdev
In-Reply-To: <52496921.9080603@monstr.eu>
[-- Attachment #1: Type: text/plain, Size: 1355 bytes --]
On 30/09/13 15:05, Michal Simek wrote:
> Hi Tomi,
>
> On 09/16/2013 12:34 PM, Tomi Valkeinen wrote:
>> On 16/09/13 13:33, Michal Simek wrote:
>>> On 09/16/2013 11:51 AM, Tomi Valkeinen wrote:
>>>> On 12/09/13 08:54, Michal Simek wrote:
>>>>
>>>>> @@ -394,16 +382,12 @@ static int xilinxfb_release(struct device *dev)
>>>>> /* Turn off the display */
>>>>> xilinx_fb_out32(drvdata, REG_CTRL, 0);
>>>>>
>>>>> - /* Release the resources, as allocated based on interface */
>>>>> - if (drvdata->flags & BUS_ACCESS_FLAG)
>>>>> - devm_iounmap(dev, drvdata->regs);
>>>>> #ifdef CONFIG_PPC_DCR
>>>>> - else
>>>>> + /* Release the resources, as allocated based on interface */
>>>>> + if (!(drvdata->flags & BUS_ACCESS_FLAG))
>>>>> dcr_unmap(drvdata->dcr_host, drvdata->dcr_len);
>>>>> #endif
>>>>
>>>> I might be mistaken, and it's not strictly part of this series, but
>>>> shouldn't dcr_unmap be called somewhere else also, if the probe fails?
>>>
>>> yes. It should.
>>
>> Do you want me to apply these patches as they are, or do you want to
>> improve the series to include the dcr_unmap fix?
>
> Sorry I have missed this email.
>
> Yes please apply it as is. I don't have ppc hw here to be able to test this
> change.
This series does not apply. Can you rebase on top of linux-next, and resend?
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]
^ permalink raw reply
* Re: [PATCH v3] simplefb: print some info about the registered fb
From: Tomi Valkeinen @ 2013-10-09 9:05 UTC (permalink / raw)
To: Tom Gundersen; +Cc: linux-fbdev, linux-kernel, plagnioj, David Herrmann
In-Reply-To: <1378562915-893-1-git-send-email-teg@jklm.no>
[-- Attachment #1: Type: text/plain, Size: 1287 bytes --]
On 07/09/13 17:08, Tom Gundersen wrote:
> This is similar to the output printed by efifb.
>
> Signed-off-by: Tom Gundersen <teg@jklm.no>
> Acked-by: Stephen Warren <swarren@wwwdotorg.org>
> Cc: David Herrmann <dh.herrmann@gmail.com>
> ---
> v2: also print smem_len, as requested by David
> v3: don't cast, as requested by Geert
>
> drivers/video/simplefb.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/drivers/video/simplefb.c b/drivers/video/simplefb.c
> index a29f1c4..50cbceb 100644
> --- a/drivers/video/simplefb.c
> +++ b/drivers/video/simplefb.c
> @@ -220,6 +220,14 @@ static int simplefb_probe(struct platform_device *pdev)
> }
> info->pseudo_palette = (void *)(info + 1);
>
> + dev_info(&pdev->dev, "framebuffer at 0x%lx, 0x%x bytes, mapped to 0x%p\n",
> + info->fix.smem_start, info->fix.smem_len,
> + info->screen_base);
> + dev_info(&pdev->dev, "format=%s, mode=%dx%dx%d, linelength=%d\n",
> + params.format->name,
> + info->var.xres, info->var.yres,
> + info->var.bits_per_pixel, info->fix.line_length);
> +
> ret = register_framebuffer(info);
> if (ret < 0) {
> dev_err(&pdev->dev, "Unable to register simplefb: %d\n", ret);
>
Thanks, queued for 3.13.
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]
^ permalink raw reply
* Re: [PATCH 1/2] hyperv-fb: add pci stub
From: Tomi Valkeinen @ 2013-10-09 9:53 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: K. Y. Srinivasan, Haiyang Zhang, Jean-Christophe Plagniol-Villard,
open list:Hyper-V CORE AND..., FRAMEBUFFER LAYER, open list
In-Reply-To: <1380714911-6254-1-git-send-email-kraxel@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 1068 bytes --]
On 02/10/13 14:55, Gerd Hoffmann wrote:
> This patch adds a pci stub driver to hyper-fb. The hyperv framebuffer
> driver will bind to the pci device then, so linux kernel and userspace
> know there is a proper kernel driver for the device active. lspci shows
> this for example:
>
> [root@dhcp231 ~]# lspci -vs8
> 00:08.0 VGA compatible controller: Microsoft Corporation Hyper-V virtual
> VGA (prog-if 00 [VGA controller])
> Flags: bus master, fast devsel, latency 0, IRQ 11
> Memory at f8000000 (32-bit, non-prefetchable) [size=64M]
> Expansion ROM at <unassigned> [disabled]
> Kernel driver in use: hyperv_fb
>
> Another effect is that the xorg vesa driver will not attach to the
> device and thus the Xorg server will automatically use the fbdev
> driver instead.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> drivers/video/hyperv_fb.c | 40 +++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 39 insertions(+), 1 deletion(-)
>
Thanks, queuing the series for 3.13.
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]
^ permalink raw reply
* Re: [PATCH 3/3] video: xilinxfb: Simplify error path
From: Michal Simek @ 2013-10-09 10:25 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: monstr, Michal Simek, linux-kernel,
Jean-Christophe Plagniol-Villard, linux-fbdev
In-Reply-To: <52551BAB.40805@ti.com>
[-- Attachment #1: Type: text/plain, Size: 1886 bytes --]
On 10/09/2013 11:02 AM, Tomi Valkeinen wrote:
> On 30/09/13 15:05, Michal Simek wrote:
>> Hi Tomi,
>>
>> On 09/16/2013 12:34 PM, Tomi Valkeinen wrote:
>>> On 16/09/13 13:33, Michal Simek wrote:
>>>> On 09/16/2013 11:51 AM, Tomi Valkeinen wrote:
>>>>> On 12/09/13 08:54, Michal Simek wrote:
>>>>>
>>>>>> @@ -394,16 +382,12 @@ static int xilinxfb_release(struct device *dev)
>>>>>> /* Turn off the display */
>>>>>> xilinx_fb_out32(drvdata, REG_CTRL, 0);
>>>>>>
>>>>>> - /* Release the resources, as allocated based on interface */
>>>>>> - if (drvdata->flags & BUS_ACCESS_FLAG)
>>>>>> - devm_iounmap(dev, drvdata->regs);
>>>>>> #ifdef CONFIG_PPC_DCR
>>>>>> - else
>>>>>> + /* Release the resources, as allocated based on interface */
>>>>>> + if (!(drvdata->flags & BUS_ACCESS_FLAG))
>>>>>> dcr_unmap(drvdata->dcr_host, drvdata->dcr_len);
>>>>>> #endif
>>>>>
>>>>> I might be mistaken, and it's not strictly part of this series, but
>>>>> shouldn't dcr_unmap be called somewhere else also, if the probe fails?
>>>>
>>>> yes. It should.
>>>
>>> Do you want me to apply these patches as they are, or do you want to
>>> improve the series to include the dcr_unmap fix?
>>
>> Sorry I have missed this email.
>>
>> Yes please apply it as is. I don't have ppc hw here to be able to test this
>> change.
>
> This series does not apply. Can you rebase on top of linux-next, and resend?
Do you mean Stephen Rothwell linux-next or any your linux-next branch?
No problem to do so if you send me link to the repo.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
^ permalink raw reply
* Re: [PATCH 3/3] video: xilinxfb: Simplify error path
From: Tomi Valkeinen @ 2013-10-09 10:28 UTC (permalink / raw)
To: monstr
Cc: Michal Simek, linux-kernel, Jean-Christophe Plagniol-Villard,
linux-fbdev
In-Reply-To: <52552F2E.7080007@monstr.eu>
[-- Attachment #1: Type: text/plain, Size: 393 bytes --]
On 09/10/13 13:25, Michal Simek wrote:
>> This series does not apply. Can you rebase on top of linux-next, and resend?
>
> Do you mean Stephen Rothwell linux-next or any your linux-next branch?
> No problem to do so if you send me link to the repo.
Either one, my for-next is in Stephen's tree:
git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git for-next
Tomi
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]
^ permalink raw reply
* [PATCH v2 1/3] video: xilinxfb: Use standard variable name convention
From: Michal Simek @ 2013-10-09 10:52 UTC (permalink / raw)
To: linux-kernel, monstr
Cc: Jean-Christophe Plagniol-Villard, Tomi Valkeinen, Grant Likely,
Rob Herring, linux-fbdev, devicetree
[-- Attachment #1: Type: text/plain, Size: 2592 bytes --]
s/op/pdev/ in xilinxfb_of_probe().
No functional chagnes.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
Changes in v2: None
drivers/video/xilinxfb.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index 0e1dd33..d12345f 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -411,7 +411,7 @@ static int xilinxfb_release(struct device *dev)
* OF bus binding
*/
-static int xilinxfb_of_probe(struct platform_device *op)
+static int xilinxfb_of_probe(struct platform_device *pdev)
{
const u32 *prop;
u32 tft_access = 0;
@@ -425,7 +425,7 @@ static int xilinxfb_of_probe(struct platform_device *op)
/* Allocate the driver data region */
drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
if (!drvdata) {
- dev_err(&op->dev, "Couldn't allocate device private record\n");
+ dev_err(&pdev->dev, "Couldn't allocate device private record\n");
return -ENOMEM;
}
@@ -433,7 +433,7 @@ static int xilinxfb_of_probe(struct platform_device *op)
* To check whether the core is connected directly to DCR or BUS
* interface and initialize the tft_access accordingly.
*/
- of_property_read_u32(op->dev.of_node, "xlnx,dcr-splb-slave-if",
+ of_property_read_u32(pdev->dev.of_node, "xlnx,dcr-splb-slave-if",
&tft_access);
/*
@@ -457,29 +457,29 @@ static int xilinxfb_of_probe(struct platform_device *op)
}
#endif
- prop = of_get_property(op->dev.of_node, "phys-size", &size);
+ prop = of_get_property(pdev->dev.of_node, "phys-size", &size);
if ((prop) && (size >= sizeof(u32)*2)) {
pdata.screen_width_mm = prop[0];
pdata.screen_height_mm = prop[1];
}
- prop = of_get_property(op->dev.of_node, "resolution", &size);
+ prop = of_get_property(pdev->dev.of_node, "resolution", &size);
if ((prop) && (size >= sizeof(u32)*2)) {
pdata.xres = prop[0];
pdata.yres = prop[1];
}
- prop = of_get_property(op->dev.of_node, "virtual-resolution", &size);
+ prop = of_get_property(pdev->dev.of_node, "virtual-resolution", &size);
if ((prop) && (size >= sizeof(u32)*2)) {
pdata.xvirt = prop[0];
pdata.yvirt = prop[1];
}
- if (of_find_property(op->dev.of_node, "rotate-display", NULL))
+ if (of_find_property(pdev->dev.of_node, "rotate-display", NULL))
pdata.rotate_screen = 1;
- dev_set_drvdata(&op->dev, drvdata);
- return xilinxfb_assign(op, drvdata, &pdata);
+ dev_set_drvdata(&pdev->dev, drvdata);
+ return xilinxfb_assign(pdev, drvdata, &pdata);
}
static int xilinxfb_of_remove(struct platform_device *op)
--
1.8.2.3
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related
* [PATCH v2 2/3] video: xilinxfb: Use devm_kzalloc instead of kzalloc
From: Michal Simek @ 2013-10-09 10:52 UTC (permalink / raw)
To: linux-kernel, monstr
Cc: Jean-Christophe Plagniol-Villard, Tomi Valkeinen, linux-fbdev
In-Reply-To: <631df9a44b366af4129d00f1d4e1d3baad7d4903.1381315928.git.michal.simek@xilinx.com>
[-- Attachment #1: Type: text/plain, Size: 1457 bytes --]
Simplify driver probe and release function.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Jingoo Han <jg1.han@samsung.com>
---
Changes in v2:
Rebased on git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git for-next
drivers/video/xilinxfb.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index d12345f..98c7a6f 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -368,8 +368,6 @@ err_fbmem:
devm_iounmap(dev, drvdata->regs);
err_region:
- kfree(drvdata);
-
return rc;
}
@@ -402,8 +400,6 @@ static int xilinxfb_release(struct device *dev)
dcr_unmap(drvdata->dcr_host, drvdata->dcr_len);
#endif
- kfree(drvdata);
-
return 0;
}
@@ -423,7 +419,7 @@ static int xilinxfb_of_probe(struct platform_device *pdev)
pdata = xilinx_fb_default_pdata;
/* Allocate the driver data region */
- drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
+ drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL);
if (!drvdata) {
dev_err(&pdev->dev, "Couldn't allocate device private record\n");
return -ENOMEM;
@@ -451,7 +447,6 @@ static int xilinxfb_of_probe(struct platform_device *pdev)
drvdata->dcr_host = dcr_map(op->dev.of_node, start, drvdata->dcr_len);
if (!DCR_MAP_OK(drvdata->dcr_host)) {
dev_err(&op->dev, "invalid DCR address\n");
- kfree(drvdata);
return -ENODEV;
}
}
--
1.8.2.3
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related
* [PATCH v2 3/3] video: xilinxfb: Simplify error path
From: Michal Simek @ 2013-10-09 10:52 UTC (permalink / raw)
To: linux-kernel, monstr
Cc: Jean-Christophe Plagniol-Villard, Tomi Valkeinen, linux-fbdev
In-Reply-To: <631df9a44b366af4129d00f1d4e1d3baad7d4903.1381315928.git.michal.simek@xilinx.com>
[-- Attachment #1: Type: text/plain, Size: 2084 bytes --]
devm_iounmap is called automatically that's why remove it from the code
dev_set_drvdata(dev, NULL) is called by generic code
after device_release or on probe failure.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Jingoo Han <jg1.han@samsung.com>
---
Changes in v2:
Rebased on git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git for-next
drivers/video/xilinxfb.c | 24 ++++++------------------
1 file changed, 6 insertions(+), 18 deletions(-)
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index 98c7a6f..7e3036c 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -260,10 +260,9 @@ static int xilinxfb_assign(struct platform_device *pdev,
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
drvdata->regs = devm_ioremap_resource(&pdev->dev, res);
- if (IS_ERR(drvdata->regs)) {
- rc = PTR_ERR(drvdata->regs);
- goto err_region;
- }
+ if (IS_ERR(drvdata->regs))
+ return PTR_ERR(drvdata->regs);
+
drvdata->regs_phys = res->start;
}
@@ -279,11 +278,7 @@ static int xilinxfb_assign(struct platform_device *pdev,
if (!drvdata->fb_virt) {
dev_err(dev, "Could not allocate frame buffer memory\n");
- rc = -ENOMEM;
- if (drvdata->flags & BUS_ACCESS_FLAG)
- goto err_fbmem;
- else
- goto err_region;
+ return -ENOMEM;
}
/* Clear (turn to black) the framebuffer */
@@ -363,11 +358,6 @@ err_cmap:
/* Turn off the display */
xilinx_fb_out32(drvdata, REG_CTRL, 0);
-err_fbmem:
- if (drvdata->flags & BUS_ACCESS_FLAG)
- devm_iounmap(dev, drvdata->regs);
-
-err_region:
return rc;
}
@@ -392,11 +382,9 @@ static int xilinxfb_release(struct device *dev)
/* Turn off the display */
xilinx_fb_out32(drvdata, REG_CTRL, 0);
- /* Release the resources, as allocated based on interface */
- if (drvdata->flags & BUS_ACCESS_FLAG)
- devm_iounmap(dev, drvdata->regs);
#ifdef CONFIG_PPC_DCR
- else
+ /* Release the resources, as allocated based on interface */
+ if (!(drvdata->flags & BUS_ACCESS_FLAG))
dcr_unmap(drvdata->dcr_host, drvdata->dcr_len);
#endif
--
1.8.2.3
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply related
* Re: [PATCH v2 1/3] video: xilinxfb: Use standard variable name convention
From: Mark Rutland @ 2013-10-09 11:06 UTC (permalink / raw)
To: Michal Simek
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
monstr-pSz03upnqPeHXe+LvDLADg@public.gmane.org,
Jean-Christophe Plagniol-Villard, Tomi Valkeinen,
grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org,
linux-fbdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
In-Reply-To: <631df9a44b366af4129d00f1d4e1d3baad7d4903.1381315928.git.michal.simek-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org>
On Wed, Oct 09, 2013 at 11:52:12AM +0100, Michal Simek wrote:
> s/op/pdev/ in xilinxfb_of_probe().
> No functional chagnes.
>
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> ---
> Changes in v2: None
>
> drivers/video/xilinxfb.c | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
> index 0e1dd33..d12345f 100644
> --- a/drivers/video/xilinxfb.c
> +++ b/drivers/video/xilinxfb.c
> @@ -411,7 +411,7 @@ static int xilinxfb_release(struct device *dev)
> * OF bus binding
> */
>
> -static int xilinxfb_of_probe(struct platform_device *op)
> +static int xilinxfb_of_probe(struct platform_device *pdev)
> {
> const u32 *prop;
> u32 tft_access = 0;
> @@ -425,7 +425,7 @@ static int xilinxfb_of_probe(struct platform_device *op)
> /* Allocate the driver data region */
> drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
> if (!drvdata) {
> - dev_err(&op->dev, "Couldn't allocate device private record\n");
> + dev_err(&pdev->dev, "Couldn't allocate device private record\n");
> return -ENOMEM;
> }
>
> @@ -433,7 +433,7 @@ static int xilinxfb_of_probe(struct platform_device *op)
> * To check whether the core is connected directly to DCR or BUS
> * interface and initialize the tft_access accordingly.
> */
> - of_property_read_u32(op->dev.of_node, "xlnx,dcr-splb-slave-if",
> + of_property_read_u32(pdev->dev.of_node, "xlnx,dcr-splb-slave-if",
> &tft_access);
>
> /*
> @@ -457,29 +457,29 @@ static int xilinxfb_of_probe(struct platform_device *op)
> }
> #endif
>
> - prop = of_get_property(op->dev.of_node, "phys-size", &size);
> + prop = of_get_property(pdev->dev.of_node, "phys-size", &size);
> if ((prop) && (size >= sizeof(u32)*2)) {
> pdata.screen_width_mm = prop[0];
> pdata.screen_height_mm = prop[1];
> }
While you're changing these lines, it would be nice to change this
pattern (here and elsewhere) to use of_property_read_u32_array, so that
it's endian-safe and consistent with other devicetree parsing code:
of_property_read_u32_array(pdev->dev.of_node, "phys-size", prop, 2);
It won't read the values if the property data's too short, so that
should be consistent with the existing code.
It would also make the diffstat negative :)
>
> - prop = of_get_property(op->dev.of_node, "resolution", &size);
> + prop = of_get_property(pdev->dev.of_node, "resolution", &size);
> if ((prop) && (size >= sizeof(u32)*2)) {
> pdata.xres = prop[0];
> pdata.yres = prop[1];
> }
>
> - prop = of_get_property(op->dev.of_node, "virtual-resolution", &size);
> + prop = of_get_property(pdev->dev.of_node, "virtual-resolution", &size);
> if ((prop) && (size >= sizeof(u32)*2)) {
> pdata.xvirt = prop[0];
> pdata.yvirt = prop[1];
> }
>
> - if (of_find_property(op->dev.of_node, "rotate-display", NULL))
> + if (of_find_property(pdev->dev.of_node, "rotate-display", NULL))
> pdata.rotate_screen = 1;
Similarly, this could use of_property_read_bool:
pdata.rotate_screen = of_property_read_bool(pdev->dev.of_node,
"rotate-display");
It won't help the diffstat, but it makes the intent clearer.
Cheers,
Mark.
^ permalink raw reply
* Re: [PATCH v2 1/3] video: xilinxfb: Use standard variable name convention
From: Michal Simek @ 2013-10-09 11:18 UTC (permalink / raw)
To: Mark Rutland
Cc: Michal Simek,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Jean-Christophe Plagniol-Villard, Tomi Valkeinen,
grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org,
linux-fbdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
In-Reply-To: <20131009110651.GH4981-NuALmloUBlrZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 3046 bytes --]
On 10/09/2013 01:06 PM, Mark Rutland wrote:
> On Wed, Oct 09, 2013 at 11:52:12AM +0100, Michal Simek wrote:
>> s/op/pdev/ in xilinxfb_of_probe().
>> No functional chagnes.
>>
>> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
>> ---
>> Changes in v2: None
>>
>> drivers/video/xilinxfb.c | 18 +++++++++---------
>> 1 file changed, 9 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
>> index 0e1dd33..d12345f 100644
>> --- a/drivers/video/xilinxfb.c
>> +++ b/drivers/video/xilinxfb.c
>> @@ -411,7 +411,7 @@ static int xilinxfb_release(struct device *dev)
>> * OF bus binding
>> */
>>
>> -static int xilinxfb_of_probe(struct platform_device *op)
>> +static int xilinxfb_of_probe(struct platform_device *pdev)
>> {
>> const u32 *prop;
>> u32 tft_access = 0;
>> @@ -425,7 +425,7 @@ static int xilinxfb_of_probe(struct platform_device *op)
>> /* Allocate the driver data region */
>> drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
>> if (!drvdata) {
>> - dev_err(&op->dev, "Couldn't allocate device private record\n");
>> + dev_err(&pdev->dev, "Couldn't allocate device private record\n");
>> return -ENOMEM;
>> }
>>
>> @@ -433,7 +433,7 @@ static int xilinxfb_of_probe(struct platform_device *op)
>> * To check whether the core is connected directly to DCR or BUS
>> * interface and initialize the tft_access accordingly.
>> */
>> - of_property_read_u32(op->dev.of_node, "xlnx,dcr-splb-slave-if",
>> + of_property_read_u32(pdev->dev.of_node, "xlnx,dcr-splb-slave-if",
>> &tft_access);
>>
>> /*
>> @@ -457,29 +457,29 @@ static int xilinxfb_of_probe(struct platform_device *op)
>> }
>> #endif
>>
>> - prop = of_get_property(op->dev.of_node, "phys-size", &size);
>> + prop = of_get_property(pdev->dev.of_node, "phys-size", &size);
>> if ((prop) && (size >= sizeof(u32)*2)) {
>> pdata.screen_width_mm = prop[0];
>> pdata.screen_height_mm = prop[1];
>> }
>
> While you're changing these lines, it would be nice to change this
> pattern (here and elsewhere) to use of_property_read_u32_array, so that
> it's endian-safe and consistent with other devicetree parsing code:
>
> of_property_read_u32_array(pdev->dev.of_node, "phys-size", prop, 2);
>
> It won't read the values if the property data's too short, so that
> should be consistent with the existing code.
>
> It would also make the diffstat negative :)
The intention of this patch is simple rename which is exactly how
patch should look like. It means one change per patch.
It means these changes you have describe should be in separate patch
and I definitely agree with them.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
^ permalink raw reply
* Re: [PATCH/RFC v3 00/19] Common Display Framework
From: Andrzej Hajda @ 2013-10-09 14:08 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: Laurent Pinchart, linux-fbdev, dri-devel, Jesse Barnes,
Benjamin Gaignard, Tom Gall, Kyungmin Park, linux-media,
Stephen Warren, Mark Zhang, Alexandre Courbot,
Ragesh Radhakrishnan, Thomas Petazzoni, Sunil Joshi,
Maxime Ripard, Vikas Sajjan, Marcus Lorentzon
In-Reply-To: <524C1E78.6030508@ti.com>
On 10/02/2013 03:24 PM, Tomi Valkeinen wrote:
> Hi Andrzej,
>
> On 02/10/13 15:23, Andrzej Hajda wrote:
>
>>> Using Linux buses for DBI/DSI
>>> ==============>>>
>>> I still don't see how it would work. I've covered this multiple times in
>>> previous posts so I'm not going into more details now.
>>>
>>> I implemented DSI (just command mode for now) as a video bus but with bunch of
>>> extra ops for sending the control messages.
>> Could you post the list of ops you have to create.
> I'd rather not post the ops I have in my prototype, as it's still a
> total hack. However, they are very much based on the current OMAP DSS's
> ops, so I'll describe them below. I hope I find time to polish my CDF
> hacks more, so that I can publish them.
>
>> I have posted some time ago my implementation of DSI bus:
>> http://thread.gmane.org/gmane.linux.drivers.video-input-infrastructure/69358/focusi362
> A note about the DT data on your series, as I've been stuggling to
> figure out the DT data for OMAP: some of the DT properties look like
> configuration, not hardware description. For example,
> "samsung,bta-timeout" doesn't describe hardware.
As I have adopted existing internal driver for MIPI-DSI bus, I did not
take too much
care for DT. You are right, 'bta-timeout' is a configuration parameter
(however its
minimal value is determined by characteristic of the DSI-slave). On the
other
side currently there is no good place for such configuration parameters
AFAIK.
>> I needed three quite generic ops to make it working:
>> - set_power(on/off),
>> - set_stream(on/off),
>> - transfer(dsi_transaction_type, tx_buf, tx_len, rx_buf, rx_len)
>> I have recently replaced set_power by PM_RUNTIME callbacks,
>> but I had to add .initialize ops.
> We have a bit more on omap:
>
> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/video/omapdss.h#n648
>
> Some of those should be removed and some should be omap DSI's internal
> matters, not part of the API. But it gives an idea of the ops we use.
> Shortly about the ops:
>
> - (dis)connect, which might be similar to your initialize. connect is
> meant to "connect" the pipeline, reserving the video ports used, etc.
>
> - enable/disable, enable the DSI bus. If the DSI peripheral requires a
> continous DSI clock, it's also started at this point.
>
> - set_config configures the DSI bus (like, command/video mode, etc.).
>
> - configure_pins can be ignored, I think that function is not needed.
>
> - enable_hs and enable_te, used to enable/disable HS mode and
> tearing-elimination
It seems there should be a way to synchronize TE signal with panel,
in case signal is provided only to dsi-master. Some callback I suppose?
Or transfer synchronization should be done by dsi-master.
>
> - update, which does a single frame transfer
>
> - bus_lock/unlock can be ignored
>
> - enable_video_output starts the video stream, when using DSI video mode
>
> - the request_vc, set_vc_id, release_vc can be ignored
>
> - Bunch of transfer funcs. Perhaps a single func could be used, as you
> do. We have sync write funcs, which do a BTA at the end of the write and
> wait for reply, and nosync version, which just pushes the packet to the
> TX buffers.
>
> - bta_sync, which sends a BTA and waits for the peripheral to reply
>
> - set_max_rx_packet_size, used to configure the max rx packet size.
Similar callbacks should be added to mipi-dsi-bus ops as well, to
make it complete/generic.
>
>> Regarding the discussion how and where to implement control bus I have
>> though about different alternatives:
>> 1. Implement DSI-master as a parent dev which will create DSI-slave
>> platform dev in a similar way as for MFD devices (ssbi.c seems to me a
>> good example).
>> 2. Create universal mipi-display-bus which will cover DSI, DBI and
>> possibly other buses - they have have few common things - for example
>> MIPI-DCS commands.
>>
>> I am not really convinced to either solution all have some advantages
>> and disadvantages.
> I think a dedicated DSI bus and your alternatives all have the same
> issues with splitting the DSI control into two. I've shared some of my
> thoughts here:
>
> http://article.gmane.org/gmane.comp.video.dri.devel/90651
> http://article.gmane.org/gmane.comp.video.dri.devel/91269
> http://article.gmane.org/gmane.comp.video.dri.devel/91272
>
> I still think that it's best to consider DSI and DBI as a video bus (not
> as a separate video bus and a control bus), and provide the packet
> transfer methods as part of the video ops.
I have read all posts regarding this issue and currently I tend
to solution where CDF is used to model only video streams,
with control bus implemented in different framework.
The only concerns I have if we should use Linux bus for that.
Andrzej
> Tomi
>
>
^ permalink raw reply
* Re: [PATCH v2 2/3] video: xilinxfb: Use devm_kzalloc instead of kzalloc
From: Joe Perches @ 2013-10-09 15:13 UTC (permalink / raw)
To: Michal Simek
Cc: linux-kernel, monstr, Jean-Christophe Plagniol-Villard,
Tomi Valkeinen, linux-fbdev
In-Reply-To: <748c16093663172918a90a53dc472cb8beb584ca.1381315928.git.michal.simek@xilinx.com>
On Wed, 2013-10-09 at 12:52 +0200, Michal Simek wrote:
> Simplify driver probe and release function.
[]
> diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
[]
> @@ -423,7 +419,7 @@ static int xilinxfb_of_probe(struct platform_device *pdev)
> pdata = xilinx_fb_default_pdata;
>
> /* Allocate the driver data region */
> - drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
> + drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL);
> if (!drvdata) {
> dev_err(&pdev->dev, "Couldn't allocate device private record\n");
Be nice to remove the unnecessary OOM message.
There's already a generic dump_stack on OOM.
^ permalink raw reply
* [PATCH] omapdss: Add new panel driver for Topolly td028ttec1 LCD.
From: Marek Belisko @ 2013-10-09 21:08 UTC (permalink / raw)
To: tomi.valkeinen, plagnioj
Cc: linux-kernel, linux-omap, linux-fbdev, Marek Belisko,
H. Nikolaus Schaller
For communicating with driver is used gpio bitbanging because TD028 does
not have a standard compliant SPI interface. It is a 3-wire thing with
direction reversal.
Communication with display is used only during panel enable/disable so it's
not performance issue.
Signed-off-by: Marek Belisko <marek@goldelico.com>
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
---
drivers/video/omap2/displays-new/Kconfig | 6 +
drivers/video/omap2/displays-new/Makefile | 1 +
.../omap2/displays-new/panel-tpo-td028ttec1.c | 537 +++++++++++++++++++++
include/video/omap-panel-data.h | 22 +
4 files changed, 566 insertions(+)
create mode 100644 drivers/video/omap2/displays-new/panel-tpo-td028ttec1.c
diff --git a/drivers/video/omap2/displays-new/Kconfig b/drivers/video/omap2/displays-new/Kconfig
index 6c90885..3f86432 100644
--- a/drivers/video/omap2/displays-new/Kconfig
+++ b/drivers/video/omap2/displays-new/Kconfig
@@ -56,6 +56,11 @@ config DISPLAY_PANEL_SHARP_LS037V7DW01
help
LCD Panel used in TI's SDP3430 and EVM boards
+config DISPLAY_PANEL_TPO_TD028TTEC1
+ tristate "TPO TD028TTEC1 LCD Panel"
+ help
+ LCD panel used by Openmoko.
+
config DISPLAY_PANEL_TPO_TD043MTEA1
tristate "TPO TD043MTEA1 LCD Panel"
depends on SPI
@@ -70,4 +75,5 @@ config DISPLAY_PANEL_NEC_NL8048HL11
This NEC NL8048HL11 panel is TFT LCD used in the
Zoom2/3/3630 sdp boards.
+
endmenu
diff --git a/drivers/video/omap2/displays-new/Makefile b/drivers/video/omap2/displays-new/Makefile
index 5aeb11b..0323a8a 100644
--- a/drivers/video/omap2/displays-new/Makefile
+++ b/drivers/video/omap2/displays-new/Makefile
@@ -8,5 +8,6 @@ obj-$(CONFIG_DISPLAY_PANEL_DSI_CM) += panel-dsi-cm.o
obj-$(CONFIG_DISPLAY_PANEL_SONY_ACX565AKM) += panel-sony-acx565akm.o
obj-$(CONFIG_DISPLAY_PANEL_LGPHILIPS_LB035Q02) += panel-lgphilips-lb035q02.o
obj-$(CONFIG_DISPLAY_PANEL_SHARP_LS037V7DW01) += panel-sharp-ls037v7dw01.o
+obj-$(CONFIG_DISPLAY_PANEL_TPO_TD028TTEC1) += panel-tpo-td028ttec1.o
obj-$(CONFIG_DISPLAY_PANEL_TPO_TD043MTEA1) += panel-tpo-td043mtea1.o
obj-$(CONFIG_DISPLAY_PANEL_NEC_NL8048HL11) += panel-nec-nl8048hl11.o
diff --git a/drivers/video/omap2/displays-new/panel-tpo-td028ttec1.c b/drivers/video/omap2/displays-new/panel-tpo-td028ttec1.c
new file mode 100644
index 0000000..b63586e
--- /dev/null
+++ b/drivers/video/omap2/displays-new/panel-tpo-td028ttec1.c
@@ -0,0 +1,537 @@
+/*
+ * Toppoly TD028TTEC1 panel support
+ *
+ * Copyright (C) 2008 Nokia Corporation
+ * Author: Tomi Valkeinen <tomi.valkeinen@nokia.com>
+ *
+ * Neo 1973 code (jbt6k74.c):
+ * Copyright (C) 2006-2007 by OpenMoko, Inc.
+ * Author: Harald Welte <laforge@openmoko.org>
+ *
+ * Ported and adapted from Neo 1973 U-Boot by:
+ * H. Nikolaus Schaller <hns@goldelico.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <linux/module.h>
+#include <linux/delay.h>
+#include <linux/platform_device.h>
+#include <linux/gpio.h>
+#include <video/omapdss.h>
+#include <video/omap-panel-data.h>
+
+struct panel_drv_data {
+ struct omap_dss_device dssdev;
+ struct omap_dss_device *in;
+
+ int data_lines;
+
+ struct omap_video_timings videomode;
+
+ int cs_gpio;
+ int scl_gpio;
+ int din_gpio;
+ int dout_gpio;
+
+ u_int16_t tx_buf[4];
+};
+
+static struct omap_video_timings td028ttec1_panel_timings = {
+ .x_res = 480,
+ .y_res = 640,
+ .pixel_clock = 22153,
+ .hfp = 24,
+ .hsw = 8,
+ .hbp = 8,
+ .vfp = 4,
+ .vsw = 2,
+ .vbp = 2,
+
+ .vsync_level = OMAPDSS_SIG_ACTIVE_LOW,
+ .hsync_level = OMAPDSS_SIG_ACTIVE_LOW,
+
+ .data_pclk_edge = OMAPDSS_DRIVE_SIG_FALLING_EDGE,
+ .de_level = OMAPDSS_SIG_ACTIVE_HIGH,
+ .sync_pclk_edge = OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
+};
+
+#define JBT_COMMAND 0x000
+#define JBT_DATA 0x100
+
+/* 150uS minimum clock cycle, we have two of this plus our other
+ * instructions */
+
+#define SPI_DELAY() udelay(200)
+
+static int jbt_spi_xfer(struct panel_drv_data *data, int wordnum, int bitlen)
+{
+ u_int16_t tmpdout = 0;
+ int i, j;
+
+ gpio_set_value(data->cs_gpio, 0);
+
+ for (i = 0; i < wordnum; i++) {
+ tmpdout = data->tx_buf[i];
+
+ for (j = 0; j < bitlen; j++) {
+ gpio_set_value(data->scl_gpio, 0);
+ if (tmpdout & (1 << (bitlen-1))) {
+ gpio_set_value(data->dout_gpio, 1);
+ if (gpio_get_value(data->din_gpio) = 0)
+ return 1;
+ } else {
+ gpio_set_value(data->dout_gpio, 0);
+ if (gpio_get_value(data->din_gpio) != 0)
+ return 1;
+ }
+ SPI_DELAY();
+ gpio_set_value(data->scl_gpio, 1);
+ SPI_DELAY();
+ tmpdout <<= 1;
+ }
+ }
+
+ gpio_set_value(data->cs_gpio, 1);
+
+ return 0;
+}
+
+#define JBT_COMMAND 0x000
+#define JBT_DATA 0x100
+
+int jbt_reg_write_nodata(struct panel_drv_data *ddata, u_int8_t reg)
+{
+ int rc;
+
+ ddata->tx_buf[0] = JBT_COMMAND | reg;
+
+ rc = jbt_spi_xfer(ddata, 1, 9);
+ if (rc)
+ dev_warn(ddata->dssdev.dev, "Failed to write reg: %x\n", reg);
+
+ return rc;
+}
+
+int jbt_reg_write(struct panel_drv_data *ddata, u_int8_t reg, u_int8_t data)
+{
+ int rc;
+
+ ddata->tx_buf[0] = JBT_COMMAND | reg;
+ ddata->tx_buf[1] = JBT_DATA | data;
+
+ rc = jbt_spi_xfer(ddata, 2, 9);
+ if (rc)
+ dev_warn(ddata->dssdev.dev, "Failed to write reg: %x\n", reg);
+
+ return rc;
+}
+
+int jbt_reg_write16(struct panel_drv_data *ddata, u_int8_t reg, u_int16_t data)
+{
+ int rc;
+
+ ddata->tx_buf[0] = JBT_COMMAND | reg;
+ ddata->tx_buf[1] = JBT_DATA | (data >> 8);
+ ddata->tx_buf[2] = JBT_DATA | (data & 0xff);
+
+ rc = jbt_spi_xfer(ddata, 3, 9);
+ if (rc)
+ dev_warn(ddata->dssdev.dev, "Failed to write reg: %x\n", reg);
+
+ return rc;
+}
+
+enum jbt_register {
+ JBT_REG_SLEEP_IN = 0x10,
+ JBT_REG_SLEEP_OUT = 0x11,
+
+ JBT_REG_DISPLAY_OFF = 0x28,
+ JBT_REG_DISPLAY_ON = 0x29,
+
+ JBT_REG_RGB_FORMAT = 0x3a,
+ JBT_REG_QUAD_RATE = 0x3b,
+
+ JBT_REG_POWER_ON_OFF = 0xb0,
+ JBT_REG_BOOSTER_OP = 0xb1,
+ JBT_REG_BOOSTER_MODE = 0xb2,
+ JBT_REG_BOOSTER_FREQ = 0xb3,
+ JBT_REG_OPAMP_SYSCLK = 0xb4,
+ JBT_REG_VSC_VOLTAGE = 0xb5,
+ JBT_REG_VCOM_VOLTAGE = 0xb6,
+ JBT_REG_EXT_DISPL = 0xb7,
+ JBT_REG_OUTPUT_CONTROL = 0xb8,
+ JBT_REG_DCCLK_DCEV = 0xb9,
+ JBT_REG_DISPLAY_MODE1 = 0xba,
+ JBT_REG_DISPLAY_MODE2 = 0xbb,
+ JBT_REG_DISPLAY_MODE = 0xbc,
+ JBT_REG_ASW_SLEW = 0xbd,
+ JBT_REG_DUMMY_DISPLAY = 0xbe,
+ JBT_REG_DRIVE_SYSTEM = 0xbf,
+
+ JBT_REG_SLEEP_OUT_FR_A = 0xc0,
+ JBT_REG_SLEEP_OUT_FR_B = 0xc1,
+ JBT_REG_SLEEP_OUT_FR_C = 0xc2,
+ JBT_REG_SLEEP_IN_LCCNT_D = 0xc3,
+ JBT_REG_SLEEP_IN_LCCNT_E = 0xc4,
+ JBT_REG_SLEEP_IN_LCCNT_F = 0xc5,
+ JBT_REG_SLEEP_IN_LCCNT_G = 0xc6,
+
+ JBT_REG_GAMMA1_FINE_1 = 0xc7,
+ JBT_REG_GAMMA1_FINE_2 = 0xc8,
+ JBT_REG_GAMMA1_INCLINATION = 0xc9,
+ JBT_REG_GAMMA1_BLUE_OFFSET = 0xca,
+
+ JBT_REG_BLANK_CONTROL = 0xcf,
+ JBT_REG_BLANK_TH_TV = 0xd0,
+ JBT_REG_CKV_ON_OFF = 0xd1,
+ JBT_REG_CKV_1_2 = 0xd2,
+ JBT_REG_OEV_TIMING = 0xd3,
+ JBT_REG_ASW_TIMING_1 = 0xd4,
+ JBT_REG_ASW_TIMING_2 = 0xd5,
+
+ JBT_REG_HCLOCK_VGA = 0xec,
+ JBT_REG_HCLOCK_QVGA = 0xed,
+};
+
+#define to_panel_data(p) container_of(p, struct panel_drv_data, dssdev)
+
+static int td028ttec1_panel_connect(struct omap_dss_device *dssdev)
+{
+ struct panel_drv_data *ddata = to_panel_data(dssdev);
+ struct omap_dss_device *in = ddata->in;
+ int r;
+
+ if (omapdss_device_is_connected(dssdev))
+ return 0;
+
+ r = in->ops.dpi->connect(in, dssdev);
+ if (r)
+ return r;
+
+ return 0;
+}
+
+static void td028ttec1_panel_disconnect(struct omap_dss_device *dssdev)
+{
+ struct panel_drv_data *ddata = to_panel_data(dssdev);
+ struct omap_dss_device *in = ddata->in;
+
+ if (!omapdss_device_is_connected(dssdev))
+ return;
+
+ in->ops.dpi->disconnect(in, dssdev);
+}
+
+static int td028ttec1_panel_enable(struct omap_dss_device *dssdev)
+{
+ struct panel_drv_data *ddata = to_panel_data(dssdev);
+ struct omap_dss_device *in = ddata->in;
+ int r;
+
+ if (!omapdss_device_is_connected(dssdev))
+ return -ENODEV;
+
+ if (omapdss_device_is_enabled(dssdev))
+ return 0;
+
+ in->ops.dpi->set_data_lines(in, ddata->data_lines);
+ in->ops.dpi->set_timings(in, &ddata->videomode);
+
+ r = in->ops.dpi->enable(in);
+ if (r)
+ return r;
+
+ dev_dbg(dssdev->dev, "td028ttec1_panel_enable() - state %d\n",
+ dssdev->state);
+
+ /* three times command zero */
+ r |= jbt_reg_write_nodata(ddata, 0x00);
+ udelay(1000);
+ r |= jbt_reg_write_nodata(ddata, 0x00);
+ udelay(1000);
+ r |= jbt_reg_write_nodata(ddata, 0x00);
+ udelay(1000);
+
+ /* deep standby out */
+ r |= jbt_reg_write(ddata, JBT_REG_POWER_ON_OFF, 0x17);
+
+ /* RGB I/F on, RAM write off, QVGA through, SIGCON enable */
+ r |= jbt_reg_write(ddata, JBT_REG_DISPLAY_MODE, 0x80);
+
+ /* Quad mode off */
+ r |= jbt_reg_write(ddata, JBT_REG_QUAD_RATE, 0x00);
+
+ /* AVDD on, XVDD on */
+ r |= jbt_reg_write(ddata, JBT_REG_POWER_ON_OFF, 0x16);
+
+ /* Output control */
+ r |= jbt_reg_write16(ddata, JBT_REG_OUTPUT_CONTROL, 0xfff9);
+
+ /* Sleep mode off */
+ r |= jbt_reg_write_nodata(ddata, JBT_REG_SLEEP_OUT);
+
+ /* at this point we have like 50% grey */
+
+ /* initialize register set */
+ r |= jbt_reg_write(ddata, JBT_REG_DISPLAY_MODE1, 0x01);
+ r |= jbt_reg_write(ddata, JBT_REG_DISPLAY_MODE2, 0x00);
+ r |= jbt_reg_write(ddata, JBT_REG_RGB_FORMAT, 0x60);
+ r |= jbt_reg_write(ddata, JBT_REG_DRIVE_SYSTEM, 0x10);
+ r |= jbt_reg_write(ddata, JBT_REG_BOOSTER_OP, 0x56);
+ r |= jbt_reg_write(ddata, JBT_REG_BOOSTER_MODE, 0x33);
+ r |= jbt_reg_write(ddata, JBT_REG_BOOSTER_FREQ, 0x11);
+ r |= jbt_reg_write(ddata, JBT_REG_BOOSTER_FREQ, 0x11);
+ r |= jbt_reg_write(ddata, JBT_REG_OPAMP_SYSCLK, 0x02);
+ r |= jbt_reg_write(ddata, JBT_REG_VSC_VOLTAGE, 0x2b);
+ r |= jbt_reg_write(ddata, JBT_REG_VCOM_VOLTAGE, 0x40);
+ r |= jbt_reg_write(ddata, JBT_REG_EXT_DISPL, 0x03);
+ r |= jbt_reg_write(ddata, JBT_REG_DCCLK_DCEV, 0x04);
+ /*
+ * default of 0x02 in JBT_REG_ASW_SLEW responsible for 72Hz requirement
+ * to avoid red / blue flicker
+ */
+ r |= jbt_reg_write(ddata, JBT_REG_ASW_SLEW, 0x04);
+ r |= jbt_reg_write(ddata, JBT_REG_DUMMY_DISPLAY, 0x00);
+
+ r |= jbt_reg_write(ddata, JBT_REG_SLEEP_OUT_FR_A, 0x11);
+ r |= jbt_reg_write(ddata, JBT_REG_SLEEP_OUT_FR_B, 0x11);
+ r |= jbt_reg_write(ddata, JBT_REG_SLEEP_OUT_FR_C, 0x11);
+ r |= jbt_reg_write16(ddata, JBT_REG_SLEEP_IN_LCCNT_D, 0x2040);
+ r |= jbt_reg_write16(ddata, JBT_REG_SLEEP_IN_LCCNT_E, 0x60c0);
+ r |= jbt_reg_write16(ddata, JBT_REG_SLEEP_IN_LCCNT_F, 0x1020);
+ r |= jbt_reg_write16(ddata, JBT_REG_SLEEP_IN_LCCNT_G, 0x60c0);
+
+ r |= jbt_reg_write16(ddata, JBT_REG_GAMMA1_FINE_1, 0x5533);
+ r |= jbt_reg_write(ddata, JBT_REG_GAMMA1_FINE_2, 0x00);
+ r |= jbt_reg_write(ddata, JBT_REG_GAMMA1_INCLINATION, 0x00);
+ r |= jbt_reg_write(ddata, JBT_REG_GAMMA1_BLUE_OFFSET, 0x00);
+ r |= jbt_reg_write(ddata, JBT_REG_GAMMA1_BLUE_OFFSET, 0x00);
+
+ r |= jbt_reg_write16(ddata, JBT_REG_HCLOCK_VGA, 0x1f0);
+ r |= jbt_reg_write(ddata, JBT_REG_BLANK_CONTROL, 0x02);
+ r |= jbt_reg_write16(ddata, JBT_REG_BLANK_TH_TV, 0x0804);
+ r |= jbt_reg_write16(ddata, JBT_REG_BLANK_TH_TV, 0x0804);
+
+ r |= jbt_reg_write(ddata, JBT_REG_CKV_ON_OFF, 0x01);
+ r |= jbt_reg_write16(ddata, JBT_REG_CKV_1_2, 0x0000);
+
+ r |= jbt_reg_write16(ddata, JBT_REG_OEV_TIMING, 0x0d0e);
+ r |= jbt_reg_write16(ddata, JBT_REG_ASW_TIMING_1, 0x11a4);
+ r |= jbt_reg_write(ddata, JBT_REG_ASW_TIMING_2, 0x0e);
+
+ r |= jbt_reg_write_nodata(ddata, JBT_REG_DISPLAY_ON);
+
+ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
+
+ return r;
+}
+
+static void td028ttec1_panel_disable(struct omap_dss_device *dssdev)
+{
+ struct panel_drv_data *ddata = to_panel_data(dssdev);
+ struct omap_dss_device *in = ddata->in;
+
+ if (!omapdss_device_is_enabled(dssdev))
+ return;
+
+ dev_dbg(dssdev->dev, "td028ttec1_panel_disable()\n");
+
+ in->ops.dpi->disable(in);
+
+ jbt_reg_write_nodata(ddata, JBT_REG_DISPLAY_OFF);
+ jbt_reg_write16(ddata, JBT_REG_OUTPUT_CONTROL, 0x8002);
+ jbt_reg_write_nodata(ddata, JBT_REG_SLEEP_IN);
+ jbt_reg_write(ddata, JBT_REG_POWER_ON_OFF, 0x00);
+
+ dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
+}
+
+static void td028ttec1_panel_set_timings(struct omap_dss_device *dssdev,
+ struct omap_video_timings *timings)
+{
+ struct panel_drv_data *ddata = to_panel_data(dssdev);
+ struct omap_dss_device *in = ddata->in;
+
+ ddata->videomode = *timings;
+ dssdev->panel.timings = *timings;
+
+ in->ops.dpi->set_timings(in, timings);
+}
+
+static void td028ttec1_panel_get_timings(struct omap_dss_device *dssdev,
+ struct omap_video_timings *timings)
+{
+ struct panel_drv_data *ddata = to_panel_data(dssdev);
+
+ *timings = ddata->videomode;
+}
+
+static int td028ttec1_panel_check_timings(struct omap_dss_device *dssdev,
+ struct omap_video_timings *timings)
+{
+ struct panel_drv_data *ddata = to_panel_data(dssdev);
+ struct omap_dss_device *in = ddata->in;
+
+ return in->ops.dpi->check_timings(in, timings);
+}
+
+static struct omap_dss_driver td028ttec1_ops = {
+ .connect = td028ttec1_panel_connect,
+ .disconnect = td028ttec1_panel_disconnect,
+
+ .enable = td028ttec1_panel_enable,
+ .disable = td028ttec1_panel_disable,
+
+ .set_timings = td028ttec1_panel_set_timings,
+ .get_timings = td028ttec1_panel_get_timings,
+ .check_timings = td028ttec1_panel_check_timings,
+};
+
+static int td028ttec1_panel_probe_pdata(struct platform_device *pdev)
+{
+ const struct panel_tpo_td028tec1_platform_data *pdata;
+ struct panel_drv_data *ddata = platform_get_drvdata(pdev);
+ struct omap_dss_device *dssdev, *in;
+
+ pdata = dev_get_platdata(&pdev->dev);
+
+ in = omap_dss_find_output(pdata->source);
+ if (in = NULL) {
+ dev_err(&pdev->dev, "failed to find video source '%s'\n",
+ pdata->source);
+ return -EPROBE_DEFER;
+ }
+
+ ddata->in = in;
+
+ ddata->data_lines = pdata->data_lines;
+
+ dssdev = &ddata->dssdev;
+ dssdev->name = pdata->name;
+
+ ddata->cs_gpio = pdata->cs_gpio;
+ ddata->scl_gpio = pdata->scl_gpio;
+ ddata->din_gpio = pdata->din_gpio;
+ ddata->dout_gpio = pdata->dout_gpio;
+
+ return 0;
+}
+
+static int td028ttec1_panel_probe(struct platform_device *pdev)
+{
+ struct panel_drv_data *ddata;
+ struct omap_dss_device *dssdev;
+ int r;
+
+ ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL);
+ if (ddata = NULL)
+ return -ENOMEM;
+
+ platform_set_drvdata(pdev, ddata);
+
+ if (dev_get_platdata(&pdev->dev)) {
+ r = td028ttec1_panel_probe_pdata(pdev);
+ if (r)
+ return r;
+ } else {
+ return -ENODEV;
+ }
+
+ if (gpio_is_valid(ddata->cs_gpio)) {
+ r = devm_gpio_request_one(&pdev->dev, ddata->cs_gpio,
+ GPIOF_OUT_INIT_HIGH, "lcd cs");
+ if (r)
+ goto err_gpio;
+ }
+
+ if (gpio_is_valid(ddata->scl_gpio)) {
+ r = devm_gpio_request_one(&pdev->dev, ddata->scl_gpio,
+ GPIOF_OUT_INIT_HIGH, "lcd scl");
+ if (r)
+ goto err_gpio;
+ }
+
+ if (gpio_is_valid(ddata->dout_gpio)) {
+ r = devm_gpio_request_one(&pdev->dev, ddata->dout_gpio,
+ GPIOF_OUT_INIT_LOW, "lcd dout");
+ if (r)
+ goto err_gpio;
+ }
+
+ if (gpio_is_valid(ddata->din_gpio)) {
+ r = devm_gpio_request_one(&pdev->dev, ddata->din_gpio,
+ GPIOF_IN, "lcd din");
+ if (r)
+ goto err_gpio;
+ }
+
+ /* according to data sheet: wait 50ms (Tpos of LCM). However, 50ms
+ * seems unreliable with later LCM batches, increasing to 90ms */
+ mdelay(90);
+
+ ddata->videomode = td028ttec1_panel_timings;
+
+ dssdev = &ddata->dssdev;
+ dssdev->dev = &pdev->dev;
+ dssdev->driver = &td028ttec1_ops;
+ dssdev->type = OMAP_DISPLAY_TYPE_DPI;
+ dssdev->owner = THIS_MODULE;
+ dssdev->panel.timings = ddata->videomode;
+ dssdev->phy.dpi.data_lines = ddata->data_lines;
+
+ r = omapdss_register_display(dssdev);
+ if (r) {
+ dev_err(&pdev->dev, "Failed to register panel\n");
+ goto err_reg;
+ }
+
+ return 0;
+
+err_reg:
+err_gpio:
+ omap_dss_put_device(ddata->in);
+ return r;
+}
+
+static int __exit td028ttec1_panel_remove(struct platform_device *pdev)
+{
+ struct panel_drv_data *ddata = platform_get_drvdata(pdev);
+ struct omap_dss_device *dssdev = &ddata->dssdev;
+ struct omap_dss_device *in = ddata->in;
+
+ omapdss_unregister_display(dssdev);
+
+ td028ttec1_panel_disable(dssdev);
+ td028ttec1_panel_disconnect(dssdev);
+
+ omap_dss_put_device(in);
+
+ return 0;
+}
+
+static struct platform_driver td028ttec1_driver = {
+ .probe = td028ttec1_panel_probe,
+ .remove = __exit_p(td028ttec1_panel_remove),
+
+ .driver = {
+ .name = "panel-tpo-td028ttec1",
+ .owner = THIS_MODULE,
+ },
+};
+
+module_platform_driver(td028ttec1_driver);
+
+MODULE_AUTHOR("H. Nikolaus Schaller <hns@goldelico.com>");
+MODULE_DESCRIPTION("Toppoly TD028TTEC1 panel driver");
+MODULE_LICENSE("GPL");
diff --git a/include/video/omap-panel-data.h b/include/video/omap-panel-data.h
index f7ac8d9..02565ff 100644
--- a/include/video/omap-panel-data.h
+++ b/include/video/omap-panel-data.h
@@ -238,4 +238,26 @@ struct panel_nec_nl8048hl11_platform_data {
int qvga_gpio;
};
+/**
+ * panel-tpo-td028tec1 platform data
+ * @name: name for display netity
+ * @source: name of the display entity used as a video source
+ * @data_lines: number of DPI datalines
+ * @cs_gpio: CS gpio
+ * @scl_gpio: CLK gpio
+ * @din_gpio: input data gpio
+ * @dout_gpio: output data gpio
+ */
+struct panel_tpo_td028tec1_platform_data {
+ const char *name;
+ const char *source;
+
+ int data_lines;
+
+ int cs_gpio;
+ int scl_gpio;
+ int din_gpio;
+ int dout_gpio;
+};
+
#endif /* __OMAP_PANEL_DATA_H */
--
1.8.1.2
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox