Hi Dmitry,
Thanks for the review!
On 9/19/24 1:56 AM, Dmitry Baryshkov wrote:
On Thu, Sep 19, 2024 at 12:51:14AM GMT, Amit Sunil Dhamne wrote:
Add support for DT time properties to allow users to define platform
specific timing deadlines of certain timers rather than using hardcoded
ones. For values that have not been explicitly defined in DT using this
property, default values will be set therefore, making this change
backward compatible.
Signed-off-by: Amit Sunil Dhamne <amitsd@xxxxxxxxxx>
---
drivers/usb/typec/tcpm/tcpm.c | 81 ++++++++++++++++++++++++++++-------
1 file changed, 65 insertions(+), 16 deletions(-)
@@ -7053,6 +7068,35 @@ static int tcpm_port_register_pd(struct tcpm_port *port)
return ret;
}
+static int tcpm_fw_get_timings(struct tcpm_port *port, struct fwnode_handle *fwnode)
+{
+ int ret;
+ u32 val;
+
+ if (!fwnode)
+ return -EINVAL;
I think this check isn't really necessary here. Other than that:
Acked-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx>
Will remove this check in next rev as suggested in
https://lore.kernel.org/all/Zuwn1Fn1DrLGvPK9@xxxxxxxxxxxxxxxxx/ .
Regards,
Amit
+
+ ret = fwnode_property_read_u32(fwnode, "sink-wait-cap-time-ms", &val);
+ if (!ret)
+ port->timings.sink_wait_cap_time = val;
+ else
+ port->timings.sink_wait_cap_time = PD_T_SINK_WAIT_CAP;
+
+ ret = fwnode_property_read_u32(fwnode, "ps-source-off-time-ms", &val);
+ if (!ret)
+ port->timings.ps_src_off_time = val;
+ else
+ port->timings.ps_src_off_time = PD_T_PS_SOURCE_OFF;
+
+ ret = fwnode_property_read_u32(fwnode, "cc-debounce-time-ms", &val);
+ if (!ret)
+ port->timings.cc_debounce_time = val;
+ else
+ port->timings.cc_debounce_time = PD_T_CC_DEBOUNCE;
+
+ return 0;
+}
+
static int tcpm_fw_get_caps(struct tcpm_port *port, struct fwnode_handle *fwnode)
{
struct fwnode_handle *capabilities, *child, *caps = NULL;
@@ -7608,9 +7652,14 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
init_completion(&port->pps_complete);
tcpm_debugfs_init(port);
+ err = tcpm_fw_get_timings(port, tcpc->fwnode);
+ if (err < 0)
+ goto out_destroy_wq;
+
err = tcpm_fw_get_caps(port, tcpc->fwnode);
if (err < 0)
goto out_destroy_wq;
+
err = tcpm_fw_get_snk_vdos(port, tcpc->fwnode);
if (err < 0)
goto out_destroy_wq;
--
2.46.0.792.g87dc391469-goog