can: sun4i_can: Add support for the Allwinner D1
[ Upstream commit 8abb95250ae6af2d51993da8fcae18da2ce24cc4 ] The controllers present in the D1 are extremely similar to the R40 and require the same reset quirks, but An extra quirk is needed to support receiving packets. Signed-off-by: John Watts <contact@jookia.org> Link: https://lore.kernel.org/all/20230721221552.1973203-6-contact@jookia.org Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
4eb79abf91
commit
ab0ae0af0a
@ -174,10 +174,10 @@ config CAN_SLCAN
|
||||
|
||||
config CAN_SUN4I
|
||||
tristate "Allwinner A10 CAN controller"
|
||||
depends on MACH_SUN4I || MACH_SUN7I || COMPILE_TEST
|
||||
depends on MACH_SUN4I || MACH_SUN7I || RISCV || COMPILE_TEST
|
||||
help
|
||||
Say Y here if you want to use CAN controller found on Allwinner
|
||||
A10/A20 SoCs.
|
||||
A10/A20/D1 SoCs.
|
||||
|
||||
To compile this driver as a module, choose M here: the module will
|
||||
be called sun4i_can.
|
||||
|
@ -91,6 +91,8 @@
|
||||
#define SUN4I_REG_BUF12_ADDR 0x0070 /* CAN Tx/Rx Buffer 12 */
|
||||
#define SUN4I_REG_ACPC_ADDR 0x0040 /* CAN Acceptance Code 0 */
|
||||
#define SUN4I_REG_ACPM_ADDR 0x0044 /* CAN Acceptance Mask 0 */
|
||||
#define SUN4I_REG_ACPC_ADDR_D1 0x0028 /* CAN Acceptance Code 0 on the D1 */
|
||||
#define SUN4I_REG_ACPM_ADDR_D1 0x002C /* CAN Acceptance Mask 0 on the D1 */
|
||||
#define SUN4I_REG_RBUF_RBACK_START_ADDR 0x0180 /* CAN transmit buffer start */
|
||||
#define SUN4I_REG_RBUF_RBACK_END_ADDR 0x01b0 /* CAN transmit buffer end */
|
||||
|
||||
@ -779,6 +781,11 @@ static const struct sun4ican_quirks sun4ican_quirks_r40 = {
|
||||
.acp_offset = 0,
|
||||
};
|
||||
|
||||
static const struct sun4ican_quirks sun4ican_quirks_d1 = {
|
||||
.has_reset = true,
|
||||
.acp_offset = (SUN4I_REG_ACPC_ADDR_D1 - SUN4I_REG_ACPC_ADDR),
|
||||
};
|
||||
|
||||
static const struct of_device_id sun4ican_of_match[] = {
|
||||
{
|
||||
.compatible = "allwinner,sun4i-a10-can",
|
||||
@ -789,6 +796,9 @@ static const struct of_device_id sun4ican_of_match[] = {
|
||||
}, {
|
||||
.compatible = "allwinner,sun8i-r40-can",
|
||||
.data = &sun4ican_quirks_r40
|
||||
}, {
|
||||
.compatible = "allwinner,sun20i-d1-can",
|
||||
.data = &sun4ican_quirks_d1
|
||||
}, {
|
||||
/* sentinel */
|
||||
},
|
||||
@ -915,4 +925,4 @@ module_platform_driver(sun4i_can_driver);
|
||||
MODULE_AUTHOR("Peter Chen <xingkongcp@gmail.com>");
|
||||
MODULE_AUTHOR("Gerhard Bertelsmann <info@gerhard-bertelsmann.de>");
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
MODULE_DESCRIPTION("CAN driver for Allwinner SoCs (A10/A20)");
|
||||
MODULE_DESCRIPTION("CAN driver for Allwinner SoCs (A10/A20/D1)");
|
||||
|
Loading…
Reference in New Issue
Block a user