All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Li Jun <jun.li@nxp.com>
Cc: robh+dt@kernel.org, mark.rutland@arm.com,
	gregkh@linuxfoundation.org, a.hajda@samsung.com,
	linux@roeck-us.net, yueyao@google.com, shufan_lee@richtek.com,
	o_leveque@orange.fr, linux-usb@vger.kernel.org,
	linux-imx@nxp.com
Subject: [v3,05/12] usb: typec: add API to get sink and source config
Date: Thu, 15 Mar 2018 13:21:06 +0200	[thread overview]
Message-ID: <20180315112106.GA11689@kuha.fi.intel.com> (raw)

On Tue, Mar 13, 2018 at 05:34:31PM +0800, Li Jun wrote:
> This patch add 2 APIs to get sink and source power config from firmware
> description in case the port supports PD.
> 
> Signed-off-by: Li Jun <jun.li@nxp.com>
> ---
>  drivers/usb/typec/tcpm.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/usb/tcpm.h |  8 +++++---
>  2 files changed, 52 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
> index 7500dc0..0bd34c9 100644
> --- a/drivers/usb/typec/tcpm.c
> +++ b/drivers/usb/typec/tcpm.c
> @@ -13,6 +13,7 @@
>  #include <linux/module.h>
>  #include <linux/mutex.h>
>  #include <linux/proc_fs.h>
> +#include <linux/property.h>
>  #include <linux/sched/clock.h>
>  #include <linux/seq_file.h>
>  #include <linux/slab.h>
> @@ -3595,6 +3596,52 @@ static int tcpm_copy_vdos(u32 *dest_vdo, const u32 *src_vdo,
>  	return nr_vdo;
>  }
>  
> +int tcpm_get_src_config(struct fwnode_handle *fwnode, struct tcpc_config *tcfg)
> +{
> +	int ret;
> +
> +	if (!fwnode)
> +		return -EINVAL;
> +
> +	ret = fwnode_property_read_u32_array(fwnode, "source-pdos",
> +					     NULL, 0);
> +	if (ret <= 0)
> +		return -EINVAL;
> +
> +	tcfg->nr_src_pdo = min(ret, PDO_MAX_OBJECTS);
> +	return fwnode_property_read_u32_array(fwnode, "source-pdos",
> +					      tcfg->src_pdo, tcfg->nr_src_pdo);
> +}
> +EXPORT_SYMBOL_GPL(tcpm_get_src_config);
> +
> +int tcpm_get_snk_config(struct fwnode_handle *fwnode, struct tcpc_config *tcfg)
> +{
> +	int ret;
> +
> +	if (!fwnode)
> +		return -EINVAL;
> +
> +	if ((fwnode_property_read_u32(fwnode, "max-sink-microvolt",
> +				      &tcfg->max_snk_mv) < 0) ||
> +		(fwnode_property_read_u32(fwnode, "max-sink-microamp",
> +					  &tcfg->max_snk_ma) < 0) ||
> +		(fwnode_property_read_u32(fwnode, "max-sink-microwatt-hours",
> +					  &tcfg->max_snk_mw) < 0) ||
> +		(fwnode_property_read_u32(fwnode, "op-sink-microwatt-hours",
> +					  &tcfg->operating_snk_mw) < 0))
> +		return -EINVAL;
> +
> +	ret = fwnode_property_read_u32_array(fwnode, "sink-pdos",
> +					     NULL, 0);
> +	if (ret <= 0)
> +		return -EINVAL;
> +
> +	tcfg->nr_snk_pdo = min(ret, PDO_MAX_OBJECTS);
> +	return fwnode_property_read_u32_array(fwnode, "sink-pdos",
> +					      tcfg->snk_pdo, tcfg->nr_snk_pdo);
> +}
> +EXPORT_SYMBOL_GPL(tcpm_get_snk_config);

tcpm_register_port() can check these. No need to involve the tcpc
drivers.

>  int tcpm_update_source_capabilities(struct tcpm_port *port, const u32 *pdo,
>  				    unsigned int nr_pdo)
>  {
> diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h
> index e2e2db3..5d361f6 100644
> --- a/include/linux/usb/tcpm.h
> +++ b/include/linux/usb/tcpm.h
> @@ -76,10 +76,10 @@ enum tcpm_transmit_type {
>   * @alt_modes:	List of supported alternate modes
>   */
>  struct tcpc_config {
> -	const u32 *src_pdo;
> +	u32 *src_pdo;
>  	unsigned int nr_src_pdo;
>  
> -	const u32 *snk_pdo;
> +	u32 *snk_pdo;
>  	unsigned int nr_snk_pdo;
>  
>  	const u32 *snk_vdo;
> @@ -143,7 +143,7 @@ enum tcpc_mux_mode {
>   * @mux:	Pointer to multiplexer data
>   */
>  struct tcpc_dev {
> -	const struct tcpc_config *config;
> +	struct tcpc_config *config;

If you check the properties in tcpm, the above members can continue to
be declared constant for now.

>  	struct fwnode_handle *fwnode;
>  
>  	int (*init)(struct tcpc_dev *dev);
> @@ -189,5 +189,7 @@ void tcpm_pd_transmit_complete(struct tcpm_port *port,
>  			       enum tcpm_transmit_status status);
>  void tcpm_pd_hard_reset(struct tcpm_port *port);
>  void tcpm_tcpc_reset(struct tcpm_port *port);
> +int tcpm_get_src_config(struct fwnode_handle *fwnode, struct tcpc_config *tcfg);
> +int tcpm_get_snk_config(struct fwnode_handle *fwnode, struct tcpc_config *tcfg);


Cheers,

             reply	other threads:[~2018-03-15 11:21 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-15 11:21 Heikki Krogerus [this message]
  -- strict thread matches above, loose matches on Subject: below --
2018-03-20  2:30 [v3,05/12] usb: typec: add API to get sink and source config Jun Li
2018-03-20  2:11 Jun Li
2018-03-20  2:05 Jun Li
2018-03-15 16:06 Mats Karrman
2018-03-15 12:06 Heikki Krogerus
2018-03-13  9:34 Jun Li

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180315112106.GA11689@kuha.fi.intel.com \
    --to=heikki.krogerus@linux.intel.com \
    --cc=a.hajda@samsung.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jun.li@nxp.com \
    --cc=linux-imx@nxp.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=mark.rutland@arm.com \
    --cc=o_leveque@orange.fr \
    --cc=robh+dt@kernel.org \
    --cc=shufan_lee@richtek.com \
    --cc=yueyao@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.