From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Subject: Re: [PATCH 1/3] mfd: Add realtek USB card reader driver Date: Thu, 16 Jan 2014 16:54:09 +0800 Message-ID: <52D79E31.6000300@realtek.com> References: <1389685656-880-1-git-send-email-rogerable@realtek.com> <1389685656-880-2-git-send-email-rogerable@realtek.com> <20140114130409.GB11820@lee--X1> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20140114130409.GB11820@lee--X1> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: driverdev-devel-bounces@linuxdriverproject.org To: Lee Jones Cc: Samuel Ortiz , Alex Dubov , Greg Kroah-Hartman , "driverdev-devel@linuxdriverproject.org" , "linux-mmc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Wei_wang , Chris Ball , Dan Carpenter , Maxim Levitsky List-Id: linux-mmc@vger.kernel.org T24gMDEvMTQvMjAxNCAwOTowNCBQTSwgTGVlIEpvbmVzIHdyb3RlOgo+PiBGcm9tOiBSb2dlciBU c2VuZyA8cm9nZXJhYmxlQHJlYWx0ZWsuY29tPgo+Pgo+PiBSZWFsdGVrIFVTQiBjYXJkIHJlYWRl ciBwcm92aWRlcyBhIGNoYW5uZWwgdG8gdHJhbnNmZXIgY29tbWFuZCBvciBkYXRhIHRvIGZsYXNo Cj4+IG1lbW9yeSBjYXJkcy4gVGhpcyBkcml2ZXIgZXhwb3J0cyBob3N0IGluc3RhbmNlcyBmb3Ig bW1jIGFuZCBtZW1zdGljayBzdWJzeXN0ZW1zCj4+IGFuZCBoYW5kbGVzIGJhc2ljIHdvcmtzLgo+ Pgo+PiBTaWduZWQtb2ZmLWJ5OiBSb2dlciBUc2VuZyA8cm9nZXJhYmxlQHJlYWx0ZWsuY29tPgoK W3NuaXBdCgo+PiArc3RhdGljIGludCBydHN4X3VzYl9idWxrX3RyYW5zZmVyX3NnbGlzdChzdHJ1 Y3QgcnRzeF91Y3IgKnVjciwKPj4gKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGlwZSwgc3Ry dWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG51bV9zZywKPj4gKyAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgKmFjdF9sZW4sIGludCB0aW1lb3V0KQo+PiArewo+ PiArICAgICBpbnQgcmV0Owo+PiArCj4+ICsgICAgIGRldl9kYmcoJnVjci0+cHVzYl9pbnRmLT5k ZXYsICIlczogeGZlciAldSBieXRlcywgJWQgZW50cmllc1xuIiwKPj4gKyAgICAgICAgICAgICAg ICAgICAgIF9fZnVuY19fLCBsZW5ndGgsIG51bV9zZyk7Cj4+ICsgICAgIHJldCA9IHVzYl9zZ19p bml0KCZ1Y3ItPmN1cnJlbnRfc2csIHVjci0+cHVzYl9kZXYsIHBpcGUsIDAsCj4+ICsgICAgICAg ICAgICAgICAgICAgICBzZywgbnVtX3NnLCBsZW5ndGgsIEdGUF9OT0lPKTsKPj4gKyAgICAgaWYg KHJldCkKPj4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Owo+PiArCj4+ICsgICAgIHVjci0+c2df dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwo+PiAr ICAgICBhZGRfdGltZXIoJnVjci0+c2dfdGltZXIpOwo+PiArICAgICB1c2Jfc2dfd2FpdCgmdWNy LT5jdXJyZW50X3NnKTsKPj4gKyAgICAgZGVsX3RpbWVyKCZ1Y3ItPnNnX3RpbWVyKTsKPj4gKwo+ PiArICAgICBpZiAoYWN0X2xlbikKPj4gKyAgICAgICAgICAgICAqYWN0X2xlbiA9IHVjci0+Y3Vy cmVudF9zZy5ieXRlczsKPj4gKwo+PiArICAgICByZXR1cm4gdWNyLT5jdXJyZW50X3NnLnN0YXR1 czsKPj4gK30KPgo+IENvZGUgbG9va3MgZmluZSwgYnV0IHNob3VsZG4ndCB0aGlzIGxpdmUgYW4g YSBVU0IgZHJpdmVyPwo+CldlIGhhdmUgc3R1ZGllZCBkcml2ZXJzIGluIHVzYi9zdG9yYWdlLCB0 aGUgcGxhY2UgdGhhdCBtb3N0IGxpa2VseSB0byAKcHV0IHRoZSBkcml2ZXIuIEFsbCBvZiB0aGVt IGFyZSBmb3IgU1RBTkRBUkQgdXNiIG1hc3Mgc3RvcmFnZSAKY2xhc3Moc29tZXRoaW5nIGxpa2Ug VVNCX0NMQVNTX01BU1NfU1RPUkFHRSkuIEJ1dCB0aGlzIGlzIG5vdCB0aGUgc2FtZSAKY2FzZS4g VGhpcyBkcml2ZXIgaXMgZm9yIG91ciB2ZW5kb3ItY2xhc3MgZGV2aWNlIHdpdGggY29tcGxldGVs eSAKZGlmZmVyZW50IHByb3RvY29sLiBJdCBpcyByZWFsbHkgYW4gVVNCIGludGVyZmFjZWQgZmxh c2ggY2FyZCBjb21tYW5kIApjb252ZXJ0ZXIob3IgY2hhbm5lbCkgZGV2aWNlIHJhdGhlciB0aGFu IGEgcmVhbCBzdG9yYWdlLiBJdCBhbHNvIGhhcyB0d28gCmRlcml2ZWQgbW9kdWxlcyhydHN4X3Vz Yl9zZG1tYywgcnRzeF91c2JfbWVtc3RpY2spIGZvciBvdGhlciB0d28gc3Vic3lzdGVtcy4KCldl IGFsc28gaGF2ZSBhbm90aGVyIGRyaXZlcjogcnRzeF9wY3IuYyByZXNpZGVudCBpbiBtZmQvIGZv ciBzaW1pbGFyIApkZXZpY2VzIGJ1dCBvZiBQQ0llIGludGVyZmFjZS4gSXQgaXMgbmF0dXJlIGZv ciB1cyB0byBjaG9vc2UgdGhlIHNhbWUgCnBsYWNlIGZvciB0aGlzIHZhcmlhbnQuCgpbc25pcF0K Cj4+ICsgICAgIH0KPj4gKwo+PiArICAgICAvKiBzZXQgVVNCIGludGVyZmFjZSBkYXRhICovCj4+ ICsgICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdWNyKTsKPj4gKwo+PiArICAgICB1Y3ItPnZl bmRvcl9pZCA9IGlkLT5pZFZlbmRvcjsKPj4gKyAgICAgdWNyLT5wcm9kdWN0X2lkID0gaWQtPmlk UHJvZHVjdDsKPj4gKyAgICAgdWNyLT5jbWRfYnVmID0gdWNyLT5yc3BfYnVmID0gdWNyLT5pb2J1 ZjsKPj4gKwo+PiArICAgICBtdXRleF9pbml0KCZ1Y3ItPmRldl9tdXRleCk7Cj4+ICsKPj4gKyAg ICAgdWNyLT5wdXNiX2ludGYgPSBpbnRmOwo+PiArCj4+ICsgICAgIC8qIGluaXRpYWxpemUgKi8K Pj4gKyAgICAgcmV0ID0gcnRzeF91c2JfaW5pdF9jaGlwKHVjcik7Cj4+ICsgICAgIGlmIChyZXQp Cj4+ICsgICAgICAgICAgICAgZ290byBvdXRfaW5pdF9mYWlsOwo+PiArCj4+ICsgICAgIGZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0c3hfdXNiX2NlbGxzKTsgaSsrKSB7Cj4+ICsgICAgICAg ICAgICAgcnRzeF91c2JfY2VsbHNbaV0ucGxhdGZvcm1fZGF0YSA9ICZ1Y3I7Cj4KPiBZb3UndmUg YWxyZWFkeSBwdXQgdGhpcyBpbiB5b3VyIGRydmRhdGEgKG9yIG50ZmRhdGEsIGFzIGl0J3MgY2Fs bGVkCj4gaGVyZSkuIFdoeSBkbyB5b3UgYWxzbyBuZWVkIGl0IGluIHBsYXRmb3JtX2RhdGE/CgpE ZXJpdmVkIG1vZHVsZXMgcnRzeF91c2Jfc2RtbWMgYW5kIHJ0c3hfdXNiX21lbXN0aWNrIHdpbGwg cmV0cmlldmUgdGhpcyAKZnJvbSBwbGF0Zm9ybV9kYXRhLiBUaGV5IHdpbGwgbm90IGJlIGF3YXJl IG9mIHVzYiBpbnRlcmZhY2Ugc3RydWN0LgoKW3NuaXBdCgo+PiArI2lmZGVmIENPTkZJR19QTQo+ PiArc3RhdGljIGludCBydHN4X3VzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRm LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKPj4gK3sKPj4gKyAgICAgc3RydWN0IHJ0c3hfdWNyICp1 Y3IgPQo+PiArICAgICAgICAgICAgIChzdHJ1Y3QgcnRzeF91Y3IgKil1c2JfZ2V0X2ludGZkYXRh KGludGYpOwo+PiArCj4+ICsgICAgIGRldl9kYmcoJmludGYtPmRldiwgIiVzIGNhbGxlZCB3aXRo IHBtIG1lc3NhZ2UgMHglMDR1XG4iLAo+PiArICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18s IG1lc3NhZ2UuZXZlbnQpOwo+PiArCj4+ICsgICAgIG11dGV4X2xvY2soJnVjci0+ZGV2X211dGV4 KTsKPj4gKyAgICAgcnRzeF91c2JfdHVybl9vZmZfbGVkKHVjcik7Cj4KPiBUaGF0J3MgaXQ/IFRo YXQncyBhbGwgeW91IGRvIGR1cmluZyBzdXNwZW5kPyA6KQo+Clllcy4gVGhlIHJlc3Qgb2YgcG93 ZXIgdGhpbmdzIGxpa2UgdHVybmluZy1vZmYgY2FyZCBwb3dlciBvciBjbG9jayAKc2hvdWxkIGJl IHRha2VuIGNhcmUgYnkgY29yZXMgb2YgZGVyaXZlZCBtb2R1bGVzKG1tYywgbWVtc3RpY2spLiBX ZSBwdXQgCm9ubHkgb25lIHRhc2sgaGVyZSB0byBtYWtlIHN1cmUgdGhlIExFRCBpcyBvZmYsIHBy ZXZlbnRpbmcgYW55IG1vZHVsZSAKZnJvbSB0dXJuIGl0IG9uIGJ1dCBkb2Vzbid0IHR1cm4gb2Zm IGJlZm9yZSBzdXNwZW5kLgo+PiArICAgICBtdXRleF91bmxvY2soJnVjci0+ZGV2X211dGV4KTsK Pj4gKyAgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcnRzeF91c2JfcmVz dW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQo+PiArewo+Cj4gRG9uJ3QgeW91IHdhbnQg dG8gdHVybiB0aGUgTEVEIGJhY2sgb24gaGVyZT8KPgo+IE9yIHdpbGwgdGhhdCBoYXBwZW4gYXV0 b21hdGljYWxseSB3aGVuIHlvdSB3cml0ZS9yZWFkIHRvL2Zyb20gaXQgYWdhaW4/Cj4KWWVzLCBp dCB3b3VsZCBibGluayBhZ2FpbiBkdXJpbmcgdXNlLiBUaGUgdHVybi1vZmYgYmVmb3JlIHN1c3Bl bmQgaXMgbm90IAphIHBlcm1hbmVudCBwb3dlciBvZmYuCj4+ICsgICAgIHJldHVybiAwOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IHJ0c3hfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2lu dGVyZmFjZSAqaW50ZikKPj4gK3sKPj4gKyAgICAgc3RydWN0IHJ0c3hfdWNyICp1Y3IgPQo+PiAr ICAgICAgICAgICAgIChzdHJ1Y3QgcnRzeF91Y3IgKil1c2JfZ2V0X2ludGZkYXRhKGludGYpOwo+ PiArCj4+ICsgICAgIHJ0c3hfdXNiX3Jlc2V0X2NoaXAodWNyKTsKPj4gKyAgICAgcmV0dXJuIDA7 Cj4+ICt9Cj4+ICsKPj4gKyNlbHNlIC8qIENPTkZJR19QTSAqLwo+PiArCj4+ICsjZGVmaW5lIHJ0 c3hfdXNiX3N1c3BlbmQgTlVMTAo+PiArI2RlZmluZSBydHN4X3VzYl9yZXN1bWUgTlVMTAo+PiAr I2RlZmluZSBydHN4X3VzYl9yZXNldF9yZXN1bWUgTlVMTAo+PiArCj4+ICsjZW5kaWYgLyogQ09O RklHX1BNICovCj4+ICsKPj4gKwo+PiArc3RhdGljIGludCBydHN4X3VzYl9wcmVfcmVzZXQoc3Ry dWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCj4+ICt7Cj4+ICsgICAgIHN0cnVjdCBydHN4X3VjciAq dWNyID0gKHN0cnVjdCBydHN4X3VjciAqKXVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Cj4+ICsKPj4g KyAgICAgbXV0ZXhfbG9jaygmdWNyLT5kZXZfbXV0ZXgpOwo+Cj4gSXMgdGhpcyBub3JtYWw/CgpZ ZXMuIEl0IGlzIHVzZWQgdG8gcHJldmVudCBjb21tYW5kcyBkdXJpbmcgcG9ydCByZXNldC4gU2Ft ZSB0byB0aGUgb25lIAppbiB1c2Ivc3RvcmFnZS91c2IuYy4KCltzbmlwXQo+Cj4+ICsjaW5jbHVk ZSA8bGludXgvdXNiLmg+Cj4+ICsKPj4gKy8qIHJlbGF0ZWQgbW9kdWxlIG5hbWVzICovCj4+ICsj ZGVmaW5lIFJUU1hfVVNCX1NEX0NBUkQgICAgICAgICAgICAgMAo+PiArI2RlZmluZSBSVFNYX1VT Ql9NU19DQVJEICAgICAgICAgICAgIDEKPj4gKwo+PiArI2RlZmluZSBEUlZfTkFNRV9SVFNYX1VT QiAgICAgICAgICAgICJydHN4X3VzYiIKPj4gKyNkZWZpbmUgRFJWX05BTUVfUlRTWF9VU0JfU0RN TUMgICAgICAgICAgICAgICJydHN4X3VzYl9zZG1tYyIKPj4gKyNkZWZpbmUgRFJWX05BTUVfUlRT WF9VU0JfTVMgICAgICAgICAicnRzeF91c2JfbXMiCj4KPiBDYW4geW91IGp1c3QgcHV0IHRoZSBu YW1lcyBpbiB0aGUgY29ycmVjdCBwbGFjZXMgcGxlYXNlPwo+CkRvIHlvdSBtZWFuIGp1c3QgcmVt b3ZlIHRoZXNlIGRlZmluaXRpb25zIGFuZCBmaWxsIHRoZSBzdHJpbmcgZGlyZWN0bHkgCmF0IHRo ZSB1c2luZyBwbGFjZT8KCj4+ICsvKiBlbmRwb2ludCBudW1iZXJzICovCj4+ICsjZGVmaW5lIEVQ X0JVTEtfT1VUICAgICAgICAgIDEKPj4gKyNkZWZpbmUgRVBfQlVMS19JTiAgICAgICAgICAgMgo+ PiArI2RlZmluZSBFUF9JTlRSX0lOICAgICAgICAgICAzCj4KPiBJIGFzc3VtZSB0aGVzZSBhcmVu J3QgZGVmaW5lZCBhbnl3aGVyZSBlbHNlPwo+Ckl0IHNob3VsZCBub3QgYmUgZGVmaW5lZCBhbnl3 aGVyZSBlbHNlIHNpbmNlIGl0IGlzIHJlYWxseSBkZXBlbmRzIG9uIHRoZSAKaGFyZHdhcmUgZGVz aWduIGJ1dCBub3QgYW55IGdlbmVyYWwgc3BlYy4KCltzbmlwXQo+IC0tCj4gTGVlIEpvbmVzCj4g TGluYXJvIFNUTWljcm9lbGVjdHJvbmljcyBMYW5kaW5nIFRlYW0gTGVhZAo+IExpbmFyby5vcmcg 4pSCIE9wZW4gc291cmNlIHNvZnR3YXJlIGZvciBBUk0gU29Dcwo+IEZvbGxvdyBMaW5hcm86IEZh Y2Vib29rIHwgVHdpdHRlciB8IEJsb2cKPgo+IC0tLS0tLVBsZWFzZSBjb25zaWRlciB0aGUgZW52 aXJvbm1lbnQgYmVmb3JlIHByaW50aW5nIHRoaXMgZS1tYWlsLgo+Cl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRldmVsIG1haWxpbmcgbGlzdApkZXZlbEBs aW51eGRyaXZlcnByb2plY3Qub3JnCmh0dHA6Ly9kcml2ZXJkZXYubGludXhkcml2ZXJwcm9qZWN0 Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaXZlcmRldi1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752054AbaAPIvx (ORCPT ); Thu, 16 Jan 2014 03:51:53 -0500 Received: from rtits2.realtek.com ([60.250.210.242]:51478 "EHLO rtits2.realtek.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751909AbaAPIvv (ORCPT ); Thu, 16 Jan 2014 03:51:51 -0500 X-SpamFilter-By: BOX Solutions SpamTrap 5.39 with qID s0G8pMNu029853, This message is accepted by code: ctloc85258 Message-ID: <52D79E31.6000300@realtek.com> Date: Thu, 16 Jan 2014 16:54:09 +0800 From: Roger User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Lee Jones CC: Samuel Ortiz , Chris Ball , Greg Kroah-Hartman , Maxim Levitsky , Alex Dubov , Dan Carpenter , "linux-kernel@vger.kernel.org" , "linux-mmc@vger.kernel.org" , "driverdev-devel@linuxdriverproject.org" , Wei_wang , "micky_ching@realsil.com.cn" Subject: Re: [PATCH 1/3] mfd: Add realtek USB card reader driver References: <1389685656-880-1-git-send-email-rogerable@realtek.com> <1389685656-880-2-git-send-email-rogerable@realtek.com> <20140114130409.GB11820@lee--X1> In-Reply-To: <20140114130409.GB11820@lee--X1> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [172.21.81.189] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/14/2014 09:04 PM, Lee Jones wrote: >> From: Roger Tseng >> >> Realtek USB card reader provides a channel to transfer command or data to flash >> memory cards. This driver exports host instances for mmc and memstick subsystems >> and handles basic works. >> >> Signed-off-by: Roger Tseng [snip] >> +static int rtsx_usb_bulk_transfer_sglist(struct rtsx_ucr *ucr, >> + unsigned int pipe, struct scatterlist *sg, int num_sg, >> + unsigned int length, unsigned int *act_len, int timeout) >> +{ >> + int ret; >> + >> + dev_dbg(&ucr->pusb_intf->dev, "%s: xfer %u bytes, %d entries\n", >> + __func__, length, num_sg); >> + ret = usb_sg_init(&ucr->current_sg, ucr->pusb_dev, pipe, 0, >> + sg, num_sg, length, GFP_NOIO); >> + if (ret) >> + return ret; >> + >> + ucr->sg_timer.expires = jiffies + msecs_to_jiffies(timeout); >> + add_timer(&ucr->sg_timer); >> + usb_sg_wait(&ucr->current_sg); >> + del_timer(&ucr->sg_timer); >> + >> + if (act_len) >> + *act_len = ucr->current_sg.bytes; >> + >> + return ucr->current_sg.status; >> +} > > Code looks fine, but shouldn't this live an a USB driver? > We have studied drivers in usb/storage, the place that most likely to put the driver. All of them are for STANDARD usb mass storage class(something like USB_CLASS_MASS_STORAGE). But this is not the same case. This driver is for our vendor-class device with completely different protocol. It is really an USB interfaced flash card command converter(or channel) device rather than a real storage. It also has two derived modules(rtsx_usb_sdmmc, rtsx_usb_memstick) for other two subsystems. We also have another driver: rtsx_pcr.c resident in mfd/ for similar devices but of PCIe interface. It is nature for us to choose the same place for this variant. [snip] >> + } >> + >> + /* set USB interface data */ >> + usb_set_intfdata(intf, ucr); >> + >> + ucr->vendor_id = id->idVendor; >> + ucr->product_id = id->idProduct; >> + ucr->cmd_buf = ucr->rsp_buf = ucr->iobuf; >> + >> + mutex_init(&ucr->dev_mutex); >> + >> + ucr->pusb_intf = intf; >> + >> + /* initialize */ >> + ret = rtsx_usb_init_chip(ucr); >> + if (ret) >> + goto out_init_fail; >> + >> + for (i = 0; i < ARRAY_SIZE(rtsx_usb_cells); i++) { >> + rtsx_usb_cells[i].platform_data = &ucr; > > You've already put this in your drvdata (or ntfdata, as it's called > here). Why do you also need it in platform_data? Derived modules rtsx_usb_sdmmc and rtsx_usb_memstick will retrieve this from platform_data. They will not be aware of usb interface struct. [snip] >> +#ifdef CONFIG_PM >> +static int rtsx_usb_suspend(struct usb_interface *intf, pm_message_t message) >> +{ >> + struct rtsx_ucr *ucr = >> + (struct rtsx_ucr *)usb_get_intfdata(intf); >> + >> + dev_dbg(&intf->dev, "%s called with pm message 0x%04u\n", >> + __func__, message.event); >> + >> + mutex_lock(&ucr->dev_mutex); >> + rtsx_usb_turn_off_led(ucr); > > That's it? That's all you do during suspend? :) > Yes. The rest of power things like turning-off card power or clock should be taken care by cores of derived modules(mmc, memstick). We put only one task here to make sure the LED is off, preventing any module from turn it on but doesn't turn off before suspend. >> + mutex_unlock(&ucr->dev_mutex); >> + return 0; >> +} >> + >> +static int rtsx_usb_resume(struct usb_interface *intf) >> +{ > > Don't you want to turn the LED back on here? > > Or will that happen automatically when you write/read to/from it again? > Yes, it would blink again during use. The turn-off before suspend is not a permanent power off. >> + return 0; >> +} >> + >> +static int rtsx_usb_reset_resume(struct usb_interface *intf) >> +{ >> + struct rtsx_ucr *ucr = >> + (struct rtsx_ucr *)usb_get_intfdata(intf); >> + >> + rtsx_usb_reset_chip(ucr); >> + return 0; >> +} >> + >> +#else /* CONFIG_PM */ >> + >> +#define rtsx_usb_suspend NULL >> +#define rtsx_usb_resume NULL >> +#define rtsx_usb_reset_resume NULL >> + >> +#endif /* CONFIG_PM */ >> + >> + >> +static int rtsx_usb_pre_reset(struct usb_interface *intf) >> +{ >> + struct rtsx_ucr *ucr = (struct rtsx_ucr *)usb_get_intfdata(intf); >> + >> + mutex_lock(&ucr->dev_mutex); > > Is this normal? Yes. It is used to prevent commands during port reset. Same to the one in usb/storage/usb.c. [snip] > >> +#include >> + >> +/* related module names */ >> +#define RTSX_USB_SD_CARD 0 >> +#define RTSX_USB_MS_CARD 1 >> + >> +#define DRV_NAME_RTSX_USB "rtsx_usb" >> +#define DRV_NAME_RTSX_USB_SDMMC "rtsx_usb_sdmmc" >> +#define DRV_NAME_RTSX_USB_MS "rtsx_usb_ms" > > Can you just put the names in the correct places please? > Do you mean just remove these definitions and fill the string directly at the using place? >> +/* endpoint numbers */ >> +#define EP_BULK_OUT 1 >> +#define EP_BULK_IN 2 >> +#define EP_INTR_IN 3 > > I assume these aren't defined anywhere else? > It should not be defined anywhere else since it is really depends on the hardware design but not any general spec. [snip] > -- > Lee Jones > Linaro STMicroelectronics Landing Team Lead > Linaro.org │ Open source software for ARM SoCs > Follow Linaro: Facebook | Twitter | Blog > > ------Please consider the environment before printing this e-mail. >