All of lore.kernel.org
 help / color / mirror / Atom feed
* [v3,04/12] usb: typec: add API to get typec basic port power and data config
@ 2018-03-14  9:59 Heikki Krogerus
  0 siblings, 0 replies; 3+ messages in thread
From: Heikki Krogerus @ 2018-03-14  9:59 UTC (permalink / raw)
  To: Li Jun
  Cc: robh+dt, mark.rutland, gregkh, a.hajda, linux, yueyao,
	shufan_lee, o_leveque, linux-usb, linux-imx

Hi,

On Tue, Mar 13, 2018 at 05:34:30PM +0800, Li Jun wrote:
> +/**
> + * typec_get_power_type - Get the typec port power type
> + * @fwnode: Firmware node to get the property of
> + *
> + * This routine is used by typec hardware driver to read property
> + * port power type from the device firmware description.
> + *
> + * Returns typec_port_type if success, otherwise negative error code.
> + */
> +int typec_get_power_type(struct fwnode_handle *fwnode)
> +{
> +	const char *type_str;
> +	int ret;
> +
> +	if (!fwnode)
> +		return -EINVAL;
> +
> +	ret = fwnode_property_read_string(fwnode, "power-type", &type_str);
> +	if (ret < 0)
> +		return ret;
> +
> +	return match_string(typec_port_types, ARRAY_SIZE(typec_port_types),
> +			    type_str);
> +}
> +EXPORT_SYMBOL_GPL(typec_get_power_type);
> 
> +/**
> + * typec_get_preferred_role - Get the typec preferred power role
> + * @fwnode: Firmware node to get the property of
> + *
> + * This routine is used by typec hardware driver to read property
> + * try-power-role from the device firmware description to decide
> + * if the port can support Try.SRC or Try.SNK.
> + *
> + * Returns typec_role if success, otherwise negative error code.
> + */
> +int typec_get_preferred_role(struct fwnode_handle *fwnode)
> +{
> +	const char *type_str;
> +	int ret;
> +
> +	if (!fwnode)
> +		return -EINVAL;
> +
> +	ret = fwnode_property_read_string(fwnode, "try-power-role", &type_str);
> +	if (ret < 0)
> +		return ret;
> +
> +	return match_string(typec_roles, ARRAY_SIZE(typec_roles), type_str);
> +}
> +EXPORT_SYMBOL_GPL(typec_get_preferred_role);
> +
> +/**
> + * typec_get_data_type - Get the typec port data type
> + * @fwnode: Firmware node to get the property of
> + *
> + * This routine is used by typec hardware driver to read property
> + * port data type from the device firmware description.
> + *
> + * Returns typec_data_type if success, otherwise negative error code.
> + */
> +int typec_get_data_type(struct fwnode_handle *fwnode)
> +{
> +	const char *type_str;
> +	int ret;
> +
> +	if (!fwnode)
> +		return -EINVAL;
> +
> +	ret = fwnode_property_read_string(fwnode, "data-type", &type_str);
> +	if (ret < 0)
> +		return ret;
> +
> +	return match_string(typec_data_types, ARRAY_SIZE(typec_data_types),
> +			    type_str);
> +}
> +EXPORT_SYMBOL_GPL(typec_get_data_type);

I been thinking about this. Perhaps it's better that we don't read
any properties in these helpers. These helpers become more useful that
way, and we can use the in other places as well if needed.

So my proposal is that the callers of these functions are responsible
of reading the property values. Here we just convert the strings to
values:

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);

int typec_find_power_role(const char *name)
{
	return match_string(typec_port_types, ARRAY_SIZE(typec_data_types),
			    name);
}
EXPORT_SYMBOL_GPL(typec_find_data_role);

int typec_find_data_role(const char *name)
{
	return match_string(typec_data_types, ARRAY_SIZE(typec_data_types),
			    name);
}
EXPORT_SYMBOL_GPL(typec_find_data_role);


Thanks,

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [v3,04/12] usb: typec: add API to get typec basic port power and data config
@ 2018-03-19  9:28 Jun Li
  0 siblings, 0 replies; 3+ messages in thread
From: Jun Li @ 2018-03-19  9:28 UTC (permalink / raw)
  To: Heikki Krogerus
  Cc: robh+dt, mark.rutland, gregkh, a.hajda, linux, yueyao,
	shufan_lee, o_leveque, linux-usb, dl-linux-imx

Hi
> 
> I been thinking about this. Perhaps it's better that we don't read any
> properties in these helpers. These helpers become more useful that way, and
> we can use the in other places as well if needed.
> 
> So my proposal is that the callers of these functions are responsible of reading
> the property values. Here we just convert the strings to
> values:
> 
> 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);
> 
> int typec_find_power_role(const char *name) {
> 	return match_string(typec_port_types, ARRAY_SIZE(typec_data_types),
> 			    name);
> }
> EXPORT_SYMBOL_GPL(typec_find_data_role);
> 
> int typec_find_data_role(const char *name) {
> 	return match_string(typec_data_types, ARRAY_SIZE(typec_data_types),
> 			    name);
> }
> EXPORT_SYMBOL_GPL(typec_find_data_role);
> 

