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
|
config CAN_SUN4I
|
||||||
tristate "Allwinner A10 CAN controller"
|
tristate "Allwinner A10 CAN controller"
|
||||||
depends on MACH_SUN4I || MACH_SUN7I || COMPILE_TEST
|
depends on MACH_SUN4I || MACH_SUN7I || RISCV || COMPILE_TEST
|
||||||
help
|
help
|
||||||
Say Y here if you want to use CAN controller found on Allwinner
|
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
|
To compile this driver as a module, choose M here: the module will
|
||||||
be called sun4i_can.
|
be called sun4i_can.
|
||||||
|
@ -91,6 +91,8 @@
|
|||||||
#define SUN4I_REG_BUF12_ADDR 0x0070 /* CAN Tx/Rx Buffer 12 */
|
#define SUN4I_REG_BUF12_ADDR 0x0070 /* CAN Tx/Rx Buffer 12 */
|
||||||
#define SUN4I_REG_ACPC_ADDR 0x0040 /* CAN Acceptance Code 0 */
|
#define SUN4I_REG_ACPC_ADDR 0x0040 /* CAN Acceptance Code 0 */
|
||||||
#define SUN4I_REG_ACPM_ADDR 0x0044 /* CAN Acceptance Mask 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_START_ADDR 0x0180 /* CAN transmit buffer start */
|
||||||
#define SUN4I_REG_RBUF_RBACK_END_ADDR 0x01b0 /* CAN transmit buffer end */
|
#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,
|
.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[] = {
|
static const struct of_device_id sun4ican_of_match[] = {
|
||||||
{
|
{
|
||||||
.compatible = "allwinner,sun4i-a10-can",
|
.compatible = "allwinner,sun4i-a10-can",
|
||||||
@ -789,6 +796,9 @@ static const struct of_device_id sun4ican_of_match[] = {
|
|||||||
}, {
|
}, {
|
||||||
.compatible = "allwinner,sun8i-r40-can",
|
.compatible = "allwinner,sun8i-r40-can",
|
||||||
.data = &sun4ican_quirks_r40
|
.data = &sun4ican_quirks_r40
|
||||||
|
}, {
|
||||||
|
.compatible = "allwinner,sun20i-d1-can",
|
||||||
|
.data = &sun4ican_quirks_d1
|
||||||
}, {
|
}, {
|
||||||
/* sentinel */
|
/* sentinel */
|
||||||
},
|
},
|
||||||
@ -915,4 +925,4 @@ module_platform_driver(sun4i_can_driver);
|
|||||||
MODULE_AUTHOR("Peter Chen <xingkongcp@gmail.com>");
|
MODULE_AUTHOR("Peter Chen <xingkongcp@gmail.com>");
|
||||||
MODULE_AUTHOR("Gerhard Bertelsmann <info@gerhard-bertelsmann.de>");
|
MODULE_AUTHOR("Gerhard Bertelsmann <info@gerhard-bertelsmann.de>");
|
||||||
MODULE_LICENSE("Dual BSD/GPL");
|
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