From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [V3,4/6] usb: serial: f81534: refactoring calc_num_ports() From: "Ji-Ze Hong \(Peter Hong\)" Message-Id: <1515653240-5420-4-git-send-email-hpeter+linux_kernel@gmail.com> Date: Thu, 11 Jan 2018 14:47:18 +0800 To: johan@kernel.org Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, peter_hong@fintek.com.tw, "Ji-Ze Hong \(Peter Hong\)" List-ID: SW4gdGhlIG9yaWdpbmFsIGNvZGUsIFdlJ2xsIHJlYWQgY29uZmlndXJhdGlvbiBpbiBjYWxjX251 bV9wb3J0cygpCmFuZCByZWFkIGFnYWluIGluIGF0dGFjaCgpLiBJbiBmYWN0LCB3ZSBjYW4gbW92 ZSBhbGwgY29udGVudCBmcm9tCmF0dGFjaCgpIHRvIGNhbGNfbnVtX3BvcnRzKCkgdG8gc2ltcGxp ZnkgdGhlIGNvZGUuCgpTaWduZWQtb2ZmLWJ5OiBKaS1aZSBIb25nIChQZXRlciBIb25nKSA8aHBl dGVyK2xpbnV4X2tlcm5lbEBnbWFpbC5jb20+Ci0tLQpWMzoKCTE6IEZpcnN0IGludHJvZHVjZWQg aW4gdGhpcyBzZXJpZXMgcGF0Y2hlcy4KCiBkcml2ZXJzL3VzYi9zZXJpYWwvZjgxNTM0LmMgfCAx MTYgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBj aGFuZ2VkLCAzMSBpbnNlcnRpb25zKCspLCA4NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9k cml2ZXJzL3VzYi9zZXJpYWwvZjgxNTM0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZjgxNTM0LmMK aW5kZXggZTdkZDAxMzEwZjIwLi5iYzBhNGJkNWRjZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNi L3NlcmlhbC9mODE1MzQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZjgxNTM0LmMKQEAgLTc1 MywxNCArNzUzLDE0IEBAIHN0YXRpYyBpbnQgZjgxNTM0X2ZpbmRfY29uZmlnX2lkeChzdHJ1Y3Qg dXNiX3NlcmlhbCAqc2VyaWFsLCB1OCAqaW5kZXgpCiBzdGF0aWMgaW50IGY4MTUzNF9jYWxjX251 bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAogCQkJCQlzdHJ1Y3QgdXNiX3Nlcmlh bF9lbmRwb2ludHMgKmVwZHMpCiB7CisJc3RydWN0IGY4MTUzNF9zZXJpYWxfcHJpdmF0ZSAqc2Vy aWFsX3ByaXY7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+aW50ZXJmYWNlLT5kZXY7 CiAJaW50IHNpemVfYnVsa19pbiA9IHVzYl9lbmRwb2ludF9tYXhwKGVwZHMtPmJ1bGtfaW5bMF0p OwogCWludCBzaXplX2J1bGtfb3V0ID0gdXNiX2VuZHBvaW50X21heHAoZXBkcy0+YnVsa19vdXRb MF0pOwotCXU4IHNldHRpbmdbRjgxNTM0X0NVU1RPTV9EQVRBX1NJWkVdOwotCXU4IHNldHRpbmdf aWR4OwogCXU4IG51bV9wb3J0ID0gMDsKKwlpbnQgaW5kZXggPSAwOwogCWludCBzdGF0dXM7Ci0J c2l6ZV90IGk7CisJaW50IGk7CiAKIAlpZiAoc2l6ZV9idWxrX291dCAhPSBGODE1MzRfV1JJVEVf QlVGRkVSX1NJWkUgfHwKIAkJCXNpemVfYnVsa19pbiAhPSBGODE1MzRfTUFYX1JFQ0VJVkVfQkxP Q0tfU0laRSkgewpAQCAtNzY4LDggKzc2OCwxNiBAQCBzdGF0aWMgaW50IGY4MTUzNF9jYWxjX251 bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9 CiAKKwlzZXJpYWxfcHJpdiA9IGRldm1fa3phbGxvYygmc2VyaWFsLT5pbnRlcmZhY2UtPmRldiwK KwkJCQkJc2l6ZW9mKCpzZXJpYWxfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghc2VyaWFsX3By aXYpCisJCXJldHVybiAtRU5PTUVNOworCisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIHNl cmlhbF9wcml2KTsKKwltdXRleF9pbml0KCZzZXJpYWxfcHJpdi0+dXJiX211dGV4KTsKKwogCS8q IENoZWNrIGhhZCBjdXN0b20gc2V0dGluZyAqLwotCXN0YXR1cyA9IGY4MTUzNF9maW5kX2NvbmZp Z19pZHgoc2VyaWFsLCAmc2V0dGluZ19pZHgpOworCXN0YXR1cyA9IGY4MTUzNF9maW5kX2NvbmZp Z19pZHgoc2VyaWFsLCAmc2VyaWFsX3ByaXYtPnNldHRpbmdfaWR4KTsKIAlpZiAoc3RhdHVzKSB7 CiAJCWRldl9lcnIoJnNlcmlhbC0+aW50ZXJmYWNlLT5kZXYsICIlczogZmluZCBpZHggZmFpbGVk OiAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKQEAgLTc4MCwxMSArNzg4LDEyIEBAIHN0 YXRpYyBpbnQgZjgxNTM0X2NhbGNfbnVtX3BvcnRzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWws CiAJICogV2UnbGwgcmVhZCBjdXN0b20gZGF0YSBvbmx5IHdoZW4gZGF0YSBhdmFpbGFibGUsIG90 aGVyd2lzZSB3ZSdsbAogCSAqIHJlYWQgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLgogCSAqLwotCWlm IChzZXR0aW5nX2lkeCAhPSBGODE1MzRfQ1VTVE9NX05PX0NVU1RPTV9EQVRBKSB7CisJaWYgKHNl cmlhbF9wcml2LT5zZXR0aW5nX2lkeCAhPSBGODE1MzRfQ1VTVE9NX05PX0NVU1RPTV9EQVRBKSB7 CiAJCXN0YXR1cyA9IGY4MTUzNF9yZWFkX2ZsYXNoKHNlcmlhbCwKIAkJCQkJCUY4MTUzNF9DVVNU T01fQUREUkVTU19TVEFSVCArCiAJCQkJCQlGODE1MzRfQ09ORl9PRkZTRVQsCi0JCQkJCQlzaXpl b2Yoc2V0dGluZyksIHNldHRpbmcpOworCQkJCQkJc2l6ZW9mKHNlcmlhbF9wcml2LT5jb25mX2Rh dGEpLAorCQkJCQkJc2VyaWFsX3ByaXYtPmNvbmZfZGF0YSk7CiAJCWlmIChzdGF0dXMpIHsKIAkJ CWRldl9lcnIoJnNlcmlhbC0+aW50ZXJmYWNlLT5kZXYsCiAJCQkJCSIlczogZ2V0IGN1c3RvbSBk YXRhIGZhaWxlZDogJWRcbiIsCkBAIC03OTQsMTMgKzgwMywxMyBAQCBzdGF0aWMgaW50IGY4MTUz NF9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAogCiAJCWRldl9kYmco JnNlcmlhbC0+aW50ZXJmYWNlLT5kZXYsCiAJCQkJIiVzOiByZWFkIGNvbmZpZyBmcm9tIGJsb2Nr OiAlZFxuIiwgX19mdW5jX18sCi0JCQkJc2V0dGluZ19pZHgpOworCQkJCXNlcmlhbF9wcml2LT5z ZXR0aW5nX2lkeCk7CiAJfSBlbHNlIHsKIAkJLyogUmVhZCBkZWZhdWx0IGJvYXJkIHNldHRpbmcg Ki8KIAkJc3RhdHVzID0gZjgxNTM0X3JlYWRfZmxhc2goc2VyaWFsLAotCQkJCUY4MTUzNF9ERUZf Q09ORl9BRERSRVNTX1NUQVJULCBGODE1MzRfTlVNX1BPUlQsCi0JCQkJc2V0dGluZyk7Ci0KKwkJ CQlGODE1MzRfREVGX0NPTkZfQUREUkVTU19TVEFSVCwKKwkJCQlzaXplb2Yoc2VyaWFsX3ByaXYt PmNvbmZfZGF0YSksCisJCQkJc2VyaWFsX3ByaXYtPmNvbmZfZGF0YSk7CiAJCWlmIChzdGF0dXMp IHsKIAkJCWRldl9lcnIoJnNlcmlhbC0+aW50ZXJmYWNlLT5kZXYsCiAJCQkJCSIlczogcmVhZCBm YWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywKQEAgLTgxNCw3ICs4MjMsNyBAQCBzdGF0aWMgaW50IGY4 MTUzNF9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAogCiAJLyogTmV3 IHN0eWxlLCBmaW5kIGFsbCBwb3NzaWJsZSBwb3J0cyAqLwogCWZvciAoaSA9IDA7IGkgPCBGODE1 MzRfTlVNX1BPUlQ7ICsraSkgewotCQlpZiAoc2V0dGluZ1tpXSAmIEY4MTUzNF9QT1JUX1VOQVZB SUxBQkxFKQorCQlpZiAoc2VyaWFsX3ByaXYtPmNvbmZfZGF0YVtpXSAmIEY4MTUzNF9QT1JUX1VO QVZBSUxBQkxFKQogCQkJY29udGludWU7CiAKIAkJKytudW1fcG9ydDsKQEAgLTgyNiw2ICs4MzUs MTcgQEAgc3RhdGljIGludCBmODE1MzRfY2FsY19udW1fcG9ydHMoc3RydWN0IHVzYl9zZXJpYWwg KnNlcmlhbCwKIAkJbnVtX3BvcnQgPSA0OwkJLyogTm90aGluZyBmb3VuZCwgb2xkZXN0IHZlcnNp b24gSUMgKi8KIAl9CiAKKwkvKiBBc3NpZ24gcGh5LXRvLWxvZ2ljIG1hcHBpbmcgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgRjgxNTM0X05VTV9QT1JUOyArK2kpIHsKKwkJaWYgKHNlcmlhbF9wcml2LT5j b25mX2RhdGFbaV0gJiBGODE1MzRfUE9SVF9VTkFWQUlMQUJMRSkKKwkJCWNvbnRpbnVlOworCisJ CXNlcmlhbF9wcml2LT50dHlfaWR4W2ldID0gaW5kZXgrKzsKKwkJZGV2X2RiZygmc2VyaWFsLT5p bnRlcmZhY2UtPmRldiwKKwkJCQkiJXM6IHBoeV9udW06ICVkLCB0dHlfaWR4OiAlZFxuIiwgX19m dW5jX18sIGksCisJCQkJc2VyaWFsX3ByaXYtPnR0eV9pZHhbaV0pOworCX0KKwogCS8qCiAJICog U2V0dXAgYnVsay1vdXQgZW5kcG9pbnQgbXVsdGlwbGV4aW5nLiBBbGwgcG9ydHMgc2hhcmUgdGhl IHNhbWUKIAkgKiBidWxrLW91dCBlbmRwb2ludC4KQEAgLTEyMjcsNzkgKzEyNDcsNiBAQCBzdGF0 aWMgdm9pZCBmODE1MzRfd3JpdGVfdXNiX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIAl9CiB9 CiAKLXN0YXRpYyBpbnQgZjgxNTM0X2F0dGFjaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQot ewotCXN0cnVjdCBmODE1MzRfc2VyaWFsX3ByaXZhdGUgKnNlcmlhbF9wcml2OwotCWludCBpbmRl eCA9IDA7Ci0JaW50IHN0YXR1czsKLQlpbnQgaTsKLQotCXNlcmlhbF9wcml2ID0gZGV2bV9remFs bG9jKCZzZXJpYWwtPmludGVyZmFjZS0+ZGV2LAotCQkJCQlzaXplb2YoKnNlcmlhbF9wcml2KSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZXJpYWxfcHJpdikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl1 c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgc2VyaWFsX3ByaXYpOwotCi0JbXV0ZXhfaW5pdCgm c2VyaWFsX3ByaXYtPnVyYl9tdXRleCk7Ci0KLQkvKiBDaGVjayBoYWQgY3VzdG9tIHNldHRpbmcg Ki8KLQlzdGF0dXMgPSBmODE1MzRfZmluZF9jb25maWdfaWR4KHNlcmlhbCwgJnNlcmlhbF9wcml2 LT5zZXR0aW5nX2lkeCk7Ci0JaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZzZXJpYWwtPmludGVy ZmFjZS0+ZGV2LCAiJXM6IGZpbmQgaWR4IGZhaWxlZDogJWRcbiIsCi0JCQkJX19mdW5jX18sIHN0 YXR1cyk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JLyoKLQkgKiBXZSdsbCByZWFkIGN1c3Rv bSBkYXRhIG9ubHkgd2hlbiBkYXRhIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHdlJ2xsCi0JICogcmVh ZCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuCi0JICovCi0JaWYgKHNlcmlhbF9wcml2LT5zZXR0aW5n X2lkeCA9PSBGODE1MzRfQ1VTVE9NX05PX0NVU1RPTV9EQVRBKSB7Ci0JCS8qCi0JCSAqIFRoZSBk ZWZhdWx0IGNvbmZpZ3VyYXRpb24gbGF5b3V0OgotCQkgKglieXRlIDAvMS8yLzM6IHVhcnQgc2V0 dGluZwotCQkgKi8KLQkJc3RhdHVzID0gZjgxNTM0X3JlYWRfZmxhc2goc2VyaWFsLAotCQkJCQlG ODE1MzRfREVGX0NPTkZfQUREUkVTU19TVEFSVCwKLQkJCQkJRjgxNTM0X0RFRl9DT05GX1NJWkUs Ci0JCQkJCXNlcmlhbF9wcml2LT5jb25mX2RhdGEpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZf ZXJyKCZzZXJpYWwtPmludGVyZmFjZS0+ZGV2LAotCQkJCQkiJXM6IHJlYWQgcmVzZXJ2ZSBkYXRh IGZhaWxlZDogJWRcbiIsCi0JCQkJCV9fZnVuY19fLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1 czsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIE9ubHkgcmVhZCA4IGJ5dGVzIGZvciBtb2RlICYgR1BJ TyAqLwotCQlzdGF0dXMgPSBmODE1MzRfcmVhZF9mbGFzaChzZXJpYWwsCi0JCQkJCQlGODE1MzRf Q1VTVE9NX0FERFJFU1NfU1RBUlQgKwotCQkJCQkJRjgxNTM0X0NPTkZfT0ZGU0VULAotCQkJCQkJ c2l6ZW9mKHNlcmlhbF9wcml2LT5jb25mX2RhdGEpLAotCQkJCQkJc2VyaWFsX3ByaXYtPmNvbmZf ZGF0YSk7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCWRldl9lcnIoJnNlcmlhbC0+aW50ZXJmYWNlLT5k ZXYsCi0JCQkJCSIlczogaWR4OiAlZCBnZXQgZGF0YSBmYWlsZWQ6ICVkXG4iLAotCQkJCQlfX2Z1 bmNfXywgc2VyaWFsX3ByaXYtPnNldHRpbmdfaWR4LAotCQkJCQlzdGF0dXMpOwotCQkJcmV0dXJu IHN0YXR1czsKLQkJfQotCX0KLQotCS8qIEFzc2lnbiBwaHktdG8tbG9naWMgbWFwcGluZyAqLwot CWZvciAoaSA9IDA7IGkgPCBGODE1MzRfTlVNX1BPUlQ7ICsraSkgewotCQlpZiAoc2VyaWFsX3By aXYtPmNvbmZfZGF0YVtpXSAmIEY4MTUzNF9QT1JUX1VOQVZBSUxBQkxFKQotCQkJY29udGludWU7 Ci0KLQkJc2VyaWFsX3ByaXYtPnR0eV9pZHhbaV0gPSBpbmRleCsrOwotCQlkZXZfZGJnKCZzZXJp YWwtPmludGVyZmFjZS0+ZGV2LAotCQkJCSIlczogcGh5X251bTogJWQsIHR0eV9pZHg6ICVkXG4i LCBfX2Z1bmNfXywgaSwKLQkJCQlzZXJpYWxfcHJpdi0+dHR5X2lkeFtpXSk7Ci0JfQotCi0JcmV0 dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGY4MTUzNF9sc3Jfd29ya2VyKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZjgxNTM0X3BvcnRfcHJpdmF0ZSAqcG9ydF9wcml2OwpA QCAtMTU0Myw3ICsxNDkwLDYgQEAgc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBmODE1 MzRfZGV2aWNlID0gewogCS53cml0ZSA9CQlmODE1MzRfd3JpdGUsCiAJLnR4X2VtcHR5ID0JCWY4 MTUzNF90eF9lbXB0eSwKIAkuY2FsY19udW1fcG9ydHMgPQlmODE1MzRfY2FsY19udW1fcG9ydHMs Ci0JLmF0dGFjaCA9CQlmODE1MzRfYXR0YWNoLAogCS5wb3J0X3Byb2JlID0JCWY4MTUzNF9wb3J0 X3Byb2JlLAogCS5wb3J0X3JlbW92ZSA9CQlmODE1MzRfcG9ydF9yZW1vdmUsCiAJLmJyZWFrX2N0 bCA9CQlmODE1MzRfYnJlYWtfY3RsLAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932546AbeAKGrb (ORCPT + 1 other); Thu, 11 Jan 2018 01:47:31 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:42215 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932292AbeAKGr2 (ORCPT ); Thu, 11 Jan 2018 01:47:28 -0500 X-Google-Smtp-Source: ACJfBosaioB6Nl4jnx9JXdRCogzFMw0gq4c35dNh7AnqnhCDqs3Moz3rulFu0PshxeOQ9p1OEDpAAA== From: "Ji-Ze Hong (Peter Hong)" X-Google-Original-From: "Ji-Ze Hong (Peter Hong)" To: johan@kernel.org Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, peter_hong@fintek.com.tw, "Ji-Ze Hong (Peter Hong)" Subject: [PATCH V3 4/6] usb: serial: f81534: refactoring calc_num_ports() Date: Thu, 11 Jan 2018 14:47:18 +0800 Message-Id: <1515653240-5420-4-git-send-email-hpeter+linux_kernel@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1515653240-5420-1-git-send-email-hpeter+linux_kernel@gmail.com> References: <1515653240-5420-1-git-send-email-hpeter+linux_kernel@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: In the original code, We'll read configuration in calc_num_ports() and read again in attach(). In fact, we can move all content from attach() to calc_num_ports() to simplify the code. Signed-off-by: Ji-Ze Hong (Peter Hong) --- V3: 1: First introduced in this series patches. drivers/usb/serial/f81534.c | 116 ++++++++++++-------------------------------- 1 file changed, 31 insertions(+), 85 deletions(-) diff --git a/drivers/usb/serial/f81534.c b/drivers/usb/serial/f81534.c index e7dd01310f20..bc0a4bd5dcec 100644 --- a/drivers/usb/serial/f81534.c +++ b/drivers/usb/serial/f81534.c @@ -753,14 +753,14 @@ static int f81534_find_config_idx(struct usb_serial *serial, u8 *index) static int f81534_calc_num_ports(struct usb_serial *serial, struct usb_serial_endpoints *epds) { + struct f81534_serial_private *serial_priv; struct device *dev = &serial->interface->dev; int size_bulk_in = usb_endpoint_maxp(epds->bulk_in[0]); int size_bulk_out = usb_endpoint_maxp(epds->bulk_out[0]); - u8 setting[F81534_CUSTOM_DATA_SIZE]; - u8 setting_idx; u8 num_port = 0; + int index = 0; int status; - size_t i; + int i; if (size_bulk_out != F81534_WRITE_BUFFER_SIZE || size_bulk_in != F81534_MAX_RECEIVE_BLOCK_SIZE) { @@ -768,8 +768,16 @@ static int f81534_calc_num_ports(struct usb_serial *serial, return -ENODEV; } + serial_priv = devm_kzalloc(&serial->interface->dev, + sizeof(*serial_priv), GFP_KERNEL); + if (!serial_priv) + return -ENOMEM; + + usb_set_serial_data(serial, serial_priv); + mutex_init(&serial_priv->urb_mutex); + /* Check had custom setting */ - status = f81534_find_config_idx(serial, &setting_idx); + status = f81534_find_config_idx(serial, &serial_priv->setting_idx); if (status) { dev_err(&serial->interface->dev, "%s: find idx failed: %d\n", __func__, status); @@ -780,11 +788,12 @@ static int f81534_calc_num_ports(struct usb_serial *serial, * We'll read custom data only when data available, otherwise we'll * read default value instead. */ - if (setting_idx != F81534_CUSTOM_NO_CUSTOM_DATA) { + if (serial_priv->setting_idx != F81534_CUSTOM_NO_CUSTOM_DATA) { status = f81534_read_flash(serial, F81534_CUSTOM_ADDRESS_START + F81534_CONF_OFFSET, - sizeof(setting), setting); + sizeof(serial_priv->conf_data), + serial_priv->conf_data); if (status) { dev_err(&serial->interface->dev, "%s: get custom data failed: %d\n", @@ -794,13 +803,13 @@ static int f81534_calc_num_ports(struct usb_serial *serial, dev_dbg(&serial->interface->dev, "%s: read config from block: %d\n", __func__, - setting_idx); + serial_priv->setting_idx); } else { /* Read default board setting */ status = f81534_read_flash(serial, - F81534_DEF_CONF_ADDRESS_START, F81534_NUM_PORT, - setting); - + F81534_DEF_CONF_ADDRESS_START, + sizeof(serial_priv->conf_data), + serial_priv->conf_data); if (status) { dev_err(&serial->interface->dev, "%s: read failed: %d\n", __func__, @@ -814,7 +823,7 @@ static int f81534_calc_num_ports(struct usb_serial *serial, /* New style, find all possible ports */ for (i = 0; i < F81534_NUM_PORT; ++i) { - if (setting[i] & F81534_PORT_UNAVAILABLE) + if (serial_priv->conf_data[i] & F81534_PORT_UNAVAILABLE) continue; ++num_port; @@ -826,6 +835,17 @@ static int f81534_calc_num_ports(struct usb_serial *serial, num_port = 4; /* Nothing found, oldest version IC */ } + /* Assign phy-to-logic mapping */ + for (i = 0; i < F81534_NUM_PORT; ++i) { + if (serial_priv->conf_data[i] & F81534_PORT_UNAVAILABLE) + continue; + + serial_priv->tty_idx[i] = index++; + dev_dbg(&serial->interface->dev, + "%s: phy_num: %d, tty_idx: %d\n", __func__, i, + serial_priv->tty_idx[i]); + } + /* * Setup bulk-out endpoint multiplexing. All ports share the same * bulk-out endpoint. @@ -1227,79 +1247,6 @@ static void f81534_write_usb_callback(struct urb *urb) } } -static int f81534_attach(struct usb_serial *serial) -{ - struct f81534_serial_private *serial_priv; - int index = 0; - int status; - int i; - - serial_priv = devm_kzalloc(&serial->interface->dev, - sizeof(*serial_priv), GFP_KERNEL); - if (!serial_priv) - return -ENOMEM; - - usb_set_serial_data(serial, serial_priv); - - mutex_init(&serial_priv->urb_mutex); - - /* Check had custom setting */ - status = f81534_find_config_idx(serial, &serial_priv->setting_idx); - if (status) { - dev_err(&serial->interface->dev, "%s: find idx failed: %d\n", - __func__, status); - return status; - } - - /* - * We'll read custom data only when data available, otherwise we'll - * read default value instead. - */ - if (serial_priv->setting_idx == F81534_CUSTOM_NO_CUSTOM_DATA) { - /* - * The default configuration layout: - * byte 0/1/2/3: uart setting - */ - status = f81534_read_flash(serial, - F81534_DEF_CONF_ADDRESS_START, - F81534_DEF_CONF_SIZE, - serial_priv->conf_data); - if (status) { - dev_err(&serial->interface->dev, - "%s: read reserve data failed: %d\n", - __func__, status); - return status; - } - } else { - /* Only read 8 bytes for mode & GPIO */ - status = f81534_read_flash(serial, - F81534_CUSTOM_ADDRESS_START + - F81534_CONF_OFFSET, - sizeof(serial_priv->conf_data), - serial_priv->conf_data); - if (status) { - dev_err(&serial->interface->dev, - "%s: idx: %d get data failed: %d\n", - __func__, serial_priv->setting_idx, - status); - return status; - } - } - - /* Assign phy-to-logic mapping */ - for (i = 0; i < F81534_NUM_PORT; ++i) { - if (serial_priv->conf_data[i] & F81534_PORT_UNAVAILABLE) - continue; - - serial_priv->tty_idx[i] = index++; - dev_dbg(&serial->interface->dev, - "%s: phy_num: %d, tty_idx: %d\n", __func__, i, - serial_priv->tty_idx[i]); - } - - return 0; -} - static void f81534_lsr_worker(struct work_struct *work) { struct f81534_port_private *port_priv; @@ -1543,7 +1490,6 @@ static struct usb_serial_driver f81534_device = { .write = f81534_write, .tx_empty = f81534_tx_empty, .calc_num_ports = f81534_calc_num_ports, - .attach = f81534_attach, .port_probe = f81534_port_probe, .port_remove = f81534_port_remove, .break_ctl = f81534_break_ctl, -- 2.7.4