> -----Original Message----- > From: Heikki Krogerus [mailto:heikki.krogerus@xxxxxxxxxxxxxxx] > Sent: 2018年2月26日 21:32 > To: Jun Li <jun.li@xxxxxxx> > Cc: gregkh@xxxxxxxxxxxxxxxxxxx; robh+dt@xxxxxxxxxx; linux@xxxxxxxxxxxx; > a.hajda@xxxxxxxxxxx; mark.rutland@xxxxxxx; yueyao@xxxxxxxxxx; > Peter Chen <peter.chen@xxxxxxx>; garsilva@xxxxxxxxxxxxxx; > o_leveque@xxxxxxxxx; shufan_lee@xxxxxxxxxxx; linux-usb@xxxxxxxxxxxxxxx; > devicetree@xxxxxxxxxxxxxxx; dl-linux-imx <linux-imx@xxxxxxx> > Subject: Re: [PATCH v2 02/12] usb: typec: add API to get sink and source > config > > Hi, > > On Mon, Feb 26, 2018 at 07:49:09PM +0800, Li Jun wrote: > > This patch add 2 APIs to get sink and source power config from > > firmware description. > > > > Signed-off-by: Li Jun <jun.li@xxxxxxx> > > --- > > drivers/usb/typec/tcpm.c | 43 > > +++++++++++++++++++++++++++++++++++++++++++ > > include/linux/usb/tcpm.h | 2 ++ > > 2 files changed, 45 insertions(+) > > > > diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c index > > f4d563e..409f1d0 100644 > > --- a/drivers/usb/typec/tcpm.c > > +++ b/drivers/usb/typec/tcpm.c > > @@ -12,6 +12,7 @@ > > #include <linux/kernel.h> > > #include <linux/module.h> > > #include <linux/mutex.h> > > +#include <linux/of.h> > > No need for that. There is nothing DT only specific here. > > As in 01/12, you only have device properties here, so use the unified device > property API instead of of_property_* functions. I will use device property API, also as the below sink props: "max-snk-microvolt" "max-snk-microamp" "max-snk-microwatt-hours" "op-snk-microwatt-hours" are redundant now, only PDO is required, I will combine the below 2 APIs to be one: int tcpm_get_pdos(struct device *dev, bool sink, struct tcpc_config *tcfg) Jun Li > > > #include <linux/proc_fs.h> > > #include <linux/sched/clock.h> > > #include <linux/seq_file.h> > > @@ -3589,6 +3590,48 @@ static int tcpm_copy_vdos(u32 *dest_vdo, > const u32 *src_vdo, > > return nr_vdo; > > } > > > > +int tcpm_of_get_src_config(struct device_node *np, struct tcpc_config > > +*tcfg) { > > + int ret; > > + > > + ret = of_property_read_variable_u32_array(np, "src-pdos", > > + tcfg->src_pdo, 1, PDO_MAX_OBJECTS); > > + if (ret > 0) > > + tcfg->nr_src_pdo = ret; > > + > > + return ret; > > +} > > +EXPORT_SYMBOL_GPL(tcpm_of_get_pdos); > > + > > +int tcpm_of_get_snk_config(struct device_node *np, struct tcpc_config > > +*tcfg) { > > + int ret; > > + > > + ret = of_property_read_variable_u32_array(np, "snk-pdos", > > + tcfg->snk_pdo, 1, PDO_MAX_OBJECTS); > > + if (ret > 0) > > + tcfg->nr_snk_pdo = ret; > > + else > > + return ret; > > + > > + ret = of_property_read_u32(np, "max-snk-microvolt", > &tcfg->max_snk_mv); > > + if (ret) > > + return ret; > > + > > + ret = of_property_read_u32(np, "max-snk-microamp", > &tcfg->max_snk_ma); > > + if (ret) > > + return ret; > > + > > + ret = of_property_read_u32(np, "max-snk-microwatt-hours", > > + &tcfg->max_snk_mw); > > + if (ret) > > + return ret; > > + > > + return of_property_read_u32(np, "op-snk-microwatt-hours", > > + &tcfg->operating_snk_mw); > > +} > > +EXPORT_SYMBOL_GPL(tcpm_of_get_pdos); > > + > > 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 > > ca1c0b5..962eff1 100644 > > --- a/include/linux/usb/tcpm.h > > +++ b/include/linux/usb/tcpm.h > > @@ -191,6 +191,8 @@ int tcpm_update_sink_capabilities(struct > tcpm_port *port, const u32 *pdo, > > unsigned int max_snk_ma, > > unsigned int max_snk_mw, > > unsigned int operating_snk_mw); > > +int tcpm_of_get_src_config(struct device_node *np, struct tcpc_config > > +*tcfg); int tcpm_of_get_snk_config(struct device_node *np, struct > > +tcpc_config *tcfg); > > > > void tcpm_vbus_change(struct tcpm_port *port); void > > tcpm_cc_change(struct tcpm_port *port); > > Thanks, > > -- > heikki ?韬{.n?????%??檩??w?{.n????z谵{???塄}?财??j:+v??????2??璀??摺?囤??z夸z罐?+?????w棹f