From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chanwoo Choi Subject: Re: [PATCH 4/7] pinctrl: samsung: Add GPFx support of Exynos5433 Date: Fri, 19 Aug 2016 18:07:04 +0900 Message-ID: <57B6CC38.9090403@samsung.com> References: <1471328843-26653-1-git-send-email-cw00.choi@samsung.com> <1471328843-26653-5-git-send-email-cw00.choi@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <1471328843-26653-5-git-send-email-cw00.choi@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Tomasz Figa Cc: mark.rutland@arm.com, k.kozlowski@samsung.com, chanwoo@kernel.org, catalin.marinas@arm.com, Linus Walleij , will.deacon@arm.com, a.hajda@samsung.com, s.nawrocki@samsung.com, beomho.seo@samsung.com, m.szyprowski@samsung.com, jonghwa3.lee@samsung.com, linux-samsung-soc@vger.kernel.org, jy0922.shim@samsung.com, krzk@kernel.org, jh80.chung@samsung.com, kgene@kernel.org, devicetree@vger.kernel.org, inki.dae@samsung.com, linux-gpio@vger.kernel.org, robh+dt@kernel.org, ingi2.kim@samsung.com, linux-arm-kernel@lists.infradead.org, jaewon02.kim@samsung.com, sw0312.kim@samsung.com, linux-kernel@vger.kernel.org, human.hwang@samsung.com, ideal.song@samsung.com List-Id: linux-gpio@vger.kernel.org SGkgVG9tYXN6IEZpZ2EsCgpEdWUgdG8gd3Jvbmcgc2V0dGluZyBvZiBlbWFpbCBjbGllbnQsCnlv dXIgcmVwbHkgaXMgZGVsZXRlZCBvbiBteSBlbWFpbCBjbGllbnQgYXQgdGhlIGNvbXBhbnkuCkkn bSBzbyBzb3JyeS4gU28sIEkgYWRkIHlvdXIgY29tbWVudCBvbiBiZWxvdyBhbmQgdGhlbgpJIHJl cGx5IHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4KCk9uIDIwMTbrhYQgMDjsm5QgMTbsnbwgMTU6 MjcsIENoYW53b28gQ2hvaSB3cm90ZToKPiBGcm9tOiBKb29ueW91bmcgU2hpbSA8ankwOTIyLnNo aW1Ac2Ftc3VuZy5jb20+Cj4gCj4gVGhpcyBwYXRjaCBhZGQgdGhlIHN1cHBvcnQgb2YgR1BGeCBw aW4gb2YgRXh5bm9zNTQzMyBTb0MuIEV4eW5vczU0MzMgaGFzCj4gZGlmZmVyZW50IG1lbW9yeSBt YXAgb2YgR1BGeCBmcm9tIHByZXZpb3VzIEV4eW5vcyBTb0MuIEV4eW5vcyBHUElPIGhhcwo+IGZv bGxvd2luZyByZWdpc3RlciB0byBjb250cm9sIGdwaW8gZnVuY2l0b24uIFVzdWFsbHksIGFsbCBy ZWdpc3RlcnMgb2YgR1BJTwo+IGFyZSBpbmNsdWRlZCBpbiBzYW1lIGRvbWFpbi4KPiAtIENPTiAv IERBVCAvIFBVRCAvIERSViAvIENPTlBETiAvIFBVRFBETgo+IC0gRUlOVF9DT04vIEVJTlRfRkxU Q09OMCwgRUlOVF9GTFRDT04xIC8gRUlOVF9NQVNLIC8gRUlOVF9QRU5ECj4gCj4gQnV0LCBHUEZ4 IGFyZSBpbmNsdWRlZCBpbiB0d28gZG9tYWluIGFzIGZvbGxvd2luZy4gU28sIHRoaXMgcGF0Y2gg c3VwcG9ydHMKPiB0aGUgR1BGeCBwaW4gd2hpY2ggaGFuZGxlIHRoZSBvbiBzZXBhcmF0ZSB0d28g ZG9tYWlucy4KPiAtIEFMSVZFIGRvbWFpbiA6IENPTiAvIERBVCAvIFBVRCAvIERSViAvIENPTlBE TiAvIFBVRFBETgo+IC0gSU1FTSBkb21haW4gIDogRUlOVF9DT04vIEVJTlRfRkxUQ09OMCwgRUlO VF9GTFRDT04xIC8gRUlOVF9NQVNLIC8gRUlOVF9QRU5ECgotLS0tLS0tLS0KSSdtIGFmcmFpZCBJ IGRvbid0IGdldCBhbnl0aGluZyBmcm9tIHRoZSBkZXNjcmlwdGlvbiBhYm92ZS4gQ291bGQgeW91 CmRlc2NyaWJlIHRoZSBsYXlvdXQgb2YgcmVnaXN0ZXJzIGluIG1lbW9yeSBtYXAgYW5kIElSUSBy b3V0aW5nIG9mIHRoZQpwaW5zPwoKQmVzdCByZWdhcmRzLApUb21hc3oKLS0tLS0tLS0tLQoKT24g dGhpcyBwYXRjaCwgSSdtIHNvcnJ5IHRoYXQgSSBkZXNjcmliZWQgdGhlIHdyb25nIGluZm9ybWF0 aW9uIGFib3V0IEdGUDF+NS4KSSBleHBsYWluZWQgdGhlIG1lbW9yeSBtYXAgb2YgR1BGWzEtNV0g dGhlIG9wcG9zaXRlbHkuIEZvbGxvd2luZyBjb21wb3NpdGlvbnMKYXJlIGNvcnJlY3QuCi0gQUxJ VkUgOiBXRUlOVF9GTFRDT054LCBXRUlOVF9NQVNLLCBXRUlOR19QRU5ECi0gSU1FTSA6IENPTiwg REFULCBQVUQsIERSViwgQ09OUEROLCBQVURQRE4KQW5kLCBJIGFkZCB0aGUgbWVtb3J5IG1hcCBm b3IgR1BGWzF+NV1bMl0gYW5kIHRoZSB3YWtldXAgaW50ZXJydXB0IGluZm9ybWF0aW9uWzFdLgoK WzFdIE1lbW9yeSBtYXAgZm9yIEdQRjF+NQpbQUxJVkVdCldFSU5UX0dQQTBfQ09OICAgICAgICAg OiAweDEwNThfMDAwMCAoQUxJVkUpICsgKDB4MDcwMCA9IDB4MDcwMCArIDB4MCkKV0VJTlRfR1BB MV9DT04gICAgICAgICA6IDB4MTA1OF8wMDAwIChBTElWRSkgKyAoMHgwNzA0ID0gMHgwNzAwICsg MHg0KQpXRUlOVF9HUEEyX0NPTiAgICAgICAgIDogMHgxMDU4XzAwMDAgKEFMSVZFKSArICgweDA3 MDggPSAweDA3MDAgKyAweDgpCldFSU5UX0dQQTNfQ09OICAgICAgICAgOiAweDEwNThfMDAwMCAo QUxJVkUpICsgKDB4MDcwQyA9IDB4MDcwMCArIDB4QykKCldFSU5UX0dQRjFfQ09OICAgICAgICAg OiAweDEwNThfMDAwMCAoQUxJVkUpICsgKDB4MTcwNCA9IDB4MDcwMCArIDB4MTAwNCkKV0VJTlRf R1BGMl9DT04gICAgICAgICA6IDB4MTA1OF8wMDAwIChBTElWRSkgKyAoMHgxNzA4ID0gMHgwNzAw ICsgMHgxMDA4KQpXRUlOVF9HUEYzX0NPTiAgICAgICAgIDogMHgxMDU4XzAwMDAgKEFMSVZFKSAr ICgweDE3MEMgPSAweDA3MDAgKyAweDEwMEMpCldFSU5UX0dQRjRfQ09OICAgICAgICAgOiAweDEw NThfMDAwMCAoQUxJVkUpICsgKDB4MTcxMCA9IDB4MDcwMCArIDB4MTAwMTApCldFSU5UX0dQRjVf Q09OICAgICAgICAgOiAweDEwNThfMDAwMCAoQUxJVkUpICsgKDB4MTcxNCA9IDB4MDcwMCArIDB4 MTAxNCkKCldFSU5UX0dQRlt4XV9NQVNLICAgICA6IDB4MTA1OF8wMDAwIChBTElWRSkgKyAoMHgx OTAwICsgKHggKiA0KSkKV0VJTlRfR1BGW3hdX1BFTkQgICAgIDogMHgxMDU4XzAwMDAgKEFMSVZF KSArICgweDFBMDAgKyAoeCAqIDQpKQooeCA6IDEgfiA1KQoKW0lNRU1dCkdQRjFfQ09OICAgICAg ICAgIDogMFgxMTA5XzAwMDAgKElNRU0pICsgMHgwMDIwCkdQRjFfREFUICAgICAgICAgICA6IDBY MTEwOV8wMDAwIChJTUVNKSArIDB4MDAyNApHUEYxX1BVRCAgICAgICAgICA6IDBYMTEwOV8wMDAw IChJTUVNKSArIDB4MDAyOApHUEYxX0RSViAgICAgICAgICA6IDBYMTEwOV8wMDAwIChJTUVNKSAr IDB4MDAyQwpHUEYxX0NPTlBETiAgOiAwWDExMDlfMDAwMCAoSU1FTSkgKyAweDAwMzAKR1BGMV9Q VURQRE4gIDogMFgxMTA5XzAwMDAgKElNRU0pICsgMHgwMDM0CgpHUEYyX0NPTiAgICAgICAgIDog MFgxMTA5XzAwMDAgKElNRU0pICsgMHgwMDQwCi4uLgpHUEYzX0NPTiAgICAgICAgIDogMFgxMTA5 XzAwMDAgKElNRU0pICsgMHgwMDYwCi4uLgpHUEY0X0NPTiAgICAgICAgIDogMFgxMTA5XzAwMDAg KElNRU0pICsgMHgwMDgwCi4uLgpHUEY1X0NPTiAgICAgICAgIDogMFgxMTA5XzAwMDAgKElNRU0p ICsgMHgwMEEwCgpbMl0gSW50ZXJycHV0IHBpbiBpbmZvcm1hdGlvbgotIHRoZSB0b3RhbCBudW1i ZXIgb2Ygd2FrZXVwIGV4dGVybmFsIElSUSBpcyA2NC4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpkb21haW58IGdwaW8gOiBuciAgfCB3YWtldXAgaW50ZXJycHV0IG5hbWUgICB8IFNQSSBudW1i ZXIgICAgICAgfAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpBTElWRSB8IEdQQTAgOiA4IHwg SU5UUkVRX19FSU5UWzB+N10gICAgIHwgU1BJWzBdIH4gU1BJWzddICAgfApBTElWRSB8IEdQQTEg OiA4IHwgSU5UUkVRX19FSU5UWzh+MTVdICAgfCBTUElbOF0gfiBTUElbMTVdIHwKQUxJVkUgfCBH UEEyIDogOCB8IElOVFJFUV9fRUlOVF8xNl82MyB8IFNQSVsxNl0gICAgICAgICAgICAgICB8CkFM SVZFIHwgR1BBMyA6IDggfCBJTlRSRVFfX0VJTlRfMTZfNjMgfCBTUElbMTZdICAgICAgICAgICAg ICAgfAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpBTElWRSB8IEdQRjEgOiA4IHwgSU5UUkVR X19FSU5UXzE2XzYzIHwgU1BJWzE2XSAgICAgICAgICAgICAgIHwKQUxJVkUgfCBHUEYyIDogNCB8 IElOVFJFUV9fRUlOVF8xNl82MyB8IFNQSVsxNl0gICAgICAgICAgICAgICB8CkFMSVZFIHwgR1BG MyA6IDQgfCBJTlRSRVFfX0VJTlRfMTZfNjMgfCBTUElbMTZdICAgICAgICAgICAgICAgfApBTElW RSB8IEdQRjQgOiA4IHwgSU5UUkVRX19FSU5UXzE2XzYzIHwgU1BJWzE2XSAgICAgICAgICAgICAg IHwKQUxJVkUgfCBHUEY1IDogOCB8IElOVFJFUV9fRUlOVF8xNl82MyB8IFNQSVsxNl0gICAgICAg ICAgICAgICB8Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJbiBzdW1tYXJ5LApJZiBncGZb MS01XSBoYW5kbGUgdGhlIENPTi9EQVQvUFVEL0RSViByZWdpc3RlciwKdGhlIGRyaXZlciB3aWxs IHVzZSB0aGUgZHJ2ZGF0YS0+ZXh0X2Jhc2UgKElNRU0gYmFzZSBhZGRyZXNzKQppbnN0ZWFkIG9m IGRydmRhdGEtPnZpcnRfYmFzZShBTElWRSBiYXNlIGFkZHJlc3MpCmJlY2F1c2UgdGhlIENPTi9E QVQvUFVEL0RSViByZWdpc3RlciBvZiBncGZbMS01XSBhcmUgaW5jbHVkZWQKaW4gdGhlIElNRU0g ZG9tYWluLgoKSWYgZ3BmWzEtNV0gaGFuZGxlIHRoZSBXRUlOVF8qIHJlZ2lzdGVyLAp0aGUgZHJp dmVyIHdpbGwgdXNlIHRoZSBkcnZkYXRhLT52aXJ0X2Jhc2UoQUxJVkUgYmFzZSBhZGRyZXNzKQpi ZWNhdXNlIHRoZSBXRUlOVF8qIHJlZ2lzdGVycyBvZiBncGZbMS01XSBhcmUgaW5jbHVkZWQgaW4g dGhlIEFMSVZFIGRvbWFpbi4KCkJlc3QgUmVnYXJkcywKQ2hhbndvbyBDaG9pCgoKPiAKPiBDYzog TGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgo+IENjOiBSb2IgSGVycmlu ZyA8cm9iaCtkdEBrZXJuZWwub3JnPgo+IENjOiBNYXJrIFJ1dGxhbmQgPG1hcmsucnV0bGFuZEBh cm0uY29tPgo+IENjOiBUb21hc3ogRmlnYSA8dG9tYXN6LmZpZ2FAZ21haWwuY29tPgo+IENjOiBL cnp5c3p0b2YgS296bG93c2tpIDxrLmtvemxvd3NraUBzYW1zdW5nLmNvbT4KPiBDYzogU3lsd2Vz dGVyIE5hd3JvY2tpIDxzLm5hd3JvY2tpQHNhbXN1bmcuY29tPgo+IENjOiBLdWtqaW4gS2ltIDxr Z2VuZUBrZXJuZWwub3JnPgo+IENjOiBsaW51eC1ncGlvQHZnZXIua2VybmVsLm9yZwo+IFNpZ25l ZC1vZmYtYnk6IEpvb255b3VuZyBTaGltIDxqeTA5MjIuc2hpbUBzYW1zdW5nLmNvbT4KPiBTaWdu ZWQtb2ZmLWJ5OiBDaGFud29vIENob2kgPGN3MDAuY2hvaUBzYW1zdW5nLmNvbT4KPiAtLS0KPiAg Li4uL2JpbmRpbmdzL3BpbmN0cmwvc2Ftc3VuZy1waW5jdHJsLnR4dCAgICAgICAgICAgfCAgMSAr Cj4gIGRyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtZXh5bm9zLmMgICAgICAgICAgIHwg IDUgKysrCj4gIGRyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtZXh5bm9zLmggICAgICAg ICAgIHwgMTEgKysrKysrCj4gIGRyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtc2Ftc3Vu Zy5jICAgICAgICAgIHwgNDMgKysrKysrKysrKysrKysrKysrLS0tLQo+ICBkcml2ZXJzL3BpbmN0 cmwvc2Ftc3VuZy9waW5jdHJsLXNhbXN1bmcuaCAgICAgICAgICB8ICA1ICsrKwo+ICA1IGZpbGVz IGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdp dCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3NhbXN1bmctcGlu Y3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9zYW1z dW5nLXBpbmN0cmwudHh0Cj4gaW5kZXggNmRiMTZiOTA4NzNhLi44MDdmYmExZjgyOWYgMTAwNjQ0 Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvc2Ftc3Vu Zy1waW5jdHJsLnR4dAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9w aW5jdHJsL3NhbXN1bmctcGluY3RybC50eHQKPiBAQCAtMTksNiArMTksNyBAQCBSZXF1aXJlZCBQ cm9wZXJ0aWVzOgo+ICAgIC0gInNhbXN1bmcsZXh5bm9zNTI2MC1waW5jdHJsIjogZm9yIEV4eW5v czUyNjAgY29tcGF0aWJsZSBwaW4tY29udHJvbGxlci4KPiAgICAtICJzYW1zdW5nLGV4eW5vczU0 MTAtcGluY3RybCI6IGZvciBFeHlub3M1NDEwIGNvbXBhdGlibGUgcGluLWNvbnRyb2xsZXIuCj4g ICAgLSAic2Ftc3VuZyxleHlub3M1NDIwLXBpbmN0cmwiOiBmb3IgRXh5bm9zNTQyMCBjb21wYXRp YmxlIHBpbi1jb250cm9sbGVyLgo+ICsgIC0gInNhbXN1bmcsZXh5bm9zNTQzMy1waW5jdHJsIjog Zm9yIEV4eW5vczU0MzMgY29tcGF0aWJsZSBwaW4tY29udHJvbGxlci4KPiAgICAtICJzYW1zdW5n LGV4eW5vczctcGluY3RybCI6IGZvciBFeHlub3M3IGNvbXBhdGlibGUgcGluLWNvbnRyb2xsZXIu Cj4gIAo+ICAtIHJlZzogQmFzZSBhZGRyZXNzIG9mIHRoZSBwaW4gY29udHJvbGxlciBoYXJkd2Fy ZSBtb2R1bGUgYW5kIGxlbmd0aCBvZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2Ft c3VuZy9waW5jdHJsLWV4eW5vcy5jIGIvZHJpdmVycy9waW5jdHJsL3NhbXN1bmcvcGluY3RybC1l eHlub3MuYwo+IGluZGV4IDA1MWI1YmY3MDFhOC4uNGY5NTk4M2UwY2RkIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtZXh5bm9zLmMKPiArKysgYi9kcml2ZXJz L3BpbmN0cmwvc2Ftc3VuZy9waW5jdHJsLWV4eW5vcy5jCj4gQEAgLTEzNTAsNiArMTM1MCwxMSBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IHNhbXN1bmdfcGluX2JhbmtfZGF0YSBleHlub3M1NDMzX3Bp bl9iYW5rczBbXSA9IHsKPiAgCUVYWU5PU19QSU5fQkFOS19FSU5UVyg4LCAweDAyMCwgImdwYTEi LCAweDA0KSwKPiAgCUVYWU5PU19QSU5fQkFOS19FSU5UVyg4LCAweDA0MCwgImdwYTIiLCAweDA4 KSwKPiAgCUVYWU5PU19QSU5fQkFOS19FSU5UVyg4LCAweDA2MCwgImdwYTMiLCAweDBjKSwKPiAr CUVYWU5PU19QSU5fQkFOS19FSU5UV19FWFQoOCwgMHgwMjAsICJncGYxIiwgMHgxMDA0KSwKPiAr CUVYWU5PU19QSU5fQkFOS19FSU5UV19FWFQoNCwgMHgwNDAsICJncGYyIiwgMHgxMDA4KSwKPiAr CUVYWU5PU19QSU5fQkFOS19FSU5UV19FWFQoNCwgMHgwNjAsICJncGYzIiwgMHgxMDBjKSwKPiAr CUVYWU5PU19QSU5fQkFOS19FSU5UV19FWFQoOCwgMHgwODAsICJncGY0IiwgMHgxMDEwKSwKPiAr CUVYWU5PU19QSU5fQkFOS19FSU5UV19FWFQoOCwgMHgwYTAsICJncGY1IiwgMHgxMDE0KSwKPiAg fTsKPiAgCj4gIC8qIHBpbiBiYW5rcyBvZiBleHlub3M1NDMzIHBpbi1jb250cm9sbGVyIC0gQVVE ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtZXh5bm9z LmggYi9kcml2ZXJzL3BpbmN0cmwvc2Ftc3VuZy9waW5jdHJsLWV4eW5vcy5oCj4gaW5kZXggMGYw ZjdjZWRiMmRjLi40YjczN2I2YzQzNGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9waW5jdHJsL3Nh bXN1bmcvcGluY3RybC1leHlub3MuaAo+ICsrKyBiL2RyaXZlcnMvcGluY3RybC9zYW1zdW5nL3Bp bmN0cmwtZXh5bm9zLmgKPiBAQCAtNzksNiArNzksMTcgQEAKPiAgCQkubmFtZQkJPSBpZAkJCVwK PiAgCX0KPiAgCj4gKyNkZWZpbmUgRVhZTk9TX1BJTl9CQU5LX0VJTlRXX0VYVChwaW5zLCByZWcs IGlkLCBvZmZzKQlcCj4gKwl7CQkJCQkJXAo+ICsJCS50eXBlCQk9ICZiYW5rX3R5cGVfb2ZmLAlc Cj4gKwkJLnBjdGxfb2Zmc2V0CT0gcmVnLAkJCVwKPiArCQkubnJfcGlucwk9IHBpbnMsCQkJXAo+ ICsJCS5laW50X3R5cGUJPSBFSU5UX1RZUEVfV0tVUCwJXAo+ICsJCS5laW50X29mZnNldAk9IG9m ZnMsCQkJXAo+ICsJCS5laW50X2V4dAk9IHRydWUsCQkJXAo+ICsJCS5uYW1lCQk9IGlkCQkJXAo+ ICsJfQo+ICsKPiAgLyoqCj4gICAqIHN0cnVjdCBleHlub3Nfd2VpbnRfZGF0YTogaXJxIHNwZWNp ZmljIGRhdGEgZm9yIGFsbCB0aGUgd2FrZXVwIGludGVycnVwdHMKPiAgICogZ2VuZXJhdGVkIGJ5 IHRoZSBleHRlcm5hbCB3YWtldXAgaW50ZXJydXB0IGNvbnRyb2xsZXIuCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtc2Ftc3VuZy5jIGIvZHJpdmVycy9waW5j dHJsL3NhbXN1bmcvcGluY3RybC1zYW1zdW5nLmMKPiBpbmRleCA1MTNmZTZiMjMyNDguLjU3ZTIy MDg1YzJkYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BpbmN0cmwvc2Ftc3VuZy9waW5jdHJsLXNh bXN1bmcuYwo+ICsrKyBiL2RyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtc2Ftc3VuZy5j Cj4gQEAgLTMzOCw2ICszMzgsNyBAQCBzdGF0aWMgdm9pZCBwaW5fdG9fcmVnX2Jhbmsoc3RydWN0 IHNhbXN1bmdfcGluY3RybF9kcnZfZGF0YSAqZHJ2ZGF0YSwKPiAgCQkJc3RydWN0IHNhbXN1bmdf cGluX2JhbmsgKipiYW5rKQo+ICB7Cj4gIAlzdHJ1Y3Qgc2Ftc3VuZ19waW5fYmFuayAqYjsKPiAr CXZvaWQgX19pb21lbSAqdmlydF9iYXNlID0gZHJ2ZGF0YS0+dmlydF9iYXNlOwo+ICAKPiAgCWIg PSBkcnZkYXRhLT5waW5fYmFua3M7Cj4gIAo+IEBAIC0zNDUsNyArMzQ2LDEwIEBAIHN0YXRpYyB2 b2lkIHBpbl90b19yZWdfYmFuayhzdHJ1Y3Qgc2Ftc3VuZ19waW5jdHJsX2Rydl9kYXRhICpkcnZk YXRhLAo+ICAJCQkoKGItPnBpbl9iYXNlICsgYi0+bnJfcGlucyAtIDEpIDwgcGluKSkKPiAgCQli Kys7Cj4gIAo+IC0JKnJlZyA9IGRydmRhdGEtPnZpcnRfYmFzZSArIGItPnBjdGxfb2Zmc2V0Owo+ ICsJaWYgKGItPmVpbnRfZXh0KQo+ICsJCXZpcnRfYmFzZSA9IGRydmRhdGEtPmV4dF9iYXNlOwo+ ICsKPiArCSpyZWcgPSB2aXJ0X2Jhc2UgKyBiLT5wY3RsX29mZnNldDsKPiAgCSpvZmZzZXQgPSBw aW4gLSBiLT5waW5fYmFzZTsKPiAgCWlmIChiYW5rKQo+ICAJCSpiYW5rID0gYjsKPiBAQCAtNTIz LDEwICs1MjcsMTIgQEAgc3RhdGljIHZvaWQgc2Ftc3VuZ19ncGlvX3NldF92YWx1ZShzdHJ1Y3Qg Z3Bpb19jaGlwICpnYywKPiAgewo+ICAJc3RydWN0IHNhbXN1bmdfcGluX2JhbmsgKmJhbmsgPSBn cGlvY2hpcF9nZXRfZGF0YShnYyk7Cj4gIAljb25zdCBzdHJ1Y3Qgc2Ftc3VuZ19waW5fYmFua190 eXBlICp0eXBlID0gYmFuay0+dHlwZTsKPiArCXZvaWQgX19pb21lbSAqdmlydF9iYXNlID0gYmFu ay0+ZWludF9leHQgPwo+ICsJCWJhbmstPmRydmRhdGEtPmV4dF9iYXNlIDogYmFuay0+ZHJ2ZGF0 YS0+dmlydF9iYXNlOwo+ICAJdm9pZCBfX2lvbWVtICpyZWc7Cj4gIAl1MzIgZGF0YTsKPiAgCj4g LQlyZWcgPSBiYW5rLT5kcnZkYXRhLT52aXJ0X2Jhc2UgKyBiYW5rLT5wY3RsX29mZnNldDsKPiAr CXJlZyA9IHZpcnRfYmFzZSArIGJhbmstPnBjdGxfb2Zmc2V0Owo+ICAKPiAgCWRhdGEgPSByZWFk bChyZWcgKyB0eXBlLT5yZWdfb2Zmc2V0W1BJTkNGR19UWVBFX0RBVF0pOwo+ICAJZGF0YSAmPSB+ KDEgPDwgb2Zmc2V0KTsKPiBAQCAtNTUzLDggKzU1OSwxMCBAQCBzdGF0aWMgaW50IHNhbXN1bmdf Z3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZnNldCkKPiAgCXUzMiBk YXRhOwo+ICAJc3RydWN0IHNhbXN1bmdfcGluX2JhbmsgKmJhbmsgPSBncGlvY2hpcF9nZXRfZGF0 YShnYyk7Cj4gIAljb25zdCBzdHJ1Y3Qgc2Ftc3VuZ19waW5fYmFua190eXBlICp0eXBlID0gYmFu ay0+dHlwZTsKPiArCXZvaWQgX19pb21lbSAqdmlydF9iYXNlID0gYmFuay0+ZWludF9leHQgPwo+ ICsJCWJhbmstPmRydmRhdGEtPmV4dF9iYXNlIDogYmFuay0+ZHJ2ZGF0YS0+dmlydF9iYXNlOwo+ ICAKPiAtCXJlZyA9IGJhbmstPmRydmRhdGEtPnZpcnRfYmFzZSArIGJhbmstPnBjdGxfb2Zmc2V0 Owo+ICsJcmVnID0gdmlydF9iYXNlICsgYmFuay0+cGN0bF9vZmZzZXQ7Cj4gIAo+ICAJZGF0YSA9 IHJlYWRsKHJlZyArIHR5cGUtPnJlZ19vZmZzZXRbUElOQ0ZHX1RZUEVfREFUXSk7Cj4gIAlkYXRh ID4+PSBvZmZzZXQ7Cj4gQEAgLTU3NCw2ICs1ODIsNyBAQCBzdGF0aWMgaW50IHNhbXN1bmdfZ3Bp b19zZXRfZGlyZWN0aW9uKHN0cnVjdCBncGlvX2NoaXAgKmdjLAo+ICAJY29uc3Qgc3RydWN0IHNh bXN1bmdfcGluX2JhbmtfdHlwZSAqdHlwZTsKPiAgCXN0cnVjdCBzYW1zdW5nX3Bpbl9iYW5rICpi YW5rOwo+ICAJc3RydWN0IHNhbXN1bmdfcGluY3RybF9kcnZfZGF0YSAqZHJ2ZGF0YTsKPiArCXZv aWQgX19pb21lbSAqdmlydF9iYXNlOwo+ICAJdm9pZCBfX2lvbWVtICpyZWc7Cj4gIAl1MzIgZGF0 YSwgbWFzaywgc2hpZnQ7Cj4gIAo+IEBAIC01ODEsNyArNTkwLDggQEAgc3RhdGljIGludCBzYW1z dW5nX2dwaW9fc2V0X2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKPiAgCXR5cGUgPSBi YW5rLT50eXBlOwo+ICAJZHJ2ZGF0YSA9IGJhbmstPmRydmRhdGE7Cj4gIAo+IC0JcmVnID0gZHJ2 ZGF0YS0+dmlydF9iYXNlICsgYmFuay0+cGN0bF9vZmZzZXQgKwo+ICsJdmlydF9iYXNlID0gYmFu ay0+ZWludF9leHQgPyBkcnZkYXRhLT5leHRfYmFzZSA6IGRydmRhdGEtPnZpcnRfYmFzZTsKPiAr CXJlZyA9IHZpcnRfYmFzZSArIGJhbmstPnBjdGxfb2Zmc2V0ICsKPiAgCQkJCQl0eXBlLT5yZWdf b2Zmc2V0W1BJTkNGR19UWVBFX0ZVTkNdOwo+ICAKPiAgCW1hc2sgPSAoMSA8PCB0eXBlLT5mbGRf d2lkdGhbUElOQ0ZHX1RZUEVfRlVOQ10pIC0gMTsKPiBAQCAtMTAwNyw2ICsxMDE3LDcgQEAgc2Ft c3VuZ19waW5jdHJsX2dldF9zb2NfZGF0YShzdHJ1Y3Qgc2Ftc3VuZ19waW5jdHJsX2Rydl9kYXRh ICpkLAo+ICAJCWJhbmstPmVpbnRfdHlwZSA9IGJkYXRhLT5laW50X3R5cGU7Cj4gIAkJYmFuay0+ ZWludF9tYXNrID0gYmRhdGEtPmVpbnRfbWFzazsKPiAgCQliYW5rLT5laW50X29mZnNldCA9IGJk YXRhLT5laW50X29mZnNldDsKPiArCQliYW5rLT5laW50X2V4dCA9IGJkYXRhLT5laW50X2V4dDsK PiAgCQliYW5rLT5uYW1lID0gYmRhdGEtPm5hbWU7Cj4gIAo+ICAJCXNwaW5fbG9ja19pbml0KCZi YW5rLT5zbG9jayk7Cj4gQEAgLTEwNjUsNiArMTA3NiwxNCBAQCBzdGF0aWMgaW50IHNhbXN1bmdf cGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJaWYgKElTX0VS UihkcnZkYXRhLT52aXJ0X2Jhc2UpKQo+ICAJCXJldHVybiBQVFJfRVJSKGRydmRhdGEtPnZpcnRf YmFzZSk7Cj4gIAo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VS Q0VfTUVNLCAxKTsKPiArCWlmIChyZXMpIHsKPiArCQlkcnZkYXRhLT5leHRfYmFzZSA9Cj4gKwkJ CWRldm1faW9yZW1hcChkZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Cj4gKwkJ aWYgKCFkcnZkYXRhLT5leHRfYmFzZSkKPiArCQkJcmV0dXJuIC1FTlhJTzsKPiArCX0KPiArCj4g IAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwo+ ICAJaWYgKHJlcykKPiAgCQlkcnZkYXRhLT5pcnEgPSByZXMtPnN0YXJ0Owo+IEBAIC0xMTAyLDE2 ICsxMTIxLDIwIEBAIHN0YXRpYyBpbnQgc2Ftc3VuZ19waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIHN0YXRpYyB2b2lkIHNhbXN1bmdfcGluY3RybF9zdXNwZW5k X2RldigKPiAgCXN0cnVjdCBzYW1zdW5nX3BpbmN0cmxfZHJ2X2RhdGEgKmRydmRhdGEpCj4gIHsK PiAtCXZvaWQgX19pb21lbSAqdmlydF9iYXNlID0gZHJ2ZGF0YS0+dmlydF9iYXNlOwo+ICsJdm9p ZCBfX2lvbWVtICp2aXJ0X2Jhc2U7Cj4gIAlpbnQgaTsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwg ZHJ2ZGF0YS0+bnJfYmFua3M7IGkrKykgewo+ICAJCXN0cnVjdCBzYW1zdW5nX3Bpbl9iYW5rICpi YW5rID0gJmRydmRhdGEtPnBpbl9iYW5rc1tpXTsKPiAtCQl2b2lkIF9faW9tZW0gKnJlZyA9IHZp cnRfYmFzZSArIGJhbmstPnBjdGxfb2Zmc2V0Owo+ICsJCXZvaWQgX19pb21lbSAqcmVnOwo+ICAJ CWNvbnN0IHU4ICpvZmZzID0gYmFuay0+dHlwZS0+cmVnX29mZnNldDsKPiAgCQljb25zdCB1OCAq d2lkdGhzID0gYmFuay0+dHlwZS0+ZmxkX3dpZHRoOwo+ICAJCWVudW0gcGluY2ZnX3R5cGUgdHlw ZTsKPiAgCj4gKwkJdmlydF9iYXNlID0gYmFuay0+ZWludF9leHQgPwo+ICsJCQlkcnZkYXRhLT5l eHRfYmFzZSA6IGRydmRhdGEtPnZpcnRfYmFzZTsKPiArCQlyZWcgPSB2aXJ0X2Jhc2UgKyBiYW5r LT5wY3RsX29mZnNldDsKPiArCj4gIAkJLyogUmVnaXN0ZXJzIHdpdGhvdXQgYSBwb3dlcmRvd24g Y29uZmlnIGFyZW4ndCBsb3N0ICovCj4gIAkJaWYgKCF3aWR0aHNbUElOQ0ZHX1RZUEVfQ09OX1BE Tl0pCj4gIAkJCWNvbnRpbnVlOwo+IEBAIC0xMTQ4LDcgKzExNzEsNyBAQCBzdGF0aWMgdm9pZCBz YW1zdW5nX3BpbmN0cmxfc3VzcGVuZF9kZXYoCj4gICAqLwo+ICBzdGF0aWMgdm9pZCBzYW1zdW5n X3BpbmN0cmxfcmVzdW1lX2RldihzdHJ1Y3Qgc2Ftc3VuZ19waW5jdHJsX2Rydl9kYXRhICpkcnZk YXRhKQo+ICB7Cj4gLQl2b2lkIF9faW9tZW0gKnZpcnRfYmFzZSA9IGRydmRhdGEtPnZpcnRfYmFz ZTsKPiArCXZvaWQgX19pb21lbSAqdmlydF9iYXNlOwo+ICAJaW50IGk7Cj4gIAo+ICAJaWYgKGRy dmRhdGEtPnJlc3VtZSkKPiBAQCAtMTE1NiwxMSArMTE3OSwxNSBAQCBzdGF0aWMgdm9pZCBzYW1z dW5nX3BpbmN0cmxfcmVzdW1lX2RldihzdHJ1Y3Qgc2Ftc3VuZ19waW5jdHJsX2Rydl9kYXRhICpk cnZkYXRhKQo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBkcnZkYXRhLT5ucl9iYW5rczsgaSsrKSB7 Cj4gIAkJc3RydWN0IHNhbXN1bmdfcGluX2JhbmsgKmJhbmsgPSAmZHJ2ZGF0YS0+cGluX2Jhbmtz W2ldOwo+IC0JCXZvaWQgX19pb21lbSAqcmVnID0gdmlydF9iYXNlICsgYmFuay0+cGN0bF9vZmZz ZXQ7Cj4gKwkJdm9pZCBfX2lvbWVtICpyZWc7Cj4gIAkJY29uc3QgdTggKm9mZnMgPSBiYW5rLT50 eXBlLT5yZWdfb2Zmc2V0Owo+ICAJCWNvbnN0IHU4ICp3aWR0aHMgPSBiYW5rLT50eXBlLT5mbGRf d2lkdGg7Cj4gIAkJZW51bSBwaW5jZmdfdHlwZSB0eXBlOwo+ICAKPiArCQl2aXJ0X2Jhc2UgPSBi YW5rLT5laW50X2V4dCA/Cj4gKwkJCWRydmRhdGEtPmV4dF9iYXNlIDogZHJ2ZGF0YS0+dmlydF9i YXNlOwo+ICsJCXJlZyA9IHZpcnRfYmFzZSArIGJhbmstPnBjdGxfb2Zmc2V0Owo+ICsKPiAgCQkv KiBSZWdpc3RlcnMgd2l0aG91dCBhIHBvd2VyZG93biBjb25maWcgYXJlbid0IGxvc3QgKi8KPiAg CQlpZiAoIXdpZHRoc1tQSU5DRkdfVFlQRV9DT05fUEROXSkKPiAgCQkJY29udGludWU7Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtc2Ftc3VuZy5oIGIvZHJp dmVycy9waW5jdHJsL3NhbXN1bmcvcGluY3RybC1zYW1zdW5nLmgKPiBpbmRleCBjZDMxYmZhZjYy Y2IuLjMwMDUxMzVmNDU2NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BpbmN0cmwvc2Ftc3VuZy9w aW5jdHJsLXNhbXN1bmcuaAo+ICsrKyBiL2RyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwt c2Ftc3VuZy5oCj4gQEAgLTEzMSw2ICsxMzEsNyBAQCBzdHJ1Y3Qgc2Ftc3VuZ19waW5fYmFua19k YXRhIHsKPiAgCWVudW0gZWludF90eXBlCWVpbnRfdHlwZTsKPiAgCXUzMgkJZWludF9tYXNrOwo+ ICAJdTMyCQllaW50X29mZnNldDsKPiArCWJvb2wJCWVpbnRfZXh0Owo+ICAJY29uc3QgY2hhcgkq bmFtZTsKPiAgfTsKPiAgCj4gQEAgLTE2Myw2ICsxNjQsNyBAQCBzdHJ1Y3Qgc2Ftc3VuZ19waW5f YmFuayB7Cj4gIAllbnVtIGVpbnRfdHlwZQllaW50X3R5cGU7Cj4gIAl1MzIJCWVpbnRfbWFzazsK PiAgCXUzMgkJZWludF9vZmZzZXQ7Cj4gKwlib29sCQllaW50X2V4dDsKPiAgCWNvbnN0IGNoYXIJ Km5hbWU7Cj4gIAo+ICAJdTMyCQlwaW5fYmFzZTsKPiBAQCAtMjAxLDYgKzIwMyw4IEBAIHN0cnVj dCBzYW1zdW5nX3Bpbl9jdHJsIHsKPiAgICogc3RydWN0IHNhbXN1bmdfcGluY3RybF9kcnZfZGF0 YTogd3JhcHBlciBmb3IgaG9sZGluZyBkcml2ZXIgZGF0YSB0b2dldGhlci4KPiAgICogQG5vZGU6 IGdsb2JhbCBsaXN0IG5vZGUKPiAgICogQHZpcnRfYmFzZTogcmVnaXN0ZXIgYmFzZSBhZGRyZXNz IG9mIHRoZSBjb250cm9sbGVyLgo+ICsgKiBAZXh0X2Jhc2U6IGV4dGVybmFsIHJlZ2lzdGVyIGJh c2UgYWRkcmVzcyBvZiB0aGUgY29udHJvbGxlci4KPiArICogQGV4dF9iYXNlOiBleHRlcm5hbCBy ZWdpc3RlciBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2xsZXIuCj4gICAqIEBkZXY6IGRldmlj ZSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2xsZXIuCj4gICAqIEBpcnE6IGludGVy cnB0IG51bWJlciB1c2VkIGJ5IHRoZSBjb250cm9sbGVyIHRvIG5vdGlmeSBncGlvIGludGVycnVw dHMuCj4gICAqIEBjdHJsOiBwaW4gY29udHJvbGxlciBpbnN0YW5jZSBtYW5hZ2VkIGJ5IHRoZSBk cml2ZXIuCj4gQEAgLTIxNiw2ICsyMjAsNyBAQCBzdHJ1Y3Qgc2Ftc3VuZ19waW5fY3RybCB7Cj4g IHN0cnVjdCBzYW1zdW5nX3BpbmN0cmxfZHJ2X2RhdGEgewo+ICAJc3RydWN0IGxpc3RfaGVhZAkJ bm9kZTsKPiAgCXZvaWQgX19pb21lbQkJCSp2aXJ0X2Jhc2U7Cj4gKwl2b2lkIF9faW9tZW0JCQkq ZXh0X2Jhc2U7Cj4gIAlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKPiAgCWludAkJCQlpcnE7Cj4gIAo+ IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFy bS1rZXJuZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: cw00.choi@samsung.com (Chanwoo Choi) Date: Fri, 19 Aug 2016 18:07:04 +0900 Subject: [PATCH 4/7] pinctrl: samsung: Add GPFx support of Exynos5433 In-Reply-To: <1471328843-26653-5-git-send-email-cw00.choi@samsung.com> References: <1471328843-26653-1-git-send-email-cw00.choi@samsung.com> <1471328843-26653-5-git-send-email-cw00.choi@samsung.com> Message-ID: <57B6CC38.9090403@samsung.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Tomasz Figa, Due to wrong setting of email client, your reply is deleted on my email client at the company. I'm so sorry. So, I add your comment on below and then I reply the detailed description. On 2016? 08? 16? 15:27, Chanwoo Choi wrote: > From: Joonyoung Shim > > This patch add the support of GPFx pin of Exynos5433 SoC. Exynos5433 has > different memory map of GPFx from previous Exynos SoC. Exynos GPIO has > following register to control gpio funciton. Usually, all registers of GPIO > are included in same domain. > - CON / DAT / PUD / DRV / CONPDN / PUDPDN > - EINT_CON/ EINT_FLTCON0, EINT_FLTCON1 / EINT_MASK / EINT_PEND > > But, GPFx are included in two domain as following. So, this patch supports > the GPFx pin which handle the on separate two domains. > - ALIVE domain : CON / DAT / PUD / DRV / CONPDN / PUDPDN > - IMEM domain : EINT_CON/ EINT_FLTCON0, EINT_FLTCON1 / EINT_MASK / EINT_PEND --------- I'm afraid I don't get anything from the description above. Could you describe the layout of registers in memory map and IRQ routing of the pins? Best regards, Tomasz ---------- On this patch, I'm sorry that I described the wrong information about GFP1~5. I explained the memory map of GPF[1-5] the oppositely. Following compositions are correct. - ALIVE : WEINT_FLTCONx, WEINT_MASK, WEING_PEND - IMEM : CON, DAT, PUD, DRV, CONPDN, PUDPDN And, I add the memory map for GPF[1~5][2] and the wakeup interrupt information[1]. [1] Memory map for GPF1~5 [ALIVE] WEINT_GPA0_CON : 0x1058_0000 (ALIVE) + (0x0700 = 0x0700 + 0x0) WEINT_GPA1_CON : 0x1058_0000 (ALIVE) + (0x0704 = 0x0700 + 0x4) WEINT_GPA2_CON : 0x1058_0000 (ALIVE) + (0x0708 = 0x0700 + 0x8) WEINT_GPA3_CON : 0x1058_0000 (ALIVE) + (0x070C = 0x0700 + 0xC) WEINT_GPF1_CON : 0x1058_0000 (ALIVE) + (0x1704 = 0x0700 + 0x1004) WEINT_GPF2_CON : 0x1058_0000 (ALIVE) + (0x1708 = 0x0700 + 0x1008) WEINT_GPF3_CON : 0x1058_0000 (ALIVE) + (0x170C = 0x0700 + 0x100C) WEINT_GPF4_CON : 0x1058_0000 (ALIVE) + (0x1710 = 0x0700 + 0x10010) WEINT_GPF5_CON : 0x1058_0000 (ALIVE) + (0x1714 = 0x0700 + 0x1014) WEINT_GPF[x]_MASK : 0x1058_0000 (ALIVE) + (0x1900 + (x * 4)) WEINT_GPF[x]_PEND : 0x1058_0000 (ALIVE) + (0x1A00 + (x * 4)) (x : 1 ~ 5) [IMEM] GPF1_CON : 0X1109_0000 (IMEM) + 0x0020 GPF1_DAT : 0X1109_0000 (IMEM) + 0x0024 GPF1_PUD : 0X1109_0000 (IMEM) + 0x0028 GPF1_DRV : 0X1109_0000 (IMEM) + 0x002C GPF1_CONPDN : 0X1109_0000 (IMEM) + 0x0030 GPF1_PUDPDN : 0X1109_0000 (IMEM) + 0x0034 GPF2_CON : 0X1109_0000 (IMEM) + 0x0040 ... GPF3_CON : 0X1109_0000 (IMEM) + 0x0060 ... GPF4_CON : 0X1109_0000 (IMEM) + 0x0080 ... GPF5_CON : 0X1109_0000 (IMEM) + 0x00A0 [2] Interrput pin information - the total number of wakeup external IRQ is 64. ---------------------------------------------------------------------------------- domain| gpio : nr | wakeup interrput name | SPI number | ----------------------------------------------------------------------------------- ALIVE | GPA0 : 8 | INTREQ__EINT[0~7] | SPI[0] ~ SPI[7] | ALIVE | GPA1 : 8 | INTREQ__EINT[8~15] | SPI[8] ~ SPI[15] | ALIVE | GPA2 : 8 | INTREQ__EINT_16_63 | SPI[16] | ALIVE | GPA3 : 8 | INTREQ__EINT_16_63 | SPI[16] | ----------------------------------------------------------------------------------- ALIVE | GPF1 : 8 | INTREQ__EINT_16_63 | SPI[16] | ALIVE | GPF2 : 4 | INTREQ__EINT_16_63 | SPI[16] | ALIVE | GPF3 : 4 | INTREQ__EINT_16_63 | SPI[16] | ALIVE | GPF4 : 8 | INTREQ__EINT_16_63 | SPI[16] | ALIVE | GPF5 : 8 | INTREQ__EINT_16_63 | SPI[16] | ----------------------------------------------------------------------------------- In summary, If gpf[1-5] handle the CON/DAT/PUD/DRV register, the driver will use the drvdata->ext_base (IMEM base address) instead of drvdata->virt_base(ALIVE base address) because the CON/DAT/PUD/DRV register of gpf[1-5] are included in the IMEM domain. If gpf[1-5] handle the WEINT_* register, the driver will use the drvdata->virt_base(ALIVE base address) because the WEINT_* registers of gpf[1-5] are included in the ALIVE domain. Best Regards, Chanwoo Choi > > Cc: Linus Walleij > Cc: Rob Herring > Cc: Mark Rutland > Cc: Tomasz Figa > Cc: Krzysztof Kozlowski > Cc: Sylwester Nawrocki > Cc: Kukjin Kim > Cc: linux-gpio at vger.kernel.org > Signed-off-by: Joonyoung Shim > Signed-off-by: Chanwoo Choi > --- > .../bindings/pinctrl/samsung-pinctrl.txt | 1 + > drivers/pinctrl/samsung/pinctrl-exynos.c | 5 +++ > drivers/pinctrl/samsung/pinctrl-exynos.h | 11 ++++++ > drivers/pinctrl/samsung/pinctrl-samsung.c | 43 ++++++++++++++++++---- > drivers/pinctrl/samsung/pinctrl-samsung.h | 5 +++ > 5 files changed, 57 insertions(+), 8 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt > index 6db16b90873a..807fba1f829f 100644 > --- a/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt > +++ b/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt > @@ -19,6 +19,7 @@ Required Properties: > - "samsung,exynos5260-pinctrl": for Exynos5260 compatible pin-controller. > - "samsung,exynos5410-pinctrl": for Exynos5410 compatible pin-controller. > - "samsung,exynos5420-pinctrl": for Exynos5420 compatible pin-controller. > + - "samsung,exynos5433-pinctrl": for Exynos5433 compatible pin-controller. > - "samsung,exynos7-pinctrl": for Exynos7 compatible pin-controller. > > - reg: Base address of the pin controller hardware module and length of > diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c > index 051b5bf701a8..4f95983e0cdd 100644 > --- a/drivers/pinctrl/samsung/pinctrl-exynos.c > +++ b/drivers/pinctrl/samsung/pinctrl-exynos.c > @@ -1350,6 +1350,11 @@ static const struct samsung_pin_bank_data exynos5433_pin_banks0[] = { > EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04), > EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08), > EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c), > + EXYNOS_PIN_BANK_EINTW_EXT(8, 0x020, "gpf1", 0x1004), > + EXYNOS_PIN_BANK_EINTW_EXT(4, 0x040, "gpf2", 0x1008), > + EXYNOS_PIN_BANK_EINTW_EXT(4, 0x060, "gpf3", 0x100c), > + EXYNOS_PIN_BANK_EINTW_EXT(8, 0x080, "gpf4", 0x1010), > + EXYNOS_PIN_BANK_EINTW_EXT(8, 0x0a0, "gpf5", 0x1014), > }; > > /* pin banks of exynos5433 pin-controller - AUD */ > diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.h b/drivers/pinctrl/samsung/pinctrl-exynos.h > index 0f0f7cedb2dc..4b737b6c434d 100644 > --- a/drivers/pinctrl/samsung/pinctrl-exynos.h > +++ b/drivers/pinctrl/samsung/pinctrl-exynos.h > @@ -79,6 +79,17 @@ > .name = id \ > } > > +#define EXYNOS_PIN_BANK_EINTW_EXT(pins, reg, id, offs) \ > + { \ > + .type = &bank_type_off, \ > + .pctl_offset = reg, \ > + .nr_pins = pins, \ > + .eint_type = EINT_TYPE_WKUP, \ > + .eint_offset = offs, \ > + .eint_ext = true, \ > + .name = id \ > + } > + > /** > * struct exynos_weint_data: irq specific data for all the wakeup interrupts > * generated by the external wakeup interrupt controller. > diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c b/drivers/pinctrl/samsung/pinctrl-samsung.c > index 513fe6b23248..57e22085c2db 100644 > --- a/drivers/pinctrl/samsung/pinctrl-samsung.c > +++ b/drivers/pinctrl/samsung/pinctrl-samsung.c > @@ -338,6 +338,7 @@ static void pin_to_reg_bank(struct samsung_pinctrl_drv_data *drvdata, > struct samsung_pin_bank **bank) > { > struct samsung_pin_bank *b; > + void __iomem *virt_base = drvdata->virt_base; > > b = drvdata->pin_banks; > > @@ -345,7 +346,10 @@ static void pin_to_reg_bank(struct samsung_pinctrl_drv_data *drvdata, > ((b->pin_base + b->nr_pins - 1) < pin)) > b++; > > - *reg = drvdata->virt_base + b->pctl_offset; > + if (b->eint_ext) > + virt_base = drvdata->ext_base; > + > + *reg = virt_base + b->pctl_offset; > *offset = pin - b->pin_base; > if (bank) > *bank = b; > @@ -523,10 +527,12 @@ static void samsung_gpio_set_value(struct gpio_chip *gc, > { > struct samsung_pin_bank *bank = gpiochip_get_data(gc); > const struct samsung_pin_bank_type *type = bank->type; > + void __iomem *virt_base = bank->eint_ext ? > + bank->drvdata->ext_base : bank->drvdata->virt_base; > void __iomem *reg; > u32 data; > > - reg = bank->drvdata->virt_base + bank->pctl_offset; > + reg = virt_base + bank->pctl_offset; > > data = readl(reg + type->reg_offset[PINCFG_TYPE_DAT]); > data &= ~(1 << offset); > @@ -553,8 +559,10 @@ static int samsung_gpio_get(struct gpio_chip *gc, unsigned offset) > u32 data; > struct samsung_pin_bank *bank = gpiochip_get_data(gc); > const struct samsung_pin_bank_type *type = bank->type; > + void __iomem *virt_base = bank->eint_ext ? > + bank->drvdata->ext_base : bank->drvdata->virt_base; > > - reg = bank->drvdata->virt_base + bank->pctl_offset; > + reg = virt_base + bank->pctl_offset; > > data = readl(reg + type->reg_offset[PINCFG_TYPE_DAT]); > data >>= offset; > @@ -574,6 +582,7 @@ static int samsung_gpio_set_direction(struct gpio_chip *gc, > const struct samsung_pin_bank_type *type; > struct samsung_pin_bank *bank; > struct samsung_pinctrl_drv_data *drvdata; > + void __iomem *virt_base; > void __iomem *reg; > u32 data, mask, shift; > > @@ -581,7 +590,8 @@ static int samsung_gpio_set_direction(struct gpio_chip *gc, > type = bank->type; > drvdata = bank->drvdata; > > - reg = drvdata->virt_base + bank->pctl_offset + > + virt_base = bank->eint_ext ? drvdata->ext_base : drvdata->virt_base; > + reg = virt_base + bank->pctl_offset + > type->reg_offset[PINCFG_TYPE_FUNC]; > > mask = (1 << type->fld_width[PINCFG_TYPE_FUNC]) - 1; > @@ -1007,6 +1017,7 @@ samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d, > bank->eint_type = bdata->eint_type; > bank->eint_mask = bdata->eint_mask; > bank->eint_offset = bdata->eint_offset; > + bank->eint_ext = bdata->eint_ext; > bank->name = bdata->name; > > spin_lock_init(&bank->slock); > @@ -1065,6 +1076,14 @@ static int samsung_pinctrl_probe(struct platform_device *pdev) > if (IS_ERR(drvdata->virt_base)) > return PTR_ERR(drvdata->virt_base); > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 1); > + if (res) { > + drvdata->ext_base = > + devm_ioremap(dev, res->start, resource_size(res)); > + if (!drvdata->ext_base) > + return -ENXIO; > + } > + > res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); > if (res) > drvdata->irq = res->start; > @@ -1102,16 +1121,20 @@ static int samsung_pinctrl_probe(struct platform_device *pdev) > static void samsung_pinctrl_suspend_dev( > struct samsung_pinctrl_drv_data *drvdata) > { > - void __iomem *virt_base = drvdata->virt_base; > + void __iomem *virt_base; > int i; > > for (i = 0; i < drvdata->nr_banks; i++) { > struct samsung_pin_bank *bank = &drvdata->pin_banks[i]; > - void __iomem *reg = virt_base + bank->pctl_offset; > + void __iomem *reg; > const u8 *offs = bank->type->reg_offset; > const u8 *widths = bank->type->fld_width; > enum pincfg_type type; > > + virt_base = bank->eint_ext ? > + drvdata->ext_base : drvdata->virt_base; > + reg = virt_base + bank->pctl_offset; > + > /* Registers without a powerdown config aren't lost */ > if (!widths[PINCFG_TYPE_CON_PDN]) > continue; > @@ -1148,7 +1171,7 @@ static void samsung_pinctrl_suspend_dev( > */ > static void samsung_pinctrl_resume_dev(struct samsung_pinctrl_drv_data *drvdata) > { > - void __iomem *virt_base = drvdata->virt_base; > + void __iomem *virt_base; > int i; > > if (drvdata->resume) > @@ -1156,11 +1179,15 @@ static void samsung_pinctrl_resume_dev(struct samsung_pinctrl_drv_data *drvdata) > > for (i = 0; i < drvdata->nr_banks; i++) { > struct samsung_pin_bank *bank = &drvdata->pin_banks[i]; > - void __iomem *reg = virt_base + bank->pctl_offset; > + void __iomem *reg; > const u8 *offs = bank->type->reg_offset; > const u8 *widths = bank->type->fld_width; > enum pincfg_type type; > > + virt_base = bank->eint_ext ? > + drvdata->ext_base : drvdata->virt_base; > + reg = virt_base + bank->pctl_offset; > + > /* Registers without a powerdown config aren't lost */ > if (!widths[PINCFG_TYPE_CON_PDN]) > continue; > diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.h b/drivers/pinctrl/samsung/pinctrl-samsung.h > index cd31bfaf62cb..3005135f4565 100644 > --- a/drivers/pinctrl/samsung/pinctrl-samsung.h > +++ b/drivers/pinctrl/samsung/pinctrl-samsung.h > @@ -131,6 +131,7 @@ struct samsung_pin_bank_data { > enum eint_type eint_type; > u32 eint_mask; > u32 eint_offset; > + bool eint_ext; > const char *name; > }; > > @@ -163,6 +164,7 @@ struct samsung_pin_bank { > enum eint_type eint_type; > u32 eint_mask; > u32 eint_offset; > + bool eint_ext; > const char *name; > > u32 pin_base; > @@ -201,6 +203,8 @@ struct samsung_pin_ctrl { > * struct samsung_pinctrl_drv_data: wrapper for holding driver data together. > * @node: global list node > * @virt_base: register base address of the controller. > + * @ext_base: external register base address of the controller. > + * @ext_base: external register base address of the controller. > * @dev: device instance representing the controller. > * @irq: interrpt number used by the controller to notify gpio interrupts. > * @ctrl: pin controller instance managed by the driver. > @@ -216,6 +220,7 @@ struct samsung_pin_ctrl { > struct samsung_pinctrl_drv_data { > struct list_head node; > void __iomem *virt_base; > + void __iomem *ext_base; > struct device *dev; > int irq; > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754225AbcHSJIQ (ORCPT ); Fri, 19 Aug 2016 05:08:16 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:48710 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752965AbcHSJH7 (ORCPT ); Fri, 19 Aug 2016 05:07:59 -0400 MIME-version: 1.0 Content-type: text/plain; charset=UTF-8 X-AuditID: cbfee68d-f79286d000007a9a-af-57b6cc391f2b Content-transfer-encoding: 8BIT Message-id: <57B6CC38.9090403@samsung.com> Date: Fri, 19 Aug 2016 18:07:04 +0900 From: Chanwoo Choi Organization: Samsung Electronics User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 To: Tomasz Figa Cc: k.kozlowski@samsung.com, kgene@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, catalin.marinas@arm.com, will.deacon@arm.com, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, krzk@kernel.org, jh80.chung@samsung.com, sw0312.kim@samsung.com, jy0922.shim@samsung.com, inki.dae@samsung.com, jonghwa3.lee@samsung.com, beomho.seo@samsung.com, jaewon02.kim@samsung.com, human.hwang@samsung.com, ideal.song@samsung.com, ingi2.kim@samsung.com, m.szyprowski@samsung.com, a.hajda@samsung.com, s.nawrocki@samsung.com, chanwoo@kernel.org, Linus Walleij , linux-gpio@vger.kernel.org Subject: Re: [PATCH 4/7] pinctrl: samsung: Add GPFx support of Exynos5433 References: <1471328843-26653-1-git-send-email-cw00.choi@samsung.com> <1471328843-26653-5-git-send-email-cw00.choi@samsung.com> In-reply-to: <1471328843-26653-5-git-send-email-cw00.choi@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA02SaUhUYRSG+eZu49TUzVw+zQpHQjKyXPskE3+EjL8KMgyLbLKLijrqzCgJ RVOW4ZLbSNjFZaxcUDMdl9TMrUEtTdNcJtdAMzeK1FzKsrkOkf9e3vfhnPPC4WPGOYQlP1iq YGRSSaiIFOClJs6RR926anyPj6j3oeGybgJ1LtZQ6FtBEkBpun4c5Wr1Xn5mMoHqf08AVPtx mUTpE6k4qlVqCaT7GUeg+HdTGJoZ78XR/IwDSpmcx1BPTzmFMjYKeUgzOUigytwNgD7UZ5Eo s6eRh55pxyiUP9TLQ/deaSn0euE+gTJVsyQqrtdzs987cE8rcWlOKRDXsWOUWFMcT4pHBxtI ceXTW+LkqmIgXtIcOEv5CdyvMaHB0YzsmMcVQdBI1mdeBBt5Pf4LSylBu18CMOJD2hkmDJfw DNoMvh9/TiYAAd+YLgLwdouS+gdN51XwDAEL4N2kKZwLhPQeuKYa12s+H6MPQm1fCGdjtC1M z3mMGfhPAGY/LNtihLQdrB6/yTE4fQjGV6gAp0m93TSjIzm9m7aGA2uTgMNN6QswsSOGs030 I1cyUihuJEY3EXCuS7l1wl7aG3ZP9gLDrgEAS3vzMC4wor3g2OoLwlAg0QgutrkbFtNwRdW6 dQ+k90NNM2ZALGBLkQ5PBebstmbs/2bstmZqgBUDUyYiIEJ+NVDmYC+XhMmjpIH2AeFhGqB/ m84/0w9qwUjzyVZA84Fop7C2pdrXmJBEy2PCWoGL/og0zNI0IFz/aVKFv4OTqyNycXZxcjzh 5ioyF1pbrp8zpgMlCiaEYSIYmb8sKpSRtwIe38hSCaovrvt1/VI0LJyyWO7vKhFFFk5rUn02 O5mWDSufILVNWKTwKzRPKW+UbnrlVbXHsbG2P/qc3FSBAm+16HycY+xpwdDqzGG2wuxy3Vv1 mxtP2u7kzZ3Jrej2T8MRu8upYMnateRIc/YlT/9RG1lluM5b8lLhoS0wi5YO7njUnSHC5UES BztMJpf8BaA9IkQxAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrDKsWRmVeSWpSXmKPExsVy+t9jQV3LM9vCDc70ClrcWneO1eL0p23s Fu+X9TBaTLxxhcVi/hGg2NIZfawWu/7eZ7TYcfMLm8Wk+xNYLHY0HGG1uPGrjdWi8+wTZosX 9y6yWLx+YWjR//g1s8X58xvYLab8Wc5ksenxNVaLzfP/MFpc3jWHzWLG+X1MFmuP3GW3WHr9 IpNF694j7BaH37SzWsyY/JLNYtUuoLqXH0+wOMh4rJm3htFj56y77B6bVnWyedy5tofNY/OS eo++LasYPT5vkgtgj2pgtMlITUxJLVJIzUvOT8nMS7dV8g6Od443NTMw1DW0tDBXUshLzE21 VXLxCdB1y8wBelxJoSwxpxQoFJBYXKykb4dpQmiIm64FTGOErm9IEFyPkQEaSFjDmHF7zlOm glmFFZ3PZ7E3MB6P6mLk5JAQMJF4tnAjE4QtJnHh3nq2LkYuDiGBWYwSLT1PWEASvAKCEj8m 3wOyOTiYBeQljlzKBgkzC6hLTJq3iBmi/gGjxNxp68BqeAW0JLbeqwWpYRFQlejcOJkRxGYD Cu9/cYMNxOYXUJS4+uMxI0i5qECERPeJSpCwCNDIb1P62UFGMgvsZ5V4daYB7ARhAU+Jc48v MkLsusoosebiQmaQBKeAm8Td79tZJzAKzkJy6iyEU2chOXUBI/MqRonUguSC4qT0XKO81HK9 4sTc4tK8dL3k/NxNjOCU9kx6B+PhXe6HGAU4GJV4eBl8toULsSaWFVfmHmKU4GBWEuEtPwQU 4k1JrKxKLcqPLyrNSS0+xGgK9OxEZinR5Hxgus0riTc0NjEzsjQyN7QwMjZXEud9/H9dmJBA emJJanZqakFqEUwfEwenVANj/mv+lfkCOfH7Ov05a3+xP/n8/XdzxMKPQpe1W9ZMnskspc/3 WFN4a31966Kq6w9Pbz8XZRAXf7HGUfubW4temPg6xpre46Xh99Jmf/flepqkvTwtt+vgvl/n GG+lawfMYd73UzX62kGZmQlrCj8eFfx0ZqeNeSj33Dj14og5e+7VLJnWfsxZiaU4I9FQi7mo OBEA2+dtJn8DAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Tomasz Figa, Due to wrong setting of email client, your reply is deleted on my email client at the company. I'm so sorry. So, I add your comment on below and then I reply the detailed description. On 2016년 08월 16일 15:27, Chanwoo Choi wrote: > From: Joonyoung Shim > > This patch add the support of GPFx pin of Exynos5433 SoC. Exynos5433 has > different memory map of GPFx from previous Exynos SoC. Exynos GPIO has > following register to control gpio funciton. Usually, all registers of GPIO > are included in same domain. > - CON / DAT / PUD / DRV / CONPDN / PUDPDN > - EINT_CON/ EINT_FLTCON0, EINT_FLTCON1 / EINT_MASK / EINT_PEND > > But, GPFx are included in two domain as following. So, this patch supports > the GPFx pin which handle the on separate two domains. > - ALIVE domain : CON / DAT / PUD / DRV / CONPDN / PUDPDN > - IMEM domain : EINT_CON/ EINT_FLTCON0, EINT_FLTCON1 / EINT_MASK / EINT_PEND --------- I'm afraid I don't get anything from the description above. Could you describe the layout of registers in memory map and IRQ routing of the pins? Best regards, Tomasz ---------- On this patch, I'm sorry that I described the wrong information about GFP1~5. I explained the memory map of GPF[1-5] the oppositely. Following compositions are correct. - ALIVE : WEINT_FLTCONx, WEINT_MASK, WEING_PEND - IMEM : CON, DAT, PUD, DRV, CONPDN, PUDPDN And, I add the memory map for GPF[1~5][2] and the wakeup interrupt information[1]. [1] Memory map for GPF1~5 [ALIVE] WEINT_GPA0_CON : 0x1058_0000 (ALIVE) + (0x0700 = 0x0700 + 0x0) WEINT_GPA1_CON : 0x1058_0000 (ALIVE) + (0x0704 = 0x0700 + 0x4) WEINT_GPA2_CON : 0x1058_0000 (ALIVE) + (0x0708 = 0x0700 + 0x8) WEINT_GPA3_CON : 0x1058_0000 (ALIVE) + (0x070C = 0x0700 + 0xC) WEINT_GPF1_CON : 0x1058_0000 (ALIVE) + (0x1704 = 0x0700 + 0x1004) WEINT_GPF2_CON : 0x1058_0000 (ALIVE) + (0x1708 = 0x0700 + 0x1008) WEINT_GPF3_CON : 0x1058_0000 (ALIVE) + (0x170C = 0x0700 + 0x100C) WEINT_GPF4_CON : 0x1058_0000 (ALIVE) + (0x1710 = 0x0700 + 0x10010) WEINT_GPF5_CON : 0x1058_0000 (ALIVE) + (0x1714 = 0x0700 + 0x1014) WEINT_GPF[x]_MASK : 0x1058_0000 (ALIVE) + (0x1900 + (x * 4)) WEINT_GPF[x]_PEND : 0x1058_0000 (ALIVE) + (0x1A00 + (x * 4)) (x : 1 ~ 5) [IMEM] GPF1_CON : 0X1109_0000 (IMEM) + 0x0020 GPF1_DAT : 0X1109_0000 (IMEM) + 0x0024 GPF1_PUD : 0X1109_0000 (IMEM) + 0x0028 GPF1_DRV : 0X1109_0000 (IMEM) + 0x002C GPF1_CONPDN : 0X1109_0000 (IMEM) + 0x0030 GPF1_PUDPDN : 0X1109_0000 (IMEM) + 0x0034 GPF2_CON : 0X1109_0000 (IMEM) + 0x0040 ... GPF3_CON : 0X1109_0000 (IMEM) + 0x0060 ... GPF4_CON : 0X1109_0000 (IMEM) + 0x0080 ... GPF5_CON : 0X1109_0000 (IMEM) + 0x00A0 [2] Interrput pin information - the total number of wakeup external IRQ is 64. ---------------------------------------------------------------------------------- domain| gpio : nr | wakeup interrput name | SPI number | ----------------------------------------------------------------------------------- ALIVE | GPA0 : 8 | INTREQ__EINT[0~7] | SPI[0] ~ SPI[7] | ALIVE | GPA1 : 8 | INTREQ__EINT[8~15] | SPI[8] ~ SPI[15] | ALIVE | GPA2 : 8 | INTREQ__EINT_16_63 | SPI[16] | ALIVE | GPA3 : 8 | INTREQ__EINT_16_63 | SPI[16] | ----------------------------------------------------------------------------------- ALIVE | GPF1 : 8 | INTREQ__EINT_16_63 | SPI[16] | ALIVE | GPF2 : 4 | INTREQ__EINT_16_63 | SPI[16] | ALIVE | GPF3 : 4 | INTREQ__EINT_16_63 | SPI[16] | ALIVE | GPF4 : 8 | INTREQ__EINT_16_63 | SPI[16] | ALIVE | GPF5 : 8 | INTREQ__EINT_16_63 | SPI[16] | ----------------------------------------------------------------------------------- In summary, If gpf[1-5] handle the CON/DAT/PUD/DRV register, the driver will use the drvdata->ext_base (IMEM base address) instead of drvdata->virt_base(ALIVE base address) because the CON/DAT/PUD/DRV register of gpf[1-5] are included in the IMEM domain. If gpf[1-5] handle the WEINT_* register, the driver will use the drvdata->virt_base(ALIVE base address) because the WEINT_* registers of gpf[1-5] are included in the ALIVE domain. Best Regards, Chanwoo Choi > > Cc: Linus Walleij > Cc: Rob Herring > Cc: Mark Rutland > Cc: Tomasz Figa > Cc: Krzysztof Kozlowski > Cc: Sylwester Nawrocki > Cc: Kukjin Kim > Cc: linux-gpio@vger.kernel.org > Signed-off-by: Joonyoung Shim > Signed-off-by: Chanwoo Choi > --- > .../bindings/pinctrl/samsung-pinctrl.txt | 1 + > drivers/pinctrl/samsung/pinctrl-exynos.c | 5 +++ > drivers/pinctrl/samsung/pinctrl-exynos.h | 11 ++++++ > drivers/pinctrl/samsung/pinctrl-samsung.c | 43 ++++++++++++++++++---- > drivers/pinctrl/samsung/pinctrl-samsung.h | 5 +++ > 5 files changed, 57 insertions(+), 8 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt > index 6db16b90873a..807fba1f829f 100644 > --- a/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt > +++ b/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt > @@ -19,6 +19,7 @@ Required Properties: > - "samsung,exynos5260-pinctrl": for Exynos5260 compatible pin-controller. > - "samsung,exynos5410-pinctrl": for Exynos5410 compatible pin-controller. > - "samsung,exynos5420-pinctrl": for Exynos5420 compatible pin-controller. > + - "samsung,exynos5433-pinctrl": for Exynos5433 compatible pin-controller. > - "samsung,exynos7-pinctrl": for Exynos7 compatible pin-controller. > > - reg: Base address of the pin controller hardware module and length of > diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c > index 051b5bf701a8..4f95983e0cdd 100644 > --- a/drivers/pinctrl/samsung/pinctrl-exynos.c > +++ b/drivers/pinctrl/samsung/pinctrl-exynos.c > @@ -1350,6 +1350,11 @@ static const struct samsung_pin_bank_data exynos5433_pin_banks0[] = { > EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04), > EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08), > EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c), > + EXYNOS_PIN_BANK_EINTW_EXT(8, 0x020, "gpf1", 0x1004), > + EXYNOS_PIN_BANK_EINTW_EXT(4, 0x040, "gpf2", 0x1008), > + EXYNOS_PIN_BANK_EINTW_EXT(4, 0x060, "gpf3", 0x100c), > + EXYNOS_PIN_BANK_EINTW_EXT(8, 0x080, "gpf4", 0x1010), > + EXYNOS_PIN_BANK_EINTW_EXT(8, 0x0a0, "gpf5", 0x1014), > }; > > /* pin banks of exynos5433 pin-controller - AUD */ > diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.h b/drivers/pinctrl/samsung/pinctrl-exynos.h > index 0f0f7cedb2dc..4b737b6c434d 100644 > --- a/drivers/pinctrl/samsung/pinctrl-exynos.h > +++ b/drivers/pinctrl/samsung/pinctrl-exynos.h > @@ -79,6 +79,17 @@ > .name = id \ > } > > +#define EXYNOS_PIN_BANK_EINTW_EXT(pins, reg, id, offs) \ > + { \ > + .type = &bank_type_off, \ > + .pctl_offset = reg, \ > + .nr_pins = pins, \ > + .eint_type = EINT_TYPE_WKUP, \ > + .eint_offset = offs, \ > + .eint_ext = true, \ > + .name = id \ > + } > + > /** > * struct exynos_weint_data: irq specific data for all the wakeup interrupts > * generated by the external wakeup interrupt controller. > diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c b/drivers/pinctrl/samsung/pinctrl-samsung.c > index 513fe6b23248..57e22085c2db 100644 > --- a/drivers/pinctrl/samsung/pinctrl-samsung.c > +++ b/drivers/pinctrl/samsung/pinctrl-samsung.c > @@ -338,6 +338,7 @@ static void pin_to_reg_bank(struct samsung_pinctrl_drv_data *drvdata, > struct samsung_pin_bank **bank) > { > struct samsung_pin_bank *b; > + void __iomem *virt_base = drvdata->virt_base; > > b = drvdata->pin_banks; > > @@ -345,7 +346,10 @@ static void pin_to_reg_bank(struct samsung_pinctrl_drv_data *drvdata, > ((b->pin_base + b->nr_pins - 1) < pin)) > b++; > > - *reg = drvdata->virt_base + b->pctl_offset; > + if (b->eint_ext) > + virt_base = drvdata->ext_base; > + > + *reg = virt_base + b->pctl_offset; > *offset = pin - b->pin_base; > if (bank) > *bank = b; > @@ -523,10 +527,12 @@ static void samsung_gpio_set_value(struct gpio_chip *gc, > { > struct samsung_pin_bank *bank = gpiochip_get_data(gc); > const struct samsung_pin_bank_type *type = bank->type; > + void __iomem *virt_base = bank->eint_ext ? > + bank->drvdata->ext_base : bank->drvdata->virt_base; > void __iomem *reg; > u32 data; > > - reg = bank->drvdata->virt_base + bank->pctl_offset; > + reg = virt_base + bank->pctl_offset; > > data = readl(reg + type->reg_offset[PINCFG_TYPE_DAT]); > data &= ~(1 << offset); > @@ -553,8 +559,10 @@ static int samsung_gpio_get(struct gpio_chip *gc, unsigned offset) > u32 data; > struct samsung_pin_bank *bank = gpiochip_get_data(gc); > const struct samsung_pin_bank_type *type = bank->type; > + void __iomem *virt_base = bank->eint_ext ? > + bank->drvdata->ext_base : bank->drvdata->virt_base; > > - reg = bank->drvdata->virt_base + bank->pctl_offset; > + reg = virt_base + bank->pctl_offset; > > data = readl(reg + type->reg_offset[PINCFG_TYPE_DAT]); > data >>= offset; > @@ -574,6 +582,7 @@ static int samsung_gpio_set_direction(struct gpio_chip *gc, > const struct samsung_pin_bank_type *type; > struct samsung_pin_bank *bank; > struct samsung_pinctrl_drv_data *drvdata; > + void __iomem *virt_base; > void __iomem *reg; > u32 data, mask, shift; > > @@ -581,7 +590,8 @@ static int samsung_gpio_set_direction(struct gpio_chip *gc, > type = bank->type; > drvdata = bank->drvdata; > > - reg = drvdata->virt_base + bank->pctl_offset + > + virt_base = bank->eint_ext ? drvdata->ext_base : drvdata->virt_base; > + reg = virt_base + bank->pctl_offset + > type->reg_offset[PINCFG_TYPE_FUNC]; > > mask = (1 << type->fld_width[PINCFG_TYPE_FUNC]) - 1; > @@ -1007,6 +1017,7 @@ samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d, > bank->eint_type = bdata->eint_type; > bank->eint_mask = bdata->eint_mask; > bank->eint_offset = bdata->eint_offset; > + bank->eint_ext = bdata->eint_ext; > bank->name = bdata->name; > > spin_lock_init(&bank->slock); > @@ -1065,6 +1076,14 @@ static int samsung_pinctrl_probe(struct platform_device *pdev) > if (IS_ERR(drvdata->virt_base)) > return PTR_ERR(drvdata->virt_base); > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 1); > + if (res) { > + drvdata->ext_base = > + devm_ioremap(dev, res->start, resource_size(res)); > + if (!drvdata->ext_base) > + return -ENXIO; > + } > + > res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); > if (res) > drvdata->irq = res->start; > @@ -1102,16 +1121,20 @@ static int samsung_pinctrl_probe(struct platform_device *pdev) > static void samsung_pinctrl_suspend_dev( > struct samsung_pinctrl_drv_data *drvdata) > { > - void __iomem *virt_base = drvdata->virt_base; > + void __iomem *virt_base; > int i; > > for (i = 0; i < drvdata->nr_banks; i++) { > struct samsung_pin_bank *bank = &drvdata->pin_banks[i]; > - void __iomem *reg = virt_base + bank->pctl_offset; > + void __iomem *reg; > const u8 *offs = bank->type->reg_offset; > const u8 *widths = bank->type->fld_width; > enum pincfg_type type; > > + virt_base = bank->eint_ext ? > + drvdata->ext_base : drvdata->virt_base; > + reg = virt_base + bank->pctl_offset; > + > /* Registers without a powerdown config aren't lost */ > if (!widths[PINCFG_TYPE_CON_PDN]) > continue; > @@ -1148,7 +1171,7 @@ static void samsung_pinctrl_suspend_dev( > */ > static void samsung_pinctrl_resume_dev(struct samsung_pinctrl_drv_data *drvdata) > { > - void __iomem *virt_base = drvdata->virt_base; > + void __iomem *virt_base; > int i; > > if (drvdata->resume) > @@ -1156,11 +1179,15 @@ static void samsung_pinctrl_resume_dev(struct samsung_pinctrl_drv_data *drvdata) > > for (i = 0; i < drvdata->nr_banks; i++) { > struct samsung_pin_bank *bank = &drvdata->pin_banks[i]; > - void __iomem *reg = virt_base + bank->pctl_offset; > + void __iomem *reg; > const u8 *offs = bank->type->reg_offset; > const u8 *widths = bank->type->fld_width; > enum pincfg_type type; > > + virt_base = bank->eint_ext ? > + drvdata->ext_base : drvdata->virt_base; > + reg = virt_base + bank->pctl_offset; > + > /* Registers without a powerdown config aren't lost */ > if (!widths[PINCFG_TYPE_CON_PDN]) > continue; > diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.h b/drivers/pinctrl/samsung/pinctrl-samsung.h > index cd31bfaf62cb..3005135f4565 100644 > --- a/drivers/pinctrl/samsung/pinctrl-samsung.h > +++ b/drivers/pinctrl/samsung/pinctrl-samsung.h > @@ -131,6 +131,7 @@ struct samsung_pin_bank_data { > enum eint_type eint_type; > u32 eint_mask; > u32 eint_offset; > + bool eint_ext; > const char *name; > }; > > @@ -163,6 +164,7 @@ struct samsung_pin_bank { > enum eint_type eint_type; > u32 eint_mask; > u32 eint_offset; > + bool eint_ext; > const char *name; > > u32 pin_base; > @@ -201,6 +203,8 @@ struct samsung_pin_ctrl { > * struct samsung_pinctrl_drv_data: wrapper for holding driver data together. > * @node: global list node > * @virt_base: register base address of the controller. > + * @ext_base: external register base address of the controller. > + * @ext_base: external register base address of the controller. > * @dev: device instance representing the controller. > * @irq: interrpt number used by the controller to notify gpio interrupts. > * @ctrl: pin controller instance managed by the driver. > @@ -216,6 +220,7 @@ struct samsung_pin_ctrl { > struct samsung_pinctrl_drv_data { > struct list_head node; > void __iomem *virt_base; > + void __iomem *ext_base; > struct device *dev; > int irq; > >