EBADMSG error for new 8.6.0 peak driver
Posted: Tue 25. Sep 2018, 10:36
Our code for J1939 device via can interface became broken after library update from 8.5.1 to 8.6.0.
In particular, procedure pcanfd_send_msg from driver code
was in 8.5.1:
now in 8.6.0:
Before code for PCANFD_TYPE_CANFD_MSG type and missing PCANFD_INIT_FD in dev->init_settings.flags and len <= 8 worked well as it processed by 'case PCANFD_TYPE_CAN20_MSG'. Now it doesn't work anymore as it explicitly returned in 'case PCANFD_TYPE_CANFD_MSG'. how should we fix it? Should we have PCANFD_INIT_FD flag set all time?
In particular, procedure pcanfd_send_msg from driver code
was in 8.5.1:
Code: Select all
switch (pf->type) {
case PCANFD_TYPE_CANFD_MSG:
/* accept such messages for CAN-FD capable devices only */
if ((dev->init_settings.flags & PCANFD_INIT_FD) &&
(pf->data_len <= PCANFD_MAXDATALEN))
break;
case PCANFD_TYPE_CAN20_MSG:
if (pf->data_len <= 8)
break;
default:
pr_err(DEVICE_NAME
": trying to send invalid msg (type=%xh len=%d)\n",
pf->type, pf->data_len);
return -EBADMSG;
}
Code: Select all
switch (ptx->msg.type) {
case PCANFD_TYPE_CANFD_MSG:
/* accept such messages for CAN-FD capable devices only */
if ((dev->init_settings.flags & PCANFD_INIT_FD) &&
(ptx->msg.data_len <= PCANFD_MAXDATALEN))
break;
pr_err(DEVICE_NAME
": trying to send invalid CAN FD msg (len=%d)\n",
ptx->msg.data_len);
return -EBADMSG;
case PCANFD_TYPE_CAN20_MSG:
if (ptx->msg.data_len <= PCAN_MAXDATALEN)
break;
default:
pr_err(DEVICE_NAME
": trying to send invalid msg (type=%xh len=%d)\n",
ptx->msg.type, ptx->msg.data_len);
return -EBADMSG;
}