Commit 8115240c authored by Badhri Jagan Sridharan's avatar Badhri Jagan Sridharan Committed by Greg Kroah-Hartman

usb: typec: tcpm: Refactor logic for new-source-frs-typec-current

New source's current capability is now defined as string based
device tree property through new-source-frs-typec-current.
Refactor tcpm code to parse new-source-frs-typec-current and
infer local port's new source current capability during frs.
Signed-off-by: default avatarBadhri Jagan Sridharan <badhri@google.com>
Link: https://lore.kernel.org/r/20201029063138.1429760-4-badhri@google.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a0ccdc4a
......@@ -363,8 +363,8 @@ struct tcpm_port {
/* port belongs to a self powered device */
bool self_powered;
/* FRS */
enum frs_typec_current frs_current;
/* Sink FRS */
enum frs_typec_current new_source_frs_current;
/* Sink caps have been queried */
bool sink_cap_done;
......@@ -1713,7 +1713,7 @@ static void tcpm_pd_data_request(struct tcpm_port *port,
unsigned int cnt = pd_header_cnt_le(msg->header);
unsigned int rev = pd_header_rev_le(msg->header);
unsigned int i;
enum frs_typec_current frs_current;
enum frs_typec_current partner_frs_current;
bool frs_enable;
int ret;
......@@ -1786,12 +1786,13 @@ static void tcpm_pd_data_request(struct tcpm_port *port,
for (i = 0; i < cnt; i++)
port->sink_caps[i] = le32_to_cpu(msg->payload[i]);
frs_current = (port->sink_caps[0] & PDO_FIXED_FRS_CURR_MASK) >>
partner_frs_current = (port->sink_caps[0] & PDO_FIXED_FRS_CURR_MASK) >>
PDO_FIXED_FRS_CURR_SHIFT;
frs_enable = frs_current && (frs_current <= port->frs_current);
frs_enable = partner_frs_current && (partner_frs_current <=
port->new_source_frs_current);
tcpm_log(port,
"Port partner FRS capable partner_frs_current:%u port_frs_current:%u enable:%c",
frs_current, port->frs_current, frs_enable ? 'y' : 'n');
partner_frs_current, port->new_source_frs_current, frs_enable ? 'y' : 'n');
if (frs_enable) {
ret = port->tcpc->enable_frs(port->tcpc, true);
tcpm_log(port, "Enable FRS %s, ret:%d\n", ret ? "fail" : "success", ret);
......@@ -4808,9 +4809,10 @@ static int tcpm_fw_get_caps(struct tcpm_port *port,
/* FRS can only be supported byb DRP ports */
if (port->port_type == TYPEC_PORT_DRP) {
ret = fwnode_property_read_u32(fwnode, "frs-typec-current", &frs_current);
ret = fwnode_property_read_u32(fwnode, "new-source-frs-typec-current",
&frs_current);
if (ret >= 0 && frs_current <= FRS_5V_3A)
port->frs_current = frs_current;
port->new_source_frs_current = frs_current;
}
return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment