Commit 8abb9525 authored by John Watts's avatar John Watts Committed by Marc Kleine-Budde
Browse files

can: sun4i_can: Add support for the Allwinner D1



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: default avatarJohn Watts <contact@jookia.org>
Link: https://lore.kernel.org/all/20230721221552.1973203-6-contact@jookia.org


Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
parent 8cda0c6d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -190,10 +190,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.
+11 −1
Original line number Diff line number Diff line
@@ -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 */
	},
@@ -913,4 +923,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)");