[PATCH 0/4] Fix ssd1307fb OLED driver reset
STALE2787d
Revision v1 of 4 in this series.
7 messages,
2 authors,
2018-12-20 · open the first message on its own page
SGkgYWxsLA0KDQp0aGlzIGlzIG15IHRoaXJkIGF0dGVtcHQgdG8gZml4IHRoZSBzc2QxMzA3ZmIg
T0xFRCBkcml2ZXIgcmVzZXQuIEluIHRoZQ0Kc2Vjb25kIGF0dGVtcHQgWzFdIFJvYiBzdWdnZXN0
ZWQgdG8gdGFrZSBkaWZmZXJlbnQgYXByb2FjaC4gVGhhdCBpcyB0bw0KYXBwbHkgd2hhdCB3YXMg
b3JpZ2luYWx5IHBhcnQgb2YgdGhlIGZpcnN0IHJvdW5kIGFuZCBldmVudHVhbGx5IG1lcmdlZA0K
YnV0IHJldmVydGVkIGxhdGVyIG9uIFsyXVszXS4NCg0KTmV4dCBzdGVwIGlzIHRvIGFwcGx5IGEg
Zml4dXAgZm9yIHRoZSBzaW5nbGUgdXNlciAoaW4tdHJlZSkgdGhhdCB1c2VzDQp0aGlzIE9MRUQu
IEFzIFJvYiBzdWdnZXN0ZWQsIHRoZSBmaXh1cCBtYXkgYmUgYXBwbGllZCBvbmx5IGFmdGVyDQpz
b21lb25lIGNvbXBsYWlucyB0aGVpciBkaXNwbGF5IGJyb2tlLg0KDQpJIGFtIG5vdCByZWFsbHkg
c3VyZSB3aGF0IGlzIHRoZSBwcm9wcGVyIHdheSB0byBoYW5kbGUgdGhpcyBzbyB0aGUNCnNlcmll
cyBjb250YWlucyB0aGUgb3JpZ2luYWwgcGF0Y2hlcyArIGEgbWlub3IgZml4IGluIHRoZSBkb2Nz
IGFuZA0KdGhlIGZpeHVwIGFzIHRoZSBsYXN0IHBhdGNoLg0KDQpBZGRpbmcgQWxleGFuZHJlIGFu
ZCBNYXhpbWUgZnJvbSBCb290bGluIHRvIHRoZSBDYyBsaXN0IGFzIHlvdSBzZWVtDQp0byBiZSB0
aGUgbGFzdCBvbmVzIHdobyB0b3VjaGVkIHRoZSBDcnlzdGFsZm9udHogcGxhdGZvcm0uIFlvdXIg
Y29tZW50DQpyZWdhcmRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgcGxhdGZvcm0gYW5kIHdoZXRoZXIg
dGhlIGZpeHVwIHNob3VsZCBiZQ0KYXBwbGllZCBzdHJhaWdodCBhd2F5IG9yIG5vdCBhdCBhbGwg
d2lsbCBiZSBhcHByZWNpYXRlZC4NCg0KVGhhbmsgeW91LA0KTWljaGFsDQoNClsxXSBodHRwczov
L3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNoLzEwNjY1NTk3LyMyMjMyNzIyNw0KWzJdIGh0dHBz
Oi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gvMTA2MTc3MjkvDQpbM10gaHR0cHM6Ly9wYXRj
aHdvcmsua2VybmVsLm9yZy9wYXRjaC8xMDYxNzczMS8jMjIyNTcxNzUNCg0KTWljaGFsIFZva8Oh
xI0gKDQpOg0KICBkdC1iaW5kaW5nczogZGlzcGxheTogc3NkMTMwN2ZiOiBSZW1vdmUgcmVzZXQt
YWN0aXZlLWxvdyBmcm9tIGV4YW1wbGVzDQogIHZpZGVvOiBzc2QxMzA3ZmI6IERvIG5vdCBoYXJk
IGNvZGUgYWN0aXZlLWxvdyByZXNldCBzZXF1ZW5jZQ0KICBBUk06IGR0czogaW14MjgtY2ZhMTAw
MzY6IEZpeCB0aGUgcmVzZXQgZ3BpbyBzaWduYWwgcG9sYXJpdHkNCiAgQVJNOiBteHM6IGNmYTEw
MDM2OiBGaXh1cCBPTEVEwqBkaXNwbGF5IHJlc2V0IHBvbGFyaXR5DQoNCiAuLi4vZGV2aWNldHJl
ZS9iaW5kaW5ncy9kaXNwbGF5L3NzZDEzMDdmYi50eHQgICAgICB8ICAyIC0NCiBhcmNoL2FybS9i
b290L2R0cy9pbXgyOC1jZmExMDAzNi5kdHMgICAgICAgICAgICAgICB8ICAzICstDQogYXJjaC9h
cm0vbWFjaC1teHMvbWFjaC1teHMuYyAgICAgICAgICAgICAgICAgICAgICAgfCA0NSArKysrKysr
KysrKysrKysrKysrKysrDQogZHJpdmVycy92aWRlby9mYmRldi9zc2QxMzA3ZmIuYyAgICAgICAg
ICAgICAgICAgICAgfCAgNCArLQ0KIDQgZmlsZXMgY2hhbmdlZCwgNDkgaW5zZXJ0aW9ucygrKSwg
NSBkZWxldGlvbnMoLSkNCg0KLS0gDQoyLjEuNA0KDQo
VGhlIHJlc2V0LWFjdGl2ZS1sb3cgcHJvcGVydHkgaGFzIGJlZW4gcmVtb3ZlZCBicm9tIHRoZSBi
aW5kaW5nIGEgd2hpbGUNCmFnby4gU28gcmVtb3ZlIGl0IGZyb20gdGhlIGV4YW1wbGVzIGFzIHdl
bGwuDQoNCkZpeGVzOiA1MTliNGRiICgiZmJkZXY6IHNzZDEzMDdmYjogUmVtb3ZlIHJlc2V0LWFj
dGl2ZS1sb3cgZnJvbSB0aGUgRFQgYmluZGluZyBkb2N1bWVudCIpDQpTaWduZWQtb2ZmLWJ5OiBN
aWNoYWwgVm9rw6HEjSA8bWljaGFsLnZva2FjQHlzb2Z0LmNvbT4NCi0tLQ0KIERvY3VtZW50YXRp
b24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3NzZDEzMDdmYi50eHQgfCAyIC0tDQogMSBm
aWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9u
L2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9zc2QxMzA3ZmIudHh0IGIvRG9jdW1lbnRhdGlv
bi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvc3NkMTMwN2ZiLnR4dA0KaW5kZXggMjA5ZDkz
MS4uYjY3ZjhjYSAxMDA2NDQNCi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n
cy9kaXNwbGF5L3NzZDEzMDdmYi50eHQNCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9i
aW5kaW5ncy9kaXNwbGF5L3NzZDEzMDdmYi50eHQNCkBAIC0zNiw3ICszNiw2IEBAIHNzZDEzMDc6
IG9sZWRAM2Mgew0KICAgICAgICAgcmVnID0gPDB4M2M+Ow0KICAgICAgICAgcHdtcyA9IDwmcHdt
IDQgMzAwMD47DQogICAgICAgICByZXNldC1ncGlvcyA9IDwmZ3BpbzIgNz47DQotICAgICAgICBy
ZXNldC1hY3RpdmUtbG93Ow0KIH07DQogDQogc3NkMTMwNjogb2xlZEAzYyB7DQpAQCAtNDQsNyAr
NDMsNiBAQCBzc2QxMzA2OiBvbGVkQDNjIHsNCiAgICAgICAgIHJlZyA9IDwweDNjPjsNCiAgICAg
ICAgIHB3bXMgPSA8JnB3bSA0IDMwMDA+Ow0KICAgICAgICAgcmVzZXQtZ3Bpb3MgPSA8JmdwaW8y
IDc+Ow0KLSAgICAgICAgcmVzZXQtYWN0aXZlLWxvdzsNCiAgICAgICAgIHNvbG9tb24sY29tLWxy
cmVtYXA7DQogICAgICAgICBzb2xvbW9uLGNvbS1pbnZkaXI7DQogICAgICAgICBzb2xvbW9uLGNv
bS1vZmZzZXQgPSA8MzI+Ow0KLS0gDQoyLjEuNA0KDQo
VGhlIHJlc2V0IHNpZ25hbCBvZiB0aGUgU1NEMTMwNiBPTEVEIGRpc3BsYXkgaXMgYWN0dWFsbHkg
YWN0aXZlLWxvdy4NCkFkYXB0IHRoZSBEVCB0byByZWZsZWN0IHRoZSByZWFsIHdvcmxkLg0KDQpT
aWduZWQtb2ZmLWJ5OiBNaWNoYWwgVm9rw6HEjSA8bWljaGFsLnZva2FjQHlzb2Z0LmNvbT4NCi0t
LQ0KIGFyY2gvYXJtL2Jvb3QvZHRzL2lteDI4LWNmYTEwMDM2LmR0cyB8IDMgKystDQogMSBmaWxl
IGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KDQpkaWZmIC0tZ2l0IGEv
YXJjaC9hcm0vYm9vdC9kdHMvaW14MjgtY2ZhMTAwMzYuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMv
aW14MjgtY2ZhMTAwMzYuZHRzDQppbmRleCA4MzM3Y2EyLi5kNmVjYTMxIDEwMDY0NA0KLS0tIGEv
YXJjaC9hcm0vYm9vdC9kdHMvaW14MjgtY2ZhMTAwMzYuZHRzDQorKysgYi9hcmNoL2FybS9ib290
L2R0cy9pbXgyOC1jZmExMDAzNi5kdHMNCkBAIC0xMSw2ICsxMSw3IEBADQogDQogL2R0cy12MS87
DQogI2luY2x1ZGUgImlteDI4LmR0c2kiDQorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bp
by5oPg0KIA0KIC8gew0KIAltb2RlbCA9ICJDcnlzdGFsZm9udHogQ0ZBLTEwMDM2IEJvYXJkIjsN
CkBAIC05NSw3ICs5Niw3IEBADQogCQkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOw0KIAkJ
CQkJcGluY3RybC0wID0gPCZzc2QxMzA2X2NmYTEwMDM2PjsNCiAJCQkJCXJlZyA9IDwweDNjPjsN
Ci0JCQkJCXJlc2V0LWdwaW9zID0gPCZncGlvMiA3IDA+Ow0KKwkJCQkJcmVzZXQtZ3Bpb3MgPSA8
JmdwaW8yIDcgR1BJT19BQ1RJVkVfTE9XPjsNCiAJCQkJCXNvbG9tb24saGVpZ2h0ID0gPDMyPjsN
CiAJCQkJCXNvbG9tb24sd2lkdGggPSA8MTI4PjsNCiAJCQkJCXNvbG9tb24scGFnZS1vZmZzZXQg
PSA8MD47DQotLSANCjIuMS40DQoNCg=
VGhlIFNTRDEzMHggT0xFRMKgZGlzcGxheSByZXNldCBzaWduYWwgaXMgYWN0aXZlIGxvdy4gTm93
IHRoZSByZXNldA0Kc2VxdWVuY2UgaXMgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSB0aGF0IHVz
ZXJzIGFyZSBmb3JjZWQgdG8NCmRlZmluZSByZXNldC1ncGlvcyBhcyBHUElPX0FDVElWRV9ISUdI
IGluIERUIHRvIG1ha2UgdGhlIHJlc2V0IHdvcmsuDQoNCkRvIG5vdCBoYXJkIGNvZGUgdGhlIGFj
dGl2ZS1sb3cgc2VxdWVuY2UgaW50byB0aGUgZHJpdmVyIGJ1dCBpbnN0ZWFkDQphbGxvdyB0aGUg
dXNlciB0byBzcGVjaWZ5IHRoZSBncGlvIGFzIEdQSU9fQUNUSVZFX0xPVyB0byByZWZsZWN0DQp0
aGUgcmVhbCB3b3JsZC4NCg0KU2lnbmVkLW9mZi1ieTogTWljaGFsIFZva8OhxI0gPG1pY2hhbC52
b2thY0B5c29mdC5jb20+DQotLS0NCiBkcml2ZXJzL3ZpZGVvL2ZiZGV2L3NzZDEzMDdmYi5jIHwg
NCArKy0tDQogMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkN
Cg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvc3NkMTMwN2ZiLmMgYi9kcml2ZXJz
L3ZpZGVvL2ZiZGV2L3NzZDEzMDdmYi5jDQppbmRleCA0MDYxYTIwLi4zYjM2MWJjIDEwMDY0NA0K
LS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9zc2QxMzA3ZmIuYw0KKysrIGIvZHJpdmVycy92aWRl
by9mYmRldi9zc2QxMzA3ZmIuYw0KQEAgLTY2NywxMCArNjY3LDEwIEBAIHN0YXRpYyBpbnQgc3Nk
MTMwN2ZiX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsDQogDQogCWlmIChwYXItPnJl
c2V0KSB7DQogCQkvKiBSZXNldCB0aGUgc2NyZWVuICovDQotCQlncGlvZF9zZXRfdmFsdWVfY2Fu
c2xlZXAocGFyLT5yZXNldCwgMCk7DQotCQl1ZGVsYXkoNCk7DQogCQlncGlvZF9zZXRfdmFsdWVf
Y2Fuc2xlZXAocGFyLT5yZXNldCwgMSk7DQogCQl1ZGVsYXkoNCk7DQorCQlncGlvZF9zZXRfdmFs
dWVfY2Fuc2xlZXAocGFyLT5yZXNldCwgMCk7DQorCQl1ZGVsYXkoNCk7DQogCX0NCiANCiAJaWYg
KHBhci0+dmJhdF9yZWcpIHsNCi0tIA0KMi4xLjQNCg0K
VGhlcmUgd2FzIGEgYnVnIGluIHJlc2V0IHNpZ25hbCBnZW5lcmF0aW9uIGluIHNzZDEzMDdmYiBP
TEVEIGRyaXZlci4NClRoZSBkaXNwbGF5IG5lZWRzIGFuIGFjdGl2ZS1sb3cgcmVzZXQgc2lnbmFs
IGJ1dCB0aGUgZHJpdmVyIHByb2R1Y2VkDQp0aGUgY29ycmVjdCBzZXF1ZW5jZSBvbmx5IGlmIHRo
ZSBHUElPIHVzZWQgZm9yIHJlc2V0IHdhcyBzcGVjaWZpZWQgYXMNCkdQSU9fQUNUSVZFX0hJR0gu
DQoNCk5vdyBhcyB0aGUgT0xFRCBkcml2ZXIgaXMgZml4ZWQgaXQgaXMgYWxzbyBuZWNlc3NhcnJ5
IHRvIGltcGxlbWVudA0KYSBmaXh1cCBmb3IgYWxsIGN1cnJlbnQgdXNlcnMgb2YgdGhlIG9sZCBE
VCBBQkkuIFRoZXJlIGlzIG9ubHkgb25lDQppbi10cmVlIHVzZXIgYW5kIHRoYXQgaXMgdGhlIENy
eXN0YWxmb250eiBDRkEtMTAwMzYgYm9hcmQuIEluIGNhc2UNCnRoaXMgYm9hcmQgaXMgYm9vdGlu
ZyBhbmQgR1BJT19BQ1RJVkVfSElHSCBpcyB1c2VkIGZvciByZXNldCB3ZQ0Kb3ZlcnJpZGUgaXQg
dG8gR1BJT19BQ1RJVkVfTE9XLg0KDQpTaWduZWQtb2ZmLWJ5OiBNaWNoYWwgVm9rw6HEjSA8bWlj
aGFsLnZva2FjQHlzb2Z0LmNvbT4NCi0tLQ0KIGFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMg
fCA0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDEgZmls
ZSBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspDQoNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNo
LW14cy9tYWNoLW14cy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYw0KaW5kZXggMWM2
MDYyZC4uMjNjMjYwYyAxMDA2NDQNCi0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMN
CisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmMNCkBAIC0yMSw2ICsyMSw3IEBADQog
I2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPg0KICNpbmNsdWRlIDxsaW51eC9taWNyZWxfcGh5Lmg+
DQogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bp
by5oPg0KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0KICNpbmNsdWRlIDxsaW51eC9w
aHkuaD4NCiAjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPg0KQEAgLTI2OCw5ICsy
NjksNTMgQEAgc3RhdGljIHZvaWQgX19pbml0IGFweDRkZXZraXRfaW5pdCh2b2lkKQ0KIAkJCQkJ
ICAgYXB4NGRldmtpdF9waHlfZml4dXApOw0KIH0NCiANCisjZGVmaW5lIE9MRURfUkVTRVRfR1BJ
T19MRU4JMw0KKyNkZWZpbmUgT0xFRF9SRVNFVF9HUElPX1NJWkUJKE9MRURfUkVTRVRfR1BJT19M
RU4gKiBzaXplb2YodTMyKSkNCisNCitzdGF0aWMgdm9pZCBfX2luaXQgY3J5c3RhbGZvbnR6X29s
ZWRfcmVzZXRfZml4dXAodm9pZCkNCit7DQorCXN0cnVjdCBwcm9wZXJ0eSAqbmV3Z3BpbzsNCisJ
c3RydWN0IGRldmljZV9ub2RlICpucDsNCisJdTMyICpncGlvc3BlYzsNCisJaW50IGksIHJldDsN
CisNCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAic29sb21vbixz
c2QxMzA2ZmItaTJjIik7DQorCWlmICghbnApDQorCQlyZXR1cm47DQorDQorCW5ld2dwaW8gPSBr
emFsbG9jKHNpemVvZigqbmV3Z3BpbykgKyBPTEVEX1JFU0VUX0dQSU9fU0laRSwgR0ZQX0tFUk5F
TCk7DQorCWlmICghbmV3Z3BpbykNCisJCXJldHVybjsNCisNCisJbmV3Z3Bpby0+dmFsdWUgPSBu
ZXdncGlvICsgMTsNCisJbmV3Z3Bpby0+bGVuZ3RoID0gT0xFRF9SRVNFVF9HUElPX1NJWkU7DQor
CW5ld2dwaW8tPm5hbWUgPSBrc3RyZHVwKCJyZXNldC1ncGlvcyIsIEdGUF9LRVJORUwpOw0KKwlp
ZiAoIW5ld2dwaW8tPm5hbWUpIHsNCisJCWtmcmVlKG5ld2dwaW8pOw0KKwkJcmV0dXJuOw0KKwl9
DQorDQorCWdwaW9zcGVjID0gbmV3Z3Bpby0+dmFsdWU7DQorCWZvciAoaSA9IDA7IGkgPCBPTEVE
X1JFU0VUX0dQSU9fTEVOOyBpKyspIHsNCisJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2lu
ZGV4KG5wLCAicmVzZXQtZ3Bpb3MiLCBpLA0KKwkJCQkJCSAmZ3Bpb3NwZWNbaV0pOw0KKwkJaWYg
KHJldCkgew0KKwkJCWtmcmVlKG5ld2dwaW8pOw0KKwkJCXJldHVybjsNCisJCX0NCisJfQ0KKw0K
KwlpZiAoIShncGlvc3BlY1syXSAmIE9GX0dQSU9fQUNUSVZFX0xPVykpIHsNCisJCWdwaW9zcGVj
WzJdIHw9IE9GX0dQSU9fQUNUSVZFX0xPVzsNCisJCWNwdV90b19iZTMyX2FycmF5KGdwaW9zcGVj
LCBncGlvc3BlYywgT0xFRF9SRVNFVF9HUElPX0xFTik7DQorCQlvZl91cGRhdGVfcHJvcGVydHko
bnAsIG5ld2dwaW8pOw0KKwl9DQorfQ0KKw0KIHN0YXRpYyB2b2lkIF9faW5pdCBjcnlzdGFsZm9u
dHpfaW5pdCh2b2lkKQ0KIHsNCiAJdXBkYXRlX2ZlY19tYWNfcHJvcChPVUlfQ1JZU1RBTEZPTlRa
KTsNCisJY3J5c3RhbGZvbnR6X29sZWRfcmVzZXRfZml4dXAoKTsNCiB9DQogDQogc3RhdGljIHZv
aWQgX19pbml0IGR1Y2tiaWxsX2luaXQodm9pZCkNCi0tIA0KMi4xLjQNCg0K
On Tue, Dec 04, 2018 at 03:03:40PM +0000, Vokáč Michal wrote: quoted hunk There was a bug in reset signal generation in ssd1307fb OLED driver.
The display needs an active-low reset signal but the driver produced
the correct sequence only if the GPIO used for reset was specified as
GPIO_ACTIVE_HIGH.
Now as the OLED driver is fixed it is also necessarry to implement
a fixup for all current users of the old DT ABI. There is only one
in-tree user and that is the Crystalfontz CFA-10036 board. In case
this board is booting and GPIO_ACTIVE_HIGH is used for reset we
override it to GPIO_ACTIVE_LOW.
Signed-off-by: Michal Vokáč <redacted>
---
arch/arm/mach-mxs/mach-mxs.c | 45 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c
index 1c6062d..23c260c 100644
--- a/arch/arm/mach-mxs/mach-mxs.c
+++ b/arch/arm/mach-mxs/mach-mxs.c @@ -21,6 +21,7 @@
#include <linux/reboot.h>
#include <linux/micrel_phy.h>
#include <linux/of_address.h>
+ #include <linux/of_gpio.h>
#include <linux/of_platform.h>
#include <linux/phy.h>
#include <linux/pinctrl/consumer.h> @@ -268,9 +269,53 @@ static void __init apx4devkit_init(void)
apx4devkit_phy_fixup );
}
+ #define OLED_RESET_GPIO_LEN 3
+ #define OLED_RESET_GPIO_SIZE (OLED_RESET_GPIO_LEN * sizeof(u32))
+
+ static void __init crystalfontz_oled_reset_fixup ( void )
+ {
+ struct property * newgpio ;
+ struct device_node * np ;
+ u32 * gpiospec ;
+ int i , ret ;
+
+ np = of_find_compatible_node ( NULL , NULL , "solomon,ssd1306fb-i2c" );
+ if ( ! np )
+ return ;
+
+ newgpio = kzalloc ( sizeof ( * newgpio ) + OLED_RESET_GPIO_SIZE , GFP_KERNEL );
+ if ( ! newgpio )
+ return ;
+
+ newgpio -> value = newgpio + 1 ;
+ newgpio -> length = OLED_RESET_GPIO_SIZE ;
+ newgpio -> name = kstrdup ( "reset-gpios" , GFP_KERNEL );
+ if ( ! newgpio -> name ) {
+ kfree ( newgpio );
+ return ;
+ }
+
+ gpiospec = newgpio -> value ;
+ for ( i = 0 ; i < OLED_RESET_GPIO_LEN ; i ++ ) {
+ ret = of_property_read_u32_index ( np , "reset-gpios" , i ,
+ & gpiospec [ i ]);
Don't we have a helper to read the whole array?
Otherwise, for the series:
Reviewed-by: Rob Herring <robh@kernel.org>
+ if (ret) {
+ kfree(newgpio);
+ return;
+ }
+ }
+
+ if (!(gpiospec[2] & OF_GPIO_ACTIVE_LOW)) {
+ gpiospec[2] |= OF_GPIO_ACTIVE_LOW;
+ cpu_to_be32_array(gpiospec, gpiospec, OLED_RESET_GPIO_LEN);
+ of_update_property(np, newgpio);
+ }
+}
+
static void __init crystalfontz_init(void)
{
update_fec_mac_prop(OUI_CRYSTALFONTZ);
+ crystalfontz_oled_reset_fixup();
}
static void __init duckbill_init(void)
--
2.1.4
T24gMTkuMTIuMjAxOCAxODoyOSwgUm9iIEhlcnJpbmcgd3JvdGU6DQo+IE9uIFR1ZSwgRGVjIDA0
LCAyMDE4IGF0IDAzOjAzOjQwUE0gKzAwMDAsIFZva8OhxI0gTWljaGFsIHdyb3RlOg0KPj4gVGhl
cmUgd2FzIGEgYnVnIGluIHJlc2V0IHNpZ25hbCBnZW5lcmF0aW9uIGluIHNzZDEzMDdmYiBPTEVE
IGRyaXZlci4NCj4+IFRoZSBkaXNwbGF5IG5lZWRzIGFuIGFjdGl2ZS1sb3cgcmVzZXQgc2lnbmFs
IGJ1dCB0aGUgZHJpdmVyIHByb2R1Y2VkDQo+PiB0aGUgY29ycmVjdCBzZXF1ZW5jZSBvbmx5IGlm
IHRoZSBHUElPIHVzZWQgZm9yIHJlc2V0IHdhcyBzcGVjaWZpZWQgYXMNCj4+IEdQSU9fQUNUSVZF
X0hJR0guDQo+Pg0KPj4gTm93IGFzIHRoZSBPTEVEIGRyaXZlciBpcyBmaXhlZCBpdCBpcyBhbHNv
IG5lY2Vzc2FycnkgdG8gaW1wbGVtZW50DQo+PiBhIGZpeHVwIGZvciBhbGwgY3VycmVudCB1c2Vy
cyBvZiB0aGUgb2xkIERUIEFCSS4gVGhlcmUgaXMgb25seSBvbmUNCj4+IGluLXRyZWUgdXNlciBh
bmQgdGhhdCBpcyB0aGUgQ3J5c3RhbGZvbnR6IENGQS0xMDAzNiBib2FyZC4gSW4gY2FzZQ0KPj4g
dGhpcyBib2FyZCBpcyBib290aW5nIGFuZCBHUElPX0FDVElWRV9ISUdIIGlzIHVzZWQgZm9yIHJl
c2V0IHdlDQo+PiBvdmVycmlkZSBpdCB0byBHUElPX0FDVElWRV9MT1cuDQo+Pg0KPj4gU2lnbmVk
LW9mZi1ieTogTWljaGFsIFZva8OhxI0gPG1pY2hhbC52b2thY0B5c29mdC5jb20+DQo+PiAtLS0N
Cj4+ICAgYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYyB8IDQ1ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+PiAgIDEgZmlsZSBjaGFuZ2VkLCA0NSBpbnNl
cnRpb25zKCspDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhz
LmMgYi9hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jDQo+PiBpbmRleCAxYzYwNjJkLi4yM2My
NjBjIDEwMDY0NA0KPj4gLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYw0KPj4gKysr
IGIvYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYw0KPj4gQEAgLTIxLDYgKzIxLDcgQEANCj4+
ICAgI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPg0KPj4gICAjaW5jbHVkZSA8bGludXgvbWljcmVs
X3BoeS5oPg0KPj4gICAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KPj4gKyNpbmNsdWRl
IDxsaW51eC9vZl9ncGlvLmg+DQo+PiAgICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0K
Pj4gICAjaW5jbHVkZSA8bGludXgvcGh5Lmg+DQo+PiAgICNpbmNsdWRlIDxsaW51eC9waW5jdHJs
L2NvbnN1bWVyLmg+DQo+PiBAQCAtMjY4LDkgKzI2OSw1MyBAQCBzdGF0aWMgdm9pZCBfX2luaXQg
YXB4NGRldmtpdF9pbml0KHZvaWQpDQo+PiAgIAkJCQkJICAgYXB4NGRldmtpdF9waHlfZml4dXAp
Ow0KPj4gICB9DQo+PiAgIA0KPj4gKyNkZWZpbmUgT0xFRF9SRVNFVF9HUElPX0xFTgkzDQo+PiAr
I2RlZmluZSBPTEVEX1JFU0VUX0dQSU9fU0laRQkoT0xFRF9SRVNFVF9HUElPX0xFTiAqIHNpemVv
Zih1MzIpKQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIF9faW5pdCBjcnlzdGFsZm9udHpfb2xlZF9y
ZXNldF9maXh1cCh2b2lkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHByb3BlcnR5ICpuZXdncGlvOw0K
Pj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOw0KPj4gKwl1MzIgKmdwaW9zcGVjOw0KPj4gKwlp
bnQgaSwgcmV0Ow0KPj4gKw0KPj4gKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEws
IE5VTEwsICJzb2xvbW9uLHNzZDEzMDZmYi1pMmMiKTsNCj4+ICsJaWYgKCFucCkNCj4+ICsJCXJl
dHVybjsNCj4+ICsNCj4+ICsJbmV3Z3BpbyA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdncGlvKSArIE9M
RURfUkVTRVRfR1BJT19TSVpFLCBHRlBfS0VSTkVMKTsNCj4+ICsJaWYgKCFuZXdncGlvKQ0KPj4g
KwkJcmV0dXJuOw0KPj4gKw0KPj4gKwluZXdncGlvLT52YWx1ZSA9IG5ld2dwaW8gKyAxOw0KPj4g
KwluZXdncGlvLT5sZW5ndGggPSBPTEVEX1JFU0VUX0dQSU9fU0laRTsNCj4+ICsJbmV3Z3Bpby0+
bmFtZSA9IGtzdHJkdXAoInJlc2V0LWdwaW9zIiwgR0ZQX0tFUk5FTCk7DQo+PiArCWlmICghbmV3
Z3Bpby0+bmFtZSkgew0KPj4gKwkJa2ZyZWUobmV3Z3Bpbyk7DQo+PiArCQlyZXR1cm47DQo+PiAr
CX0NCj4+ICsNCj4+ICsJZ3Bpb3NwZWMgPSBuZXdncGlvLT52YWx1ZTsNCj4+ICsJZm9yIChpID0g
MDsgaSA8IE9MRURfUkVTRVRfR1BJT19MRU47IGkrKykgew0KPj4gKwkJcmV0ID0gb2ZfcHJvcGVy
dHlfcmVhZF91MzJfaW5kZXgobnAsICJyZXNldC1ncGlvcyIsIGksDQo+PiArCQkJCQkJICZncGlv
c3BlY1tpXSk7DQo+IA0KPiBEb24ndCB3ZSBoYXZlIGEgaGVscGVyIHRvIHJlYWQgdGhlIHdob2xl
IGFycmF5Pw0KDQpIaSBSb2IsDQp5ZXAsIEkgd2lsbCBmaXggdGhpcy4NClRoYW5rIHlvdSBmb3Ig
eW91ciByZXZpZXcgYW5kIGZvciBwb2ludGluZyBtZSB0byB0aGUgcmlnaHQgc29sdXRpb24uDQoN
Ck1pY2hhbA0KDQo+IA0KPiBPdGhlcndpc2UsIGZvciB0aGUgc2VyaWVzOg0KPiANCj4gUmV2aWV3
ZWQtYnk6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+DQo+IA0KPj4gKwkJaWYgKHJldCkg
ew0KPj4gKwkJCWtmcmVlKG5ld2dwaW8pOw0KPj4gKwkJCXJldHVybjsNCj4+ICsJCX0NCj4+ICsJ
fQ0KPj4gKw0KPj4gKwlpZiAoIShncGlvc3BlY1syXSAmIE9GX0dQSU9fQUNUSVZFX0xPVykpIHsN
Cj4+ICsJCWdwaW9zcGVjWzJdIHw9IE9GX0dQSU9fQUNUSVZFX0xPVzsNCj4+ICsJCWNwdV90b19i
ZTMyX2FycmF5KGdwaW9zcGVjLCBncGlvc3BlYywgT0xFRF9SRVNFVF9HUElPX0xFTik7DQo+PiAr
CQlvZl91cGRhdGVfcHJvcGVydHkobnAsIG5ld2dwaW8pOw0KPj4gKwl9DQo+PiArfQ0KPj4gKw0K
Pj4gICBzdGF0aWMgdm9pZCBfX2luaXQgY3J5c3RhbGZvbnR6X2luaXQodm9pZCkNCj4+ICAgew0K
Pj4gICAJdXBkYXRlX2ZlY19tYWNfcHJvcChPVUlfQ1JZU1RBTEZPTlRaKTsNCj4+ICsJY3J5c3Rh
bGZvbnR6X29sZWRfcmVzZXRfZml4dXAoKTsNCj4+ICAgfQ0KPj4gICANCj4+ICAgc3RhdGljIHZv
aWQgX19pbml0IGR1Y2tiaWxsX2luaXQodm9pZCkNCj4+IC0tIA0KPj4gMi4xLjQNCj4+DQoNCg=