|
@@ -727,3 +727,166 @@ static struct clk pico_clk = {
|
|
|
.name = "pico",
|
|
|
.parent = &cpu_clk,
|
|
|
.mode = cpu_clk_mode,
|
|
|
+ .get_rate = cpu_clk_get_rate,
|
|
|
+ .users = 1,
|
|
|
+};
|
|
|
+
|
|
|
+/* --------------------------------------------------------------------
|
|
|
+ * HMATRIX
|
|
|
+ * -------------------------------------------------------------------- */
|
|
|
+
|
|
|
+struct clk at32_hmatrix_clk = {
|
|
|
+ .name = "hmatrix_clk",
|
|
|
+ .parent = &pbb_clk,
|
|
|
+ .mode = pbb_clk_mode,
|
|
|
+ .get_rate = pbb_clk_get_rate,
|
|
|
+ .index = 2,
|
|
|
+ .users = 1,
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * Set bits in the HMATRIX Special Function Register (SFR) used by the
|
|
|
+ * External Bus Interface (EBI). This can be used to enable special
|
|
|
+ * features like CompactFlash support, NAND Flash support, etc. on
|
|
|
+ * certain chipselects.
|
|
|
+ */
|
|
|
+static inline void set_ebi_sfr_bits(u32 mask)
|
|
|
+{
|
|
|
+ hmatrix_sfr_set_bits(HMATRIX_SLAVE_EBI, mask);
|
|
|
+}
|
|
|
+
|
|
|
+/* --------------------------------------------------------------------
|
|
|
+ * Timer/Counter (TC)
|
|
|
+ * -------------------------------------------------------------------- */
|
|
|
+
|
|
|
+static struct resource at32_tcb0_resource[] = {
|
|
|
+ PBMEM(0xfff00c00),
|
|
|
+ IRQ(22),
|
|
|
+};
|
|
|
+static struct platform_device at32_tcb0_device = {
|
|
|
+ .name = "atmel_tcb",
|
|
|
+ .id = 0,
|
|
|
+ .resource = at32_tcb0_resource,
|
|
|
+ .num_resources = ARRAY_SIZE(at32_tcb0_resource),
|
|
|
+};
|
|
|
+DEV_CLK(t0_clk, at32_tcb0, pbb, 3);
|
|
|
+
|
|
|
+static struct resource at32_tcb1_resource[] = {
|
|
|
+ PBMEM(0xfff01000),
|
|
|
+ IRQ(23),
|
|
|
+};
|
|
|
+static struct platform_device at32_tcb1_device = {
|
|
|
+ .name = "atmel_tcb",
|
|
|
+ .id = 1,
|
|
|
+ .resource = at32_tcb1_resource,
|
|
|
+ .num_resources = ARRAY_SIZE(at32_tcb1_resource),
|
|
|
+};
|
|
|
+DEV_CLK(t0_clk, at32_tcb1, pbb, 4);
|
|
|
+
|
|
|
+/* --------------------------------------------------------------------
|
|
|
+ * PIO
|
|
|
+ * -------------------------------------------------------------------- */
|
|
|
+
|
|
|
+static struct resource pio0_resource[] = {
|
|
|
+ PBMEM(0xffe02800),
|
|
|
+ IRQ(13),
|
|
|
+};
|
|
|
+DEFINE_DEV(pio, 0);
|
|
|
+DEV_CLK(mck, pio0, pba, 10);
|
|
|
+
|
|
|
+static struct resource pio1_resource[] = {
|
|
|
+ PBMEM(0xffe02c00),
|
|
|
+ IRQ(14),
|
|
|
+};
|
|
|
+DEFINE_DEV(pio, 1);
|
|
|
+DEV_CLK(mck, pio1, pba, 11);
|
|
|
+
|
|
|
+static struct resource pio2_resource[] = {
|
|
|
+ PBMEM(0xffe03000),
|
|
|
+ IRQ(15),
|
|
|
+};
|
|
|
+DEFINE_DEV(pio, 2);
|
|
|
+DEV_CLK(mck, pio2, pba, 12);
|
|
|
+
|
|
|
+static struct resource pio3_resource[] = {
|
|
|
+ PBMEM(0xffe03400),
|
|
|
+ IRQ(16),
|
|
|
+};
|
|
|
+DEFINE_DEV(pio, 3);
|
|
|
+DEV_CLK(mck, pio3, pba, 13);
|
|
|
+
|
|
|
+static struct resource pio4_resource[] = {
|
|
|
+ PBMEM(0xffe03800),
|
|
|
+ IRQ(17),
|
|
|
+};
|
|
|
+DEFINE_DEV(pio, 4);
|
|
|
+DEV_CLK(mck, pio4, pba, 14);
|
|
|
+
|
|
|
+static int __init system_device_init(void)
|
|
|
+{
|
|
|
+ platform_device_register(&at32_pm0_device);
|
|
|
+ platform_device_register(&at32_intc0_device);
|
|
|
+ platform_device_register(&at32ap700x_rtc0_device);
|
|
|
+ platform_device_register(&at32_wdt0_device);
|
|
|
+ platform_device_register(&at32_eic0_device);
|
|
|
+ platform_device_register(&smc0_device);
|
|
|
+ platform_device_register(&pdc_device);
|
|
|
+ platform_device_register(&dw_dmac0_device);
|
|
|
+
|
|
|
+ platform_device_register(&at32_tcb0_device);
|
|
|
+ platform_device_register(&at32_tcb1_device);
|
|
|
+
|
|
|
+ platform_device_register(&pio0_device);
|
|
|
+ platform_device_register(&pio1_device);
|
|
|
+ platform_device_register(&pio2_device);
|
|
|
+ platform_device_register(&pio3_device);
|
|
|
+ platform_device_register(&pio4_device);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+core_initcall(system_device_init);
|
|
|
+
|
|
|
+/* --------------------------------------------------------------------
|
|
|
+ * PSIF
|
|
|
+ * -------------------------------------------------------------------- */
|
|
|
+static struct resource atmel_psif0_resource[] __initdata = {
|
|
|
+ {
|
|
|
+ .start = 0xffe03c00,
|
|
|
+ .end = 0xffe03cff,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ IRQ(18),
|
|
|
+};
|
|
|
+static struct clk atmel_psif0_pclk = {
|
|
|
+ .name = "pclk",
|
|
|
+ .parent = &pba_clk,
|
|
|
+ .mode = pba_clk_mode,
|
|
|
+ .get_rate = pba_clk_get_rate,
|
|
|
+ .index = 15,
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource atmel_psif1_resource[] __initdata = {
|
|
|
+ {
|
|
|
+ .start = 0xffe03d00,
|
|
|
+ .end = 0xffe03dff,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ IRQ(18),
|
|
|
+};
|
|
|
+static struct clk atmel_psif1_pclk = {
|
|
|
+ .name = "pclk",
|
|
|
+ .parent = &pba_clk,
|
|
|
+ .mode = pba_clk_mode,
|
|
|
+ .get_rate = pba_clk_get_rate,
|
|
|
+ .index = 15,
|
|
|
+};
|
|
|
+
|
|
|
+struct platform_device *__init at32_add_device_psif(unsigned int id)
|
|
|
+{
|
|
|
+ struct platform_device *pdev;
|
|
|
+ u32 pin_mask;
|
|
|
+
|
|
|
+ if (!(id == 0 || id == 1))
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ pdev = platform_device_alloc("atmel_psif", id);
|