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=-9.8 required=3.0 tests=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, 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 24D33C2D0BF for ; Wed, 11 Dec 2019 01:55:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E6DA32073B for ; Wed, 11 Dec 2019 01:55:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="cyPeNpoY" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727552AbfLKBzJ (ORCPT ); Tue, 10 Dec 2019 20:55:09 -0500 Received: from mailgw02.mediatek.com ([1.203.163.81]:48437 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726417AbfLKBzG (ORCPT ); Tue, 10 Dec 2019 20:55:06 -0500 X-UUID: 1874a1a90d4443a69b0528e9f34e309c-20191211 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=9HrUhTi78f5xP0jry51zQs2YAQuyV98mbQ++goxlMsg=; b=cyPeNpoYaODWGr+Utgu2FeP9WTiP4aKtka1Cye6zRqevSF4oSVCJKuPoV+JUfLQMPtgN3yjDX7ldj/SmIgCY0GY8gwjharFUNaQH+z8FJe2aiIar7djR8cvcubo6ndMY3ZGSN68cosVStc5M56xMVsAhPjTwxvg3AwDg9fo6YIM=; X-UUID: 1874a1a90d4443a69b0528e9f34e309c-20191211 Received: from mtkcas32.mediatek.inc [(172.27.4.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 1494153295; Wed, 11 Dec 2019 09:54:58 +0800 Received: from mtkcas09.mediatek.inc (172.21.101.178) by MTKMBS31N2.mediatek.inc (172.27.4.87) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 11 Dec 2019 09:53:59 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas09.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Wed, 11 Dec 2019 09:54:50 +0800 From: To: Bin Liu , Rob Herring CC: Greg Kroah-Hartman , Mark Rutland , Matthias Brugger , Alan Stern , , , , , , , , , Min Guo Subject: [PATCH v9 3/6] usb: musb: Add get/set toggle hooks Date: Wed, 11 Dec 2019 09:54:43 +0800 Message-ID: <20191211015446.11477-4-min.guo@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20191211015446.11477-1-min.guo@mediatek.com> References: <20191211015446.11477-1-min.guo@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: FB2895EDD654822D40F138DF16C63129CE844CA87D732564AD51AE561924C7122000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogTWluIEd1byA8bWluLmd1b0BtZWRpYXRlay5jb20+DQoNCkFkZCBnZXQvc2V0IHRvZ2ds ZSBob29rcyBpbiBzdHJ1Y3QgbXVzYl9pbyBhbmQgc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzDQpm b3Igc3BlY2lhbCBwbGF0Zm9ybTsgcmVtb3ZlIGZ1bmN0aW9uIG11c2Jfc2F2ZV90b2dnbGUsIHVz ZSB0aGUgc2V0L2dldA0KY2FsbGJhY2sgdG8gaGFuZGxlIHRvZ2dsZS4NCg0KU2lnbmVkLW9mZi1i eTogTWluIEd1byA8bWluLmd1b0BtZWRpYXRlay5jb20+DQotLS0NCmNoYW5nZXMgaW4gdjk6DQox LiBubyBjaGFuZ2VzDQoNCmNoYW5nZXMgaW4gdjg6DQoxLiBubyBjaGFuZ2VzDQoNCmNoYW5nZXMg aW4gdjc6DQoxLiBubyBjaGFuZ2VzDQoNCmNoYW5nZXMgaW4gdjY6DQoxLiBubyBjaGFuZ2VzDQoN CmNoYW5nZXMgaW4gdjU6DQoxLiBubyBjaGFuZ2VzDQoNCm5ldyBwYXRjaCBiYXNlZCBvbiB2NDoN Ci0tLQ0KIGRyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgfCA0MiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKw0KIGRyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmggfCAgNSArKysr DQogZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyB8IDQ2ICsrKysrKysrLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KIGRyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oICAgfCAgNCArKysr DQogNCBmaWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkNCg0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9t dXNiL211c2JfY29yZS5jDQppbmRleCAxNWNjYTkxMmM1M2UuLjMyYzAwNjUyZTFhMiAxMDA2NDQN Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMNCisrKyBiL2RyaXZlcnMvdXNiL211 c2IvbXVzYl9jb3JlLmMNCkBAIC0yNzQsNiArMjc0LDM4IEBAIHN0YXRpYyB2b2lkIG11c2JfZGVm YXVsdF93cml0ZXcodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQsIHUxNiBkYXRh KQ0KIAlfX3Jhd193cml0ZXcoZGF0YSwgYWRkciArIG9mZnNldCk7DQogfQ0KIA0KK3N0YXRpYyB1 MTYgbXVzYl9kZWZhdWx0X2dldF90b2dnbGUoc3RydWN0IG11c2JfcWggKnFoLCBpbnQgaXNfb3V0 KQ0KK3sNCisJdm9pZCBfX2lvbWVtICplcGlvID0gcWgtPmh3X2VwLT5yZWdzOw0KKwl1MTYgY3Ny Ow0KKw0KKwlpZiAoaXNfb3V0KQ0KKwkJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1RYQ1NS KSAmIE1VU0JfVFhDU1JfSF9EQVRBVE9HR0xFOw0KKwllbHNlDQorCQljc3IgPSBtdXNiX3JlYWR3 KGVwaW8sIE1VU0JfUlhDU1IpICYgTVVTQl9SWENTUl9IX0RBVEFUT0dHTEU7DQorDQorCXJldHVy biBjc3I7DQorfQ0KKw0KK3N0YXRpYyB1MTYgbXVzYl9kZWZhdWx0X3NldF90b2dnbGUoc3RydWN0 IG11c2JfcWggKnFoLCBpbnQgaXNfb3V0LA0KKwkJCQkgICBzdHJ1Y3QgdXJiICp1cmIpDQorew0K Kwl1MTYgY3NyOw0KKwl1MTYgdG9nZ2xlOw0KKw0KKwl0b2dnbGUgPSB1c2JfZ2V0dG9nZ2xlKHVy Yi0+ZGV2LCBxaC0+ZXBudW0sIGlzX291dCk7DQorDQorCWlmIChpc19vdXQpDQorCQljc3IgPSB0 b2dnbGUgPyAoTVVTQl9UWENTUl9IX1dSX0RBVEFUT0dHTEUNCisJCQkJfCBNVVNCX1RYQ1NSX0hf REFUQVRPR0dMRSkNCisJCQkJOiBNVVNCX1RYQ1NSX0NMUkRBVEFUT0c7DQorCWVsc2UNCisJCWNz ciA9IHRvZ2dsZSA/IChNVVNCX1JYQ1NSX0hfV1JfREFUQVRPR0dMRQ0KKwkJCQl8IE1VU0JfUlhD U1JfSF9EQVRBVE9HR0xFKSA6IDA7DQorDQorCXJldHVybiBjc3I7DQorfQ0KKw0KIC8qDQogICog TG9hZCBhbiBlbmRwb2ludCdzIEZJRk8NCiAgKi8NCkBAIC0yMjcxLDYgKzIzMDMsMTYgQEAgbXVz Yl9pbml0X2NvbnRyb2xsZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbklycSwgdm9pZCBfX2lv bWVtICpjdHJsKQ0KIAllbHNlDQogCQltdXNiLT5pby53cml0ZV9maWZvID0gbXVzYl9kZWZhdWx0 X3dyaXRlX2ZpZm87DQogDQorCWlmIChtdXNiLT5vcHMtPmdldF90b2dnbGUpDQorCQltdXNiLT5p by5nZXRfdG9nZ2xlID0gbXVzYi0+b3BzLT5nZXRfdG9nZ2xlOw0KKwllbHNlDQorCQltdXNiLT5p by5nZXRfdG9nZ2xlID0gbXVzYl9kZWZhdWx0X2dldF90b2dnbGU7DQorDQorCWlmIChtdXNiLT5v cHMtPnNldF90b2dnbGUpDQorCQltdXNiLT5pby5zZXRfdG9nZ2xlID0gbXVzYi0+b3BzLT5zZXRf dG9nZ2xlOw0KKwllbHNlDQorCQltdXNiLT5pby5zZXRfdG9nZ2xlID0gbXVzYl9kZWZhdWx0X3Nl dF90b2dnbGU7DQorDQogCWlmICghbXVzYi0+eGNlaXYtPmlvX29wcykgew0KIAkJbXVzYi0+eGNl aXYtPmlvX2RldiA9IG11c2ItPmNvbnRyb2xsZXI7DQogCQltdXNiLT54Y2Vpdi0+aW9fcHJpdiA9 IG11c2ItPm1yZWdzOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgg Yi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oDQppbmRleCAwNDIwM2I3MTI2ZDUuLjlmNWE2 OWMyZDczYiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgNCisrKyBi L2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgNCkBAIC0yNyw2ICsyNyw3IEBADQogc3RydWN0 IG11c2I7DQogc3RydWN0IG11c2JfaHdfZXA7DQogc3RydWN0IG11c2JfZXA7DQorc3RydWN0IG11 c2JfcWg7DQogDQogLyogSGVscGVyIGRlZmluZXMgZm9yIHN0cnVjdCBtdXNiLT5od3ZlcnMgKi8N CiAjZGVmaW5lIE1VU0JfSFdWRVJTX01BSk9SKHgpCSgoeCA+PiAxMCkgJiAweDFmKQ0KQEAgLTEy Myw2ICsxMjQsOCBAQCBzdHJ1Y3QgbXVzYl9pbzsNCiAgKiBAd3JpdGV3Ogl3cml0ZSAxNiBiaXRz DQogICogQHJlYWRfZmlmbzoJcmVhZHMgdGhlIGZpZm8NCiAgKiBAd3JpdGVfZmlmbzoJd3JpdGVz IHRvIGZpZm8NCisgKiBAZ2V0X3RvZ2dsZToJcGxhdGZvcm0gc3BlY2lmaWMgZ2V0IHRvZ2dsZSBm dW5jdGlvbg0KKyAqIEBzZXRfdG9nZ2xlOglwbGF0Zm9ybSBzcGVjaWZpYyBzZXQgdG9nZ2xlIGZ1 bmN0aW9uDQogICogQGRtYV9pbml0OglwbGF0Zm9ybSBzcGVjaWZpYyBkbWEgaW5pdCBmdW5jdGlv bg0KICAqIEBkbWFfZXhpdDoJcGxhdGZvcm0gc3BlY2lmaWMgZG1hIGV4aXQgZnVuY3Rpb24NCiAg KiBAaW5pdDoJdHVybnMgb24gY2xvY2tzLCBzZXRzIHVwIHBsYXRmb3JtLXNwZWNpZmljIHJlZ2lz dGVycywgZXRjDQpAQCAtMTY3LDYgKzE3MCw4IEBAIHN0cnVjdCBtdXNiX3BsYXRmb3JtX29wcyB7 DQogCXZvaWQJKCp3cml0ZXcpKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0LCB1 MTYgZGF0YSk7DQogCXZvaWQJKCpyZWFkX2ZpZm8pKHN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwg dTE2IGxlbiwgdTggKmJ1Zik7DQogCXZvaWQJKCp3cml0ZV9maWZvKShzdHJ1Y3QgbXVzYl9od19l cCAqaHdfZXAsIHUxNiBsZW4sIGNvbnN0IHU4ICpidWYpOw0KKwl1MTYJKCpnZXRfdG9nZ2xlKShz dHJ1Y3QgbXVzYl9xaCAqcWgsIGludCBpc19vdXQpOw0KKwl1MTYJKCpzZXRfdG9nZ2xlKShzdHJ1 Y3QgbXVzYl9xaCAqcWgsIGludCBpc19vdXQsIHN0cnVjdCB1cmIgKnVyYik7DQogCXN0cnVjdCBk bWFfY29udHJvbGxlciAqDQogCQkoKmRtYV9pbml0KSAoc3RydWN0IG11c2IgKm11c2IsIHZvaWQg X19pb21lbSAqYmFzZSk7DQogCXZvaWQJKCpkbWFfZXhpdCkoc3RydWN0IGRtYV9jb250cm9sbGVy ICpjKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jIGIvZHJpdmVy cy91c2IvbXVzYi9tdXNiX2hvc3QuYw0KaW5kZXggNWE0NGI3MDM3MmQ5Li44ODZjOWI2MDJmOGMg MTAwNjQ0DQotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jDQorKysgYi9kcml2ZXJz L3VzYi9tdXNiL211c2JfaG9zdC5jDQpAQCAtMjg2LDI2ICsyODYsNiBAQCBfX2FjcXVpcmVzKG11 c2ItPmxvY2spDQogCXNwaW5fbG9jaygmbXVzYi0+bG9jayk7DQogfQ0KIA0KLS8qIEZvciBidWxr L2ludGVycnVwdCBlbmRwb2ludHMgb25seSAqLw0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX3Nh dmVfdG9nZ2xlKHN0cnVjdCBtdXNiX3FoICpxaCwgaW50IGlzX2luLA0KLQkJCQkgICAgc3RydWN0 IHVyYiAqdXJiKQ0KLXsNCi0Jdm9pZCBfX2lvbWVtCQkqZXBpbyA9IHFoLT5od19lcC0+cmVnczsN Ci0JdTE2CQkJY3NyOw0KLQ0KLQkvKg0KLQkgKiBGSVhNRTogdGhlIGN1cnJlbnQgTWVudG9yIERN QSBjb2RlIHNlZW1zIHRvIGhhdmUNCi0JICogcHJvYmxlbXMgZ2V0dGluZyB0b2dnbGUgY29ycmVj dC4NCi0JICovDQotDQotCWlmIChpc19pbikNCi0JCWNzciA9IG11c2JfcmVhZHcoZXBpbywgTVVT Ql9SWENTUikgJiBNVVNCX1JYQ1NSX0hfREFUQVRPR0dMRTsNCi0JZWxzZQ0KLQkJY3NyID0gbXVz Yl9yZWFkdyhlcGlvLCBNVVNCX1RYQ1NSKSAmIE1VU0JfVFhDU1JfSF9EQVRBVE9HR0xFOw0KLQ0K LQl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCBxaC0+ZXBudW0sICFpc19pbiwgY3NyID8gMSA6IDAp Ow0KLX0NCi0NCiAvKg0KICAqIEFkdmFuY2UgdGhpcyBoYXJkd2FyZSBlbmRwb2ludCdzIHF1ZXVl LCBjb21wbGV0aW5nIHRoZSBzcGVjaWZpZWQgVVJCIGFuZA0KICAqIGFkdmFuY2luZyB0byBlaXRo ZXIgdGhlIG5leHQgVVJCIHF1ZXVlZCB0byB0aGF0IHFoLCBvciBlbHNlIGludmFsaWRhdGluZw0K QEAgLTMyMCw2ICszMDAsNyBAQCBzdGF0aWMgdm9pZCBtdXNiX2FkdmFuY2Vfc2NoZWR1bGUoc3Ry dWN0IG11c2IgKm11c2IsIHN0cnVjdCB1cmIgKnVyYiwNCiAJc3RydWN0IG11c2JfaHdfZXAJKmVw ID0gcWgtPmh3X2VwOw0KIAlpbnQJCQlyZWFkeSA9IHFoLT5pc19yZWFkeTsNCiAJaW50CQkJc3Rh dHVzOw0KKwl1MTYJCQl0b2dnbGU7DQogDQogCXN0YXR1cyA9ICh1cmItPnN0YXR1cyA9PSAtRUlO UFJPR1JFU1MpID8gMCA6IHVyYi0+c3RhdHVzOw0KIA0KQEAgLTMyNyw3ICszMDgsOCBAQCBzdGF0 aWMgdm9pZCBtdXNiX2FkdmFuY2Vfc2NoZWR1bGUoc3RydWN0IG11c2IgKm11c2IsIHN0cnVjdCB1 cmIgKnVyYiwNCiAJc3dpdGNoIChxaC0+dHlwZSkgew0KIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVS X0JVTEs6DQogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOg0KLQkJbXVzYl9zYXZlX3RvZ2ds ZShxaCwgaXNfaW4sIHVyYik7DQorCQl0b2dnbGUgPSBtdXNiLT5pby5nZXRfdG9nZ2xlKHFoLCAh aXNfaW4pOw0KKwkJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgcWgtPmVwbnVtLCAhaXNfaW4sIHRv Z2dsZSA/IDEgOiAwKTsNCiAJCWJyZWFrOw0KIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6 DQogCQlpZiAoc3RhdHVzID09IDAgJiYgdXJiLT5lcnJvcl9jb3VudCkNCkBAIC03NzIsMTMgKzc1 NCw4IEBAIHN0YXRpYyB2b2lkIG11c2JfZXBfcHJvZ3JhbShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTgg ZXBudW0sDQogCQkJCQkpOw0KIAkJCWNzciB8PSBNVVNCX1RYQ1NSX01PREU7DQogDQotCQkJaWYg KCFod19lcC0+dHhfZG91YmxlX2J1ZmZlcmVkKSB7DQotCQkJCWlmICh1c2JfZ2V0dG9nZ2xlKHVy Yi0+ZGV2LCBxaC0+ZXBudW0sIDEpKQ0KLQkJCQkJY3NyIHw9IE1VU0JfVFhDU1JfSF9XUl9EQVRB VE9HR0xFDQotCQkJCQkJfCBNVVNCX1RYQ1NSX0hfREFUQVRPR0dMRTsNCi0JCQkJZWxzZQ0KLQkJ CQkJY3NyIHw9IE1VU0JfVFhDU1JfQ0xSREFUQVRPRzsNCi0JCQl9DQorCQkJaWYgKCFod19lcC0+ dHhfZG91YmxlX2J1ZmZlcmVkKQ0KKwkJCQljc3IgfD0gbXVzYi0+aW8uc2V0X3RvZ2dsZShxaCwg aXNfb3V0LCB1cmIpOw0KIA0KIAkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfVFhDU1IsIGNzcik7 DQogCQkJLyogUkVWSVNJVCBtYXkgbmVlZCB0byBjbGVhciBGTFVTSEZJRk8gLi4uICovDQpAQCAt ODYwLDE3ICs4MzcsMTIgQEAgc3RhdGljIHZvaWQgbXVzYl9lcF9wcm9ncmFtKHN0cnVjdCBtdXNi ICptdXNiLCB1OCBlcG51bSwNCiANCiAJLyogSU4vcmVjZWl2ZSAqLw0KIAl9IGVsc2Ugew0KLQkJ dTE2CWNzcjsNCisJCXUxNiBjc3IgPSAwOw0KIA0KIAkJaWYgKGh3X2VwLT5yeF9yZWluaXQpIHsN CiAJCQltdXNiX3J4X3JlaW5pdChtdXNiLCBxaCwgZXBudW0pOw0KKwkJCWNzciB8PSBtdXNiLT5p by5zZXRfdG9nZ2xlKHFoLCBpc19vdXQsIHVyYik7DQogDQotCQkJLyogaW5pdCBuZXcgc3RhdGU6 IHRvZ2dsZSBhbmQgTllFVCwgbWF5YmUgRE1BIGxhdGVyICovDQotCQkJaWYgKHVzYl9nZXR0b2dn bGUodXJiLT5kZXYsIHFoLT5lcG51bSwgMCkpDQotCQkJCWNzciA9IE1VU0JfUlhDU1JfSF9XUl9E QVRBVE9HR0xFDQotCQkJCQl8IE1VU0JfUlhDU1JfSF9EQVRBVE9HR0xFOw0KLQkJCWVsc2UNCi0J CQkJY3NyID0gMDsNCiAJCQlpZiAocWgtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKQ0K IAkJCQljc3IgfD0gTVVTQl9SWENTUl9ESVNOWUVUOw0KIA0KQEAgLTkzMyw2ICs5MDUsNyBAQCBz dGF0aWMgdm9pZCBtdXNiX2J1bGtfbmFrX3RpbWVvdXQoc3RydWN0IG11c2IgKm11c2IsIHN0cnVj dCBtdXNiX2h3X2VwICplcCwNCiAJdm9pZCBfX2lvbWVtCQkqZXBpbyA9IGVwLT5yZWdzOw0KIAlz dHJ1Y3QgbXVzYl9xaAkJKmN1cl9xaCwgKm5leHRfcWg7DQogCXUxNgkJCXJ4X2NzciwgdHhfY3Ny Ow0KKwl1MTYJCQl0b2dnbGU7DQogDQogCW11c2JfZXBfc2VsZWN0KG1iYXNlLCBlcC0+ZXBudW0p Ow0KIAlpZiAoaXNfaW4pIHsNCkBAIC05NzAsNyArOTQzLDggQEAgc3RhdGljIHZvaWQgbXVzYl9i dWxrX25ha190aW1lb3V0KHN0cnVjdCBtdXNiICptdXNiLCBzdHJ1Y3QgbXVzYl9od19lcCAqZXAs DQogCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGRtYS0+YWN0dWFsX2xlbjsNCiAJCQlkbWEtPmFj dHVhbF9sZW4gPSAwTDsNCiAJCX0NCi0JCW11c2Jfc2F2ZV90b2dnbGUoY3VyX3FoLCBpc19pbiwg dXJiKTsNCisJCXRvZ2dsZSA9IG11c2ItPmlvLmdldF90b2dnbGUoY3VyX3FoLCAhaXNfaW4pOw0K KwkJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgY3VyX3FoLT5lcG51bSwgIWlzX2luLCB0b2dnbGUg PyAxIDogMCk7DQogDQogCQlpZiAoaXNfaW4pIHsNCiAJCQkvKiBtb3ZlIGN1cl9xaCB0byBlbmQg b2YgcXVldWUgKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaW8uaCBiL2Ry aXZlcnMvdXNiL211c2IvbXVzYl9pby5oDQppbmRleCA4MDU4YTU4MDkyY2YuLjgxNzkzMzRmNDA1 YiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oDQorKysgYi9kcml2ZXJz L3VzYi9tdXNiL211c2JfaW8uaA0KQEAgLTIyLDYgKzIyLDggQEANCiAgKiBAcmVhZF9maWZvOglw bGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbiB0byByZWFkIGZpZm8NCiAgKiBAd3JpdGVfZmlmbzoJ cGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb24gdG8gd3JpdGUgZmlmbw0KICAqIEBidXNjdGxfb2Zm c2V0OiBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbiB0byBnZXQgYnVzY3RsIG9mZnNldA0KKyAq IEBnZXRfdG9nZ2xlOiBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbiB0byBnZXQgdG9nZ2xlDQor ICogQHNldF90b2dnbGU6IHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9uIHRvIHNldCB0b2dnbGUN CiAgKi8NCiBzdHJ1Y3QgbXVzYl9pbyB7DQogCXUzMgkoKmVwX29mZnNldCkodTggZXBudW0sIHUx NiBvZmZzZXQpOw0KQEAgLTMwLDYgKzMyLDggQEAgc3RydWN0IG11c2JfaW8gew0KIAl2b2lkCSgq cmVhZF9maWZvKShzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHUxNiBsZW4sIHU4ICpidWYpOw0K IAl2b2lkCSgqd3JpdGVfZmlmbykoc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1MTYgbGVuLCBj b25zdCB1OCAqYnVmKTsNCiAJdTMyCSgqYnVzY3RsX29mZnNldCkodTggZXBudW0sIHUxNiBvZmZz ZXQpOw0KKwl1MTYJKCpnZXRfdG9nZ2xlKShzdHJ1Y3QgbXVzYl9xaCAqcWgsIGludCBpc19vdXQp Ow0KKwl1MTYJKCpzZXRfdG9nZ2xlKShzdHJ1Y3QgbXVzYl9xaCAqcWgsIGludCBpc19vdXQsIHN0 cnVjdCB1cmIgKnVyYik7DQogfTsNCiANCiAvKiBEbyBub3QgYWRkIG5ldyBlbnRyaWVzIGhlcmUs IGFkZCB0aGVtIHRoZSBzdHJ1Y3QgbXVzYl9pbyBpbnN0ZWFkICovDQotLSANCjIuMjQuMA0K 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=-9.8 required=3.0 tests=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,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 B7F37C43603 for ; Wed, 11 Dec 2019 02:06:32 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 89827206EC for ; Wed, 11 Dec 2019 02:06:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="X/E7v4kk"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="cyPeNpoY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 89827206EC 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=bombadil.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=3BbTfg9ortExeszqyNjMTGNsVKlUg3/8WabdoWF5VR0=; b=X/E7v4kkIdUWFu K5GpoDDDJ60WbcTYBSFLO5vsBnHbJus25RL092M+QyQsoAyKg5gf/env8Z6gY+Odt2GZQxcgZKJSr ZrBWYue1xua2XP3md6kdo9F5NG0O3EHev2cnZe9pj2Kzg456jieJMXjFGKWPVShpW0hNtVEdV/uFF OmFveQzRMQNpTEhMYxh2NiyYwEgdN3rquS5Dbq2vc+BKmCURZgeMolLFtWgLVYxTauZ9ZZE2dh3zQ CbA68qo3CQfJcPSAn/SAvh94s/UEk9R+PUL2w7uqPo7VReCm6qeiIZOOaRCZGX+0OrxbengqVOwmN Ws74feMgM+gHCHYUqKbA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ierOO-0003dE-GI; Wed, 11 Dec 2019 02:06:20 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ierN7-00019b-G8; Wed, 11 Dec 2019 02:05:03 +0000 X-UUID: c1fdb0f51dd24dd884e2e9f0068988ca-20191210 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=9HrUhTi78f5xP0jry51zQs2YAQuyV98mbQ++goxlMsg=; b=cyPeNpoYaODWGr+Utgu2FeP9WTiP4aKtka1Cye6zRqevSF4oSVCJKuPoV+JUfLQMPtgN3yjDX7ldj/SmIgCY0GY8gwjharFUNaQH+z8FJe2aiIar7djR8cvcubo6ndMY3ZGSN68cosVStc5M56xMVsAhPjTwxvg3AwDg9fo6YIM=; X-UUID: c1fdb0f51dd24dd884e2e9f0068988ca-20191210 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 701229230; Tue, 10 Dec 2019 18:04:58 -0800 Received: from MTKMBS31N2.mediatek.inc (172.27.4.87) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Tue, 10 Dec 2019 17:56:03 -0800 Received: from mtkcas09.mediatek.inc (172.21.101.178) by MTKMBS31N2.mediatek.inc (172.27.4.87) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 11 Dec 2019 09:53:59 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas09.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Wed, 11 Dec 2019 09:54:50 +0800 From: To: Bin Liu , Rob Herring Subject: [PATCH v9 3/6] usb: musb: Add get/set toggle hooks Date: Wed, 11 Dec 2019 09:54:43 +0800 Message-ID: <20191211015446.11477-4-min.guo@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20191211015446.11477-1-min.guo@mediatek.com> References: <20191211015446.11477-1-min.guo@mediatek.com> MIME-Version: 1.0 X-TM-SNTS-SMTP: FB2895EDD654822D40F138DF16C63129CE844CA87D732564AD51AE561924C7122000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191210_180501_586087_C639FA3D X-CRM114-Status: GOOD ( 14.90 ) 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: Mark Rutland , devicetree@vger.kernel.org, hdegoede@redhat.com, tony@atomide.com, Greg Kroah-Hartman , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Matthias Brugger , Alan Stern , Min Guo , chunfeng.yun@mediatek.com, linux-mediatek@lists.infradead.org, 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 From: Min Guo Add get/set toggle hooks in struct musb_io and struct musb_platform_ops for special platform; remove function musb_save_toggle, use the set/get callback to handle toggle. Signed-off-by: Min Guo --- changes in v9: 1. no changes changes in v8: 1. no changes changes in v7: 1. no changes changes in v6: 1. no changes changes in v5: 1. no changes new patch based on v4: --- drivers/usb/musb/musb_core.c | 42 ++++++++++++++++++++++++++++++++ drivers/usb/musb/musb_core.h | 5 ++++ drivers/usb/musb/musb_host.c | 46 ++++++++---------------------------- drivers/usb/musb/musb_io.h | 4 ++++ 4 files changed, 61 insertions(+), 36 deletions(-) diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 15cca912c53e..32c00652e1a2 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -274,6 +274,38 @@ static void musb_default_writew(void __iomem *addr, unsigned offset, u16 data) __raw_writew(data, addr + offset); } +static u16 musb_default_get_toggle(struct musb_qh *qh, int is_out) +{ + void __iomem *epio = qh->hw_ep->regs; + u16 csr; + + if (is_out) + csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE; + else + csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE; + + return csr; +} + +static u16 musb_default_set_toggle(struct musb_qh *qh, int is_out, + struct urb *urb) +{ + u16 csr; + u16 toggle; + + toggle = usb_gettoggle(urb->dev, qh->epnum, is_out); + + if (is_out) + csr = toggle ? (MUSB_TXCSR_H_WR_DATATOGGLE + | MUSB_TXCSR_H_DATATOGGLE) + : MUSB_TXCSR_CLRDATATOG; + else + csr = toggle ? (MUSB_RXCSR_H_WR_DATATOGGLE + | MUSB_RXCSR_H_DATATOGGLE) : 0; + + return csr; +} + /* * Load an endpoint's FIFO */ @@ -2271,6 +2303,16 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) else musb->io.write_fifo = musb_default_write_fifo; + if (musb->ops->get_toggle) + musb->io.get_toggle = musb->ops->get_toggle; + else + musb->io.get_toggle = musb_default_get_toggle; + + if (musb->ops->set_toggle) + musb->io.set_toggle = musb->ops->set_toggle; + else + musb->io.set_toggle = musb_default_set_toggle; + if (!musb->xceiv->io_ops) { musb->xceiv->io_dev = musb->controller; musb->xceiv->io_priv = musb->mregs; diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index 04203b7126d5..9f5a69c2d73b 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h @@ -27,6 +27,7 @@ struct musb; struct musb_hw_ep; struct musb_ep; +struct musb_qh; /* Helper defines for struct musb->hwvers */ #define MUSB_HWVERS_MAJOR(x) ((x >> 10) & 0x1f) @@ -123,6 +124,8 @@ struct musb_io; * @writew: write 16 bits * @read_fifo: reads the fifo * @write_fifo: writes to fifo + * @get_toggle: platform specific get toggle function + * @set_toggle: platform specific set toggle function * @dma_init: platform specific dma init function * @dma_exit: platform specific dma exit function * @init: turns on clocks, sets up platform-specific registers, etc @@ -167,6 +170,8 @@ struct musb_platform_ops { void (*writew)(void __iomem *addr, unsigned offset, u16 data); void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf); void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf); + u16 (*get_toggle)(struct musb_qh *qh, int is_out); + u16 (*set_toggle)(struct musb_qh *qh, int is_out, struct urb *urb); struct dma_controller * (*dma_init) (struct musb *musb, void __iomem *base); void (*dma_exit)(struct dma_controller *c); diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index 5a44b70372d9..886c9b602f8c 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c @@ -286,26 +286,6 @@ __acquires(musb->lock) spin_lock(&musb->lock); } -/* For bulk/interrupt endpoints only */ -static inline void musb_save_toggle(struct musb_qh *qh, int is_in, - struct urb *urb) -{ - void __iomem *epio = qh->hw_ep->regs; - u16 csr; - - /* - * FIXME: the current Mentor DMA code seems to have - * problems getting toggle correct. - */ - - if (is_in) - csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE; - else - csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE; - - usb_settoggle(urb->dev, qh->epnum, !is_in, csr ? 1 : 0); -} - /* * Advance this hardware endpoint's queue, completing the specified URB and * advancing to either the next URB queued to that qh, or else invalidating @@ -320,6 +300,7 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb, struct musb_hw_ep *ep = qh->hw_ep; int ready = qh->is_ready; int status; + u16 toggle; status = (urb->status == -EINPROGRESS) ? 0 : urb->status; @@ -327,7 +308,8 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb, switch (qh->type) { case USB_ENDPOINT_XFER_BULK: case USB_ENDPOINT_XFER_INT: - musb_save_toggle(qh, is_in, urb); + toggle = musb->io.get_toggle(qh, !is_in); + usb_settoggle(urb->dev, qh->epnum, !is_in, toggle ? 1 : 0); break; case USB_ENDPOINT_XFER_ISOC: if (status == 0 && urb->error_count) @@ -772,13 +754,8 @@ static void musb_ep_program(struct musb *musb, u8 epnum, ); csr |= MUSB_TXCSR_MODE; - if (!hw_ep->tx_double_buffered) { - if (usb_gettoggle(urb->dev, qh->epnum, 1)) - csr |= MUSB_TXCSR_H_WR_DATATOGGLE - | MUSB_TXCSR_H_DATATOGGLE; - else - csr |= MUSB_TXCSR_CLRDATATOG; - } + if (!hw_ep->tx_double_buffered) + csr |= musb->io.set_toggle(qh, is_out, urb); musb_writew(epio, MUSB_TXCSR, csr); /* REVISIT may need to clear FLUSHFIFO ... */ @@ -860,17 +837,12 @@ static void musb_ep_program(struct musb *musb, u8 epnum, /* IN/receive */ } else { - u16 csr; + u16 csr = 0; if (hw_ep->rx_reinit) { musb_rx_reinit(musb, qh, epnum); + csr |= musb->io.set_toggle(qh, is_out, urb); - /* init new state: toggle and NYET, maybe DMA later */ - if (usb_gettoggle(urb->dev, qh->epnum, 0)) - csr = MUSB_RXCSR_H_WR_DATATOGGLE - | MUSB_RXCSR_H_DATATOGGLE; - else - csr = 0; if (qh->type == USB_ENDPOINT_XFER_INT) csr |= MUSB_RXCSR_DISNYET; @@ -933,6 +905,7 @@ static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep, void __iomem *epio = ep->regs; struct musb_qh *cur_qh, *next_qh; u16 rx_csr, tx_csr; + u16 toggle; musb_ep_select(mbase, ep->epnum); if (is_in) { @@ -970,7 +943,8 @@ static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep, urb->actual_length += dma->actual_len; dma->actual_len = 0L; } - musb_save_toggle(cur_qh, is_in, urb); + toggle = musb->io.get_toggle(cur_qh, !is_in); + usb_settoggle(urb->dev, cur_qh->epnum, !is_in, toggle ? 1 : 0); if (is_in) { /* move cur_qh to end of queue */ diff --git a/drivers/usb/musb/musb_io.h b/drivers/usb/musb/musb_io.h index 8058a58092cf..8179334f405b 100644 --- a/drivers/usb/musb/musb_io.h +++ b/drivers/usb/musb/musb_io.h @@ -22,6 +22,8 @@ * @read_fifo: platform specific function to read fifo * @write_fifo: platform specific function to write fifo * @busctl_offset: platform specific function to get busctl offset + * @get_toggle: platform specific function to get toggle + * @set_toggle: platform specific function to set toggle */ struct musb_io { u32 (*ep_offset)(u8 epnum, u16 offset); @@ -30,6 +32,8 @@ struct musb_io { void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf); void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf); u32 (*busctl_offset)(u8 epnum, u16 offset); + u16 (*get_toggle)(struct musb_qh *qh, int is_out); + u16 (*set_toggle)(struct musb_qh *qh, int is_out, struct urb *urb); }; /* Do not add new entries here, add them the struct musb_io instead */ -- 2.24.0 _______________________________________________ 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=-9.8 required=3.0 tests=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,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 D95B4C43603 for ; Wed, 11 Dec 2019 02:05:26 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 ABAD52073B for ; Wed, 11 Dec 2019 02:05:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Y7UZSHjj"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="cyPeNpoY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ABAD52073B 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+infradead-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=bombadil.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=SI2uOQzui152sX0EYEoiVQ9EqxNYpAcXcUcwQ65ZcFY=; b=Y7UZSHjjbqfHEC sFU4L/p1jfsAqeC+6x2mnALhdFibeRs7u/e/EVEW2DLW4NLCcL2dAoG2euV1LY1PKz88eUqyip4iM aphCMxq4uaSzBb7Wa1xtd0kW5G4/OMgZzkWD1wG+D6y8EVJd7H/OeXkW21mVpdo7/usekf+yFYgzD WA3EORK8+x47zPGfJbb5Z90+F+zFh7dxSSm9MyD38lZAdUQ2b5Og4TAmiVojzRl/bjyECEpWHfaEY OGrmer+Kw7RKrOPnaae57FwK9jIMc9GF3mg//NIz+QQlFiTRS4R98ZCP6aU5fDxLUBnTQB4g9HdFa 1n92p+PFSAlbTXoytbtw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ierNT-0002cB-4E; Wed, 11 Dec 2019 02:05:23 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ierN7-00019b-G8; Wed, 11 Dec 2019 02:05:03 +0000 X-UUID: c1fdb0f51dd24dd884e2e9f0068988ca-20191210 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=9HrUhTi78f5xP0jry51zQs2YAQuyV98mbQ++goxlMsg=; b=cyPeNpoYaODWGr+Utgu2FeP9WTiP4aKtka1Cye6zRqevSF4oSVCJKuPoV+JUfLQMPtgN3yjDX7ldj/SmIgCY0GY8gwjharFUNaQH+z8FJe2aiIar7djR8cvcubo6ndMY3ZGSN68cosVStc5M56xMVsAhPjTwxvg3AwDg9fo6YIM=; X-UUID: c1fdb0f51dd24dd884e2e9f0068988ca-20191210 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 701229230; Tue, 10 Dec 2019 18:04:58 -0800 Received: from MTKMBS31N2.mediatek.inc (172.27.4.87) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Tue, 10 Dec 2019 17:56:03 -0800 Received: from mtkcas09.mediatek.inc (172.21.101.178) by MTKMBS31N2.mediatek.inc (172.27.4.87) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 11 Dec 2019 09:53:59 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas09.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Wed, 11 Dec 2019 09:54:50 +0800 From: To: Bin Liu , Rob Herring Subject: [PATCH v9 3/6] usb: musb: Add get/set toggle hooks Date: Wed, 11 Dec 2019 09:54:43 +0800 Message-ID: <20191211015446.11477-4-min.guo@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20191211015446.11477-1-min.guo@mediatek.com> References: <20191211015446.11477-1-min.guo@mediatek.com> MIME-Version: 1.0 X-TM-SNTS-SMTP: FB2895EDD654822D40F138DF16C63129CE844CA87D732564AD51AE561924C7122000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191210_180501_586087_C639FA3D X-CRM114-Status: GOOD ( 14.90 ) 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: Mark Rutland , devicetree@vger.kernel.org, hdegoede@redhat.com, tony@atomide.com, Greg Kroah-Hartman , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Matthias Brugger , Alan Stern , Min Guo , chunfeng.yun@mediatek.com, linux-mediatek@lists.infradead.org, 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+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Min Guo Add get/set toggle hooks in struct musb_io and struct musb_platform_ops for special platform; remove function musb_save_toggle, use the set/get callback to handle toggle. Signed-off-by: Min Guo --- changes in v9: 1. no changes changes in v8: 1. no changes changes in v7: 1. no changes changes in v6: 1. no changes changes in v5: 1. no changes new patch based on v4: --- drivers/usb/musb/musb_core.c | 42 ++++++++++++++++++++++++++++++++ drivers/usb/musb/musb_core.h | 5 ++++ drivers/usb/musb/musb_host.c | 46 ++++++++---------------------------- drivers/usb/musb/musb_io.h | 4 ++++ 4 files changed, 61 insertions(+), 36 deletions(-) diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 15cca912c53e..32c00652e1a2 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -274,6 +274,38 @@ static void musb_default_writew(void __iomem *addr, unsigned offset, u16 data) __raw_writew(data, addr + offset); } +static u16 musb_default_get_toggle(struct musb_qh *qh, int is_out) +{ + void __iomem *epio = qh->hw_ep->regs; + u16 csr; + + if (is_out) + csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE; + else + csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE; + + return csr; +} + +static u16 musb_default_set_toggle(struct musb_qh *qh, int is_out, + struct urb *urb) +{ + u16 csr; + u16 toggle; + + toggle = usb_gettoggle(urb->dev, qh->epnum, is_out); + + if (is_out) + csr = toggle ? (MUSB_TXCSR_H_WR_DATATOGGLE + | MUSB_TXCSR_H_DATATOGGLE) + : MUSB_TXCSR_CLRDATATOG; + else + csr = toggle ? (MUSB_RXCSR_H_WR_DATATOGGLE + | MUSB_RXCSR_H_DATATOGGLE) : 0; + + return csr; +} + /* * Load an endpoint's FIFO */ @@ -2271,6 +2303,16 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) else musb->io.write_fifo = musb_default_write_fifo; + if (musb->ops->get_toggle) + musb->io.get_toggle = musb->ops->get_toggle; + else + musb->io.get_toggle = musb_default_get_toggle; + + if (musb->ops->set_toggle) + musb->io.set_toggle = musb->ops->set_toggle; + else + musb->io.set_toggle = musb_default_set_toggle; + if (!musb->xceiv->io_ops) { musb->xceiv->io_dev = musb->controller; musb->xceiv->io_priv = musb->mregs; diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index 04203b7126d5..9f5a69c2d73b 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h @@ -27,6 +27,7 @@ struct musb; struct musb_hw_ep; struct musb_ep; +struct musb_qh; /* Helper defines for struct musb->hwvers */ #define MUSB_HWVERS_MAJOR(x) ((x >> 10) & 0x1f) @@ -123,6 +124,8 @@ struct musb_io; * @writew: write 16 bits * @read_fifo: reads the fifo * @write_fifo: writes to fifo + * @get_toggle: platform specific get toggle function + * @set_toggle: platform specific set toggle function * @dma_init: platform specific dma init function * @dma_exit: platform specific dma exit function * @init: turns on clocks, sets up platform-specific registers, etc @@ -167,6 +170,8 @@ struct musb_platform_ops { void (*writew)(void __iomem *addr, unsigned offset, u16 data); void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf); void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf); + u16 (*get_toggle)(struct musb_qh *qh, int is_out); + u16 (*set_toggle)(struct musb_qh *qh, int is_out, struct urb *urb); struct dma_controller * (*dma_init) (struct musb *musb, void __iomem *base); void (*dma_exit)(struct dma_controller *c); diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index 5a44b70372d9..886c9b602f8c 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c @@ -286,26 +286,6 @@ __acquires(musb->lock) spin_lock(&musb->lock); } -/* For bulk/interrupt endpoints only */ -static inline void musb_save_toggle(struct musb_qh *qh, int is_in, - struct urb *urb) -{ - void __iomem *epio = qh->hw_ep->regs; - u16 csr; - - /* - * FIXME: the current Mentor DMA code seems to have - * problems getting toggle correct. - */ - - if (is_in) - csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE; - else - csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE; - - usb_settoggle(urb->dev, qh->epnum, !is_in, csr ? 1 : 0); -} - /* * Advance this hardware endpoint's queue, completing the specified URB and * advancing to either the next URB queued to that qh, or else invalidating @@ -320,6 +300,7 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb, struct musb_hw_ep *ep = qh->hw_ep; int ready = qh->is_ready; int status; + u16 toggle; status = (urb->status == -EINPROGRESS) ? 0 : urb->status; @@ -327,7 +308,8 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb, switch (qh->type) { case USB_ENDPOINT_XFER_BULK: case USB_ENDPOINT_XFER_INT: - musb_save_toggle(qh, is_in, urb); + toggle = musb->io.get_toggle(qh, !is_in); + usb_settoggle(urb->dev, qh->epnum, !is_in, toggle ? 1 : 0); break; case USB_ENDPOINT_XFER_ISOC: if (status == 0 && urb->error_count) @@ -772,13 +754,8 @@ static void musb_ep_program(struct musb *musb, u8 epnum, ); csr |= MUSB_TXCSR_MODE; - if (!hw_ep->tx_double_buffered) { - if (usb_gettoggle(urb->dev, qh->epnum, 1)) - csr |= MUSB_TXCSR_H_WR_DATATOGGLE - | MUSB_TXCSR_H_DATATOGGLE; - else - csr |= MUSB_TXCSR_CLRDATATOG; - } + if (!hw_ep->tx_double_buffered) + csr |= musb->io.set_toggle(qh, is_out, urb); musb_writew(epio, MUSB_TXCSR, csr); /* REVISIT may need to clear FLUSHFIFO ... */ @@ -860,17 +837,12 @@ static void musb_ep_program(struct musb *musb, u8 epnum, /* IN/receive */ } else { - u16 csr; + u16 csr = 0; if (hw_ep->rx_reinit) { musb_rx_reinit(musb, qh, epnum); + csr |= musb->io.set_toggle(qh, is_out, urb); - /* init new state: toggle and NYET, maybe DMA later */ - if (usb_gettoggle(urb->dev, qh->epnum, 0)) - csr = MUSB_RXCSR_H_WR_DATATOGGLE - | MUSB_RXCSR_H_DATATOGGLE; - else - csr = 0; if (qh->type == USB_ENDPOINT_XFER_INT) csr |= MUSB_RXCSR_DISNYET; @@ -933,6 +905,7 @@ static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep, void __iomem *epio = ep->regs; struct musb_qh *cur_qh, *next_qh; u16 rx_csr, tx_csr; + u16 toggle; musb_ep_select(mbase, ep->epnum); if (is_in) { @@ -970,7 +943,8 @@ static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep, urb->actual_length += dma->actual_len; dma->actual_len = 0L; } - musb_save_toggle(cur_qh, is_in, urb); + toggle = musb->io.get_toggle(cur_qh, !is_in); + usb_settoggle(urb->dev, cur_qh->epnum, !is_in, toggle ? 1 : 0); if (is_in) { /* move cur_qh to end of queue */ diff --git a/drivers/usb/musb/musb_io.h b/drivers/usb/musb/musb_io.h index 8058a58092cf..8179334f405b 100644 --- a/drivers/usb/musb/musb_io.h +++ b/drivers/usb/musb/musb_io.h @@ -22,6 +22,8 @@ * @read_fifo: platform specific function to read fifo * @write_fifo: platform specific function to write fifo * @busctl_offset: platform specific function to get busctl offset + * @get_toggle: platform specific function to get toggle + * @set_toggle: platform specific function to set toggle */ struct musb_io { u32 (*ep_offset)(u8 epnum, u16 offset); @@ -30,6 +32,8 @@ struct musb_io { void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf); void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf); u32 (*busctl_offset)(u8 epnum, u16 offset); + u16 (*get_toggle)(struct musb_qh *qh, int is_out); + u16 (*set_toggle)(struct musb_qh *qh, int is_out, struct urb *urb); }; /* Do not add new entries here, add them the struct musb_io instead */ -- 2.24.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel