Module Name:    src
Committed By:   jmcneill
Date:           Sun Oct 12 14:06:18 UTC 2014

Modified Files:
        src/sys/arch/arm/allwinner: awin_intr.h awin_io.c awin_reg.h awin_twi.c

Log Message:
different twi pinsets and irqs for A31


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/allwinner/awin_intr.h
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/allwinner/awin_io.c
cvs rdiff -u -r1.30 -r1.31 src/sys/arch/arm/allwinner/awin_reg.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/allwinner/awin_twi.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/allwinner/awin_intr.h
diff -u src/sys/arch/arm/allwinner/awin_intr.h:1.5 src/sys/arch/arm/allwinner/awin_intr.h:1.6
--- src/sys/arch/arm/allwinner/awin_intr.h:1.5	Fri Oct 10 07:36:11 2014
+++ src/sys/arch/arm/allwinner/awin_intr.h	Sun Oct 12 14:06:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_intr.h,v 1.5 2014/10/10 07:36:11 jmcneill Exp $ */
+/* $NetBSD: awin_intr.h,v 1.6 2014/10/12 14:06:18 jmcneill Exp $ */
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -138,6 +138,15 @@
  * A31
  */
 #define AWIN_A31_IRQ_UART0	32
+#define AWIN_A31_IRQ_UART1	33
+#define AWIN_A31_IRQ_UART2	34
+#define AWIN_A31_IRQ_UART3	35
+#define AWIN_A31_IRQ_UART4	36
+#define AWIN_A31_IRQ_UART5	37
+#define AWIN_A31_IRQ_TWI0	38
+#define AWIN_A31_IRQ_TWI1	39
+#define AWIN_A31_IRQ_TWI2	40
+#define AWIN_A31_IRQ_TWI3	41
 #define AWIN_A31_IRQ_AC		61
 #define AWIN_A31_IRQ_DMA	82
 #define AWIN_A31_IRQ_SDMMC0	92

Index: src/sys/arch/arm/allwinner/awin_io.c
diff -u src/sys/arch/arm/allwinner/awin_io.c:1.17 src/sys/arch/arm/allwinner/awin_io.c:1.18
--- src/sys/arch/arm/allwinner/awin_io.c:1.17	Sat Oct 11 10:31:13 2014
+++ src/sys/arch/arm/allwinner/awin_io.c	Sun Oct 12 14:06:18 2014
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: awin_io.c,v 1.17 2014/10/11 10:31:13 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: awin_io.c,v 1.18 2014/10/12 14:06:18 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -122,16 +122,20 @@ static const struct awin_locators awin_l
 	{ "awinmmc", OFFANDSIZE(SDMMC1), 4, AWIN_IRQ_SDMMC1, A10|A20 },
 	{ "awinmmc", OFFANDSIZE(SDMMC0), 0, AWIN_A31_IRQ_SDMMC0, A31 },
 	{ "ahcisata", OFFANDSIZE(SATA), NOPORT, AWIN_IRQ_SATA, A10|A20 },
-	{ "awiniic", OFFANDSIZE(TWI0), 0, AWIN_IRQ_TWI0, AANY },
-	{ "awiniic", OFFANDSIZE(TWI1), 1, AWIN_IRQ_TWI1, AANY },
-	{ "awiniic", OFFANDSIZE(TWI2), 2, AWIN_IRQ_TWI2, AANY },
-	{ "awiniic", OFFANDSIZE(TWI3), 3, AWIN_IRQ_TWI3, AANY },
-	{ "awiniic", OFFANDSIZE(TWI4), 4, AWIN_IRQ_TWI4, AANY },
+	{ "awiniic", OFFANDSIZE(TWI0), 0, AWIN_IRQ_TWI0, A10|A20 },
+	{ "awiniic", OFFANDSIZE(TWI1), 1, AWIN_IRQ_TWI1, A10|A20 },
+	{ "awiniic", OFFANDSIZE(TWI2), 2, AWIN_IRQ_TWI2, A10|A20 },
+	{ "awiniic", OFFANDSIZE(TWI3), 3, AWIN_IRQ_TWI3, A10|A20 },
+	{ "awiniic", OFFANDSIZE(TWI4), 4, AWIN_IRQ_TWI4, A10|A20 },
+	{ "awiniic", OFFANDSIZE(TWI0), 0, AWIN_A31_IRQ_TWI0, A31 },
+	{ "awiniic", OFFANDSIZE(TWI1), 1, AWIN_A31_IRQ_TWI1, A31 },
+	{ "awiniic", OFFANDSIZE(TWI2), 2, AWIN_A31_IRQ_TWI2, A31 },
+	{ "awiniic", OFFANDSIZE(TWI3), 3, AWIN_A31_IRQ_TWI3, A31 },
 	{ "spi", OFFANDSIZE(SPI0), 0, AWIN_IRQ_SPI0, AANY },
 	{ "spi", OFFANDSIZE(SPI1), 1, AWIN_IRQ_SPI1, AANY },
 	{ "spi", OFFANDSIZE(SPI2), 1, AWIN_IRQ_SPI2, AANY },
 	{ "spi", OFFANDSIZE(SPI3), 3, AWIN_IRQ_SPI3, AANY },
-	{ "awe", OFFANDSIZE(EMAC), NOPORT, AWIN_IRQ_EMAC, AANY },
+	{ "awe", OFFANDSIZE(EMAC), NOPORT, AWIN_IRQ_EMAC, A10|A20 },
 	{ "awge", OFFANDSIZE(GMAC), NOPORT, AWIN_IRQ_GMAC, A20 },
 	{ "awge", OFFANDSIZE(GMAC), NOPORT, AWIN_A31_IRQ_GMAC, A31 },
 	{ "awincrypto", OFFANDSIZE(SS), NOPORT, AWIN_IRQ_SS, AANY },

Index: src/sys/arch/arm/allwinner/awin_reg.h
diff -u src/sys/arch/arm/allwinner/awin_reg.h:1.30 src/sys/arch/arm/allwinner/awin_reg.h:1.31
--- src/sys/arch/arm/allwinner/awin_reg.h:1.30	Sun Oct 12 13:07:45 2014
+++ src/sys/arch/arm/allwinner/awin_reg.h	Sun Oct 12 14:06:18 2014
@@ -1780,4 +1780,14 @@ struct awin_mmc_idma_descriptor {
 
 #define AWIN_A31_MMC_FIFO			0x0200
 
+#define AWIN_A31_PIO_PB_TWI3_FUNC	2
+#define AWIN_A31_PIO_PB_TWI3_PINS	0x00000060 /* PB pins 6-5 */
+
+#define AWIN_A31_PIO_PH_TWI0_FUNC	2
+#define AWIN_A31_PIO_PH_TWI0_PINS	0x0000c000 /* PH pins 15-14 */
+#define AWIN_A31_PIO_PH_TWI1_FUNC	2
+#define AWIN_A31_PIO_PH_TWI1_PINS	0x00030000 /* PH pins 17-16 */
+#define AWIN_A31_PIO_PH_TWI2_FUNC	2
+#define AWIN_A31_PIO_PH_TWI2_PINS	0x000c0000 /* PH pins 19-18 */
+
 #endif /* _ARM_ALLWINNER_AWIN_REG_H_ */

Index: src/sys/arch/arm/allwinner/awin_twi.c
diff -u src/sys/arch/arm/allwinner/awin_twi.c:1.3 src/sys/arch/arm/allwinner/awin_twi.c:1.4
--- src/sys/arch/arm/allwinner/awin_twi.c:1.3	Thu Feb 20 21:48:38 2014
+++ src/sys/arch/arm/allwinner/awin_twi.c	Sun Oct 12 14:06:18 2014
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: awin_twi.c,v 1.3 2014/02/20 21:48:38 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: awin_twi.c,v 1.4 2014/10/12 14:06:18 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -63,6 +63,13 @@ static const struct awin_gpio_pinset awi
 	[4] = { 'I', AWIN_PIO_PI_TWI4_FUNC, AWIN_PIO_PI_TWI4_PINS },
 };
 
+static const struct awin_gpio_pinset awin_twi_pinsets_a31[] = {
+	[0] = { 'H', AWIN_A31_PIO_PH_TWI0_FUNC, AWIN_A31_PIO_PH_TWI0_PINS },
+	[1] = { 'H', AWIN_A31_PIO_PH_TWI1_FUNC, AWIN_A31_PIO_PH_TWI1_PINS },
+	[2] = { 'H', AWIN_A31_PIO_PH_TWI2_FUNC, AWIN_A31_PIO_PH_TWI2_PINS },
+	[3] = { 'B', AWIN_A31_PIO_PB_TWI3_FUNC, AWIN_A31_PIO_PB_TWI3_PINS },
+};
+
 CFATTACH_DECL_NEW(awin_twi, sizeof(struct awin_twi_softc),
 	awin_twi_match, awin_twi_attach, NULL, NULL);
 
@@ -71,6 +78,7 @@ awin_twi_match(device_t parent, cfdata_t
 {
 	struct awinio_attach_args * const aio = aux;
 	const struct awin_locators * const loc = &aio->aio_loc;
+	unsigned int port = loc->loc_port;
 
 	KASSERT(!strcmp(cf->cf_name, loc->loc_name));
 	KASSERT(cf->cf_loc[AWINIOCF_PORT] == AWINIOCF_PORT_DEFAULT
@@ -84,8 +92,13 @@ awin_twi_match(device_t parent, cfdata_t
 	if (cf->cf_flags & 1)
 		return 0;
 
-	if (!awin_gpio_pinset_available(&awin_twi_pinsets[loc->loc_port]))
-		return 0;
+	if (awin_chip_id() == AWIN_CHIP_ID_A31) {
+		if (!awin_gpio_pinset_available(&awin_twi_pinsets_a31[port]))
+			return 0;
+	} else {
+		if (!awin_gpio_pinset_available(&awin_twi_pinsets[port]))
+			return 0;
+	}
 
 	return 1;
 }
@@ -103,7 +116,11 @@ awin_twi_attach(device_t parent, device_
 	/*
 	 * Acquite the PIO pins needed for the TWI port.
 	 */
-	awin_gpio_pinset_acquire(&awin_twi_pinsets[loc->loc_port]);
+	if (awin_chip_id() == AWIN_CHIP_ID_A31) {
+		awin_gpio_pinset_acquire(&awin_twi_pinsets_a31[loc->loc_port]);
+	} else {
+		awin_gpio_pinset_acquire(&awin_twi_pinsets[loc->loc_port]);
+	}
 
 	/*
 	 * Get a bus space handle for this TWI port.

Reply via email to