From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Mon, 11 Jun 2018 15:05:16 +0300 From: Heikki Krogerus Subject: Re: [PATCH v6 06/15] usb: typec: tcpm: support get typec and pd config from device properties Message-ID: <20180611120516.GI17155@kuha.fi.intel.com> References: <1527475967-15201-1-git-send-email-jun.li@nxp.com> <1527475967-15201-7-git-send-email-jun.li@nxp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1527475967-15201-7-git-send-email-jun.li@nxp.com> To: Li Jun Cc: robh+dt@kernel.org, gregkh@linuxfoundation.org, linux@roeck-us.net, cw00.choi@samsung.com, a.hajda@samsung.com, shufan_lee@richtek.com, peter.chen@nxp.com, garsilva@embeddedor.com, gsomlo@gmail.com, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-imx@nxp.com List-ID: On Mon, May 28, 2018 at 10:52:38AM +0800, Li Jun wrote: > This patch adds support of get typec and power delivery config from > firmware description. > > Signed-off-by: Li Jun This looks good to me, assuming that everybody agrees with the names used in the bindings. As usual, I would like Guenter to check tcpm.c changes. I'm putting a few nitpicks below, but in any case: Reviewed-by: Heikki Krogerus > --- > drivers/usb/typec/tcpm.c | 132 +++++++++++++++++++++++++++++++++++++++-------- > 1 file changed, 110 insertions(+), 22 deletions(-) > > diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c > index fcd22e8..aa17cd5 100644 > --- a/drivers/usb/typec/tcpm.c > +++ b/drivers/usb/typec/tcpm.c > @@ -4241,6 +4241,81 @@ static int tcpm_copy_vdos(u32 *dest_vdo, const u32 *src_vdo, > return nr_vdo; > } > > +static int tcpm_fw_get_caps(struct tcpm_port *port, > + struct fwnode_handle *fwnode) > +{ > + const char *cap_str; > + int ret; > + u32 mw; > + > + if (!port || !fwnode) if (!fwnode) is enough. > + return -EINVAL; > + > + /* USB data support is optional */ > + ret = fwnode_property_read_string(fwnode, "data-role", &cap_str); > + if (ret == 0) { > + port->typec_caps.data = typec_find_port_data_role(cap_str); > + if (port->typec_caps.data < 0) > + return -EINVAL; > + } > + > + ret = fwnode_property_read_string(fwnode, "power-role", &cap_str); > + if (ret < 0) > + return ret; > + > + port->typec_caps.type = typec_find_port_power_role(cap_str); > + if (port->typec_caps.type < 0) > + return -EINVAL; > + port->port_type = port->typec_caps.type; > + > + if (port->port_type == TYPEC_PORT_SNK) > + goto sink; > + > + /* Get soruce pdos */ s/soruce/source/ > + ret = fwnode_property_read_u32_array(fwnode, "source-pdos", > + NULL, 0); > + if (ret <= 0) > + return -EINVAL; > + > + port->nr_src_pdo = min(ret, PDO_MAX_OBJECTS); > + ret = fwnode_property_read_u32_array(fwnode, "source-pdos", > + port->src_pdo, port->nr_src_pdo); > + if ((ret < 0) || tcpm_validate_caps(port, port->src_pdo, > + port->nr_src_pdo)) > + return -EINVAL; > + > + if (port->port_type == TYPEC_PORT_SRC) > + return 0; > + > + /* Get the preferred power role for DRP */ > + ret = fwnode_property_read_string(fwnode, "try-power-role", &cap_str); > + if (ret < 0) > + return ret; > + > + port->typec_caps.prefer_role = typec_find_power_role(cap_str); > + if (port->typec_caps.prefer_role < 0) > + return -EINVAL; > +sink: > + /* Get sink pdos */ > + ret = fwnode_property_read_u32_array(fwnode, "sink-pdos", > + NULL, 0); > + if (ret <= 0) > + return -EINVAL; > + > + port->nr_snk_pdo = min(ret, PDO_MAX_OBJECTS); > + ret = fwnode_property_read_u32_array(fwnode, "sink-pdos", > + port->snk_pdo, port->nr_snk_pdo); > + if ((ret < 0) || tcpm_validate_caps(port, port->snk_pdo, > + port->nr_snk_pdo)) > + return -EINVAL; > + > + if (fwnode_property_read_u32(fwnode, "op-sink-microwatt", &mw) < 0) > + return -EINVAL; > + port->operating_snk_mw = mw / 1000; > + > + return 0; > +} Thanks, -- heikki 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: [v6,06/15] usb: typec: tcpm: support get typec and pd config from device properties From: Heikki Krogerus Message-Id: <20180611120516.GI17155@kuha.fi.intel.com> Date: Mon, 11 Jun 2018 15:05:16 +0300 To: Li Jun Cc: robh+dt@kernel.org, gregkh@linuxfoundation.org, linux@roeck-us.net, cw00.choi@samsung.com, a.hajda@samsung.com, shufan_lee@richtek.com, peter.chen@nxp.com, garsilva@embeddedor.com, gsomlo@gmail.com, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-imx@nxp.com List-ID: T24gTW9uLCBNYXkgMjgsIDIwMTggYXQgMTA6NTI6MzhBTSArMDgwMCwgTGkgSnVuIHdyb3RlOgo+ IFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IG9mIGdldCB0eXBlYyBhbmQgcG93ZXIgZGVsaXZlcnkg Y29uZmlnIGZyb20KPiBmaXJtd2FyZSBkZXNjcmlwdGlvbi4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBM aSBKdW4gPGp1bi5saUBueHAuY29tPgoKVGhpcyBsb29rcyBnb29kIHRvIG1lLCBhc3N1bWluZyB0 aGF0IGV2ZXJ5Ym9keSBhZ3JlZXMgd2l0aCB0aGUgbmFtZXMKdXNlZCBpbiB0aGUgYmluZGluZ3Mu IEFzIHVzdWFsLCBJIHdvdWxkIGxpa2UgR3VlbnRlciB0byBjaGVjayB0Y3BtLmMKY2hhbmdlcy4g SSdtIHB1dHRpbmcgYSBmZXcgbml0cGlja3MgYmVsb3csIGJ1dCBpbiBhbnkgY2FzZToKClJldmll d2VkLWJ5OiBIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb20+ Cgo+IC0tLQo+ICBkcml2ZXJzL3VzYi90eXBlYy90Y3BtLmMgfCAxMzIgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDExMCBp bnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91 c2IvdHlwZWMvdGNwbS5jIGIvZHJpdmVycy91c2IvdHlwZWMvdGNwbS5jCj4gaW5kZXggZmNkMjJl OC4uYWExN2NkNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi90eXBlYy90Y3BtLmMKPiArKysg Yi9kcml2ZXJzL3VzYi90eXBlYy90Y3BtLmMKPiBAQCAtNDI0MSw2ICs0MjQxLDgxIEBAIHN0YXRp YyBpbnQgdGNwbV9jb3B5X3Zkb3ModTMyICpkZXN0X3ZkbywgY29uc3QgdTMyICpzcmNfdmRvLAo+ ICAJcmV0dXJuIG5yX3ZkbzsKPiAgfQo+ICAKPiArc3RhdGljIGludCB0Y3BtX2Z3X2dldF9jYXBz KHN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQsCj4gKwkJCSAgICBzdHJ1Y3QgZndub2RlX2hhbmRsZSAq Zndub2RlKQo+ICt7Cj4gKwljb25zdCBjaGFyICpjYXBfc3RyOwo+ICsJaW50IHJldDsKPiArCXUz MiBtdzsKPiArCj4gKwlpZiAoIXBvcnQgfHwgIWZ3bm9kZSkKCmlmICghZndub2RlKSBpcyBlbm91 Z2guCgo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCS8qIFVTQiBkYXRhIHN1cHBvcnQgaXMg b3B0aW9uYWwgKi8KPiArCXJldCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyhmd25vZGUs ICJkYXRhLXJvbGUiLCAmY2FwX3N0cik7Cj4gKwlpZiAocmV0ID09IDApIHsKPiArCQlwb3J0LT50 eXBlY19jYXBzLmRhdGEgPSB0eXBlY19maW5kX3BvcnRfZGF0YV9yb2xlKGNhcF9zdHIpOwo+ICsJ CWlmIChwb3J0LT50eXBlY19jYXBzLmRhdGEgPCAwKQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiAr CX0KPiArCj4gKwlyZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9zdHJpbmcoZndub2RlLCAicG93 ZXItcm9sZSIsICZjYXBfc3RyKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4g Kwo+ICsJcG9ydC0+dHlwZWNfY2Fwcy50eXBlID0gdHlwZWNfZmluZF9wb3J0X3Bvd2VyX3JvbGUo Y2FwX3N0cik7Cj4gKwlpZiAocG9ydC0+dHlwZWNfY2Fwcy50eXBlIDwgMCkKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCXBvcnQtPnBvcnRfdHlwZSA9IHBvcnQtPnR5cGVjX2NhcHMudHlwZTsKPiAr Cj4gKwlpZiAocG9ydC0+cG9ydF90eXBlID09IFRZUEVDX1BPUlRfU05LKQo+ICsJCWdvdG8gc2lu azsKPiArCj4gKwkvKiBHZXQgc29ydWNlIHBkb3MgKi8KCnMvc29ydWNlL3NvdXJjZS8KCj4gKwly ZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZndub2RlLCAic291cmNlLXBkb3Mi LAo+ICsJCQkJCSAgICAgTlVMTCwgMCk7Cj4gKwlpZiAocmV0IDw9IDApCj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwo+ICsJcG9ydC0+bnJfc3JjX3BkbyA9IG1pbihyZXQsIFBET19NQVhfT0JKRUNU Uyk7Cj4gKwlyZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZndub2RlLCAic291 cmNlLXBkb3MiLAo+ICsJCQkJCSAgICAgcG9ydC0+c3JjX3BkbywgcG9ydC0+bnJfc3JjX3Bkbyk7 Cj4gKwlpZiAoKHJldCA8IDApIHx8IHRjcG1fdmFsaWRhdGVfY2Fwcyhwb3J0LCBwb3J0LT5zcmNf cGRvLAo+ICsJCQkJCSAgICBwb3J0LT5ucl9zcmNfcGRvKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCj4gKwlpZiAocG9ydC0+cG9ydF90eXBlID09IFRZUEVDX1BPUlRfU1JDKQo+ICsJCXJldHVy biAwOwo+ICsKPiArCS8qIEdldCB0aGUgcHJlZmVycmVkIHBvd2VyIHJvbGUgZm9yIERSUCAqLwo+ ICsJcmV0ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGZ3bm9kZSwgInRyeS1wb3dlci1y b2xlIiwgJmNhcF9zdHIpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4g Kwlwb3J0LT50eXBlY19jYXBzLnByZWZlcl9yb2xlID0gdHlwZWNfZmluZF9wb3dlcl9yb2xlKGNh cF9zdHIpOwo+ICsJaWYgKHBvcnQtPnR5cGVjX2NhcHMucHJlZmVyX3JvbGUgPCAwKQo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICtzaW5rOgo+ICsJLyogR2V0IHNpbmsgcGRvcyAqLwo+ICsJcmV0ID0g Zndub2RlX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KGZ3bm9kZSwgInNpbmstcGRvcyIsCj4gKwkJ CQkJICAgICBOVUxMLCAwKTsKPiArCWlmIChyZXQgPD0gMCkKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCj4gKwlwb3J0LT5ucl9zbmtfcGRvID0gbWluKHJldCwgUERPX01BWF9PQkpFQ1RTKTsKPiAr CXJldCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShmd25vZGUsICJzaW5rLXBkb3Mi LAo+ICsJCQkJCSAgICAgcG9ydC0+c25rX3BkbywgcG9ydC0+bnJfc25rX3Bkbyk7Cj4gKwlpZiAo KHJldCA8IDApIHx8IHRjcG1fdmFsaWRhdGVfY2Fwcyhwb3J0LCBwb3J0LT5zbmtfcGRvLAo+ICsJ CQkJCSAgICBwb3J0LT5ucl9zbmtfcGRvKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlp ZiAoZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgIm9wLXNpbmstbWljcm93YXR0Iiwg Jm13KSA8IDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwlwb3J0LT5vcGVyYXRpbmdfc25rX213 ID0gbXcgLyAxMDAwOwo+ICsKPiArCXJldHVybiAwOwo+ICt9CgpUaGFua3MsCg==