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: [v4,05/13] usb: typec: add API to get typec basic port power and data config From: Jun Li Message-Id: <1522253178-32414-6-git-send-email-jun.li@nxp.com> Date: Thu, 29 Mar 2018 00:06:10 +0800 To: robh+dt@kernel.org, gregkh@linuxfoundation.org, heikki.krogerus@linux.intel.com, linux@roeck-us.net Cc: a.hajda@samsung.com, shufan_lee@richtek.com, peter.chen@nxp.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-imx@nxp.com, jun.li@nxp.com, devel@driverdev.osuosl.org List-ID: VGhpcyBwYXRjaCBhZGRzIDMgQVBJcyB0byBnZXQgdGhlIHR5cGVjIHBvcnQgcG93ZXIgYW5kIGRh dGEgdHlwZSwKYW5kIHByZWZlcnJlZCBwb3dlciByb2xlIGJ5IGl0cyBuYW1lIHN0cmluZy4KClN1 Z2dlc3RlZC1ieTogSGVpa2tpIEtyb2dlcnVzIDxoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwu Y29tPgpTaWduZWQtb2ZmLWJ5OiBMaSBKdW4gPGp1bi5saUBueHAuY29tPgotLS0KIGRyaXZlcnMv dXNiL3R5cGVjL2NsYXNzLmMgfCA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC91c2IvdHlwZWMuaCB8ICAzICsrKwogMiBmaWxl cyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlw ZWMvY2xhc3MuYyBiL2RyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMKaW5kZXggNTNkZjEwZC4uNTk4 MWUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdHlwZWMvY2xhc3MuYworKysgYi9kcml2ZXJz L3VzYi90eXBlYy9jbGFzcy5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Rldmlj ZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+ CisjaW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAj aW5jbHVkZSA8bGludXgvdXNiL3R5cGVjLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3R5cGVjX211 eC5oPgpAQCAtODAyLDYgKzgwMywxMiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHR5cGVj X3BvcnRfdHlwZXNbXSA9IHsKIAlbVFlQRUNfUE9SVF9EUlBdID0gImR1YWwiLAogfTsKIAorc3Rh dGljIGNvbnN0IGNoYXIgKiBjb25zdCB0eXBlY19kYXRhX3R5cGVzW10gPSB7CisJW1RZUEVDX1BP UlRfREZQXSA9ICJob3N0IiwKKwlbVFlQRUNfUE9SVF9VRlBdID0gImRldmljZSIsCisJW1RZUEVD X1BPUlRfRFJEXSA9ICJkdWFsIiwKK307CisKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHlw ZWNfcG9ydF90eXBlc19kcnBbXSA9IHsKIAlbVFlQRUNfUE9SVF9TUkNdID0gImR1YWwgW3NvdXJj ZV0gc2luayIsCiAJW1RZUEVDX1BPUlRfU05LXSA9ICJkdWFsIHNvdXJjZSBbc2lua10iLApAQCAt MTI1Miw2ICsxMjU5LDUxIEBAIHZvaWQgdHlwZWNfc2V0X3B3cl9vcG1vZGUoc3RydWN0IHR5cGVj X3BvcnQgKnBvcnQsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0eXBlY19zZXRfcHdyX29wbW9kZSk7 CiAKKy8qKgorICogdHlwZWNfZmluZF9wb3dlcl90eXBlIC0gR2V0IHRoZSB0eXBlYyBwb3J0IHBv d2VyIHR5cGUKKyAqIEBuYW1lOiBwb3J0IHR5cGUgc3RyaW5nCisgKgorICogVGhpcyByb3V0aW5l IGlzIHVzZWQgdG8gZmluZCB0aGUgdHlwZWNfcG9ydF90eXBlIGJ5IGl0cyBzdHJpbmcgbmFtZS4K KyAqCisgKiBSZXR1cm5zIHR5cGVjX3BvcnRfdHlwZSBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVn YXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IHR5cGVjX2ZpbmRfcG93ZXJfdHlwZShjb25zdCBj aGFyICpuYW1lKQoreworCXJldHVybiBtYXRjaF9zdHJpbmcodHlwZWNfcG9ydF90eXBlcywgQVJS QVlfU0laRSh0eXBlY19wb3J0X3R5cGVzKSwKKwkJCSAgICBuYW1lKTsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKHR5cGVjX2ZpbmRfcG93ZXJfdHlwZSk7CisKKy8qKgorICogdHlwZWNfZmluZF9wcmVm ZXJyZWRfcm9sZSAtIEZpbmQgdGhlIHR5cGVjIGRycCBwb3J0IHByZWZlcnJlZCBwb3dlciByb2xl CisgKiBAbmFtZTogcG93ZXIgcm9sZSBzdHJpbmcKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNl ZCB0byBmaW5kIHRoZSB0eXBlY19yb2xlIGJ5IGl0cyBzdHJpbmcgbmFtZSBvZgorICogcHJlZmVy cmVkIHBvd2VyIHJvbGUoVHJ5LlNSQyBvciBUcnkuU05LKS4KKyAqCisgKiBSZXR1cm5zIHR5cGVj X3JvbGUgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2lu dCB0eXBlY19maW5kX3ByZWZlcnJlZF9yb2xlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJu IG1hdGNoX3N0cmluZyh0eXBlY19yb2xlcywgQVJSQVlfU0laRSh0eXBlY19yb2xlcyksIG5hbWUp OworfQorRVhQT1JUX1NZTUJPTF9HUEwodHlwZWNfZmluZF9wcmVmZXJyZWRfcm9sZSk7CisKKy8q KgorICogdHlwZWNfZmluZF9kYXRhX3R5cGUgLSBHZXQgdGhlIHR5cGVjIHBvcnQgZGF0YSBjYXBh YmlsaXR5CisgKiBAbmFtZTogZGF0YSB0eXBlIHN0cmluZworICoKKyAqIFRoaXMgcm91dGluZSBp cyB1c2VkIHRvIGZpbmQgdGhlIHR5cGVjX3BvcnRfZGF0YSBieSBpdHMgc3RyaW5nIG5hbWUuCisg KgorICogUmV0dXJucyB0eXBlY19wb3J0X2RhdGEgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0 aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCB0eXBlY19maW5kX2RhdGFfdHlwZShjb25zdCBjaGFy ICpuYW1lKQoreworCXJldHVybiBtYXRjaF9zdHJpbmcodHlwZWNfZGF0YV90eXBlcywgQVJSQVlf U0laRSh0eXBlY19kYXRhX3R5cGVzKSwKKwkJCSAgICBuYW1lKTsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKHR5cGVjX2ZpbmRfZGF0YV90eXBlKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBBUEkgZm9yIE11bHRpcGxleGVyL0RlTXVsdGlwbGV4 ZXIgU3dpdGNoZXMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdHlwZWMuaCBi L2luY2x1ZGUvbGludXgvdXNiL3R5cGVjLmgKaW5kZXggNjcyYjM5Yi4uMDBjOTNlNyAxMDA2NDQK LS0tIGEvaW5jbHVkZS9saW51eC91c2IvdHlwZWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi90 eXBlYy5oCkBAIC0yNjcsNCArMjY3LDcgQEAgaW50IHR5cGVjX3NldF9vcmllbnRhdGlvbihzdHJ1 Y3QgdHlwZWNfcG9ydCAqcG9ydCwKIAkJCSAgZW51bSB0eXBlY19vcmllbnRhdGlvbiBvcmllbnRh dGlvbik7CiBpbnQgdHlwZWNfc2V0X21vZGUoc3RydWN0IHR5cGVjX3BvcnQgKnBvcnQsIGludCBt b2RlKTsKIAoraW50IHR5cGVjX2ZpbmRfcG93ZXJfdHlwZShjb25zdCBjaGFyICpuYW1lKTsKK2lu dCB0eXBlY19maW5kX3ByZWZlcnJlZF9yb2xlKGNvbnN0IGNoYXIgKm5hbWUpOworaW50IHR5cGVj X2ZpbmRfZGF0YV90eXBlKGNvbnN0IGNoYXIgKm5hbWUpOwogI2VuZGlmIC8qIF9fTElOVVhfVVNC X1RZUEVDX0ggKi8K From mboxrd@z Thu Jan 1 00:00:00 1970 From: Li Jun Subject: [PATCH v4 05/13] usb: typec: add API to get typec basic port power and data config Date: Thu, 29 Mar 2018 00:06:10 +0800 Message-ID: <1522253178-32414-6-git-send-email-jun.li@nxp.com> References: <1522253178-32414-1-git-send-email-jun.li@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1522253178-32414-1-git-send-email-jun.li@nxp.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" To: robh+dt@kernel.org, gregkh@linuxfoundation.org, heikki.krogerus@linux.intel.com, linux@roeck-us.net Cc: devel@driverdev.osuosl.org, devicetree@vger.kernel.org, peter.chen@nxp.com, linux-usb@vger.kernel.org, a.hajda@samsung.com, linux-imx@nxp.com, jun.li@nxp.com, shufan_lee@richtek.com List-Id: devicetree@vger.kernel.org This patch adds 3 APIs to get the typec port power and data type, and preferred power role by its name string. Suggested-by: Heikki Krogerus 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 + * @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 + * @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 */ -- 2.7.4