A better idea for basic typec class, thanks, I will change to be this proposal in v4.

Jun
> 
> Thanks,
> 
> --
> heikki
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [v3,04/12] usb: typec: add API to get typec basic port power and data config
@ 2018-03-13  9:34 Jun Li
  0 siblings, 0 replies; 3+ messages in thread
From: Jun Li @ 2018-03-13  9:34 UTC (permalink / raw)
  To: robh+dt, mark.rutland, gregkh, heikki.krogerus
  Cc: a.hajda, jun.li, linux, yueyao, shufan_lee, o_leveque, linux-usb,
	linux-imx

This patch adds 3 APIs to get the typec port power and data type,
and preferred power role.

Signed-off-by: Li Jun <jun.li@nxp.com>
---
change for v3:
- Use fwnode to get the node of usb connector.
- add one API to get data type

 drivers/usb/typec/class.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/usb/typec.h |  3 ++
 2 files changed, 88 insertions(+)

diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
index 53df10d..c5e937f 100644
--- a/drivers/usb/typec/class.c
+++ b/drivers/usb/typec/class.c
@@ -9,6 +9,7 @@
 #include <linux/device.h>
 #include <linux/module.h>
 #include <linux/mutex.h>
+#include <linux/property.h>
 #include <linux/slab.h>
 #include <linux/usb/typec.h>
 #include <linux/usb/typec_mux.h>
@@ -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,84 @@ void typec_set_pwr_opmode(struct typec_port *port,
 }
 EXPORT_SYMBOL_GPL(typec_set_pwr_opmode);
 
+/**
+ * typec_get_power_type - Get the typec port power type
+ * @fwnode: Firmware node to get the property of
+ *
+ * This routine is used by typec hardware driver to read property
+ * port power type from the device firmware description.
+ *
+ * Returns typec_port_type if success, otherwise negative error code.
+ */
+int typec_get_power_type(struct fwnode_handle *fwnode)
+{
+	const char *type_str;
+	int ret;
+
+	if (!fwnode)
+		return -EINVAL;
+
+	ret = fwnode_property_read_string(fwnode, "power-type", &type_str);
+	if (ret < 0)
+		return ret;
+
+	return match_string(typec_port_types, ARRAY_SIZE(typec_port_types),
+			    type_str);
+}
+EXPORT_SYMBOL_GPL(typec_get_power_type);
+
+/**
+ * typec_get_preferred_role - Get the typec preferred power role
+ * @fwnode: Firmware node to get the property of
+ *
+ * This routine is used by typec hardware driver to read property
+ * try-power-role from the device firmware description to decide
+ * if the port can support Try.SRC or Try.SNK.
+ *
+ * Returns typec_role if success, otherwise negative error code.
+ */
+int typec_get_preferred_role(struct fwnode_handle *fwnode)
+{
+	const char *type_str;
+	int ret;
+
+	if (!fwnode)
+		return -EINVAL;
+
+	ret = fwnode_property_read_string(fwnode, "try-power-role", &type_str);
+	if (ret < 0)
+		return ret;
+
+	return match_string(typec_roles, ARRAY_SIZE(typec_roles), type_str);
+}
+EXPORT_SYMBOL_GPL(typec_get_preferred_role);
+
+/**
+ * typec_get_data_type - Get the typec port data type
+ * @fwnode: Firmware node to get the property of
+ *
+ * This routine is used by typec hardware driver to read property
+ * port data type from the device firmware description.
+ *
+ * Returns typec_data_type if success, otherwise negative error code.
+ */
+int typec_get_data_type(struct fwnode_handle *fwnode)
+{
+	const char *type_str;
+	int ret;
+
+	if (!fwnode)
+		return -EINVAL;
+
+	ret = fwnode_property_read_string(fwnode, "data-type", &type_str);
+	if (ret < 0)
+		return ret;
+
+	return match_string(typec_data_types, ARRAY_SIZE(typec_data_types),
+			    type_str);
+}
+EXPORT_SYMBOL_GPL(typec_get_data_type);
+
 /* ------------------------------------------ */
 /* API for Multiplexer/DeMultiplexer Switches */
 
diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h
index 672b39b..c415593 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_get_power_type(struct fwnode_handle *fwnode);
+int typec_get_preferred_role(struct fwnode_handle *fwnode);
+int typec_get_data_type(struct fwnode_handle *fwnode);
 #endif /* __LINUX_USB_TYPEC_H */

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-03-19  9:28 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-14  9:59 [v3,04/12] usb: typec: add API to get typec basic port power and data config Heikki Krogerus
  -- strict thread matches above, loose matches on Subject: below --
2018-03-19  9:28 Jun Li
2018-03-13  9:34 Jun Li

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.