From mboxrd@z Thu Jan 1 00:00:00 1970 From: James Bottomley Subject: Re: [PATCH] phy: qcom-ufs: export symbols needed by main drivers Date: Mon, 2 Feb 2015 15:30:27 +0000 Message-ID: <1422891069.2103.1.camel@parallels.com> References: <1840882.huchmEIh5K@wuerfel> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx2.parallels.com ([199.115.105.18]:47605 "EHLO mx2.parallels.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752383AbbBBPbS (ORCPT ); Mon, 2 Feb 2015 10:31:18 -0500 In-Reply-To: <1840882.huchmEIh5K@wuerfel> Content-Language: en-US Content-ID: Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: "arnd@arndb.de" Cc: "hch@lst.de" , "dovl@codeaurora.org" , "ygardi@codeaurora.org" , "kishon@ti.com" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-scsi@vger.kernel.org" T24gV2VkLCAyMDE1LTAxLTI4IGF0IDE3OjE4ICswMTAwLCBBcm5kIEJlcmdtYW5uIHdyb3RlOg0K PiBUaGUgcWNvbSB1ZnMgcGh5IHN1cHBvcnQgaXMgc3BsaXQgaW50byB0aHJlZSBzZXBhcmF0ZSBs b2FkYWJsZQ0KPiBtb2R1bGVzLCBob3dldmVyIG5vbmUgb2YgdGhlIGludGVyZmFjZXMgYXJlIGV4 cG9ydGVkLCByZXN1bHRpbmcNCj4gaW4gYSBsaW5rIGVycm9yOg0KPiANCj4gRVJST1I6ICJ1ZnNf cWNvbV9waHlfcG93ZXJfb2ZmIiBbZHJpdmVycy9waHkvcGh5LXFjb20tdWZzLXFtcC0yMG5tLmtv XSB1bmRlZmluZWQhDQo+IEVSUk9SOiAidWZzX3Fjb21fcGh5X3Bvd2VyX29uIiBbZHJpdmVycy9w aHkvcGh5LXFjb20tdWZzLXFtcC0yMG5tLmtvXSB1bmRlZmluZWQhDQo+IEVSUk9SOiAidWZzX3Fj b21fcGh5X2V4aXQiIFtkcml2ZXJzL3BoeS9waHktcWNvbS11ZnMtcW1wLTIwbm0ua29dIHVuZGVm aW5lZCENCj4gRVJST1I6ICJ1ZnNfcWNvbV9waHlfZ2VuZXJpY19wcm9iZSIgW2RyaXZlcnMvcGh5 L3BoeS1xY29tLXVmcy1xbXAtMjBubS5rb10gdW5kZWZpbmVkIQ0KPiBFUlJPUjogInVmc19xY29t X3BoeV9pbml0X3ZyZWd1bGF0b3JzIiBbZHJpdmVycy9waHkvcGh5LXFjb20tdWZzLXFtcC0yMG5t LmtvXSB1bmRlZmluZWQhDQo+IEVSUk9SOiAidWZzX3Fjb21fcGh5X2luaXRfY2xrcyIgW2RyaXZl cnMvcGh5L3BoeS1xY29tLXVmcy1xbXAtMjBubS5rb10gdW5kZWZpbmVkIQ0KPiBFUlJPUjogInVm c19xY29tX3BoeV9jYWxpYnJhdGUiIFtkcml2ZXJzL3BoeS9waHktcWNvbS11ZnMtcW1wLTIwbm0u a29dIHVuZGVmaW5lZCENCj4gRVJST1I6ICJ1ZnNfcWNvbV9waHlfcmVtb3ZlIiBbZHJpdmVycy9w aHkvcGh5LXFjb20tdWZzLXFtcC0yMG5tLmtvXSB1bmRlZmluZWQhDQo+IEVSUk9SOiAiZ2V0X3Vm c19xY29tX3BoeSIgW2RyaXZlcnMvcGh5L3BoeS1xY29tLXVmcy1xbXAtMjBubS5rb10gdW5kZWZp bmVkIQ0KPiBFUlJPUjogInVmc19xY29tX3BoeV9wb3dlcl9vZmYiIFtkcml2ZXJzL3BoeS9waHkt cWNvbS11ZnMtcW1wLTE0bm0ua29dIHVuZGVmaW5lZCENCj4gRVJST1I6ICJ1ZnNfcWNvbV9waHlf cG93ZXJfb24iIFtkcml2ZXJzL3BoeS9waHktcWNvbS11ZnMtcW1wLTE0bm0ua29dIHVuZGVmaW5l ZCENCj4gRVJST1I6ICJ1ZnNfcWNvbV9waHlfZXhpdCIgW2RyaXZlcnMvcGh5L3BoeS1xY29tLXVm cy1xbXAtMTRubS5rb10gdW5kZWZpbmVkIQ0KPiBFUlJPUjogInVmc19xY29tX3BoeV9nZW5lcmlj X3Byb2JlIiBbZHJpdmVycy9waHkvcGh5LXFjb20tdWZzLXFtcC0xNG5tLmtvXSB1bmRlZmluZWQh DQo+IEVSUk9SOiAidWZzX3Fjb21fcGh5X2luaXRfdnJlZ3VsYXRvcnMiIFtkcml2ZXJzL3BoeS9w aHktcWNvbS11ZnMtcW1wLTE0bm0ua29dIHVuZGVmaW5lZCENCj4gRVJST1I6ICJ1ZnNfcWNvbV9w aHlfaW5pdF9jbGtzIiBbZHJpdmVycy9waHkvcGh5LXFjb20tdWZzLXFtcC0xNG5tLmtvXSB1bmRl ZmluZWQhDQo+IEVSUk9SOiAidWZzX3Fjb21fcGh5X2NhbGlicmF0ZSIgW2RyaXZlcnMvcGh5L3Bo eS1xY29tLXVmcy1xbXAtMTRubS5rb10gdW5kZWZpbmVkIQ0KPiBFUlJPUjogInVmc19xY29tX3Bo eV9yZW1vdmUiIFtkcml2ZXJzL3BoeS9waHktcWNvbS11ZnMtcW1wLTE0bm0ua29dIHVuZGVmaW5l ZCENCj4gRVJST1I6ICJnZXRfdWZzX3Fjb21fcGh5IiBbZHJpdmVycy9waHkvcGh5LXFjb20tdWZz LXFtcC0xNG5tLmtvXSB1bmRlZmluZWQhDQo+IA0KPiBUaGlzIGV4cG9ydHMgYWxsIG9mIHRoZSBz eW1ib2xzIHRoYXQgYXJlIHByb3ZpZGVkIGJ5IHRoZSBiYXNlIGxpYnJhcnkNCj4gbW9kdWxlIGFu ZCB1c2VkIGJ5IHRoZSB0d28gZHJpdmVyIG1vZHVsZXMuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBB cm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPg0KPiBGaXhlczogYWRhYWZhYTM5M2VmICgicGh5 OiBxY29tLXVmczogYWRkIHN1cHBvcnQgZm9yIFFVQUxDT01NIFRlY2hub2xvZ2llcyBVRlMgUEhZ IGRyaXZlcnMiKQ0KPiAtLS0NCg0KDQpDYyBhZGRlZCBmb3IgbGludXgtc2NzaSwgc2luY2UgdGhp cyBpcyB0aGUgb3JpZ2luIG9mIHRoZSBwcm9ibGVtLiAgSG93DQppbXBvcnRhbnQgaXMgYmlzZWN0 YWJpbGl0eSBpbiB0aGlzPyAgSXQgd29uJ3QgYWZmZWN0IGFueSBub24tZW1iZWRkZWQNCnVzZXIs IHNpbmNlIG1vc3QgZG9uJ3QgYnVpbGQgd2l0aCBVRlMsIHNvIEkgY2FuIGdvIGVpdGhlciB3YXkg b24gZm9sZGluZw0Kb3IganVzdCBhcHBseWluZyBhcyBhbiBleHRyYSBwYXRjaC4NCg0KSmFtZXMN Cg0KPiBUaGUgYnJva2VuIHBhdGNoIGlzIGN1cnJlbnRseSBpbiB0aGUgc2NzaSB0cmVlLCBzbyBp ZiB0aGUgcGh5IG1haW50YWluZXINCj4gdGhpbmtzIHRoYXQgbXkgZml4IGlzIGNvcnJlY3QsIGl0 IHNob3VsZCBnbyB0aGVyZSB0b28uDQo+IA0KPiBBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB3b3Vs ZCBiZSB0byBsaW5rIGFsbCB0aHJlZSBwaHktcWNvbS11ZnMgc291cmNlDQo+IGZpbGVzIGludG8g YSBzaW5nbGUgbW9kdWxlLg0KPiANCj4gIGRyaXZlcnMvcGh5L3BoeS1xY29tLXVmcy5jIHwgMjEg KysrKysrKysrKysrKysrKysrKysrDQo+ICAxIGZpbGUgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygr KQ0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1xY29tLXVmcy5jIGIvZHJpdmVy cy9waHkvcGh5LXFjb20tdWZzLmMNCj4gaW5kZXggNDRlZTk4M2Q1N2ZlLi5jOGY4YzJkYWMxOGMg MTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvcGh5L3BoeS1xY29tLXVmcy5jDQo+ICsrKyBiL2RyaXZl cnMvcGh5L3BoeS1xY29tLXVmcy5jDQo+IEBAIC03Myw2ICs3Myw3IEBAIGludCB1ZnNfcWNvbV9w aHlfY2FsaWJyYXRlKHN0cnVjdCB1ZnNfcWNvbV9waHkgKnVmc19xY29tX3BoeSwNCj4gIG91dDoN Cj4gIAlyZXR1cm4gcmV0Ow0KPiAgfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwodWZzX3Fjb21fcGh5 X2NhbGlicmF0ZSk7DQo+ICANCj4gIHN0cnVjdCBwaHkgKnVmc19xY29tX3BoeV9nZW5lcmljX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsDQo+ICAJCQkJc3RydWN0IHVmc19xY29t X3BoeSAqY29tbW9uX2NmZywNCj4gQEAgLTExMCw2ICsxMTEsNyBAQCBzdHJ1Y3QgcGh5ICp1ZnNf cWNvbV9waHlfZ2VuZXJpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LA0KPiAg b3V0Og0KPiAgCXJldHVybiBnZW5lcmljX3BoeTsNCj4gIH0NCj4gK0VYUE9SVF9TWU1CT0xfR1BM KHVmc19xY29tX3BoeV9nZW5lcmljX3Byb2JlKTsNCj4gIA0KPiAgLyoNCj4gICAqIFRoaXMgYXNz dW1lcyB0aGUgZW1iZWRkZWQgcGh5IHN0cnVjdHVyZSBpbnNpZGUgZ2VuZXJpY19waHkgaXMgb2Yg dHlwZQ0KPiBAQCAtMTIxLDYgKzEyMyw3IEBAIHN0cnVjdCB1ZnNfcWNvbV9waHkgKmdldF91ZnNf cWNvbV9waHkoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpDQo+ICB7DQo+ICAJcmV0dXJuIChzdHJ1 Y3QgdWZzX3Fjb21fcGh5ICopcGh5X2dldF9kcnZkYXRhKGdlbmVyaWNfcGh5KTsNCj4gIH0NCj4g K0VYUE9SVF9TWU1CT0xfR1BMKGdldF91ZnNfcWNvbV9waHkpOw0KPiAgDQo+ICBzdGF0aWMNCj4g IGludCB1ZnNfcWNvbV9waHlfYmFzZV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs DQo+IEBAIC0yMjgsNiArMjMxLDcgQEAgdWZzX3Fjb21fcGh5X2luaXRfY2xrcyhzdHJ1Y3QgcGh5 ICpnZW5lcmljX3BoeSwNCj4gIG91dDoNCj4gIAlyZXR1cm4gZXJyOw0KPiAgfQ0KPiArRVhQT1JU X1NZTUJPTF9HUEwodWZzX3Fjb21fcGh5X2luaXRfY2xrcyk7DQo+ICANCj4gIGludA0KPiAgdWZz X3Fjb21fcGh5X2luaXRfdnJlZ3VsYXRvcnMoc3RydWN0IHBoeSAqZ2VuZXJpY19waHksDQo+IEBA IC0yNTIsNiArMjU2LDcgQEAgdWZzX3Fjb21fcGh5X2luaXRfdnJlZ3VsYXRvcnMoc3RydWN0IHBo eSAqZ2VuZXJpY19waHksDQo+ICBvdXQ6DQo+ICAJcmV0dXJuIGVycjsNCj4gIH0NCj4gK0VYUE9S VF9TWU1CT0xfR1BMKHVmc19xY29tX3BoeV9pbml0X3ZyZWd1bGF0b3JzKTsNCj4gIA0KPiAgc3Rh dGljIGludCBfX3Vmc19xY29tX3BoeV9pbml0X3ZyZWcoc3RydWN0IHBoeSAqcGh5LA0KPiAgCQlz dHJ1Y3QgdWZzX3Fjb21fcGh5X3ZyZWcgKnZyZWcsIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgb3B0 aW9uYWwpDQo+IEBAIC00NDMsNiArNDQ4LDcgQEAgb3V0X2Rpc2FibGVfc3JjOg0KPiAgb3V0Og0K PiAgCXJldHVybiByZXQ7DQo+ICB9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh1ZnNfcWNvbV9waHlf ZW5hYmxlX3JlZl9jbGspOw0KPiAgDQo+ICBzdGF0aWMNCj4gIGludCB1ZnNfcWNvbV9waHlfZGlz YWJsZV92cmVnKHN0cnVjdCBwaHkgKnBoeSwNCj4gQEAgLTQ4NSw2ICs0OTEsNyBAQCB2b2lkIHVm c19xY29tX3BoeV9kaXNhYmxlX3JlZl9jbGsoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpDQo+ICAJ CXBoeS0+aXNfcmVmX2Nsa19lbmFibGVkID0gZmFsc2U7DQo+ICAJfQ0KPiAgfQ0KPiArRVhQT1JU X1NZTUJPTF9HUEwodWZzX3Fjb21fcGh5X2Rpc2FibGVfcmVmX2Nsayk7DQo+ICANCj4gICNkZWZp bmUgVUZTX1JFRl9DTEtfRU4JKDEgPDwgNSkNCj4gIA0KPiBAQCAtNTIzLDE2ICs1MzAsMTkgQEAg c3RhdGljIHZvaWQgdWZzX3Fjb21fcGh5X2Rldl9yZWZfY2xrX2N0cmwoc3RydWN0IHBoeSAqZ2Vu ZXJpY19waHksIGJvb2wgZW5hYmxlKQ0KPiAgCQlwaHktPmlzX2Rldl9yZWZfY2xrX2VuYWJsZWQg PSBlbmFibGU7DQo+ICAJfQ0KPiAgfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwodWZzX3Fjb21fcGh5 X2Rldl9yZWZfY2xrX2N0cmwpOw0KPiAgDQo+ICB2b2lkIHVmc19xY29tX3BoeV9lbmFibGVfZGV2 X3JlZl9jbGsoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpDQo+ICB7DQo+ICAJdWZzX3Fjb21fcGh5 X2Rldl9yZWZfY2xrX2N0cmwoZ2VuZXJpY19waHksIHRydWUpOw0KPiAgfQ0KPiArRVhQT1JUX1NZ TUJPTF9HUEwodWZzX3Fjb21fcGh5X2VuYWJsZV9kZXZfcmVmX2Nsayk7DQo+ICANCj4gIHZvaWQg dWZzX3Fjb21fcGh5X2Rpc2FibGVfZGV2X3JlZl9jbGsoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkp DQo+ICB7DQo+ICAJdWZzX3Fjb21fcGh5X2Rldl9yZWZfY2xrX2N0cmwoZ2VuZXJpY19waHksIGZh bHNlKTsNCj4gIH0NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVmc19xY29tX3BoeV9kaXNhYmxlX2Rl dl9yZWZfY2xrKTsNCj4gIA0KPiAgLyogVHVybiBPTiBNLVBIWSBSTU1JIGludGVyZmFjZSBjbG9j a3MgKi8NCj4gIGludCB1ZnNfcWNvbV9waHlfZW5hYmxlX2lmYWNlX2NsayhzdHJ1Y3QgcGh5ICpn ZW5lcmljX3BoeSkNCj4gQEAgLTU2MSw2ICs1NzEsNyBAQCBpbnQgdWZzX3Fjb21fcGh5X2VuYWJs ZV9pZmFjZV9jbGsoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpDQo+ICBvdXQ6DQo+ICAJcmV0dXJu IHJldDsNCj4gIH0NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVmc19xY29tX3BoeV9lbmFibGVfaWZh Y2VfY2xrKTsNCj4gIA0KPiAgLyogVHVybiBPRkYgTS1QSFkgUk1NSSBpbnRlcmZhY2UgY2xvY2tz ICovDQo+ICB2b2lkIHVmc19xY29tX3BoeV9kaXNhYmxlX2lmYWNlX2NsayhzdHJ1Y3QgcGh5ICpn ZW5lcmljX3BoeSkNCj4gQEAgLTU3Myw2ICs1ODQsNyBAQCB2b2lkIHVmc19xY29tX3BoeV9kaXNh YmxlX2lmYWNlX2NsayhzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSkNCj4gIAkJcGh5LT5pc19pZmFj ZV9jbGtfZW5hYmxlZCA9IGZhbHNlOw0KPiAgCX0NCj4gIH0NCj4gK0VYUE9SVF9TWU1CT0xfR1BM KHVmc19xY29tX3BoeV9kaXNhYmxlX2lmYWNlX2Nsayk7DQo+ICANCj4gIGludCB1ZnNfcWNvbV9w aHlfc3RhcnRfc2VyZGVzKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5KQ0KPiAgew0KPiBAQCAtNTg5 LDYgKzYwMSw3IEBAIGludCB1ZnNfcWNvbV9waHlfc3RhcnRfc2VyZGVzKHN0cnVjdCBwaHkgKmdl bmVyaWNfcGh5KQ0KPiAgDQo+ICAJcmV0dXJuIHJldDsNCj4gIH0NCj4gK0VYUE9SVF9TWU1CT0xf R1BMKHVmc19xY29tX3BoeV9zdGFydF9zZXJkZXMpOw0KPiAgDQo+ICBpbnQgdWZzX3Fjb21fcGh5 X3NldF90eF9sYW5lX2VuYWJsZShzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSwgdTMyIHR4X2xhbmVz KQ0KPiAgew0KPiBAQCAtNjA2LDYgKzYxOSw3IEBAIGludCB1ZnNfcWNvbV9waHlfc2V0X3R4X2xh bmVfZW5hYmxlKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5LCB1MzIgdHhfbGFuZXMpDQo+ICANCj4g IAlyZXR1cm4gcmV0Ow0KPiAgfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwodWZzX3Fjb21fcGh5X3Nl dF90eF9sYW5lX2VuYWJsZSk7DQo+ICANCj4gIHZvaWQgdWZzX3Fjb21fcGh5X3NhdmVfY29udHJv bGxlcl92ZXJzaW9uKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5LA0KPiAgCQkJCQkgIHU4IG1ham9y LCB1MTYgbWlub3IsIHUxNiBzdGVwKQ0KPiBAQCAtNjE2LDYgKzYzMCw3IEBAIHZvaWQgdWZzX3Fj b21fcGh5X3NhdmVfY29udHJvbGxlcl92ZXJzaW9uKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5LA0K PiAgCXVmc19xY29tX3BoeS0+aG9zdF9jdHJsX3Jldl9taW5vciA9IG1pbm9yOw0KPiAgCXVmc19x Y29tX3BoeS0+aG9zdF9jdHJsX3Jldl9zdGVwID0gc3RlcDsNCj4gIH0NCj4gK0VYUE9SVF9TWU1C T0xfR1BMKHVmc19xY29tX3BoeV9zYXZlX2NvbnRyb2xsZXJfdmVyc2lvbik7DQo+ICANCj4gIGlu dCB1ZnNfcWNvbV9waHlfY2FsaWJyYXRlX3BoeShzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSwgYm9v bCBpc19yYXRlX0IpDQo+ICB7DQo+IEBAIC02MzYsNiArNjUxLDcgQEAgaW50IHVmc19xY29tX3Bo eV9jYWxpYnJhdGVfcGh5KHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5LCBib29sIGlzX3JhdGVfQikN Cj4gIA0KPiAgCXJldHVybiByZXQ7DQo+ICB9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh1ZnNfcWNv bV9waHlfY2FsaWJyYXRlX3BoeSk7DQo+ICANCj4gIGludCB1ZnNfcWNvbV9waHlfcmVtb3ZlKHN0 cnVjdCBwaHkgKmdlbmVyaWNfcGh5LA0KPiAgCQkJc3RydWN0IHVmc19xY29tX3BoeSAqdWZzX3Fj b21fcGh5KQ0KPiBAQCAtNjQ3LDYgKzY2Myw3IEBAIGludCB1ZnNfcWNvbV9waHlfcmVtb3ZlKHN0 cnVjdCBwaHkgKmdlbmVyaWNfcGh5LA0KPiAgDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+ICtFWFBP UlRfU1lNQk9MX0dQTCh1ZnNfcWNvbV9waHlfcmVtb3ZlKTsNCj4gIA0KPiAgaW50IHVmc19xY29t X3BoeV9leGl0KHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5KQ0KPiAgew0KPiBAQCAtNjU3LDYgKzY3 NCw3IEBAIGludCB1ZnNfcWNvbV9waHlfZXhpdChzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSkNCj4g IA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwodWZzX3Fjb21fcGh5 X2V4aXQpOw0KPiAgDQo+ICBpbnQgdWZzX3Fjb21fcGh5X2lzX3Bjc19yZWFkeShzdHJ1Y3QgcGh5 ICpnZW5lcmljX3BoeSkNCj4gIHsNCj4gQEAgLTY3MSw2ICs2ODksNyBAQCBpbnQgdWZzX3Fjb21f cGh5X2lzX3Bjc19yZWFkeShzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSkNCj4gIAlyZXR1cm4gdWZz X3Fjb21fcGh5LT5waHlfc3BlY19vcHMtPg0KPiAgCQkJaXNfcGh5c2ljYWxfY29kaW5nX3N1Ymxh eWVyX3JlYWR5KHVmc19xY29tX3BoeSk7DQo+ICB9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh1ZnNf cWNvbV9waHlfaXNfcGNzX3JlYWR5KTsNCj4gIA0KPiAgaW50IHVmc19xY29tX3BoeV9wb3dlcl9v bihzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSkNCj4gIHsNCj4gQEAgLTcyNSw2ICs3NDQsNyBAQCBv dXRfZGlzYWJsZV9waHk6DQo+ICBvdXQ6DQo+ICAJcmV0dXJuIGVycjsNCj4gIH0NCj4gK0VYUE9S VF9TWU1CT0xfR1BMKHVmc19xY29tX3BoeV9wb3dlcl9vbik7DQo+ICANCj4gIGludCB1ZnNfcWNv bV9waHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5KQ0KPiAgew0KPiBAQCAtNzQz LDMgKzc2Myw0IEBAIGludCB1ZnNfcWNvbV9waHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKmdlbmVy aWNfcGh5KQ0KPiAgDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh1 ZnNfcWNvbV9waHlfcG93ZXJfb2ZmKTsNCj4gDQoNCg0K From mboxrd@z Thu Jan 1 00:00:00 1970 From: jbottomley@parallels.com (James Bottomley) Date: Mon, 2 Feb 2015 15:30:27 +0000 Subject: [PATCH] phy: qcom-ufs: export symbols needed by main drivers In-Reply-To: <1840882.huchmEIh5K@wuerfel> References: <1840882.huchmEIh5K@wuerfel> Message-ID: <1422891069.2103.1.camel@parallels.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Wed, 2015-01-28 at 17:18 +0100, Arnd Bergmann wrote: > The qcom ufs phy support is split into three separate loadable > modules, however none of the interfaces are exported, resulting > in a link error: > > ERROR: "ufs_qcom_phy_power_off" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_power_on" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_exit" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_generic_probe" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_init_vregulators" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_init_clks" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_calibrate" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_remove" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "get_ufs_qcom_phy" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_power_off" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_power_on" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_exit" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_generic_probe" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_init_vregulators" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_init_clks" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_calibrate" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_remove" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "get_ufs_qcom_phy" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > > This exports all of the symbols that are provided by the base library > module and used by the two driver modules. > > Signed-off-by: Arnd Bergmann > Fixes: adaafaa393ef ("phy: qcom-ufs: add support for QUALCOMM Technologies UFS PHY drivers") > --- Cc added for linux-scsi, since this is the origin of the problem. How important is bisectability in this? It won't affect any non-embedded user, since most don't build with UFS, so I can go either way on folding or just applying as an extra patch. James > The broken patch is currently in the scsi tree, so if the phy maintainer > thinks that my fix is correct, it should go there too. > > An alternative approach would be to link all three phy-qcom-ufs source > files into a single module. > > drivers/phy/phy-qcom-ufs.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/drivers/phy/phy-qcom-ufs.c b/drivers/phy/phy-qcom-ufs.c > index 44ee983d57fe..c8f8c2dac18c 100644 > --- a/drivers/phy/phy-qcom-ufs.c > +++ b/drivers/phy/phy-qcom-ufs.c > @@ -73,6 +73,7 @@ int ufs_qcom_phy_calibrate(struct ufs_qcom_phy *ufs_qcom_phy, > out: > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_calibrate); > > struct phy *ufs_qcom_phy_generic_probe(struct platform_device *pdev, > struct ufs_qcom_phy *common_cfg, > @@ -110,6 +111,7 @@ struct phy *ufs_qcom_phy_generic_probe(struct platform_device *pdev, > out: > return generic_phy; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_generic_probe); > > /* > * This assumes the embedded phy structure inside generic_phy is of type > @@ -121,6 +123,7 @@ struct ufs_qcom_phy *get_ufs_qcom_phy(struct phy *generic_phy) > { > return (struct ufs_qcom_phy *)phy_get_drvdata(generic_phy); > } > +EXPORT_SYMBOL_GPL(get_ufs_qcom_phy); > > static > int ufs_qcom_phy_base_init(struct platform_device *pdev, > @@ -228,6 +231,7 @@ ufs_qcom_phy_init_clks(struct phy *generic_phy, > out: > return err; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_init_clks); > > int > ufs_qcom_phy_init_vregulators(struct phy *generic_phy, > @@ -252,6 +256,7 @@ ufs_qcom_phy_init_vregulators(struct phy *generic_phy, > out: > return err; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_init_vregulators); > > static int __ufs_qcom_phy_init_vreg(struct phy *phy, > struct ufs_qcom_phy_vreg *vreg, const char *name, bool optional) > @@ -443,6 +448,7 @@ out_disable_src: > out: > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_enable_ref_clk); > > static > int ufs_qcom_phy_disable_vreg(struct phy *phy, > @@ -485,6 +491,7 @@ void ufs_qcom_phy_disable_ref_clk(struct phy *generic_phy) > phy->is_ref_clk_enabled = false; > } > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_disable_ref_clk); > > #define UFS_REF_CLK_EN (1 << 5) > > @@ -523,16 +530,19 @@ static void ufs_qcom_phy_dev_ref_clk_ctrl(struct phy *generic_phy, bool enable) > phy->is_dev_ref_clk_enabled = enable; > } > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_dev_ref_clk_ctrl); > > void ufs_qcom_phy_enable_dev_ref_clk(struct phy *generic_phy) > { > ufs_qcom_phy_dev_ref_clk_ctrl(generic_phy, true); > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_enable_dev_ref_clk); > > void ufs_qcom_phy_disable_dev_ref_clk(struct phy *generic_phy) > { > ufs_qcom_phy_dev_ref_clk_ctrl(generic_phy, false); > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_disable_dev_ref_clk); > > /* Turn ON M-PHY RMMI interface clocks */ > int ufs_qcom_phy_enable_iface_clk(struct phy *generic_phy) > @@ -561,6 +571,7 @@ int ufs_qcom_phy_enable_iface_clk(struct phy *generic_phy) > out: > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_enable_iface_clk); > > /* Turn OFF M-PHY RMMI interface clocks */ > void ufs_qcom_phy_disable_iface_clk(struct phy *generic_phy) > @@ -573,6 +584,7 @@ void ufs_qcom_phy_disable_iface_clk(struct phy *generic_phy) > phy->is_iface_clk_enabled = false; > } > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_disable_iface_clk); > > int ufs_qcom_phy_start_serdes(struct phy *generic_phy) > { > @@ -589,6 +601,7 @@ int ufs_qcom_phy_start_serdes(struct phy *generic_phy) > > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_start_serdes); > > int ufs_qcom_phy_set_tx_lane_enable(struct phy *generic_phy, u32 tx_lanes) > { > @@ -606,6 +619,7 @@ int ufs_qcom_phy_set_tx_lane_enable(struct phy *generic_phy, u32 tx_lanes) > > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_set_tx_lane_enable); > > void ufs_qcom_phy_save_controller_version(struct phy *generic_phy, > u8 major, u16 minor, u16 step) > @@ -616,6 +630,7 @@ void ufs_qcom_phy_save_controller_version(struct phy *generic_phy, > ufs_qcom_phy->host_ctrl_rev_minor = minor; > ufs_qcom_phy->host_ctrl_rev_step = step; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_save_controller_version); > > int ufs_qcom_phy_calibrate_phy(struct phy *generic_phy, bool is_rate_B) > { > @@ -636,6 +651,7 @@ int ufs_qcom_phy_calibrate_phy(struct phy *generic_phy, bool is_rate_B) > > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_calibrate_phy); > > int ufs_qcom_phy_remove(struct phy *generic_phy, > struct ufs_qcom_phy *ufs_qcom_phy) > @@ -647,6 +663,7 @@ int ufs_qcom_phy_remove(struct phy *generic_phy, > > return 0; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_remove); > > int ufs_qcom_phy_exit(struct phy *generic_phy) > { > @@ -657,6 +674,7 @@ int ufs_qcom_phy_exit(struct phy *generic_phy) > > return 0; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_exit); > > int ufs_qcom_phy_is_pcs_ready(struct phy *generic_phy) > { > @@ -671,6 +689,7 @@ int ufs_qcom_phy_is_pcs_ready(struct phy *generic_phy) > return ufs_qcom_phy->phy_spec_ops-> > is_physical_coding_sublayer_ready(ufs_qcom_phy); > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_is_pcs_ready); > > int ufs_qcom_phy_power_on(struct phy *generic_phy) > { > @@ -725,6 +744,7 @@ out_disable_phy: > out: > return err; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_power_on); > > int ufs_qcom_phy_power_off(struct phy *generic_phy) > { > @@ -743,3 +763,4 @@ int ufs_qcom_phy_power_off(struct phy *generic_phy) > > return 0; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_power_off); > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754219AbbBBPbV (ORCPT ); Mon, 2 Feb 2015 10:31:21 -0500 Received: from mx2.parallels.com ([199.115.105.18]:47605 "EHLO mx2.parallels.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752383AbbBBPbS (ORCPT ); Mon, 2 Feb 2015 10:31:18 -0500 From: James Bottomley To: "arnd@arndb.de" CC: "hch@lst.de" , "dovl@codeaurora.org" , "ygardi@codeaurora.org" , "kishon@ti.com" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-scsi@vger.kernel.org" Subject: Re: [PATCH] phy: qcom-ufs: export symbols needed by main drivers Thread-Topic: [PATCH] phy: qcom-ufs: export symbols needed by main drivers Thread-Index: AQHQOxYAusPBkOjK3UuAyRuGiZKAoJzeCnmA Date: Mon, 2 Feb 2015 15:30:27 +0000 Message-ID: <1422891069.2103.1.camel@parallels.com> References: <1840882.huchmEIh5K@wuerfel> In-Reply-To: <1840882.huchmEIh5K@wuerfel> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [50.46.149.214] Content-Type: text/plain; charset="utf-8" Content-ID: MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by nfs id t12FVQBr004019 On Wed, 2015-01-28 at 17:18 +0100, Arnd Bergmann wrote: > The qcom ufs phy support is split into three separate loadable > modules, however none of the interfaces are exported, resulting > in a link error: > > ERROR: "ufs_qcom_phy_power_off" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_power_on" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_exit" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_generic_probe" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_init_vregulators" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_init_clks" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_calibrate" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_remove" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "get_ufs_qcom_phy" [drivers/phy/phy-qcom-ufs-qmp-20nm.ko] undefined! > ERROR: "ufs_qcom_phy_power_off" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_power_on" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_exit" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_generic_probe" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_init_vregulators" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_init_clks" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_calibrate" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "ufs_qcom_phy_remove" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > ERROR: "get_ufs_qcom_phy" [drivers/phy/phy-qcom-ufs-qmp-14nm.ko] undefined! > > This exports all of the symbols that are provided by the base library > module and used by the two driver modules. > > Signed-off-by: Arnd Bergmann > Fixes: adaafaa393ef ("phy: qcom-ufs: add support for QUALCOMM Technologies UFS PHY drivers") > --- Cc added for linux-scsi, since this is the origin of the problem. How important is bisectability in this? It won't affect any non-embedded user, since most don't build with UFS, so I can go either way on folding or just applying as an extra patch. James > The broken patch is currently in the scsi tree, so if the phy maintainer > thinks that my fix is correct, it should go there too. > > An alternative approach would be to link all three phy-qcom-ufs source > files into a single module. > > drivers/phy/phy-qcom-ufs.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/drivers/phy/phy-qcom-ufs.c b/drivers/phy/phy-qcom-ufs.c > index 44ee983d57fe..c8f8c2dac18c 100644 > --- a/drivers/phy/phy-qcom-ufs.c > +++ b/drivers/phy/phy-qcom-ufs.c > @@ -73,6 +73,7 @@ int ufs_qcom_phy_calibrate(struct ufs_qcom_phy *ufs_qcom_phy, > out: > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_calibrate); > > struct phy *ufs_qcom_phy_generic_probe(struct platform_device *pdev, > struct ufs_qcom_phy *common_cfg, > @@ -110,6 +111,7 @@ struct phy *ufs_qcom_phy_generic_probe(struct platform_device *pdev, > out: > return generic_phy; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_generic_probe); > > /* > * This assumes the embedded phy structure inside generic_phy is of type > @@ -121,6 +123,7 @@ struct ufs_qcom_phy *get_ufs_qcom_phy(struct phy *generic_phy) > { > return (struct ufs_qcom_phy *)phy_get_drvdata(generic_phy); > } > +EXPORT_SYMBOL_GPL(get_ufs_qcom_phy); > > static > int ufs_qcom_phy_base_init(struct platform_device *pdev, > @@ -228,6 +231,7 @@ ufs_qcom_phy_init_clks(struct phy *generic_phy, > out: > return err; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_init_clks); > > int > ufs_qcom_phy_init_vregulators(struct phy *generic_phy, > @@ -252,6 +256,7 @@ ufs_qcom_phy_init_vregulators(struct phy *generic_phy, > out: > return err; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_init_vregulators); > > static int __ufs_qcom_phy_init_vreg(struct phy *phy, > struct ufs_qcom_phy_vreg *vreg, const char *name, bool optional) > @@ -443,6 +448,7 @@ out_disable_src: > out: > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_enable_ref_clk); > > static > int ufs_qcom_phy_disable_vreg(struct phy *phy, > @@ -485,6 +491,7 @@ void ufs_qcom_phy_disable_ref_clk(struct phy *generic_phy) > phy->is_ref_clk_enabled = false; > } > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_disable_ref_clk); > > #define UFS_REF_CLK_EN (1 << 5) > > @@ -523,16 +530,19 @@ static void ufs_qcom_phy_dev_ref_clk_ctrl(struct phy *generic_phy, bool enable) > phy->is_dev_ref_clk_enabled = enable; > } > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_dev_ref_clk_ctrl); > > void ufs_qcom_phy_enable_dev_ref_clk(struct phy *generic_phy) > { > ufs_qcom_phy_dev_ref_clk_ctrl(generic_phy, true); > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_enable_dev_ref_clk); > > void ufs_qcom_phy_disable_dev_ref_clk(struct phy *generic_phy) > { > ufs_qcom_phy_dev_ref_clk_ctrl(generic_phy, false); > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_disable_dev_ref_clk); > > /* Turn ON M-PHY RMMI interface clocks */ > int ufs_qcom_phy_enable_iface_clk(struct phy *generic_phy) > @@ -561,6 +571,7 @@ int ufs_qcom_phy_enable_iface_clk(struct phy *generic_phy) > out: > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_enable_iface_clk); > > /* Turn OFF M-PHY RMMI interface clocks */ > void ufs_qcom_phy_disable_iface_clk(struct phy *generic_phy) > @@ -573,6 +584,7 @@ void ufs_qcom_phy_disable_iface_clk(struct phy *generic_phy) > phy->is_iface_clk_enabled = false; > } > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_disable_iface_clk); > > int ufs_qcom_phy_start_serdes(struct phy *generic_phy) > { > @@ -589,6 +601,7 @@ int ufs_qcom_phy_start_serdes(struct phy *generic_phy) > > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_start_serdes); > > int ufs_qcom_phy_set_tx_lane_enable(struct phy *generic_phy, u32 tx_lanes) > { > @@ -606,6 +619,7 @@ int ufs_qcom_phy_set_tx_lane_enable(struct phy *generic_phy, u32 tx_lanes) > > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_set_tx_lane_enable); > > void ufs_qcom_phy_save_controller_version(struct phy *generic_phy, > u8 major, u16 minor, u16 step) > @@ -616,6 +630,7 @@ void ufs_qcom_phy_save_controller_version(struct phy *generic_phy, > ufs_qcom_phy->host_ctrl_rev_minor = minor; > ufs_qcom_phy->host_ctrl_rev_step = step; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_save_controller_version); > > int ufs_qcom_phy_calibrate_phy(struct phy *generic_phy, bool is_rate_B) > { > @@ -636,6 +651,7 @@ int ufs_qcom_phy_calibrate_phy(struct phy *generic_phy, bool is_rate_B) > > return ret; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_calibrate_phy); > > int ufs_qcom_phy_remove(struct phy *generic_phy, > struct ufs_qcom_phy *ufs_qcom_phy) > @@ -647,6 +663,7 @@ int ufs_qcom_phy_remove(struct phy *generic_phy, > > return 0; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_remove); > > int ufs_qcom_phy_exit(struct phy *generic_phy) > { > @@ -657,6 +674,7 @@ int ufs_qcom_phy_exit(struct phy *generic_phy) > > return 0; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_exit); > > int ufs_qcom_phy_is_pcs_ready(struct phy *generic_phy) > { > @@ -671,6 +689,7 @@ int ufs_qcom_phy_is_pcs_ready(struct phy *generic_phy) > return ufs_qcom_phy->phy_spec_ops-> > is_physical_coding_sublayer_ready(ufs_qcom_phy); > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_is_pcs_ready); > > int ufs_qcom_phy_power_on(struct phy *generic_phy) > { > @@ -725,6 +744,7 @@ out_disable_phy: > out: > return err; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_power_on); > > int ufs_qcom_phy_power_off(struct phy *generic_phy) > { > @@ -743,3 +763,4 @@ int ufs_qcom_phy_power_off(struct phy *generic_phy) > > return 0; > } > +EXPORT_SYMBOL_GPL(ufs_qcom_phy_power_off); > {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I