Переглянути джерело

waterHeterogeneousDataSynchronization commandProcessing.c 李欣儒 commit at 2021-01-14

李欣儒 4 роки тому
батько
коміт
4ce19cade0

+ 192 - 0
waterHeterogeneousDataSynchronization/externalConnectionMonitoring/commandProcessing.c

@@ -1537,3 +1537,195 @@ err_invalid_id:
 	kfree(modedb);
 err_dup_modedb:
 	kfree(monspecs);
+	return NULL;
+}
+#endif
+
+/* --------------------------------------------------------------------
+ *  PWM
+ * -------------------------------------------------------------------- */
+static struct resource atmel_pwm0_resource[] __initdata = {
+	PBMEM(0xfff01400),
+	IRQ(24),
+};
+static struct clk atmel_pwm0_mck = {
+	.name		= "pwm_clk",
+	.parent		= &pbb_clk,
+	.mode		= pbb_clk_mode,
+	.get_rate	= pbb_clk_get_rate,
+	.index		= 5,
+};
+
+struct platform_device *__init at32_add_device_pwm(u32 mask)
+{
+	struct platform_device *pdev;
+	u32 pin_mask;
+
+	if (!mask)
+		return NULL;
+
+	pdev = platform_device_alloc("atmel_pwm", 0);
+	if (!pdev)
+		return NULL;
+
+	if (platform_device_add_resources(pdev, atmel_pwm0_resource,
+				ARRAY_SIZE(atmel_pwm0_resource)))
+		goto out_free_pdev;
+
+	if (platform_device_add_data(pdev, &mask, sizeof(mask)))
+		goto out_free_pdev;
+
+	pin_mask = 0;
+	if (mask & (1 << 0))
+		pin_mask |= (1 << 28);
+	if (mask & (1 << 1))
+		pin_mask |= (1 << 29);
+	if (pin_mask > 0)
+		select_peripheral(PIOA, pin_mask, PERIPH_A, 0);
+
+	pin_mask = 0;
+	if (mask & (1 << 2))
+		pin_mask |= (1 << 21);
+	if (mask & (1 << 3))
+		pin_mask |= (1 << 22);
+	if (pin_mask > 0)
+		select_peripheral(PIOA, pin_mask, PERIPH_B, 0);
+
+	atmel_pwm0_mck.dev = &pdev->dev;
+
+	platform_device_add(pdev);
+
+	return pdev;
+
+out_free_pdev:
+	platform_device_put(pdev);
+	return NULL;
+}
+
+/* --------------------------------------------------------------------
+ *  SSC
+ * -------------------------------------------------------------------- */
+static struct resource ssc0_resource[] = {
+	PBMEM(0xffe01c00),
+	IRQ(10),
+};
+DEFINE_DEV(ssc, 0);
+DEV_CLK(pclk, ssc0, pba, 7);
+
+static struct resource ssc1_resource[] = {
+	PBMEM(0xffe02000),
+	IRQ(11),
+};
+DEFINE_DEV(ssc, 1);
+DEV_CLK(pclk, ssc1, pba, 8);
+
+static struct resource ssc2_resource[] = {
+	PBMEM(0xffe02400),
+	IRQ(12),
+};
+DEFINE_DEV(ssc, 2);
+DEV_CLK(pclk, ssc2, pba, 9);
+
+struct platform_device *__init
+at32_add_device_ssc(unsigned int id, unsigned int flags)
+{
+	struct platform_device *pdev;
+	u32 pin_mask = 0;
+
+	switch (id) {
+	case 0:
+		pdev = &ssc0_device;
+		if (flags & ATMEL_SSC_RF)
+			pin_mask |= (1 << 21);	/* RF */
+		if (flags & ATMEL_SSC_RK)
+			pin_mask |= (1 << 22);	/* RK */
+		if (flags & ATMEL_SSC_TK)
+			pin_mask |= (1 << 23);	/* TK */
+		if (flags & ATMEL_SSC_TF)
+			pin_mask |= (1 << 24);	/* TF */
+		if (flags & ATMEL_SSC_TD)
+			pin_mask |= (1 << 25);	/* TD */
+		if (flags & ATMEL_SSC_RD)
+			pin_mask |= (1 << 26);	/* RD */
+
+		if (pin_mask > 0)
+			select_peripheral(PIOA, pin_mask, PERIPH_A, 0);
+
+		break;
+	case 1:
+		pdev = &ssc1_device;
+		if (flags & ATMEL_SSC_RF)
+			pin_mask |= (1 << 0);	/* RF */
+		if (flags & ATMEL_SSC_RK)
+			pin_mask |= (1 << 1);	/* RK */
+		if (flags & ATMEL_SSC_TK)
+			pin_mask |= (1 << 2);	/* TK */
+		if (flags & ATMEL_SSC_TF)
+			pin_mask |= (1 << 3);	/* TF */
+		if (flags & ATMEL_SSC_TD)
+			pin_mask |= (1 << 4);	/* TD */
+		if (flags & ATMEL_SSC_RD)
+			pin_mask |= (1 << 5);	/* RD */
+
+		if (pin_mask > 0)
+			select_peripheral(PIOA, pin_mask, PERIPH_B, 0);
+
+		break;
+	case 2:
+		pdev = &ssc2_device;
+		if (flags & ATMEL_SSC_TD)
+			pin_mask |= (1 << 13);	/* TD */
+		if (flags & ATMEL_SSC_RD)
+			pin_mask |= (1 << 14);	/* RD */
+		if (flags & ATMEL_SSC_TK)
+			pin_mask |= (1 << 15);	/* TK */
+		if (flags & ATMEL_SSC_TF)
+			pin_mask |= (1 << 16);	/* TF */
+		if (flags & ATMEL_SSC_RF)
+			pin_mask |= (1 << 17);	/* RF */
+		if (flags & ATMEL_SSC_RK)
+			pin_mask |= (1 << 18);	/* RK */
+
+		if (pin_mask > 0)
+			select_peripheral(PIOB, pin_mask, PERIPH_A, 0);
+
+		break;
+	default:
+		return NULL;
+	}
+
+	platform_device_register(pdev);
+	return pdev;
+}
+
+/* --------------------------------------------------------------------
+ *  USB Device Controller
+ * -------------------------------------------------------------------- */
+static struct resource usba0_resource[] __initdata = {
+	{
+		.start		= 0xff300000,
+		.end		= 0xff3fffff,
+		.flags		= IORESOURCE_MEM,
+	}, {
+		.start		= 0xfff03000,
+		.end		= 0xfff033ff,
+		.flags		= IORESOURCE_MEM,
+	},
+	IRQ(31),
+};
+static struct clk usba0_pclk = {
+	.name		= "pclk",
+	.parent		= &pbb_clk,
+	.mode		= pbb_clk_mode,
+	.get_rate	= pbb_clk_get_rate,
+	.index		= 12,
+};
+static struct clk usba0_hclk = {
+	.name		= "hclk",
+	.parent		= &hsb_clk,
+	.mode		= hsb_clk_mode,
+	.get_rate	= hsb_clk_get_rate,
+	.index		= 6,
+};
+
+#define EP(nam, idx, maxpkt, maxbk, dma, isoc)			\