Commit 06a104d5 authored by Jakub Kicinski's avatar Jakub Kicinski

Merge tag 'linux-can-next-for-6.12-20240911' of...

Merge tag 'linux-can-next-for-6.12-20240911' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next

Marc Kleine-Budde says:

====================
pull-request: can-next 2024-09-11

The first patch is by Uwe Kleine-König targets all CAN platform driver
and switches back the remove function to struct
platform_driver::remove().

A patch by Stefan Mätje fixes the help text of the ESD USB driver.

Jake Hamby's patch masks an unneeded interrupt in the m_can driver.

The last 2 patches target the rockchip_canfd driver. Arnd Bergmann's
patch reworks the delay calculation for the timekeeping worker, a
patch by me fixes the decoding of the error code register.

* tag 'linux-can-next-for-6.12-20240911' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next:
  can: rockchip_canfd: rkcanfd_handle_error_int_reg_ec(): fix decoding of error code register
  can: rockchip_canfd: rkcanfd_timestamp_init(): rework delay calculation
  can: m_can: m_can_chip_config(): mask timestamp wraparound IRQ
  can: usb: Kconfig: Fix list of devices for esd_usb driver
  can: Switch back to struct platform_driver::remove()
====================

Link: https://patch.msgid.link/20240912080438.2826895-1-mkl@pengutronix.deSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 37551b45 2b2a9a08
...@@ -1191,7 +1191,7 @@ MODULE_DEVICE_TABLE(platform, at91_can_id_table); ...@@ -1191,7 +1191,7 @@ MODULE_DEVICE_TABLE(platform, at91_can_id_table);
static struct platform_driver at91_can_driver = { static struct platform_driver at91_can_driver = {
.probe = at91_can_probe, .probe = at91_can_probe,
.remove_new = at91_can_remove, .remove = at91_can_remove,
.driver = { .driver = {
.name = KBUILD_MODNAME, .name = KBUILD_MODNAME,
.of_match_table = of_match_ptr(at91_can_dt_ids), .of_match_table = of_match_ptr(at91_can_dt_ids),
......
...@@ -1092,7 +1092,7 @@ static struct platform_driver bxcan_driver = { ...@@ -1092,7 +1092,7 @@ static struct platform_driver bxcan_driver = {
.of_match_table = bxcan_of_match, .of_match_table = bxcan_of_match,
}, },
.probe = bxcan_probe, .probe = bxcan_probe,
.remove_new = bxcan_remove, .remove = bxcan_remove,
}; };
module_platform_driver(bxcan_driver); module_platform_driver(bxcan_driver);
......
...@@ -476,7 +476,7 @@ static struct platform_driver c_can_plat_driver = { ...@@ -476,7 +476,7 @@ static struct platform_driver c_can_plat_driver = {
.of_match_table = c_can_of_table, .of_match_table = c_can_of_table,
}, },
.probe = c_can_plat_probe, .probe = c_can_plat_probe,
.remove_new = c_can_plat_remove, .remove = c_can_plat_remove,
.suspend = c_can_suspend, .suspend = c_can_suspend,
.resume = c_can_resume, .resume = c_can_resume,
.id_table = c_can_id_table, .id_table = c_can_id_table,
......
...@@ -307,7 +307,7 @@ static void cc770_isa_remove(struct platform_device *pdev) ...@@ -307,7 +307,7 @@ static void cc770_isa_remove(struct platform_device *pdev)
static struct platform_driver cc770_isa_driver = { static struct platform_driver cc770_isa_driver = {
.probe = cc770_isa_probe, .probe = cc770_isa_probe,
.remove_new = cc770_isa_remove, .remove = cc770_isa_remove,
.driver = { .driver = {
.name = KBUILD_MODNAME, .name = KBUILD_MODNAME,
}, },
......
...@@ -247,7 +247,7 @@ static struct platform_driver cc770_platform_driver = { ...@@ -247,7 +247,7 @@ static struct platform_driver cc770_platform_driver = {
.of_match_table = cc770_platform_table, .of_match_table = cc770_platform_table,
}, },
.probe = cc770_platform_probe, .probe = cc770_platform_probe,
.remove_new = cc770_platform_remove, .remove = cc770_platform_remove,
}; };
module_platform_driver(cc770_platform_driver); module_platform_driver(cc770_platform_driver);
...@@ -111,7 +111,7 @@ MODULE_DEVICE_TABLE(of, ctucan_of_match); ...@@ -111,7 +111,7 @@ MODULE_DEVICE_TABLE(of, ctucan_of_match);
static struct platform_driver ctucanfd_driver = { static struct platform_driver ctucanfd_driver = {
.probe = ctucan_platform_probe, .probe = ctucan_platform_probe,
.remove_new = ctucan_platform_remove, .remove = ctucan_platform_remove,
.driver = { .driver = {
.name = DRV_NAME, .name = DRV_NAME,
.pm = &ctucan_platform_pm_ops, .pm = &ctucan_platform_pm_ops,
......
...@@ -2385,7 +2385,7 @@ static struct platform_driver flexcan_driver = { ...@@ -2385,7 +2385,7 @@ static struct platform_driver flexcan_driver = {
.of_match_table = flexcan_of_match, .of_match_table = flexcan_of_match,
}, },
.probe = flexcan_probe, .probe = flexcan_probe,
.remove_new = flexcan_remove, .remove = flexcan_remove,
.id_table = flexcan_id_table, .id_table = flexcan_id_table,
}; };
......
...@@ -1725,7 +1725,7 @@ static struct platform_driver grcan_driver = { ...@@ -1725,7 +1725,7 @@ static struct platform_driver grcan_driver = {
.of_match_table = grcan_match, .of_match_table = grcan_match,
}, },
.probe = grcan_probe, .probe = grcan_probe,
.remove_new = grcan_remove, .remove = grcan_remove,
}; };
module_platform_driver(grcan_driver); module_platform_driver(grcan_driver);
......
...@@ -1033,7 +1033,7 @@ static struct platform_driver ifi_canfd_plat_driver = { ...@@ -1033,7 +1033,7 @@ static struct platform_driver ifi_canfd_plat_driver = {
.of_match_table = ifi_canfd_of_table, .of_match_table = ifi_canfd_of_table,
}, },
.probe = ifi_canfd_plat_probe, .probe = ifi_canfd_plat_probe,
.remove_new = ifi_canfd_plat_remove, .remove = ifi_canfd_plat_remove,
}; };
module_platform_driver(ifi_canfd_plat_driver); module_platform_driver(ifi_canfd_plat_driver);
......
...@@ -2049,7 +2049,7 @@ static struct platform_driver ican3_driver = { ...@@ -2049,7 +2049,7 @@ static struct platform_driver ican3_driver = {
.name = DRV_NAME, .name = DRV_NAME,
}, },
.probe = ican3_probe, .probe = ican3_probe,
.remove_new = ican3_remove, .remove = ican3_remove,
}; };
module_platform_driver(ican3_driver); module_platform_driver(ican3_driver);
......
...@@ -1434,7 +1434,8 @@ static int m_can_chip_config(struct net_device *dev) ...@@ -1434,7 +1434,8 @@ static int m_can_chip_config(struct net_device *dev)
/* Disable unused interrupts */ /* Disable unused interrupts */
interrupts &= ~(IR_ARA | IR_ELO | IR_DRX | IR_TEFF | IR_TFE | IR_TCF | interrupts &= ~(IR_ARA | IR_ELO | IR_DRX | IR_TEFF | IR_TFE | IR_TCF |
IR_HPM | IR_RF1F | IR_RF1W | IR_RF1N | IR_RF0F); IR_HPM | IR_RF1F | IR_RF1W | IR_RF1N | IR_RF0F |
IR_TSW);
err = m_can_config_enable(cdev); err = m_can_config_enable(cdev);
if (err) if (err)
......
...@@ -231,7 +231,7 @@ static struct platform_driver m_can_plat_driver = { ...@@ -231,7 +231,7 @@ static struct platform_driver m_can_plat_driver = {
.pm = &m_can_pmops, .pm = &m_can_pmops,
}, },
.probe = m_can_plat_probe, .probe = m_can_plat_probe,
.remove_new = m_can_plat_remove, .remove = m_can_plat_remove,
}; };
module_platform_driver(m_can_plat_driver); module_platform_driver(m_can_plat_driver);
......
...@@ -435,7 +435,7 @@ static struct platform_driver mpc5xxx_can_driver = { ...@@ -435,7 +435,7 @@ static struct platform_driver mpc5xxx_can_driver = {
.of_match_table = mpc5xxx_can_table, .of_match_table = mpc5xxx_can_table,
}, },
.probe = mpc5xxx_can_probe, .probe = mpc5xxx_can_probe,
.remove_new = mpc5xxx_can_remove, .remove = mpc5xxx_can_remove,
#ifdef CONFIG_PM #ifdef CONFIG_PM
.suspend = mpc5xxx_can_suspend, .suspend = mpc5xxx_can_suspend,
.resume = mpc5xxx_can_resume, .resume = mpc5xxx_can_resume,
......
...@@ -907,7 +907,7 @@ static struct platform_driver rcar_can_driver = { ...@@ -907,7 +907,7 @@ static struct platform_driver rcar_can_driver = {
.pm = &rcar_can_pm_ops, .pm = &rcar_can_pm_ops,
}, },
.probe = rcar_can_probe, .probe = rcar_can_probe,
.remove_new = rcar_can_remove, .remove = rcar_can_remove,
}; };
module_platform_driver(rcar_can_driver); module_platform_driver(rcar_can_driver);
......
...@@ -2118,7 +2118,7 @@ static struct platform_driver rcar_canfd_driver = { ...@@ -2118,7 +2118,7 @@ static struct platform_driver rcar_canfd_driver = {
.pm = &rcar_canfd_pm_ops, .pm = &rcar_canfd_pm_ops,
}, },
.probe = rcar_canfd_probe, .probe = rcar_canfd_probe,
.remove_new = rcar_canfd_remove, .remove = rcar_canfd_remove,
}; };
module_platform_driver(rcar_canfd_driver); module_platform_driver(rcar_canfd_driver);
......
...@@ -491,11 +491,9 @@ rkcanfd_handle_error_int_reg_ec(struct rkcanfd_priv *priv, struct can_frame *cf, ...@@ -491,11 +491,9 @@ rkcanfd_handle_error_int_reg_ec(struct rkcanfd_priv *priv, struct can_frame *cf,
else if (reg_ec & RKCANFD_REG_ERROR_CODE_TX_CRC) else if (reg_ec & RKCANFD_REG_ERROR_CODE_TX_CRC)
cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ; cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
else if (reg_ec & RKCANFD_REG_ERROR_CODE_TX_ACK_EOF) else if (reg_ec & RKCANFD_REG_ERROR_CODE_TX_ACK_EOF)
cf->data[3] = CAN_ERR_PROT_LOC_ACK; cf->data[3] = CAN_ERR_PROT_LOC_ACK_DEL;
else if (reg_ec & RKCANFD_REG_ERROR_CODE_TX_ACK) else if (reg_ec & RKCANFD_REG_ERROR_CODE_TX_ACK)
cf->data[3] = CAN_ERR_PROT_LOC_ACK; cf->data[3] = CAN_ERR_PROT_LOC_ACK;
else if (reg_ec & RKCANFD_REG_ERROR_CODE_TX_ACK_EOF)
cf->data[3] = CAN_ERR_PROT_LOC_ACK_DEL;
/* RKCANFD_REG_ERROR_CODE_TX_ERROR */ /* RKCANFD_REG_ERROR_CODE_TX_ERROR */
else if (reg_ec & RKCANFD_REG_ERROR_CODE_TX_OVERLOAD) else if (reg_ec & RKCANFD_REG_ERROR_CODE_TX_OVERLOAD)
cf->data[2] |= CAN_ERR_PROT_OVERLOAD; cf->data[2] |= CAN_ERR_PROT_OVERLOAD;
......
...@@ -71,8 +71,8 @@ void rkcanfd_timestamp_init(struct rkcanfd_priv *priv) ...@@ -71,8 +71,8 @@ void rkcanfd_timestamp_init(struct rkcanfd_priv *priv)
max_cycles = div_u64(ULLONG_MAX, cc->mult); max_cycles = div_u64(ULLONG_MAX, cc->mult);
max_cycles = min(max_cycles, cc->mask); max_cycles = min(max_cycles, cc->mask);
work_delay_ns = div_u64(clocksource_cyc2ns(max_cycles, cc->mult, cc->shift), 3); work_delay_ns = clocksource_cyc2ns(max_cycles, cc->mult, cc->shift);
priv->work_delay_jiffies = nsecs_to_jiffies(work_delay_ns); priv->work_delay_jiffies = div_u64(work_delay_ns, 3u * NSEC_PER_SEC / HZ);
INIT_DELAYED_WORK(&priv->timestamp, rkcanfd_timestamp_work); INIT_DELAYED_WORK(&priv->timestamp, rkcanfd_timestamp_work);
netdev_dbg(priv->ndev, "clock=%lu.%02luMHz bitrate=%lu.%02luMBit/s div=%u rate=%lu.%02luMHz mult=%u shift=%u delay=%lus\n", netdev_dbg(priv->ndev, "clock=%lu.%02luMHz bitrate=%lu.%02luMBit/s div=%u rate=%lu.%02luMHz mult=%u shift=%u delay=%lus\n",
......
...@@ -245,7 +245,7 @@ static void sja1000_isa_remove(struct platform_device *pdev) ...@@ -245,7 +245,7 @@ static void sja1000_isa_remove(struct platform_device *pdev)
static struct platform_driver sja1000_isa_driver = { static struct platform_driver sja1000_isa_driver = {
.probe = sja1000_isa_probe, .probe = sja1000_isa_probe,
.remove_new = sja1000_isa_remove, .remove = sja1000_isa_remove,
.driver = { .driver = {
.name = DRV_NAME, .name = DRV_NAME,
}, },
......
...@@ -329,7 +329,7 @@ static void sp_remove(struct platform_device *pdev) ...@@ -329,7 +329,7 @@ static void sp_remove(struct platform_device *pdev)
static struct platform_driver sp_driver = { static struct platform_driver sp_driver = {
.probe = sp_probe, .probe = sp_probe,
.remove_new = sp_remove, .remove = sp_remove,
.driver = { .driver = {
.name = DRV_NAME, .name = DRV_NAME,
.of_match_table = sp_of_table, .of_match_table = sp_of_table,
......
...@@ -854,7 +854,7 @@ static struct platform_driver softing_driver = { ...@@ -854,7 +854,7 @@ static struct platform_driver softing_driver = {
.name = KBUILD_MODNAME, .name = KBUILD_MODNAME,
}, },
.probe = softing_pdev_probe, .probe = softing_pdev_probe,
.remove_new = softing_pdev_remove, .remove = softing_pdev_remove,
}; };
module_platform_driver(softing_driver); module_platform_driver(softing_driver);
......
...@@ -914,7 +914,7 @@ static struct platform_driver sun4i_can_driver = { ...@@ -914,7 +914,7 @@ static struct platform_driver sun4i_can_driver = {
.of_match_table = sun4ican_of_match, .of_match_table = sun4ican_of_match,
}, },
.probe = sun4ican_probe, .probe = sun4ican_probe,
.remove_new = sun4ican_remove, .remove = sun4ican_remove,
}; };
module_platform_driver(sun4i_can_driver); module_platform_driver(sun4i_can_driver);
......
...@@ -1025,7 +1025,7 @@ static struct platform_driver ti_hecc_driver = { ...@@ -1025,7 +1025,7 @@ static struct platform_driver ti_hecc_driver = {
.of_match_table = ti_hecc_dt_ids, .of_match_table = ti_hecc_dt_ids,
}, },
.probe = ti_hecc_probe, .probe = ti_hecc_probe,
.remove_new = ti_hecc_remove, .remove = ti_hecc_remove,
.suspend = ti_hecc_suspend, .suspend = ti_hecc_suspend,
.resume = ti_hecc_resume, .resume = ti_hecc_resume,
}; };
......
...@@ -17,11 +17,12 @@ config CAN_EMS_USB ...@@ -17,11 +17,12 @@ config CAN_EMS_USB
config CAN_ESD_USB config CAN_ESD_USB
tristate "esd electronics gmbh CAN/USB interfaces" tristate "esd electronics gmbh CAN/USB interfaces"
help help
This driver adds supports for several CAN/USB interfaces This driver adds support for several CAN/USB interfaces
from esd electronics gmbh (https://www.esd.eu). from esd electronics gmbh (https://www.esd.eu).
The drivers supports the following devices: The drivers supports the following devices:
- esd CAN-USB/2 - esd CAN-USB/2
- esd CAN-USB/3-FD
- esd CAN-USB/Micro - esd CAN-USB/Micro
To compile this driver as a module, choose M here: the module To compile this driver as a module, choose M here: the module
......
...@@ -2103,7 +2103,7 @@ static void xcan_remove(struct platform_device *pdev) ...@@ -2103,7 +2103,7 @@ static void xcan_remove(struct platform_device *pdev)
static struct platform_driver xcan_driver = { static struct platform_driver xcan_driver = {
.probe = xcan_probe, .probe = xcan_probe,
.remove_new = xcan_remove, .remove = xcan_remove,
.driver = { .driver = {
.name = DRIVER_NAME, .name = DRIVER_NAME,
.pm = &xcan_dev_pm_ops, .pm = &xcan_dev_pm_ops,
......
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