From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA7F6C43464 for ; Mon, 21 Sep 2020 11:48:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 983B52145D for ; Mon, 21 Sep 2020 11:48:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="ddHq8n6E" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726858AbgIULst (ORCPT ); Mon, 21 Sep 2020 07:48:49 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:58183 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726510AbgIULsr (ORCPT ); Mon, 21 Sep 2020 07:48:47 -0400 X-UUID: 1801402b57dc43d192f950df819353ee-20200921 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=0aqTZVk9bRmcAMVjVp+RRfkroYKT6fTuKxtG5i1XBcY=; b=ddHq8n6Ea0ABRlEOKw/LzT35l4lw7Jvmt3IiHjWqCcMFoTiZulsNpKTvfya9y5h8acz9XUIyoKBsBZhFLBDIdgPSZY3WytwZfhOIk8DRGZ12GeUn/2PNRPgsIwUoXfKneFaD/DgD5GYufwzXLJvf+0OoIz6k/HADWqJWrLecOrQ=; X-UUID: 1801402b57dc43d192f950df819353ee-20200921 Received: from mtkcas07.mediatek.inc [(172.21.101.84)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.14 Build 0819 with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 946838051; Mon, 21 Sep 2020 19:48:40 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs05n1.mediatek.inc (172.21.101.15) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 21 Sep 2020 19:48:37 +0800 Received: from mtksdaap41.mediatek.inc (172.21.77.4) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 21 Sep 2020 19:48:39 +0800 From: Hsin-Hsiung Wang To: Lee Jones , Rob Herring , Matthias Brugger , Liam Girdwood , Mark Brown CC: Hsin-Hsiung Wang , , , , , Subject: [PATCH v2 1/8] mfd: mt6358: refine interrupt code Date: Mon, 21 Sep 2020 19:48:08 +0800 Message-ID: <1600688895-9238-2-git-send-email-hsin-hsiung.wang@mediatek.com> X-Mailer: git-send-email 2.6.4 In-Reply-To: <1600688895-9238-1-git-send-email-hsin-hsiung.wang@mediatek.com> References: <1600688895-9238-1-git-send-email-hsin-hsiung.wang@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VGhpcyBwYXRjaCByZWZpbmVzIHRoZSBpbnRlcnJ1cHQgcmVsYXRlZCBjb2RlIHRvIHN1cHBvcnQg bmV3IGNoaXBzLg0KDQpTaWduZWQtb2ZmLWJ5OiBIc2luLUhzaXVuZyBXYW5nIDxoc2luLWhzaXVu Zy53YW5nQG1lZGlhdGVrLmNvbT4NCi0tLQ0KIGRyaXZlcnMvbWZkL210NjM1OC1pcnEuYyAgICAg ICAgfCA2NSArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQ0KIGluY2x1 ZGUvbGludXgvbWZkL210NjM1OC9jb3JlLmggfCAgOCArKy0tLQ0KIDIgZmlsZXMgY2hhbmdlZCwg NDEgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9kcml2ZXJz L21mZC9tdDYzNTgtaXJxLmMgYi9kcml2ZXJzL21mZC9tdDYzNTgtaXJxLmMNCmluZGV4IGRiNzM0 ZjIuLjRiMDk0ZTUgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL21mZC9tdDYzNTgtaXJxLmMNCisrKyBi L2RyaXZlcnMvbWZkL210NjM1OC1pcnEuYw0KQEAgLTEzLDcgKzEzLDkgQEANCiAjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQogI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0KIA0K LXN0YXRpYyBzdHJ1Y3QgaXJxX3RvcF90IG10NjM1OF9pbnRzW10gPSB7DQorI2RlZmluZSBNVEtf UE1JQ19SRUdfV0lEVEggMTYNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV90b3BfdCBtdDYz NThfaW50c1tdID0gew0KIAlNVDYzNThfVE9QX0dFTihCVUNLKSwNCiAJTVQ2MzU4X1RPUF9HRU4o TERPKSwNCiAJTVQ2MzU4X1RPUF9HRU4oUFNDKSwNCkBAIC0yNCw2ICsyNiwxMyBAQCBzdGF0aWMg c3RydWN0IGlycV90b3BfdCBtdDYzNThfaW50c1tdID0gew0KIAlNVDYzNThfVE9QX0dFTihNSVND KSwNCiB9Ow0KIA0KK3N0YXRpYyBzdHJ1Y3QgcG1pY19pcnFfZGF0YSBtdDYzNThfaXJxZCA9IHsN CisJLm51bV90b3AgPSBBUlJBWV9TSVpFKG10NjM1OF9pbnRzKSwNCisJLm51bV9wbWljX2lycXMg PSBNVDYzNThfSVJRX05SLA0KKwkudG9wX2ludF9zdGF0dXNfcmVnID0gTVQ2MzU4X1RPUF9JTlRf U1RBVFVTMCwNCisJLnBtaWNfaW50cyA9IG10NjM1OF9pbnRzLA0KK307DQorDQogc3RhdGljIHZv aWQgcG1pY19pcnFfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCiB7DQogCXVuc2lnbmVk IGludCBod2lycSA9IGlycWRfdG9faHdpcnEoZGF0YSk7DQpAQCAtNjIsMTUgKzcxLDE1IEBAIHN0 YXRpYyB2b2lkIHBtaWNfaXJxX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCiAJ CS8qIEZpbmQgb3V0IHRoZSBJUlEgZ3JvdXAgKi8NCiAJCXRvcF9ncCA9IDA7DQogCQl3aGlsZSAo KHRvcF9ncCArIDEpIDwgaXJxZC0+bnVtX3RvcCAmJg0KLQkJICAgICAgIGkgPj0gbXQ2MzU4X2lu dHNbdG9wX2dwICsgMV0uaHdpcnFfYmFzZSkNCisJCSAgICAgICBpID49IGlycWQtPnBtaWNfaW50 c1t0b3BfZ3AgKyAxXS5od2lycV9iYXNlKQ0KIAkJCXRvcF9ncCsrOw0KIA0KIAkJLyogRmluZCB0 aGUgSVJRIHJlZ2lzdGVycyAqLw0KLQkJZ3Bfb2Zmc2V0ID0gaSAtIG10NjM1OF9pbnRzW3RvcF9n cF0uaHdpcnFfYmFzZTsNCi0JCWludF9yZWdzID0gZ3Bfb2Zmc2V0IC8gTVQ2MzU4X1JFR19XSURU SDsNCi0JCXNoaWZ0ID0gZ3Bfb2Zmc2V0ICUgTVQ2MzU4X1JFR19XSURUSDsNCi0JCWVuX3JlZyA9 IG10NjM1OF9pbnRzW3RvcF9ncF0uZW5fcmVnICsNCi0JCQkgKG10NjM1OF9pbnRzW3RvcF9ncF0u ZW5fcmVnX3NoaWZ0ICogaW50X3JlZ3MpOw0KKwkJZ3Bfb2Zmc2V0ID0gaSAtIGlycWQtPnBtaWNf aW50c1t0b3BfZ3BdLmh3aXJxX2Jhc2U7DQorCQlpbnRfcmVncyA9IGdwX29mZnNldCAvIE1US19Q TUlDX1JFR19XSURUSDsNCisJCXNoaWZ0ID0gZ3Bfb2Zmc2V0ICUgTVRLX1BNSUNfUkVHX1dJRFRI Ow0KKwkJZW5fcmVnID0gaXJxZC0+cG1pY19pbnRzW3RvcF9ncF0uZW5fcmVnICsNCisJCQkgKGly cWQtPnBtaWNfaW50c1t0b3BfZ3BdLmVuX3JlZ19zaGlmdCAqIGludF9yZWdzKTsNCiANCiAJCXJl Z21hcF91cGRhdGVfYml0cyhjaGlwLT5yZWdtYXAsIGVuX3JlZywgQklUKHNoaWZ0KSwNCiAJCQkJ ICAgaXJxZC0+ZW5hYmxlX2h3aXJxW2ldIDw8IHNoaWZ0KTsNCkBAIC05NSwxMCArMTA0LDExIEBA IHN0YXRpYyB2b2lkIG10NjM1OF9pcnFfc3BfaGFuZGxlcihzdHJ1Y3QgbXQ2Mzk3X2NoaXAgKmNo aXAsDQogCXVuc2lnbmVkIGludCBpcnFfc3RhdHVzLCBzdGFfcmVnLCBzdGF0dXM7DQogCXVuc2ln bmVkIGludCBod2lycSwgdmlycTsNCiAJaW50IGksIGosIHJldDsNCisJc3RydWN0IHBtaWNfaXJx X2RhdGEgKmlycWQgPSBjaGlwLT5pcnFfZGF0YTsNCiANCi0JZm9yIChpID0gMDsgaSA8IG10NjM1 OF9pbnRzW3RvcF9ncF0ubnVtX2ludF9yZWdzOyBpKyspIHsNCi0JCXN0YV9yZWcgPSBtdDYzNThf aW50c1t0b3BfZ3BdLnN0YV9yZWcgKw0KLQkJCW10NjM1OF9pbnRzW3RvcF9ncF0uc3RhX3JlZ19z aGlmdCAqIGk7DQorCWZvciAoaSA9IDA7IGkgPCBpcnFkLT5wbWljX2ludHNbdG9wX2dwXS5udW1f aW50X3JlZ3M7IGkrKykgew0KKwkJc3RhX3JlZyA9IGlycWQtPnBtaWNfaW50c1t0b3BfZ3BdLnN0 YV9yZWcgKw0KKwkJCWlycWQtPnBtaWNfaW50c1t0b3BfZ3BdLnN0YV9yZWdfc2hpZnQgKiBpOw0K IA0KIAkJcmV0ID0gcmVnbWFwX3JlYWQoY2hpcC0+cmVnbWFwLCBzdGFfcmVnLCAmaXJxX3N0YXR1 cyk7DQogCQlpZiAocmV0KSB7DQpAQCAtMTE0LDggKzEyNCw4IEBAIHN0YXRpYyB2b2lkIG10NjM1 OF9pcnFfc3BfaGFuZGxlcihzdHJ1Y3QgbXQ2Mzk3X2NoaXAgKmNoaXAsDQogCQlkbyB7DQogCQkJ aiA9IF9fZmZzKHN0YXR1cyk7DQogDQotCQkJaHdpcnEgPSBtdDYzNThfaW50c1t0b3BfZ3BdLmh3 aXJxX2Jhc2UgKw0KLQkJCQlNVDYzNThfUkVHX1dJRFRIICogaSArIGo7DQorCQkJaHdpcnEgPSBp cnFkLT5wbWljX2ludHNbdG9wX2dwXS5od2lycV9iYXNlICsNCisJCQkJTVRLX1BNSUNfUkVHX1dJ RFRIICogaSArIGo7DQogDQogCQkJdmlycSA9IGlycV9maW5kX21hcHBpbmcoY2hpcC0+aXJxX2Rv bWFpbiwgaHdpcnEpOw0KIAkJCWlmICh2aXJxKQ0KQEAgLTEzMSwxMiArMTQxLDEyIEBAIHN0YXRp YyB2b2lkIG10NjM1OF9pcnFfc3BfaGFuZGxlcihzdHJ1Y3QgbXQ2Mzk3X2NoaXAgKmNoaXAsDQog c3RhdGljIGlycXJldHVybl90IG10NjM1OF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRh KQ0KIHsNCiAJc3RydWN0IG10NjM5N19jaGlwICpjaGlwID0gZGF0YTsNCi0Jc3RydWN0IHBtaWNf aXJxX2RhdGEgKm10NjM1OF9pcnFfZGF0YSA9IGNoaXAtPmlycV9kYXRhOw0KKwlzdHJ1Y3QgcG1p Y19pcnFfZGF0YSAqaXJxZCA9IGNoaXAtPmlycV9kYXRhOw0KIAl1bnNpZ25lZCBpbnQgYml0LCBp LCB0b3BfaXJxX3N0YXR1cyA9IDA7DQogCWludCByZXQ7DQogDQogCXJldCA9IHJlZ21hcF9yZWFk KGNoaXAtPnJlZ21hcCwNCi0JCQkgIG10NjM1OF9pcnFfZGF0YS0+dG9wX2ludF9zdGF0dXNfcmVn LA0KKwkJCSAgaXJxZC0+dG9wX2ludF9zdGF0dXNfcmVnLA0KIAkJCSAgJnRvcF9pcnFfc3RhdHVz KTsNCiAJaWYgKHJldCkgew0KIAkJZGV2X2VycihjaGlwLT5kZXYsDQpAQCAtMTQ0LDggKzE1NCw4 IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBtdDYzNThfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAq ZGF0YSkNCiAJCXJldHVybiBJUlFfTk9ORTsNCiAJfQ0KIA0KLQlmb3IgKGkgPSAwOyBpIDwgbXQ2 MzU4X2lycV9kYXRhLT5udW1fdG9wOyBpKyspIHsNCi0JCWJpdCA9IEJJVChtdDYzNThfaW50c1tp XS50b3Bfb2Zmc2V0KTsNCisJZm9yIChpID0gMDsgaSA8IGlycWQtPm51bV90b3A7IGkrKykgew0K KwkJYml0ID0gQklUKGlycWQtPnBtaWNfaW50c1tpXS50b3Bfb2Zmc2V0KTsNCiAJCWlmICh0b3Bf aXJxX3N0YXR1cyAmIGJpdCkgew0KIAkJCW10NjM1OF9pcnFfc3BfaGFuZGxlcihjaGlwLCBpKTsN CiAJCQl0b3BfaXJxX3N0YXR1cyAmPSB+Yml0Ow0KQEAgLTE4MCwxNyArMTkwLDE4IEBAIGludCBt dDYzNThfaXJxX2luaXQoc3RydWN0IG10NjM5N19jaGlwICpjaGlwKQ0KIAlpbnQgaSwgaiwgcmV0 Ow0KIAlzdHJ1Y3QgcG1pY19pcnFfZGF0YSAqaXJxZDsNCiANCi0JaXJxZCA9IGRldm1fa3phbGxv YyhjaGlwLT5kZXYsIHNpemVvZigqaXJxZCksIEdGUF9LRVJORUwpOw0KLQlpZiAoIWlycWQpDQot CQlyZXR1cm4gLUVOT01FTTsNCisJc3dpdGNoIChjaGlwLT5jaGlwX2lkKSB7DQorCWNhc2UgTVQ2 MzU4X0NISVBfSUQ6DQorCQljaGlwLT5pcnFfZGF0YSA9ICZtdDYzNThfaXJxZDsNCisJCWJyZWFr Ow0KIA0KLQljaGlwLT5pcnFfZGF0YSA9IGlycWQ7DQorCWRlZmF1bHQ6DQorCQlkZXZfZXJyKGNo aXAtPmRldiwgInVuc3VwcG9ydGVkIGNoaXA6IDB4JXhcbiIsIGNoaXAtPmNoaXBfaWQpOw0KKwkJ cmV0dXJuIC1FTk9ERVY7DQorCX0NCiANCiAJbXV0ZXhfaW5pdCgmY2hpcC0+aXJxbG9jayk7DQot CWlycWQtPnRvcF9pbnRfc3RhdHVzX3JlZyA9IE1UNjM1OF9UT1BfSU5UX1NUQVRVUzA7DQotCWly cWQtPm51bV9wbWljX2lycXMgPSBNVDYzNThfSVJRX05SOw0KLQlpcnFkLT5udW1fdG9wID0gQVJS QVlfU0laRShtdDYzNThfaW50cyk7DQotDQorCWlycWQgPSBjaGlwLT5pcnFfZGF0YTsNCiAJaXJx ZC0+ZW5hYmxlX2h3aXJxID0gZGV2bV9rY2FsbG9jKGNoaXAtPmRldiwNCiAJCQkJCSAgaXJxZC0+ bnVtX3BtaWNfaXJxcywNCiAJCQkJCSAgc2l6ZW9mKCppcnFkLT5lbmFibGVfaHdpcnEpLA0KQEAg LTIwNywxMCArMjE4LDEwIEBAIGludCBtdDYzNThfaXJxX2luaXQoc3RydWN0IG10NjM5N19jaGlw ICpjaGlwKQ0KIA0KIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGZvciBpbml0aWFsaXppbmcg Ki8NCiAJZm9yIChpID0gMDsgaSA8IGlycWQtPm51bV90b3A7IGkrKykgew0KLQkJZm9yIChqID0g MDsgaiA8IG10NjM1OF9pbnRzW2ldLm51bV9pbnRfcmVnczsgaisrKQ0KKwkJZm9yIChqID0gMDsg aiA8IGlycWQtPnBtaWNfaW50c1tpXS5udW1faW50X3JlZ3M7IGorKykNCiAJCQlyZWdtYXBfd3Jp dGUoY2hpcC0+cmVnbWFwLA0KLQkJCQkgICAgIG10NjM1OF9pbnRzW2ldLmVuX3JlZyArDQotCQkJ CSAgICAgbXQ2MzU4X2ludHNbaV0uZW5fcmVnX3NoaWZ0ICogaiwgMCk7DQorCQkJCSAgICAgaXJx ZC0+cG1pY19pbnRzW2ldLmVuX3JlZyArDQorCQkJCSAgICAgaXJxZC0+cG1pY19pbnRzW2ldLmVu X3JlZ19zaGlmdCAqIGosIDApOw0KIAl9DQogDQogCWNoaXAtPmlycV9kb21haW4gPSBpcnFfZG9t YWluX2FkZF9saW5lYXIoY2hpcC0+ZGV2LT5vZl9ub2RlLA0KZGlmZiAtLWdpdCBhL2luY2x1ZGUv bGludXgvbWZkL210NjM1OC9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21mZC9tdDYzNTgvY29yZS5o DQppbmRleCBjNWExMWI3Li42ODU3OGUyIDEwMDY0NA0KLS0tIGEvaW5jbHVkZS9saW51eC9tZmQv bXQ2MzU4L2NvcmUuaA0KKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbXQ2MzU4L2NvcmUuaA0KQEAg LTYsMTIgKzYsOSBAQA0KICNpZm5kZWYgX19NRkRfTVQ2MzU4X0NPUkVfSF9fDQogI2RlZmluZSBf X01GRF9NVDYzNThfQ09SRV9IX18NCiANCi0jZGVmaW5lIE1UNjM1OF9SRUdfV0lEVEggMTYNCi0N CiBzdHJ1Y3QgaXJxX3RvcF90IHsNCiAJaW50IGh3aXJxX2Jhc2U7DQogCXVuc2lnbmVkIGludCBu dW1faW50X3JlZ3M7DQotCXVuc2lnbmVkIGludCBudW1faW50X2JpdHM7DQogCXVuc2lnbmVkIGlu dCBlbl9yZWc7DQogCXVuc2lnbmVkIGludCBlbl9yZWdfc2hpZnQ7DQogCXVuc2lnbmVkIGludCBz dGFfcmVnOw0KQEAgLTI1LDYgKzIyLDcgQEAgc3RydWN0IHBtaWNfaXJxX2RhdGEgew0KIAl1bnNp Z25lZCBzaG9ydCB0b3BfaW50X3N0YXR1c19yZWc7DQogCWJvb2wgKmVuYWJsZV9od2lycTsNCiAJ Ym9vbCAqY2FjaGVfaHdpcnE7DQorCWNvbnN0IHN0cnVjdCBpcnFfdG9wX3QgKnBtaWNfaW50czsN CiB9Ow0KIA0KIGVudW0gbXQ2MzU4X2lycV90b3Bfc3RhdHVzX3NoaWZ0IHsNCkBAIC0xNDYsOCAr MTQ0LDggQEAgZW51bSBtdDYzNThfaXJxX251bWJlcnMgew0KIHsJXA0KIAkuaHdpcnFfYmFzZSA9 IE1UNjM1OF9JUlFfIyNzcCMjX0JBU0UsCVwNCiAJLm51bV9pbnRfcmVncyA9CVwNCi0JCSgoTVQ2 MzU4X0lSUV8jI3NwIyNfQklUUyAtIDEpIC8gTVQ2MzU4X1JFR19XSURUSCkgKyAxLAlcDQotCS5u dW1faW50X2JpdHMgPSBNVDYzNThfSVJRXyMjc3AjI19CSVRTLCBcDQorCQkoKE1UNjM1OF9JUlFf IyNzcCMjX0JJVFMgLSAxKSAvCVwNCisJCU1US19QTUlDX1JFR19XSURUSCkgKyAxLAlcDQogCS5l bl9yZWcgPSBNVDYzNThfIyNzcCMjX1RPUF9JTlRfQ09OMCwJXA0KIAkuZW5fcmVnX3NoaWZ0ID0g MHg2LAlcDQogCS5zdGFfcmVnID0gTVQ2MzU4XyMjc3AjI19UT1BfSU5UX1NUQVRVUzAsCVwNCi0t IA0KMi42LjQNCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C37AC43463 for ; Mon, 21 Sep 2020 11:48:59 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5221420EDD for ; Mon, 21 Sep 2020 11:48:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="2USxBGoX"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="ddHq8n6E" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5221420EDD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=vlTZ5fsJPwx7FneCSnbcFUaNn5G3oZGAlBv2VeUPulM=; b=2USxBGoX45uZCsQyxb9+rp8IF I8+tvD/PY1yVwrADeGy3/R6+vUTtCARL7v6wFI18ylfMcBGZrplWW7H5ua3M3/o0u+Ph0bqVeYgPz tpE+JB37jq1f7Y0MDxHhpSRgVEPt3Y1uO9M9KkdYvnMyV+KBZTiFLy53L+mvLzuuzgfsB600wrxvs vV4VmOd/10vdB3p/u5BErQscA4cV5aI5R1A1CnO9JydQKKAH1O7EWGFchJScPVutApANHklUg011M KAFVp+YIndi4EHxOQeii9l3V0k/9+vmn7REQv5xuFsZvqjGURQsj7D3J660SKImL7P4YxFIcQjP3e C2wCEnZLA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kKKJO-0008K3-AB; Mon, 21 Sep 2020 11:48:50 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kKKJL-0008HQ-Jy; Mon, 21 Sep 2020 11:48:49 +0000 X-UUID: ab47c72eb69c4e6d9c7419473ae9efd5-20200921 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=0aqTZVk9bRmcAMVjVp+RRfkroYKT6fTuKxtG5i1XBcY=; b=ddHq8n6Ea0ABRlEOKw/LzT35l4lw7Jvmt3IiHjWqCcMFoTiZulsNpKTvfya9y5h8acz9XUIyoKBsBZhFLBDIdgPSZY3WytwZfhOIk8DRGZ12GeUn/2PNRPgsIwUoXfKneFaD/DgD5GYufwzXLJvf+0OoIz6k/HADWqJWrLecOrQ=; X-UUID: ab47c72eb69c4e6d9c7419473ae9efd5-20200921 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 2070254542; Mon, 21 Sep 2020 03:48:41 -0800 Received: from mtkmbs05n1.mediatek.inc (172.21.101.15) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 21 Sep 2020 04:48:40 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs05n1.mediatek.inc (172.21.101.15) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 21 Sep 2020 19:48:37 +0800 Received: from mtksdaap41.mediatek.inc (172.21.77.4) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 21 Sep 2020 19:48:39 +0800 From: Hsin-Hsiung Wang To: Lee Jones , Rob Herring , Matthias Brugger , Liam Girdwood , Mark Brown Subject: [PATCH v2 1/8] mfd: mt6358: refine interrupt code Date: Mon, 21 Sep 2020 19:48:08 +0800 Message-ID: <1600688895-9238-2-git-send-email-hsin-hsiung.wang@mediatek.com> X-Mailer: git-send-email 2.6.4 In-Reply-To: <1600688895-9238-1-git-send-email-hsin-hsiung.wang@mediatek.com> References: <1600688895-9238-1-git-send-email-hsin-hsiung.wang@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200921_074847_789489_B4B68822 X-CRM114-Status: GOOD ( 21.26 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, Hsin-Hsiung Wang , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org This patch refines the interrupt related code to support new chips. Signed-off-by: Hsin-Hsiung Wang --- drivers/mfd/mt6358-irq.c | 65 ++++++++++++++++++++++++----------------- include/linux/mfd/mt6358/core.h | 8 ++--- 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/drivers/mfd/mt6358-irq.c b/drivers/mfd/mt6358-irq.c index db734f2..4b094e5 100644 --- a/drivers/mfd/mt6358-irq.c +++ b/drivers/mfd/mt6358-irq.c @@ -13,7 +13,9 @@ #include #include -static struct irq_top_t mt6358_ints[] = { +#define MTK_PMIC_REG_WIDTH 16 + +static const struct irq_top_t mt6358_ints[] = { MT6358_TOP_GEN(BUCK), MT6358_TOP_GEN(LDO), MT6358_TOP_GEN(PSC), @@ -24,6 +26,13 @@ static struct irq_top_t mt6358_ints[] = { MT6358_TOP_GEN(MISC), }; +static struct pmic_irq_data mt6358_irqd = { + .num_top = ARRAY_SIZE(mt6358_ints), + .num_pmic_irqs = MT6358_IRQ_NR, + .top_int_status_reg = MT6358_TOP_INT_STATUS0, + .pmic_ints = mt6358_ints, +}; + static void pmic_irq_enable(struct irq_data *data) { unsigned int hwirq = irqd_to_hwirq(data); @@ -62,15 +71,15 @@ static void pmic_irq_sync_unlock(struct irq_data *data) /* Find out the IRQ group */ top_gp = 0; while ((top_gp + 1) < irqd->num_top && - i >= mt6358_ints[top_gp + 1].hwirq_base) + i >= irqd->pmic_ints[top_gp + 1].hwirq_base) top_gp++; /* Find the IRQ registers */ - gp_offset = i - mt6358_ints[top_gp].hwirq_base; - int_regs = gp_offset / MT6358_REG_WIDTH; - shift = gp_offset % MT6358_REG_WIDTH; - en_reg = mt6358_ints[top_gp].en_reg + - (mt6358_ints[top_gp].en_reg_shift * int_regs); + gp_offset = i - irqd->pmic_ints[top_gp].hwirq_base; + int_regs = gp_offset / MTK_PMIC_REG_WIDTH; + shift = gp_offset % MTK_PMIC_REG_WIDTH; + en_reg = irqd->pmic_ints[top_gp].en_reg + + (irqd->pmic_ints[top_gp].en_reg_shift * int_regs); regmap_update_bits(chip->regmap, en_reg, BIT(shift), irqd->enable_hwirq[i] << shift); @@ -95,10 +104,11 @@ static void mt6358_irq_sp_handler(struct mt6397_chip *chip, unsigned int irq_status, sta_reg, status; unsigned int hwirq, virq; int i, j, ret; + struct pmic_irq_data *irqd = chip->irq_data; - for (i = 0; i < mt6358_ints[top_gp].num_int_regs; i++) { - sta_reg = mt6358_ints[top_gp].sta_reg + - mt6358_ints[top_gp].sta_reg_shift * i; + for (i = 0; i < irqd->pmic_ints[top_gp].num_int_regs; i++) { + sta_reg = irqd->pmic_ints[top_gp].sta_reg + + irqd->pmic_ints[top_gp].sta_reg_shift * i; ret = regmap_read(chip->regmap, sta_reg, &irq_status); if (ret) { @@ -114,8 +124,8 @@ static void mt6358_irq_sp_handler(struct mt6397_chip *chip, do { j = __ffs(status); - hwirq = mt6358_ints[top_gp].hwirq_base + - MT6358_REG_WIDTH * i + j; + hwirq = irqd->pmic_ints[top_gp].hwirq_base + + MTK_PMIC_REG_WIDTH * i + j; virq = irq_find_mapping(chip->irq_domain, hwirq); if (virq) @@ -131,12 +141,12 @@ static void mt6358_irq_sp_handler(struct mt6397_chip *chip, static irqreturn_t mt6358_irq_handler(int irq, void *data) { struct mt6397_chip *chip = data; - struct pmic_irq_data *mt6358_irq_data = chip->irq_data; + struct pmic_irq_data *irqd = chip->irq_data; unsigned int bit, i, top_irq_status = 0; int ret; ret = regmap_read(chip->regmap, - mt6358_irq_data->top_int_status_reg, + irqd->top_int_status_reg, &top_irq_status); if (ret) { dev_err(chip->dev, @@ -144,8 +154,8 @@ static irqreturn_t mt6358_irq_handler(int irq, void *data) return IRQ_NONE; } - for (i = 0; i < mt6358_irq_data->num_top; i++) { - bit = BIT(mt6358_ints[i].top_offset); + for (i = 0; i < irqd->num_top; i++) { + bit = BIT(irqd->pmic_ints[i].top_offset); if (top_irq_status & bit) { mt6358_irq_sp_handler(chip, i); top_irq_status &= ~bit; @@ -180,17 +190,18 @@ int mt6358_irq_init(struct mt6397_chip *chip) int i, j, ret; struct pmic_irq_data *irqd; - irqd = devm_kzalloc(chip->dev, sizeof(*irqd), GFP_KERNEL); - if (!irqd) - return -ENOMEM; + switch (chip->chip_id) { + case MT6358_CHIP_ID: + chip->irq_data = &mt6358_irqd; + break; - chip->irq_data = irqd; + default: + dev_err(chip->dev, "unsupported chip: 0x%x\n", chip->chip_id); + return -ENODEV; + } mutex_init(&chip->irqlock); - irqd->top_int_status_reg = MT6358_TOP_INT_STATUS0; - irqd->num_pmic_irqs = MT6358_IRQ_NR; - irqd->num_top = ARRAY_SIZE(mt6358_ints); - + irqd = chip->irq_data; irqd->enable_hwirq = devm_kcalloc(chip->dev, irqd->num_pmic_irqs, sizeof(*irqd->enable_hwirq), @@ -207,10 +218,10 @@ int mt6358_irq_init(struct mt6397_chip *chip) /* Disable all interrupts for initializing */ for (i = 0; i < irqd->num_top; i++) { - for (j = 0; j < mt6358_ints[i].num_int_regs; j++) + for (j = 0; j < irqd->pmic_ints[i].num_int_regs; j++) regmap_write(chip->regmap, - mt6358_ints[i].en_reg + - mt6358_ints[i].en_reg_shift * j, 0); + irqd->pmic_ints[i].en_reg + + irqd->pmic_ints[i].en_reg_shift * j, 0); } chip->irq_domain = irq_domain_add_linear(chip->dev->of_node, diff --git a/include/linux/mfd/mt6358/core.h b/include/linux/mfd/mt6358/core.h index c5a11b7..68578e2 100644 --- a/include/linux/mfd/mt6358/core.h +++ b/include/linux/mfd/mt6358/core.h @@ -6,12 +6,9 @@ #ifndef __MFD_MT6358_CORE_H__ #define __MFD_MT6358_CORE_H__ -#define MT6358_REG_WIDTH 16 - struct irq_top_t { int hwirq_base; unsigned int num_int_regs; - unsigned int num_int_bits; unsigned int en_reg; unsigned int en_reg_shift; unsigned int sta_reg; @@ -25,6 +22,7 @@ struct pmic_irq_data { unsigned short top_int_status_reg; bool *enable_hwirq; bool *cache_hwirq; + const struct irq_top_t *pmic_ints; }; enum mt6358_irq_top_status_shift { @@ -146,8 +144,8 @@ enum mt6358_irq_numbers { { \ .hwirq_base = MT6358_IRQ_##sp##_BASE, \ .num_int_regs = \ - ((MT6358_IRQ_##sp##_BITS - 1) / MT6358_REG_WIDTH) + 1, \ - .num_int_bits = MT6358_IRQ_##sp##_BITS, \ + ((MT6358_IRQ_##sp##_BITS - 1) / \ + MTK_PMIC_REG_WIDTH) + 1, \ .en_reg = MT6358_##sp##_TOP_INT_CON0, \ .en_reg_shift = 0x6, \ .sta_reg = MT6358_##sp##_TOP_INT_STATUS0, \ -- 2.6.4 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DF408C43463 for ; Mon, 21 Sep 2020 11:50:24 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 71C5B20EDD for ; Mon, 21 Sep 2020 11:50:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="q5iXXzXO"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="ddHq8n6E" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 71C5B20EDD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ZS1ZsYZoVXCZATx2IF6Z/0d1Y6mNmFVBBVhRUsaxNQc=; b=q5iXXzXOo6JS+Cbqm1SVH0a8v 1eUnZk3o/6ibKlNc33sC7J56JHp/NELTWqFCZKtNoUWCZhMg4egJ16zUBSdUPDol933ONGnNMjcR3 EjPc7BWyr6ScYGfrMq5pran3J8Lh9bnSpvOvRCZU53jnzIVFcd/0eRwkRLi21c/iNxJzPRfJHtPcH m6gIPMdPyBJ43LkJTKCVdA3Lrr0K4u4BX0HSqJ8ULj/5W4A5TwK9tuqAxLjU4qiZQWcekAeImZKkd 3jLtPi13AOnYNryyOTRQ3/eeNw6VoYdvCAS/d93lBYcCacWJMVHPRDftuKcQ+c2arElONvtCRuHDF kAh/ssKaQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kKKJP-0008KW-HI; Mon, 21 Sep 2020 11:48:51 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kKKJL-0008HQ-Jy; Mon, 21 Sep 2020 11:48:49 +0000 X-UUID: ab47c72eb69c4e6d9c7419473ae9efd5-20200921 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=0aqTZVk9bRmcAMVjVp+RRfkroYKT6fTuKxtG5i1XBcY=; b=ddHq8n6Ea0ABRlEOKw/LzT35l4lw7Jvmt3IiHjWqCcMFoTiZulsNpKTvfya9y5h8acz9XUIyoKBsBZhFLBDIdgPSZY3WytwZfhOIk8DRGZ12GeUn/2PNRPgsIwUoXfKneFaD/DgD5GYufwzXLJvf+0OoIz6k/HADWqJWrLecOrQ=; X-UUID: ab47c72eb69c4e6d9c7419473ae9efd5-20200921 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 2070254542; Mon, 21 Sep 2020 03:48:41 -0800 Received: from mtkmbs05n1.mediatek.inc (172.21.101.15) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 21 Sep 2020 04:48:40 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs05n1.mediatek.inc (172.21.101.15) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 21 Sep 2020 19:48:37 +0800 Received: from mtksdaap41.mediatek.inc (172.21.77.4) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 21 Sep 2020 19:48:39 +0800 From: Hsin-Hsiung Wang To: Lee Jones , Rob Herring , Matthias Brugger , Liam Girdwood , Mark Brown Subject: [PATCH v2 1/8] mfd: mt6358: refine interrupt code Date: Mon, 21 Sep 2020 19:48:08 +0800 Message-ID: <1600688895-9238-2-git-send-email-hsin-hsiung.wang@mediatek.com> X-Mailer: git-send-email 2.6.4 In-Reply-To: <1600688895-9238-1-git-send-email-hsin-hsiung.wang@mediatek.com> References: <1600688895-9238-1-git-send-email-hsin-hsiung.wang@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200921_074847_789489_B4B68822 X-CRM114-Status: GOOD ( 21.26 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, Hsin-Hsiung Wang , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org This patch refines the interrupt related code to support new chips. Signed-off-by: Hsin-Hsiung Wang --- drivers/mfd/mt6358-irq.c | 65 ++++++++++++++++++++++++----------------- include/linux/mfd/mt6358/core.h | 8 ++--- 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/drivers/mfd/mt6358-irq.c b/drivers/mfd/mt6358-irq.c index db734f2..4b094e5 100644 --- a/drivers/mfd/mt6358-irq.c +++ b/drivers/mfd/mt6358-irq.c @@ -13,7 +13,9 @@ #include #include -static struct irq_top_t mt6358_ints[] = { +#define MTK_PMIC_REG_WIDTH 16 + +static const struct irq_top_t mt6358_ints[] = { MT6358_TOP_GEN(BUCK), MT6358_TOP_GEN(LDO), MT6358_TOP_GEN(PSC), @@ -24,6 +26,13 @@ static struct irq_top_t mt6358_ints[] = { MT6358_TOP_GEN(MISC), }; +static struct pmic_irq_data mt6358_irqd = { + .num_top = ARRAY_SIZE(mt6358_ints), + .num_pmic_irqs = MT6358_IRQ_NR, + .top_int_status_reg = MT6358_TOP_INT_STATUS0, + .pmic_ints = mt6358_ints, +}; + static void pmic_irq_enable(struct irq_data *data) { unsigned int hwirq = irqd_to_hwirq(data); @@ -62,15 +71,15 @@ static void pmic_irq_sync_unlock(struct irq_data *data) /* Find out the IRQ group */ top_gp = 0; while ((top_gp + 1) < irqd->num_top && - i >= mt6358_ints[top_gp + 1].hwirq_base) + i >= irqd->pmic_ints[top_gp + 1].hwirq_base) top_gp++; /* Find the IRQ registers */ - gp_offset = i - mt6358_ints[top_gp].hwirq_base; - int_regs = gp_offset / MT6358_REG_WIDTH; - shift = gp_offset % MT6358_REG_WIDTH; - en_reg = mt6358_ints[top_gp].en_reg + - (mt6358_ints[top_gp].en_reg_shift * int_regs); + gp_offset = i - irqd->pmic_ints[top_gp].hwirq_base; + int_regs = gp_offset / MTK_PMIC_REG_WIDTH; + shift = gp_offset % MTK_PMIC_REG_WIDTH; + en_reg = irqd->pmic_ints[top_gp].en_reg + + (irqd->pmic_ints[top_gp].en_reg_shift * int_regs); regmap_update_bits(chip->regmap, en_reg, BIT(shift), irqd->enable_hwirq[i] << shift); @@ -95,10 +104,11 @@ static void mt6358_irq_sp_handler(struct mt6397_chip *chip, unsigned int irq_status, sta_reg, status; unsigned int hwirq, virq; int i, j, ret; + struct pmic_irq_data *irqd = chip->irq_data; - for (i = 0; i < mt6358_ints[top_gp].num_int_regs; i++) { - sta_reg = mt6358_ints[top_gp].sta_reg + - mt6358_ints[top_gp].sta_reg_shift * i; + for (i = 0; i < irqd->pmic_ints[top_gp].num_int_regs; i++) { + sta_reg = irqd->pmic_ints[top_gp].sta_reg + + irqd->pmic_ints[top_gp].sta_reg_shift * i; ret = regmap_read(chip->regmap, sta_reg, &irq_status); if (ret) { @@ -114,8 +124,8 @@ static void mt6358_irq_sp_handler(struct mt6397_chip *chip, do { j = __ffs(status); - hwirq = mt6358_ints[top_gp].hwirq_base + - MT6358_REG_WIDTH * i + j; + hwirq = irqd->pmic_ints[top_gp].hwirq_base + + MTK_PMIC_REG_WIDTH * i + j; virq = irq_find_mapping(chip->irq_domain, hwirq); if (virq) @@ -131,12 +141,12 @@ static void mt6358_irq_sp_handler(struct mt6397_chip *chip, static irqreturn_t mt6358_irq_handler(int irq, void *data) { struct mt6397_chip *chip = data; - struct pmic_irq_data *mt6358_irq_data = chip->irq_data; + struct pmic_irq_data *irqd = chip->irq_data; unsigned int bit, i, top_irq_status = 0; int ret; ret = regmap_read(chip->regmap, - mt6358_irq_data->top_int_status_reg, + irqd->top_int_status_reg, &top_irq_status); if (ret) { dev_err(chip->dev, @@ -144,8 +154,8 @@ static irqreturn_t mt6358_irq_handler(int irq, void *data) return IRQ_NONE; } - for (i = 0; i < mt6358_irq_data->num_top; i++) { - bit = BIT(mt6358_ints[i].top_offset); + for (i = 0; i < irqd->num_top; i++) { + bit = BIT(irqd->pmic_ints[i].top_offset); if (top_irq_status & bit) { mt6358_irq_sp_handler(chip, i); top_irq_status &= ~bit; @@ -180,17 +190,18 @@ int mt6358_irq_init(struct mt6397_chip *chip) int i, j, ret; struct pmic_irq_data *irqd; - irqd = devm_kzalloc(chip->dev, sizeof(*irqd), GFP_KERNEL); - if (!irqd) - return -ENOMEM; + switch (chip->chip_id) { + case MT6358_CHIP_ID: + chip->irq_data = &mt6358_irqd; + break; - chip->irq_data = irqd; + default: + dev_err(chip->dev, "unsupported chip: 0x%x\n", chip->chip_id); + return -ENODEV; + } mutex_init(&chip->irqlock); - irqd->top_int_status_reg = MT6358_TOP_INT_STATUS0; - irqd->num_pmic_irqs = MT6358_IRQ_NR; - irqd->num_top = ARRAY_SIZE(mt6358_ints); - + irqd = chip->irq_data; irqd->enable_hwirq = devm_kcalloc(chip->dev, irqd->num_pmic_irqs, sizeof(*irqd->enable_hwirq), @@ -207,10 +218,10 @@ int mt6358_irq_init(struct mt6397_chip *chip) /* Disable all interrupts for initializing */ for (i = 0; i < irqd->num_top; i++) { - for (j = 0; j < mt6358_ints[i].num_int_regs; j++) + for (j = 0; j < irqd->pmic_ints[i].num_int_regs; j++) regmap_write(chip->regmap, - mt6358_ints[i].en_reg + - mt6358_ints[i].en_reg_shift * j, 0); + irqd->pmic_ints[i].en_reg + + irqd->pmic_ints[i].en_reg_shift * j, 0); } chip->irq_domain = irq_domain_add_linear(chip->dev->of_node, diff --git a/include/linux/mfd/mt6358/core.h b/include/linux/mfd/mt6358/core.h index c5a11b7..68578e2 100644 --- a/include/linux/mfd/mt6358/core.h +++ b/include/linux/mfd/mt6358/core.h @@ -6,12 +6,9 @@ #ifndef __MFD_MT6358_CORE_H__ #define __MFD_MT6358_CORE_H__ -#define MT6358_REG_WIDTH 16 - struct irq_top_t { int hwirq_base; unsigned int num_int_regs; - unsigned int num_int_bits; unsigned int en_reg; unsigned int en_reg_shift; unsigned int sta_reg; @@ -25,6 +22,7 @@ struct pmic_irq_data { unsigned short top_int_status_reg; bool *enable_hwirq; bool *cache_hwirq; + const struct irq_top_t *pmic_ints; }; enum mt6358_irq_top_status_shift { @@ -146,8 +144,8 @@ enum mt6358_irq_numbers { { \ .hwirq_base = MT6358_IRQ_##sp##_BASE, \ .num_int_regs = \ - ((MT6358_IRQ_##sp##_BITS - 1) / MT6358_REG_WIDTH) + 1, \ - .num_int_bits = MT6358_IRQ_##sp##_BITS, \ + ((MT6358_IRQ_##sp##_BITS - 1) / \ + MTK_PMIC_REG_WIDTH) + 1, \ .en_reg = MT6358_##sp##_TOP_INT_CON0, \ .en_reg_shift = 0x6, \ .sta_reg = MT6358_##sp##_TOP_INT_STATUS0, \ -- 2.6.4 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel