can: dev: add can_tdc_get_relative_tdco() helper function
struct can_tdc::tdco represents the absolute offset from TDCV. Some controllers use instead an offset relative to the Sample Point (SP) such that: | SSP = TDCV + absolute TDCO | = TDCV + SP + relative TDCO Consequently: | relative TDCO = absolute TDCO - SP The function can_tdc_get_relative_tdco() allow to retrieve this relative TDCO value. Link: https://lore.kernel.org/all/20210918095637.20108-7-mailhol.vincent@wanadoo.fr CC: Stefan Mätje <Stefan.Maetje@esd.eu> Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
e8060f08cd
commit
fa759a9395
|
@ -102,6 +102,35 @@ static inline bool can_tdc_is_enabled(const struct can_priv *priv)
|
|||
return !!(priv->ctrlmode & CAN_CTRLMODE_TDC_MASK);
|
||||
}
|
||||
|
||||
/*
|
||||
* can_get_relative_tdco() - TDCO relative to the sample point
|
||||
*
|
||||
* struct can_tdc::tdco represents the absolute offset from TDCV. Some
|
||||
* controllers use instead an offset relative to the Sample Point (SP)
|
||||
* such that:
|
||||
*
|
||||
* SSP = TDCV + absolute TDCO
|
||||
* = TDCV + SP + relative TDCO
|
||||
*
|
||||
* -+----------- one bit ----------+-- TX pin
|
||||
* |<--- Sample Point --->|
|
||||
*
|
||||
* --+----------- one bit ----------+-- RX pin
|
||||
* |<-------- TDCV -------->|
|
||||
* |<------------------------>| absolute TDCO
|
||||
* |<--- Sample Point --->|
|
||||
* | |<->| relative TDCO
|
||||
* |<------------- Secondary Sample Point ------------>|
|
||||
*/
|
||||
static inline s32 can_get_relative_tdco(const struct can_priv *priv)
|
||||
{
|
||||
const struct can_bittiming *dbt = &priv->data_bittiming;
|
||||
s32 sample_point_in_tc = (CAN_SYNC_SEG + dbt->prop_seg +
|
||||
dbt->phase_seg1) * dbt->brp;
|
||||
|
||||
return (s32)priv->tdc.tdco - sample_point_in_tc;
|
||||
}
|
||||
|
||||
/* helper to define static CAN controller features at device creation time */
|
||||
static inline void can_set_static_ctrlmode(struct net_device *dev,
|
||||
u32 static_mode)
|
||||
|
|
Loading…
Reference in New Issue