From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Shevchenko, Andriy" Subject: Re: [PATCH 2/3 v2] GPIO: gpio-dwapb: Support Debounce Date: Fri, 5 Sep 2014 09:23:19 +0000 Message-ID: <1409908999.30155.85.camel@intel.com> References: <1409928798-31895-1-git-send-email-alvin.chen@intel.com> <1409928798-31895-3-git-send-email-alvin.chen@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com ([134.134.136.24]:63007 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756125AbaIEJYl (ORCPT ); Fri, 5 Sep 2014 05:24:41 -0400 In-Reply-To: <1409928798-31895-3-git-send-email-alvin.chen@intel.com> Content-Language: en-US Content-ID: <4C922FB006FE914981ECEA44D67094E8@intel.com> Sender: linux-gpio-owner@vger.kernel.org List-Id: linux-gpio@vger.kernel.org To: "Chen, Alvin" Cc: "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , "Kweh, Hock Leong" , "sebastian@breakpoint.cc" , "devicetree@vger.kernel.org" , "Ong, Boon Leong" , "gnurou@gmail.com" , "linus.walleij@linaro.org" , "linux-gpio@vger.kernel.org" , "grant.likely@linaro.org" , "Westerberg, Mika" , "dvhart@linux.intel.com" , "atull@opensource.altera.com" T24gRnJpLCAyMDE0LTA5LTA1IGF0IDA3OjUzIC0wNzAwLCBXZWlrZSBDaGVuIHdyb3RlOg0KPiBU aGlzIHBhdGNoIGVuYWJsZXMgJ2RlYm91bmNlJyBmb3IgdGhlIGRlc2lnbndhcmUgR1BJTywgYW5k DQo+IGl0IGlzIGJhc2VkIG9uIEpvc2VmIEFobWFkJ3MgcHJldmlvdXMgd29yay4NCg0KQ2FuIHdl IHNwbGl0IGR3YXBiX3JlYWQvd3JpdGUgaW50cm9kdWNpbmcgYW5kIGNoYW5naW5nIGZyb20gdGhp cyBwYXRjaA0KdG8gYSBzZXBhcmF0ZSBvbmU/DQoNCg0KPiBSZXZpZXdlZC1ieTogSG9jayBMZW9u ZyBLd2VoIDxob2NrLmxlb25nLmt3ZWhAaW50ZWwuY29tPg0KPiBSZXZpZXdlZC1ieTogU2hldmNo ZW5rbywgQW5kcml5IDxhbmRyaXkuc2hldmNoZW5rb0BpbnRlbC5jb20+DQoNCg0KPiBTaWduZWQt b2ZmLWJ5OiBXZWlrZSBDaGVuIDxhbHZpbi5jaGVuQGludGVsLmNvbT4NCj4gLS0tDQo+ICBkcml2 ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jIHwgICA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0NCj4gIDEgZmlsZSBjaGFuZ2VkLCA1MiBpbnNlcnRpb25zKCspLCAx MCBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1kd2Fw Yi5jIGIvZHJpdmVycy9ncGlvL2dwaW8tZHdhcGIuYw0KPiBpbmRleCBmMjI2NGEyLi42ZGI3NTAx IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jDQo+ICsrKyBiL2RyaXZl cnMvZ3Bpby9ncGlvLWR3YXBiLmMNCj4gQEAgLTM2LDYgKzM2LDcgQEANCj4gICNkZWZpbmUgR1BJ T19JTlRUWVBFX0xFVkVMCTB4MzgNCj4gICNkZWZpbmUgR1BJT19JTlRfUE9MQVJJVFkJMHgzYw0K PiAgI2RlZmluZSBHUElPX0lOVFNUQVRVUwkJMHg0MA0KPiArI2RlZmluZSBHUElPX1BPUlRBX0RF Qk9VTkNFCTB4NDgNCj4gICNkZWZpbmUgR1BJT19QT1JUQV9FT0kJCTB4NGMNCj4gICNkZWZpbmUg R1BJT19FWFRfUE9SVEEJCTB4NTANCj4gICNkZWZpbmUgR1BJT19FWFRfUE9SVEIJCTB4NTQNCj4g QEAgLTYzLDYgKzY0LDIzIEBAIHN0cnVjdCBkd2FwYl9ncGlvIHsNCj4gIAlzdHJ1Y3QgaXJxX2Rv bWFpbgkqZG9tYWluOw0KPiAgfTsNCj4gIA0KPiArc3RhdGljIGlubGluZSB1MzIgZHdhcGJfcmVh ZChzdHJ1Y3QgZHdhcGJfZ3BpbyAqZ3BpbywgdW5zaWduZWQgaW50IG9mZnNldCkNCj4gK3sNCj4g KwlzdHJ1Y3QgYmdwaW9fY2hpcCAqYmdjCT0gJmdwaW8tPnBvcnRzWzBdLmJnYzsNCj4gKwl2b2lk IF9faW9tZW0gKnJlZ19iYXNlCT0gZ3Bpby0+cmVnczsNCj4gKw0KPiArCXJldHVybiBiZ2MtPnJl YWRfcmVnKHJlZ19iYXNlICsgb2Zmc2V0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2 b2lkIGR3YXBiX3dyaXRlKHN0cnVjdCBkd2FwYl9ncGlvICpncGlvLCB1bnNpZ25lZCBpbnQgb2Zm c2V0LA0KPiArCQkJICAgICAgIHUzMiB2YWwpDQo+ICt7DQo+ICsJc3RydWN0IGJncGlvX2NoaXAg KmJnYwk9ICZncGlvLT5wb3J0c1swXS5iZ2M7DQo+ICsJdm9pZCBfX2lvbWVtICpyZWdfYmFzZQk9 IGdwaW8tPnJlZ3M7DQo+ICsNCj4gKwliZ2MtPndyaXRlX3JlZyhyZWdfYmFzZSArIG9mZnNldCwg dmFsKTsNCj4gK30NCj4gKw0KPiAgc3RhdGljIGludCBkd2FwYl9ncGlvX3RvX2lycShzdHJ1Y3Qg Z3Bpb19jaGlwICpnYywgdW5zaWduZWQgb2Zmc2V0KQ0KPiAgew0KPiAgCXN0cnVjdCBiZ3Bpb19j aGlwICpiZ2MgPSB0b19iZ3Bpb19jaGlwKGdjKTsNCj4gQEAgLTc1LDE0ICs5MywxNCBAQCBzdGF0 aWMgaW50IGR3YXBiX2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBv ZmZzZXQpDQo+ICANCj4gIHN0YXRpYyB2b2lkIGR3YXBiX3RvZ2dsZV90cmlnZ2VyKHN0cnVjdCBk d2FwYl9ncGlvICpncGlvLCB1bnNpZ25lZCBpbnQgb2ZmcykNCj4gIHsNCj4gLQl1MzIgdiA9IHJl YWRsKGdwaW8tPnJlZ3MgKyBHUElPX0lOVF9QT0xBUklUWSk7DQo+ICsJdTMyIHYgPSBkd2FwYl9y ZWFkKGdwaW8sIEdQSU9fSU5UX1BPTEFSSVRZKTsNCj4gIA0KPiAgCWlmIChncGlvX2dldF92YWx1 ZShncGlvLT5wb3J0c1swXS5iZ2MuZ2MuYmFzZSArIG9mZnMpKQ0KPiAgCQl2ICY9IH5CSVQob2Zm cyk7DQo+ICAJZWxzZQ0KPiAgCQl2IHw9IEJJVChvZmZzKTsNCj4gIA0KPiAtCXdyaXRlbCh2LCBn cGlvLT5yZWdzICsgR1BJT19JTlRfUE9MQVJJVFkpOw0KPiArCWR3YXBiX3dyaXRlKGdwaW8sIEdQ SU9fSU5UX1BPTEFSSVRZLCB2KTsNCj4gIH0NCj4gIA0KPiAgc3RhdGljIHUzMiBfZHdhcGJfaXJx X2hhbmRsZXIoc3RydWN0IGR3YXBiX2dwaW8gKmdwaW8pDQo+IEBAIC0xMjUsOSArMTQzLDkgQEAg c3RhdGljIHZvaWQgZHdhcGJfaXJxX2VuYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpDQo+ICAJdTMy IHZhbDsNCj4gIA0KPiAgCXNwaW5fbG9ja19pcnFzYXZlKCZiZ2MtPmxvY2ssIGZsYWdzKTsNCj4g LQl2YWwgPSByZWFkbChncGlvLT5yZWdzICsgR1BJT19JTlRFTik7DQo+ICsJdmFsID0gZHdhcGJf cmVhZChncGlvLCBHUElPX0lOVEVOKTsNCj4gIAl2YWwgfD0gQklUKGQtPmh3aXJxKTsNCj4gLQl3 cml0ZWwodmFsLCBncGlvLT5yZWdzICsgR1BJT19JTlRFTik7DQo+ICsJZHdhcGJfd3JpdGUoZ3Bp bywgR1BJT19JTlRFTiwgdmFsKTsNCj4gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZ2MtPmxv Y2ssIGZsYWdzKTsNCj4gIH0NCj4gIA0KPiBAQCAtMTQwLDkgKzE1OCw5IEBAIHN0YXRpYyB2b2lk IGR3YXBiX2lycV9kaXNhYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkNCj4gIAl1MzIgdmFsOw0KPiAg DQo+ICAJc3Bpbl9sb2NrX2lycXNhdmUoJmJnYy0+bG9jaywgZmxhZ3MpOw0KPiAtCXZhbCA9IHJl YWRsKGdwaW8tPnJlZ3MgKyBHUElPX0lOVEVOKTsNCj4gKwl2YWwgPSBkd2FwYl9yZWFkKGdwaW8s IEdQSU9fSU5URU4pOw0KPiAgCXZhbCAmPSB+QklUKGQtPmh3aXJxKTsNCj4gLQl3cml0ZWwodmFs LCBncGlvLT5yZWdzICsgR1BJT19JTlRFTik7DQo+ICsJZHdhcGJfd3JpdGUoZ3BpbywgR1BJT19J TlRFTiwgdmFsKTsNCj4gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZ2MtPmxvY2ssIGZsYWdz KTsNCj4gIH0NCj4gIA0KPiBAQCAtMTgyLDggKzIwMCw4IEBAIHN0YXRpYyBpbnQgZHdhcGJfaXJx X3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdTMyIHR5cGUpDQo+ICAJCXJldHVybiAtRUlO VkFMOw0KPiAgDQo+ICAJc3Bpbl9sb2NrX2lycXNhdmUoJmJnYy0+bG9jaywgZmxhZ3MpOw0KPiAt CWxldmVsID0gcmVhZGwoZ3Bpby0+cmVncyArIEdQSU9fSU5UVFlQRV9MRVZFTCk7DQo+IC0JcG9s YXJpdHkgPSByZWFkbChncGlvLT5yZWdzICsgR1BJT19JTlRfUE9MQVJJVFkpOw0KPiArCWxldmVs ID0gZHdhcGJfcmVhZChncGlvLCBHUElPX0lOVFRZUEVfTEVWRUwpOw0KPiArCXBvbGFyaXR5ID0g ZHdhcGJfcmVhZChncGlvLCBHUElPX0lOVF9QT0xBUklUWSk7DQo+ICANCj4gIAlzd2l0Y2ggKHR5 cGUpIHsNCj4gIAljYXNlIElSUV9UWVBFX0VER0VfQk9USDoNCj4gQEAgLTIxMCw4ICsyMjgsMzEg QEAgc3RhdGljIGludCBkd2FwYl9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1MzIg dHlwZSkNCj4gIA0KPiAgCWlycV9zZXR1cF9hbHRfY2hpcChkLCB0eXBlKTsNCj4gIA0KPiAtCXdy aXRlbChsZXZlbCwgZ3Bpby0+cmVncyArIEdQSU9fSU5UVFlQRV9MRVZFTCk7DQo+IC0Jd3JpdGVs KHBvbGFyaXR5LCBncGlvLT5yZWdzICsgR1BJT19JTlRfUE9MQVJJVFkpOw0KPiArCWR3YXBiX3dy aXRlKGdwaW8sIEdQSU9fSU5UVFlQRV9MRVZFTCwgbGV2ZWwpOw0KPiArCWR3YXBiX3dyaXRlKGdw aW8sIEdQSU9fSU5UX1BPTEFSSVRZLCBwb2xhcml0eSk7DQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmYmdjLT5sb2NrLCBmbGFncyk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArc3RhdGljIGludCBkd2FwYl9ncGlvX3NldF9kZWJvdW5jZShzdHJ1Y3QgZ3Bpb19jaGlwICpn YywNCj4gKwkJCQkgICB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGRlYm91bmNlKQ0KPiArew0K PiArCXN0cnVjdCBiZ3Bpb19jaGlwICpiZ2MgPSB0b19iZ3Bpb19jaGlwKGdjKTsNCj4gKwlzdHJ1 Y3QgZHdhcGJfZ3Bpb19wb3J0ICpwb3J0ID0NCj4gKwkJCWNvbnRhaW5lcl9vZihiZ2MsIHN0cnVj dCBkd2FwYl9ncGlvX3BvcnQsIGJnYyk7DQo+ICsJc3RydWN0IGR3YXBiX2dwaW8gKmdwaW8gPSBw b3J0LT5ncGlvOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbF9kZWI7DQo+ICsJdW5zaWdu ZWQgbG9uZyBtYXNrID0gYmdjLT5waW4ybWFzayhiZ2MsIG9mZnNldCk7DQo+ICsNCj4gKwlzcGlu X2xvY2tfaXJxc2F2ZSgmYmdjLT5sb2NrLCBmbGFncyk7DQo+ICsNCj4gKwl2YWxfZGViID0gZHdh cGJfcmVhZChncGlvLCBHUElPX1BPUlRBX0RFQk9VTkNFKTsNCj4gKwlpZiAoZGVib3VuY2UpDQo+ ICsJCWR3YXBiX3dyaXRlKGdwaW8sIEdQSU9fUE9SVEFfREVCT1VOQ0UsIG1hc2sgfCB2YWxfZGVi KTsNCj4gKwllbHNlDQo+ICsJCWR3YXBiX3dyaXRlKGdwaW8sIEdQSU9fUE9SVEFfREVCT1VOQ0Us IH5tYXNrICYgdmFsX2RlYik7DQo+ICsNCj4gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZ2Mt PmxvY2ssIGZsYWdzKTsNCj4gIA0KPiAgCXJldHVybiAwOw0KPiBAQCAtMzU0LDYgKzM5NSw3IEBA IHN0YXRpYyBpbnQgZHdhcGJfZ3Bpb19hZGRfcG9ydChzdHJ1Y3QgZHdhcGJfZ3BpbyAqZ3BpbywN Cj4gICNlbmRpZg0KPiAgCXBvcnQtPmJnYy5nYy5uZ3BpbyA9IHBwLT5uZ3BpbzsNCj4gIAlwb3J0 LT5iZ2MuZ2MuYmFzZSA9IHBwLT5ncGlvX2Jhc2U7DQo+ICsJcG9ydC0+YmdjLmdjLnNldF9kZWJv dW5jZSA9IGR3YXBiX2dwaW9fc2V0X2RlYm91bmNlOw0KPiAgDQo+ICAJaWYgKHBwLT5pcnEpDQo+ ICAJCWR3YXBiX2NvbmZpZ3VyZV9pcnFzKGdwaW8sIHBvcnQsIHBwKTsNCg0KDQotLSANCkFuZHkg U2hldmNoZW5rbyA8YW5kcml5LnNoZXZjaGVua29AaW50ZWwuY29tPg0KSW50ZWwgRmlubGFuZCBP eQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCkludGVsIEZpbmxhbmQgT3kKUmVnaXN0ZXJlZCBBZGRyZXNzOiBQTCAy ODEsIDAwMTgxIEhlbHNpbmtpIApCdXNpbmVzcyBJZGVudGl0eSBDb2RlOiAwMzU3NjA2IC0gNCAK RG9taWNpbGVkIGluIEhlbHNpbmtpIAoKVGhpcyBlLW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBt YXkgY29udGFpbiBjb25maWRlbnRpYWwgbWF0ZXJpYWwgZm9yCnRoZSBzb2xlIHVzZSBvZiB0aGUg aW50ZW5kZWQgcmVjaXBpZW50KHMpLiBBbnkgcmV2aWV3IG9yIGRpc3RyaWJ1dGlvbgpieSBvdGhl cnMgaXMgc3RyaWN0bHkgcHJvaGliaXRlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkCnJl Y2lwaWVudCwgcGxlYXNlIGNvbnRhY3QgdGhlIHNlbmRlciBhbmQgZGVsZXRlIGFsbCBjb3BpZXMu Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756534AbaIEJYn (ORCPT ); Fri, 5 Sep 2014 05:24:43 -0400 Received: from mga09.intel.com ([134.134.136.24]:63007 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756125AbaIEJYl (ORCPT ); Fri, 5 Sep 2014 05:24:41 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.04,471,1406617200"; d="scan'208";a="568779929" From: "Shevchenko, Andriy" To: "Chen, Alvin" CC: "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , "Kweh, Hock Leong" , "sebastian@breakpoint.cc" , "devicetree@vger.kernel.org" , "Ong, Boon Leong" , "gnurou@gmail.com" , "linus.walleij@linaro.org" , "linux-gpio@vger.kernel.org" , "grant.likely@linaro.org" , "Westerberg, Mika" , "dvhart@linux.intel.com" , "atull@opensource.altera.com" Subject: Re: [PATCH 2/3 v2] GPIO: gpio-dwapb: Support Debounce Thread-Topic: [PATCH 2/3 v2] GPIO: gpio-dwapb: Support Debounce Thread-Index: AQHPyNcp8n6awOMU40SWtvGXv+WZgZvyM52A Date: Fri, 5 Sep 2014 09:23:19 +0000 Message-ID: <1409908999.30155.85.camel@intel.com> References: <1409928798-31895-1-git-send-email-alvin.chen@intel.com> <1409928798-31895-3-git-send-email-alvin.chen@intel.com> In-Reply-To: <1409928798-31895-3-git-send-email-alvin.chen@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.237.72.168] Content-Type: text/plain; charset="utf-8" Content-ID: <4C922FB006FE914981ECEA44D67094E8@intel.com> MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id s859Opj1015976 On Fri, 2014-09-05 at 07:53 -0700, Weike Chen wrote: > This patch enables 'debounce' for the designware GPIO, and > it is based on Josef Ahmad's previous work. Can we split dwapb_read/write introducing and changing from this patch to a separate one? > Reviewed-by: Hock Leong Kweh > Reviewed-by: Shevchenko, Andriy > Signed-off-by: Weike Chen > --- > drivers/gpio/gpio-dwapb.c | 62 +++++++++++++++++++++++++++++++++++++-------- > 1 file changed, 52 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c > index f2264a2..6db7501 100644 > --- a/drivers/gpio/gpio-dwapb.c > +++ b/drivers/gpio/gpio-dwapb.c > @@ -36,6 +36,7 @@ > #define GPIO_INTTYPE_LEVEL 0x38 > #define GPIO_INT_POLARITY 0x3c > #define GPIO_INTSTATUS 0x40 > +#define GPIO_PORTA_DEBOUNCE 0x48 > #define GPIO_PORTA_EOI 0x4c > #define GPIO_EXT_PORTA 0x50 > #define GPIO_EXT_PORTB 0x54 > @@ -63,6 +64,23 @@ struct dwapb_gpio { > struct irq_domain *domain; > }; > > +static inline u32 dwapb_read(struct dwapb_gpio *gpio, unsigned int offset) > +{ > + struct bgpio_chip *bgc = &gpio->ports[0].bgc; > + void __iomem *reg_base = gpio->regs; > + > + return bgc->read_reg(reg_base + offset); > +} > + > +static inline void dwapb_write(struct dwapb_gpio *gpio, unsigned int offset, > + u32 val) > +{ > + struct bgpio_chip *bgc = &gpio->ports[0].bgc; > + void __iomem *reg_base = gpio->regs; > + > + bgc->write_reg(reg_base + offset, val); > +} > + > static int dwapb_gpio_to_irq(struct gpio_chip *gc, unsigned offset) > { > struct bgpio_chip *bgc = to_bgpio_chip(gc); > @@ -75,14 +93,14 @@ static int dwapb_gpio_to_irq(struct gpio_chip *gc, unsigned offset) > > static void dwapb_toggle_trigger(struct dwapb_gpio *gpio, unsigned int offs) > { > - u32 v = readl(gpio->regs + GPIO_INT_POLARITY); > + u32 v = dwapb_read(gpio, GPIO_INT_POLARITY); > > if (gpio_get_value(gpio->ports[0].bgc.gc.base + offs)) > v &= ~BIT(offs); > else > v |= BIT(offs); > > - writel(v, gpio->regs + GPIO_INT_POLARITY); > + dwapb_write(gpio, GPIO_INT_POLARITY, v); > } > > static u32 _dwapb_irq_handler(struct dwapb_gpio *gpio) > @@ -125,9 +143,9 @@ static void dwapb_irq_enable(struct irq_data *d) > u32 val; > > spin_lock_irqsave(&bgc->lock, flags); > - val = readl(gpio->regs + GPIO_INTEN); > + val = dwapb_read(gpio, GPIO_INTEN); > val |= BIT(d->hwirq); > - writel(val, gpio->regs + GPIO_INTEN); > + dwapb_write(gpio, GPIO_INTEN, val); > spin_unlock_irqrestore(&bgc->lock, flags); > } > > @@ -140,9 +158,9 @@ static void dwapb_irq_disable(struct irq_data *d) > u32 val; > > spin_lock_irqsave(&bgc->lock, flags); > - val = readl(gpio->regs + GPIO_INTEN); > + val = dwapb_read(gpio, GPIO_INTEN); > val &= ~BIT(d->hwirq); > - writel(val, gpio->regs + GPIO_INTEN); > + dwapb_write(gpio, GPIO_INTEN, val); > spin_unlock_irqrestore(&bgc->lock, flags); > } > > @@ -182,8 +200,8 @@ static int dwapb_irq_set_type(struct irq_data *d, u32 type) > return -EINVAL; > > spin_lock_irqsave(&bgc->lock, flags); > - level = readl(gpio->regs + GPIO_INTTYPE_LEVEL); > - polarity = readl(gpio->regs + GPIO_INT_POLARITY); > + level = dwapb_read(gpio, GPIO_INTTYPE_LEVEL); > + polarity = dwapb_read(gpio, GPIO_INT_POLARITY); > > switch (type) { > case IRQ_TYPE_EDGE_BOTH: > @@ -210,8 +228,31 @@ static int dwapb_irq_set_type(struct irq_data *d, u32 type) > > irq_setup_alt_chip(d, type); > > - writel(level, gpio->regs + GPIO_INTTYPE_LEVEL); > - writel(polarity, gpio->regs + GPIO_INT_POLARITY); > + dwapb_write(gpio, GPIO_INTTYPE_LEVEL, level); > + dwapb_write(gpio, GPIO_INT_POLARITY, polarity); > + spin_unlock_irqrestore(&bgc->lock, flags); > + > + return 0; > +} > + > +static int dwapb_gpio_set_debounce(struct gpio_chip *gc, > + unsigned offset, unsigned debounce) > +{ > + struct bgpio_chip *bgc = to_bgpio_chip(gc); > + struct dwapb_gpio_port *port = > + container_of(bgc, struct dwapb_gpio_port, bgc); > + struct dwapb_gpio *gpio = port->gpio; > + unsigned long flags, val_deb; > + unsigned long mask = bgc->pin2mask(bgc, offset); > + > + spin_lock_irqsave(&bgc->lock, flags); > + > + val_deb = dwapb_read(gpio, GPIO_PORTA_DEBOUNCE); > + if (debounce) > + dwapb_write(gpio, GPIO_PORTA_DEBOUNCE, mask | val_deb); > + else > + dwapb_write(gpio, GPIO_PORTA_DEBOUNCE, ~mask & val_deb); > + > spin_unlock_irqrestore(&bgc->lock, flags); > > return 0; > @@ -354,6 +395,7 @@ static int dwapb_gpio_add_port(struct dwapb_gpio *gpio, > #endif > port->bgc.gc.ngpio = pp->ngpio; > port->bgc.gc.base = pp->gpio_base; > + port->bgc.gc.set_debounce = dwapb_gpio_set_debounce; > > if (pp->irq) > dwapb_configure_irqs(gpio, port, pp); -- Andy Shevchenko Intel Finland Oy --------------------------------------------------------------------- Intel Finland Oy Registered Address: PL 281, 00181 Helsinki Business Identity Code: 0357606 - 4 Domiciled in Helsinki This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies. {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I