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: [v5,05/14] usb: typec: add API to get typec basic port power and data config From: Mats Karrman Message-Id: Date: Fri, 11 May 2018 21:55:31 +0200 To: Li Jun , robh+dt@kernel.org, gregkh@linuxfoundation.org, heikki.krogerus@linux.intel.com, linux@roeck-us.net Cc: a.hajda@samsung.com, cw00.choi@samsung.com, shufan_lee@richtek.com, peter.chen@nxp.com, gsomlo@gmail.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-imx@nxp.com List-ID: SGkgTGkgSnVuLAoKT24gMjAxOC0wNS0wMyAwMjoyNCwgTGkgSnVuIHdyb3RlOgoKPiBUaGlzIHBh dGNoIGFkZHMgMyBBUElzIHRvIGdldCB0aGUgdHlwZWMgcG9ydCBwb3dlciBhbmQgZGF0YSB0eXBl LAo+IGFuZCBwcmVmZXJyZWQgcG93ZXIgcm9sZSBieSBpdHMgbmFtZSBzdHJpbmcuCj4KPiBTaWdu ZWQtb2ZmLWJ5OiBMaSBKdW4gPGp1bi5saUBueHAuY29tPgo+IC0tLQo+ICAgZHJpdmVycy91c2Iv dHlwZWMvY2xhc3MuYyB8IDUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gICBpbmNsdWRlL2xpbnV4L3VzYi90eXBlYy5oIHwgIDMgKysrCj4gICAyIGZp bGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKykKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Vz Yi90eXBlYy9jbGFzcy5jIGIvZHJpdmVycy91c2IvdHlwZWMvY2xhc3MuYwo+IGluZGV4IDUzZGYx MGQuLjU5ODFlMTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvdHlwZWMvY2xhc3MuYwo+ICsr KyBiL2RyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMKPiBAQCAtOSw2ICs5LDcgQEAKPiAgICNpbmNs dWRlIDxsaW51eC9kZXZpY2UuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiAgICNp bmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4KPiAg ICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvdXNiL3R5cGVjLmg+ Cj4gICAjaW5jbHVkZSA8bGludXgvdXNiL3R5cGVjX211eC5oPgo+IEBAIC04MDIsNiArODAzLDEy IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHlwZWNfcG9ydF90eXBlc1tdID0gewo+ICAg CVtUWVBFQ19QT1JUX0RSUF0gPSAiZHVhbCIsCj4gICB9Owo+ICAgCj4gK3N0YXRpYyBjb25zdCBj aGFyICogY29uc3QgdHlwZWNfZGF0YV90eXBlc1tdID0gewo+ICsJW1RZUEVDX1BPUlRfREZQXSA9 ICJob3N0IiwKPiArCVtUWVBFQ19QT1JUX1VGUF0gPSAiZGV2aWNlIiwKPiArCVtUWVBFQ19QT1JU X0RSRF0gPSAiZHVhbCIsCj4gK307Cj4gKwo+ICAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0 eXBlY19wb3J0X3R5cGVzX2RycFtdID0gewo+ICAgCVtUWVBFQ19QT1JUX1NSQ10gPSAiZHVhbCBb c291cmNlXSBzaW5rIiwKPiAgIAlbVFlQRUNfUE9SVF9TTktdID0gImR1YWwgc291cmNlIFtzaW5r XSIsCj4gQEAgLTEyNTIsNiArMTI1OSw1MSBAQCB2b2lkIHR5cGVjX3NldF9wd3Jfb3Btb2RlKHN0 cnVjdCB0eXBlY19wb3J0ICpwb3J0LAo+ICAgfQo+ICAgRVhQT1JUX1NZTUJPTF9HUEwodHlwZWNf c2V0X3B3cl9vcG1vZGUpOwo+ICAgCj4gKy8qKgo+ICsgKiB0eXBlY19maW5kX3Bvd2VyX3R5cGUg LSBHZXQgdGhlIHR5cGVjIHBvcnQgcG93ZXIgdHlwZQoKV2h5IGlzIHRoaXMgZnVuY3Rpb24gY2Fs bGVkIHR5cGVjX2ZpbmRfcG93ZXJfdHlwZSgpIGFuZCBub3QgdHlwZWNfZmluZF9wb3J0X3R5cGUo KT8KSXQncyBjYWxsZWQgcG9ydF90eXBlIGluIHN5c2ZzLCBoYXZpbmcgZGlmZmVyZW50IG5hbWVz IGp1c3QgYWRkcyBjb25mdXNpb24uCihPdGhlcndpc2UgSSBhZ3JlZSBwb3dlcl90eXBlIGlzIGEg YmV0dGVyIG5hbWUgYnV0Li4uKQoKPiArICogQG5hbWU6IHBvcnQgdHlwZSBzdHJpbmcKPiArICoK PiArICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZmluZCB0aGUgdHlwZWNfcG9ydF90eXBlIGJ5 IGl0cyBzdHJpbmcgbmFtZS4KPiArICoKPiArICogUmV0dXJucyB0eXBlY19wb3J0X3R5cGUgaWYg c3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm9yIGNvZGUuCj4gKyAqLwo+ICtpbnQgdHlw ZWNfZmluZF9wb3dlcl90eXBlKGNvbnN0IGNoYXIgKm5hbWUpCj4gK3sKPiArCXJldHVybiBtYXRj aF9zdHJpbmcodHlwZWNfcG9ydF90eXBlcywgQVJSQVlfU0laRSh0eXBlY19wb3J0X3R5cGVzKSwK PiArCQkJICAgIG5hbWUpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHR5cGVjX2ZpbmRfcG93 ZXJfdHlwZSk7Cj4gKwo+ICsvKioKPiArICogdHlwZWNfZmluZF9wcmVmZXJyZWRfcm9sZSAtIEZp bmQgdGhlIHR5cGVjIGRycCBwb3J0IHByZWZlcnJlZCBwb3dlciByb2xlCgpXaHkgdHlwZWNfZmlu ZF9wcmVmZXJyZWRfcm9sZSgpPyBDb3VsZCBiZSB1c2VkIGZvciBhbnkgcG93ZXJfcm9sZSBzbwp3 aHkgbm90IHR5cGVjX2ZpbmRfcG93ZXJfcm9sZSgpPwoKQlIgLy8gTWF0cwoKPiArICogQG5hbWU6 IHBvd2VyIHJvbGUgc3RyaW5nCj4gKyAqCj4gKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGZp bmQgdGhlIHR5cGVjX3JvbGUgYnkgaXRzIHN0cmluZyBuYW1lIG9mCj4gKyAqIHByZWZlcnJlZCBw b3dlciByb2xlKFRyeS5TUkMgb3IgVHJ5LlNOSykuCj4gKyAqCj4gKyAqIFJldHVybnMgdHlwZWNf cm9sZSBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgZXJyb3IgY29kZS4KPiArICovCj4g K2ludCB0eXBlY19maW5kX3ByZWZlcnJlZF9yb2xlKGNvbnN0IGNoYXIgKm5hbWUpCj4gK3sKPiAr CXJldHVybiBtYXRjaF9zdHJpbmcodHlwZWNfcm9sZXMsIEFSUkFZX1NJWkUodHlwZWNfcm9sZXMp LCBuYW1lKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh0eXBlY19maW5kX3ByZWZlcnJlZF9y b2xlKTsKPiArCj4gKy8qKgo+ICsgKiB0eXBlY19maW5kX2RhdGFfdHlwZSAtIEdldCB0aGUgdHlw ZWMgcG9ydCBkYXRhIGNhcGFiaWxpdHkKPiArICogQG5hbWU6IGRhdGEgdHlwZSBzdHJpbmcKPiAr ICoKPiArICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZmluZCB0aGUgdHlwZWNfcG9ydF9kYXRh IGJ5IGl0cyBzdHJpbmcgbmFtZS4KPiArICoKPiArICogUmV0dXJucyB0eXBlY19wb3J0X2RhdGEg aWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm9yIGNvZGUuCj4gKyAqLwo+ICtpbnQg dHlwZWNfZmluZF9kYXRhX3R5cGUoY29uc3QgY2hhciAqbmFtZSkKPiArewo+ICsJcmV0dXJuIG1h dGNoX3N0cmluZyh0eXBlY19kYXRhX3R5cGVzLCBBUlJBWV9TSVpFKHR5cGVjX2RhdGFfdHlwZXMp LAo+ICsJCQkgICAgbmFtZSk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodHlwZWNfZmluZF9k YXRhX3R5cGUpOwo+ICsKPiAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLwo+ICAgLyogQVBJIGZvciBNdWx0aXBsZXhlci9EZU11bHRpcGxleGVyIFN3aXRj aGVzICovCj4gICAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdHlwZWMuaCBiL2lu Y2x1ZGUvbGludXgvdXNiL3R5cGVjLmgKPiBpbmRleCA2NzJiMzliLi4wMGM5M2U3IDEwMDY0NAo+ IC0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3R5cGVjLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3Vz Yi90eXBlYy5oCj4gQEAgLTI2Nyw0ICsyNjcsNyBAQCBpbnQgdHlwZWNfc2V0X29yaWVudGF0aW9u KHN0cnVjdCB0eXBlY19wb3J0ICpwb3J0LAo+ICAgCQkJICBlbnVtIHR5cGVjX29yaWVudGF0aW9u IG9yaWVudGF0aW9uKTsKPiAgIGludCB0eXBlY19zZXRfbW9kZShzdHJ1Y3QgdHlwZWNfcG9ydCAq cG9ydCwgaW50IG1vZGUpOwo+ICAgCj4gK2ludCB0eXBlY19maW5kX3Bvd2VyX3R5cGUoY29uc3Qg Y2hhciAqbmFtZSk7Cj4gK2ludCB0eXBlY19maW5kX3ByZWZlcnJlZF9yb2xlKGNvbnN0IGNoYXIg Km5hbWUpOwo+ICtpbnQgdHlwZWNfZmluZF9kYXRhX3R5cGUoY29uc3QgY2hhciAqbmFtZSk7Cj4g ICAjZW5kaWYgLyogX19MSU5VWF9VU0JfVFlQRUNfSCAqLwo+Ci0tLQpUbyB1bnN1YnNjcmliZSBm cm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBpbgp0 aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1h am9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0 bWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Subject: Re: [PATCH v5 05/14] usb: typec: add API to get typec basic port power and data config References: <1525307094-27402-1-git-send-email-jun.li@nxp.com> <1525307094-27402-6-git-send-email-jun.li@nxp.com> From: Mats Karrman Message-ID: Date: Fri, 11 May 2018 21:55:31 +0200 MIME-Version: 1.0 In-Reply-To: <1525307094-27402-6-git-send-email-jun.li@nxp.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US To: Li Jun , robh+dt@kernel.org, gregkh@linuxfoundation.org, heikki.krogerus@linux.intel.com, linux@roeck-us.net Cc: a.hajda@samsung.com, cw00.choi@samsung.com, shufan_lee@richtek.com, peter.chen@nxp.com, gsomlo@gmail.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-imx@nxp.com List-ID: Hi Li Jun, On 2018-05-03 02:24, Li Jun wrote: > This patch adds 3 APIs to get the typec port power and data type, > and preferred power role by its name string. > > Signed-off-by: Li Jun > --- > drivers/usb/typec/class.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++ > include/linux/usb/typec.h | 3 +++ > 2 files changed, 55 insertions(+) > > diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c > index 53df10d..5981e18 100644 > --- a/drivers/usb/typec/class.c > +++ b/drivers/usb/typec/class.c > @@ -9,6 +9,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -802,6 +803,12 @@ static const char * const typec_port_types[] = { > [TYPEC_PORT_DRP] = "dual", > }; > > +static const char * const typec_data_types[] = { > + [TYPEC_PORT_DFP] = "host", > + [TYPEC_PORT_UFP] = "device", > + [TYPEC_PORT_DRD] = "dual", > +}; > + > static const char * const typec_port_types_drp[] = { > [TYPEC_PORT_SRC] = "dual [source] sink", > [TYPEC_PORT_SNK] = "dual source [sink]", > @@ -1252,6 +1259,51 @@ void typec_set_pwr_opmode(struct typec_port *port, > } > EXPORT_SYMBOL_GPL(typec_set_pwr_opmode); > > +/** > + * typec_find_power_type - Get the typec port power type Why is this function called typec_find_power_type() and not typec_find_port_type()? It's called port_type in sysfs, having different names just adds confusion. (Otherwise I agree power_type is a better name but...) > + * @name: port type string > + * > + * This routine is used to find the typec_port_type by its string name. > + * > + * Returns typec_port_type if success, otherwise negative error code. > + */ > +int typec_find_power_type(const char *name) > +{ > + return match_string(typec_port_types, ARRAY_SIZE(typec_port_types), > + name); > +} > +EXPORT_SYMBOL_GPL(typec_find_power_type); > + > +/** > + * typec_find_preferred_role - Find the typec drp port preferred power role Why typec_find_preferred_role()? Could be used for any power_role so why not typec_find_power_role()? BR // Mats > + * @name: power role string > + * > + * This routine is used to find the typec_role by its string name of > + * preferred power role(Try.SRC or Try.SNK). > + * > + * Returns typec_role if success, otherwise negative error code. > + */ > +int typec_find_preferred_role(const char *name) > +{ > + return match_string(typec_roles, ARRAY_SIZE(typec_roles), name); > +} > +EXPORT_SYMBOL_GPL(typec_find_preferred_role); > + > +/** > + * typec_find_data_type - Get the typec port data capability > + * @name: data type string > + * > + * This routine is used to find the typec_port_data by its string name. > + * > + * Returns typec_port_data if success, otherwise negative error code. > + */ > +int typec_find_data_type(const char *name) > +{ > + return match_string(typec_data_types, ARRAY_SIZE(typec_data_types), > + name); > +} > +EXPORT_SYMBOL_GPL(typec_find_data_type); > + > /* ------------------------------------------ */ > /* API for Multiplexer/DeMultiplexer Switches */ > > diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h > index 672b39b..00c93e7 100644 > --- a/include/linux/usb/typec.h > +++ b/include/linux/usb/typec.h > @@ -267,4 +267,7 @@ int typec_set_orientation(struct typec_port *port, > enum typec_orientation orientation); > int typec_set_mode(struct typec_port *port, int mode); > > +int typec_find_power_type(const char *name); > +int typec_find_preferred_role(const char *name); > +int typec_find_data_type(const char *name); > #endif /* __LINUX_USB_TYPEC_H */ >