⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2.6.18-rc4-at91.patch.gz

📁 内容包括2.6.14内核到2.6.23内核的at91内核补丁(没有2.6.19的)
💻 GZ
📖 第 1 页 / 共 5 页
字号:
+		at91_set_B_periph(AT91_PIN_PB17, 0);	/* ERXDV */+		at91_set_B_periph(AT91_PIN_PB16, 0);	/* ERX3 */+		at91_set_B_periph(AT91_PIN_PB15, 0);	/* ERX2 */+		at91_set_B_periph(AT91_PIN_PB14, 0);	/* ETXER */+		at91_set_B_periph(AT91_PIN_PB13, 0);	/* ETX3 */+		at91_set_B_periph(AT91_PIN_PB12, 0);	/* ETX2 */+	}++	eth_data = *data;+	platform_device_register(&at91rm9200_eth_device);+}+#else+void __init at91_add_device_eth(struct at91_eth_data *data) {}+#endif+++/* --------------------------------------------------------------------+ *  Compact Flash / PCMCIA+ * -------------------------------------------------------------------- */++#if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE)+static struct at91_cf_data cf_data;++#define AT91_CF_BASE	AT91_CHIPSELECT_4++static struct resource at91_cf_resources[] = {+	[0] = {+		.start	= AT91_CF_BASE,+		/* ties up CS4, CS5 and CS6 */+		.end	= AT91_CF_BASE + (0x30000000 - 1),+		.flags	= IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,+	},+};++static struct platform_device at91rm9200_cf_device = {+	.name		= "at91_cf",+	.id		= -1,+	.dev		= {+				.platform_data		= &cf_data,+	},+	.resource	= at91_cf_resources,+	.num_resources	= ARRAY_SIZE(at91_cf_resources),+};++void __init at91_add_device_cf(struct at91_cf_data *data)+{+	if (!data)+		return;++	/* input/irq */+	if (data->irq_pin) {+		at91_set_gpio_input(data->irq_pin, 1);+		at91_set_deglitch(data->irq_pin, 1);+	}+	at91_set_gpio_input(data->det_pin, 1);+	at91_set_deglitch(data->det_pin, 1);++	/* outputs, initially off */+	if (data->vcc_pin)+		at91_set_gpio_output(data->vcc_pin, 0);+	at91_set_gpio_output(data->rst_pin, 0);++	/* force poweron defaults for these pins ... */+	at91_set_A_periph(AT91_PIN_PC9, 0);	/* A25/CFRNW */+	at91_set_A_periph(AT91_PIN_PC10, 0);	/* NCS4/CFCS */+	at91_set_A_periph(AT91_PIN_PC11, 0);	/* NCS5/CFCE1 */+	at91_set_A_periph(AT91_PIN_PC12, 0);	/* NCS6/CFCE2 */++	cf_data = *data;+	platform_device_register(&at91rm9200_cf_device);+}+#else+void __init at91_add_device_cf(struct at91_cf_data *data) {}+#endif+++/* --------------------------------------------------------------------+ *  MMC / SD+ * -------------------------------------------------------------------- */++#if defined(CONFIG_MMC_AT91RM9200) || defined(CONFIG_MMC_AT91RM9200_MODULE)+static u64 mmc_dmamask = 0xffffffffUL;+static struct at91_mmc_data mmc_data;++static struct resource at91_mmc_resources[] = {+	[0] = {+		.start	= AT91RM9200_BASE_MCI,+		.end	= AT91RM9200_BASE_MCI + SZ_16K - 1,+		.flags	= IORESOURCE_MEM,+	},+	[1] = {+		.start	= AT91RM9200_ID_MCI,+		.end	= AT91RM9200_ID_MCI,+		.flags	= IORESOURCE_IRQ,+	},+};++static struct platform_device at91rm9200_mmc_device = {+	.name		= "at91_mci",+	.id		= -1,+	.dev		= {+				.dma_mask		= &mmc_dmamask,+				.coherent_dma_mask	= 0xffffffff,+				.platform_data		= &mmc_data,+	},+	.resource	= at91_mmc_resources,+	.num_resources	= ARRAY_SIZE(at91_mmc_resources),+};++void __init at91_add_device_mmc(struct at91_mmc_data *data)+{+	if (!data)+		return;++	/* input/irq */+	if (data->det_pin) {+		at91_set_gpio_input(data->det_pin, 1);+		at91_set_deglitch(data->det_pin, 1);+	}+	if (data->wp_pin)+		at91_set_gpio_input(data->wp_pin, 1);++	/* CLK */+	at91_set_A_periph(AT91_PIN_PA27, 0);++	if (data->is_b) {+		/* CMD */+		at91_set_B_periph(AT91_PIN_PA8, 0);++		/* DAT0, maybe DAT1..DAT3 */+		at91_set_B_periph(AT91_PIN_PA9, 0);+		if (data->wire4) {+			at91_set_B_periph(AT91_PIN_PA10, 0);+			at91_set_B_periph(AT91_PIN_PA11, 0);+			at91_set_B_periph(AT91_PIN_PA12, 0);+		}+	} else {+		/* CMD */+		at91_set_A_periph(AT91_PIN_PA28, 0);++		/* DAT0, maybe DAT1..DAT3 */+		at91_set_A_periph(AT91_PIN_PA29, 0);+		if (data->wire4) {+			at91_set_B_periph(AT91_PIN_PB3, 0);+			at91_set_B_periph(AT91_PIN_PB4, 0);+			at91_set_B_periph(AT91_PIN_PB5, 0);+		}+	}++	mmc_data = *data;+	platform_device_register(&at91rm9200_mmc_device);+}+#else+void __init at91_add_device_mmc(struct at91_mmc_data *data) {}+#endif+++/* --------------------------------------------------------------------+ *  NAND / SmartMedia+ * -------------------------------------------------------------------- */++#if defined(CONFIG_MTD_NAND_AT91) || defined(CONFIG_MTD_NAND_AT91_MODULE)+static struct at91_nand_data nand_data;++#define AT91_SMARTMEDIA_BASE	AT91_CHIPSELECT_3++static struct resource at91_nand_resources[] = {+	{+		.start	= AT91_SMARTMEDIA_BASE,+		.end	= AT91_SMARTMEDIA_BASE + SZ_8M - 1,+		.flags	= IORESOURCE_MEM,+	}+};++static struct platform_device at91_nand_device = {+	.name		= "at91_nand",+	.id		= -1,+	.dev		= {+				.platform_data	= &nand_data,+	},+	.resource	= at91_nand_resources,+	.num_resources	= ARRAY_SIZE(at91_nand_resources),+};++void __init at91_add_device_nand(struct at91_nand_data *data)+{+	if (!data)+		return;++	/* enable pin */+	if (data->enable_pin)+		at91_set_gpio_output(data->enable_pin, 1);++	/* ready/busy pin */+	if (data->rdy_pin)+		at91_set_gpio_input(data->rdy_pin, 1);++	/* card detect pin */+	if (data->det_pin)+		at91_set_gpio_input(data->det_pin, 1);++	at91_set_A_periph(AT91_PIN_PC1, 0);		/* SMOE */+	at91_set_A_periph(AT91_PIN_PC3, 0);		/* SMWE */++	nand_data = *data;+	platform_device_register(&at91_nand_device);+}+#else+void __init at91_add_device_nand(struct at91_nand_data *data) {}+#endif+++/* --------------------------------------------------------------------+ *  TWI (i2c)+ * -------------------------------------------------------------------- */++#if defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)++static struct resource at91_twi_resources[] = {+	[0] = {+		.start	= AT91RM9200_BASE_TWI,+		.end	= AT91RM9200_BASE_TWI + SZ_16K - 1,+		.flags	= IORESOURCE_MEM,+	},+	[1] = {+		.start	= AT91RM9200_ID_TWI,+		.end	= AT91RM9200_ID_TWI,+		.flags	= IORESOURCE_IRQ,+	},+};++static struct platform_device at91rm9200_twi_device = {+	.name		= "at91_i2c",+	.id		= -1,+	.resource	= at91_twi_resources,+	.num_resources	= ARRAY_SIZE(at91_twi_resources),+};++void __init at91_add_device_i2c(void)+{+	/* pins used for TWI interface */+	at91_set_A_periph(AT91_PIN_PA25, 0);		/* TWD */+	at91_set_multi_drive(AT91_PIN_PA25, 1);++	at91_set_A_periph(AT91_PIN_PA26, 0);		/* TWCK */+	at91_set_multi_drive(AT91_PIN_PA26, 1);++	platform_device_register(&at91rm9200_twi_device);+}+#else+void __init at91_add_device_i2c(void) {}+#endif+++/* --------------------------------------------------------------------+ *  SPI+ * -------------------------------------------------------------------- */++#if defined(CONFIG_SPI_AT91) || defined(CONFIG_SPI_AT91_MODULE) || defined(CONFIG_AT91_SPI) || defined(CONFIG_AT91_SPI_MODULE)+static u64 spi_dmamask = 0xffffffffUL;++static struct resource at91_spi_resources[] = {+	[0] = {+		.start	= AT91RM9200_BASE_SPI,+		.end	= AT91RM9200_BASE_SPI + SZ_16K - 1,+		.flags	= IORESOURCE_MEM,+	},+	[1] = {+		.start	= AT91RM9200_ID_SPI,+		.end	= AT91RM9200_ID_SPI,+		.flags	= IORESOURCE_IRQ,+	},+};++static struct platform_device at91rm9200_spi_device = {+	.name		= "at91_spi",+	.id		= 0,+	.dev		= {+		.dma_mask		= &spi_dmamask,+		.coherent_dma_mask	= 0xffffffff,+	},+	.resource	= at91_spi_resources,+	.num_resources	= ARRAY_SIZE(at91_spi_resources),+};++static const unsigned at91_spi_standard_cs[4] = { AT91_PIN_PA3, AT91_PIN_PA4, AT91_PIN_PA5, AT91_PIN_PA6 };++void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)+{+	int i;+	unsigned long cs_pin;++	at91_set_A_periph(AT91_PIN_PA0, 0);	/* MISO */+	at91_set_A_periph(AT91_PIN_PA1, 0);	/* MOSI */+	at91_set_A_periph(AT91_PIN_PA2, 0);	/* SPCK */++	/* Enable SPI chip-selects */+	for (i = 0; i < nr_devices; i++) {+		if (devices[i].controller_data)+			cs_pin = (unsigned long) devices[i].controller_data;+		else+			cs_pin = at91_spi_standard_cs[devices[i].chip_select];++#ifdef CONFIG_SPI_AT91_MANUAL_CS+		at91_set_gpio_output(cs_pin, 1);+#else+		at91_set_A_periph(cs_pin, 0);+#endif++		/* pass chip-select pin to driver */+		devices[i].controller_data = (void *) cs_pin;+	}++	spi_register_board_info(devices, nr_devices);+	at91_clock_associate("spi_clk", &at91rm9200_spi_device.dev, "spi");+	platform_device_register(&at91rm9200_spi_device);+}+#else+void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) {}+#endif+++/* --------------------------------------------------------------------+ *  RTC+ * -------------------------------------------------------------------- */++#if defined(CONFIG_RTC_DRV_AT91) || defined(CONFIG_RTC_DRV_AT91_MODULE)+static struct platform_device at91rm9200_rtc_device = {+	.name		= "at91_rtc",+	.id		= -1,+	.num_resources	= 0,+};++static void __init at91_add_device_rtc(void)+{+	platform_device_register(&at91rm9200_rtc_device);+}+#else+static void __init at91_add_device_rtc(void) {}+#endif+++/* --------------------------------------------------------------------+ *  Watchdog+ * -------------------------------------------------------------------- */++#if defined(CONFIG_AT91_WATCHDOG) || defined(CONFIG_AT91_WATCHDOG_MODULE)+static struct platform_device at91rm9200_wdt_device = {+	.name		= "at91_wdt",+	.id		= -1,+	.num_resources	= 0,+};++static void __init at91_add_device_watchdog(void)+{+	platform_device_register(&at91rm9200_wdt_device);+}+#else+static void __init at91_add_device_watchdog(void) {}+#endif+++/* --------------------------------------------------------------------+ *  LEDs+ * -------------------------------------------------------------------- */++#if defined(CONFIG_LEDS)+u8 at91_leds_cpu;+u8 at91_leds_timer;++void __init at91_init_leds(u8 cpu_led, u8 timer_led)+{+	at91_leds_cpu	= cpu_led;+	at91_leds_timer	= timer_led;+}+#else+void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}+#endif+++/* --------------------------------------------------------------------+ *  UART+ * -------------------------------------------------------------------- */++#if defined(CONFIG_SERIAL_AT91)+static struct resource dbgu_resources[] = {+	[0] = {+		.start	= AT91_VA_BASE_SYS + AT91_DBGU,+		.end	= AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,+		.flags	= IORESOURCE_MEM,+	},+	[1] = {+		.start	= AT91RM9200_ID_SYS,+		.end	= AT91RM9200_ID_SYS,+		.flags	= IORESOURCE_IRQ,+	},+};++static struct at91_uart_data dbgu_data = {+	.use_dma_tx	= 0,+	.use_dma_rx	= 0,		/* DBGU not capable of receive DMA */+};++static struct platform_device at91rm9200_dbgu_device = {+	.name		= "at91_usart",+	.id		= 0,+	.dev		= {+				.platform_data	= &dbgu_data,+				.coherent_dma_mask = 0xffffffff,+	},+	.resource	= dbgu_resources,+	.num_resources	= ARRAY_SIZE(dbgu_resources),+};++static inline void configure_dbgu_pins(void)+{+	at91_set_A_periph(AT91_PIN_PA30, 0);		/* DRXD */+	at91_set_A_periph(AT91_PIN_PA31, 1);		/* DTXD */+}++static struct resource uart0_resources[] = {+	[0] = {+		.start	= AT91RM9200_BASE_US0,+		.end	= AT91RM9200_BASE_US0 + SZ_16K - 1,+		.flags	= IORESOURCE_MEM,+	},+	[1] = {+		.start	= AT91RM9200_ID_US0,+		.end	= AT91RM9200_ID_US0,+		.flags	= IORESOURCE_IRQ,+	},+};++static struct at91_uart_data uart0_data = {+	.use_dma_tx	= 1,+	.use_dma_rx	= 1,+};++static struct platform_device at91rm9200_uart0_device = {+	.name		= "at91_usart",+	.id		= 1,+	.dev		= {+				.platform_data	= &uart0_data,+				.coherent_dma_mask = 0xffffffff,+	},+	.resource	= uart0_resources,+	.num_resources	= ARRAY_SIZE(uart0_resources),+};++static inline void configure_usart0_pins(void)+{+	at91_set_A_periph(AT91_PIN_PA17, 1);		/* TXD0 */+	at91_set_A_periph(AT91_PIN_PA18, 0);		/* RXD0 */+	at91_set_A_periph(AT91_PIN_PA20, 0);		/* CTS0 */++	/*+	 * AT91RM9200 Errata #39 - RTS0 is not internally connected to PA21.+	 *  We need to drive the pin manually.  Default is off (RTS is active low).+	 */+	at91_set_gpio_output(AT91_PIN_PA21, 1);+}++static struct resource uart1_resources[] = {+	[0] = {+		.start	= AT91RM9200_BASE_US1,+		.end	= AT91RM9200_BASE_US1 + SZ_16K - 1,+		.flags	= IORESOURCE_MEM,+	},+	[1] = {+		.start	= AT91RM9200_ID_US1,+		.end	= AT91RM9200_ID_US1,+		.flags	= IORESOURCE_IRQ,+	},+};++static struct at91_uart_data uart1_data = {+	.use_dma_tx	= 1,+	.use_dma_rx	= 1,+};++static struct platform_device at91rm9200_uart1_device = {+	.name		= "at91_usart",+	.id		= 2,+	.dev		= {+				.platform_data	= &uart1_data,+				.coherent_dma_mask = 0xffffffff,+	},+	.resource	= uart1_resources,+	.num_resources	= ARRAY_SIZE(uart1_resources),+};++static inline void configure_usart1_pins(void)+{+	at91_set_A_periph(AT91_PIN_PB18, 0);		/* RI1 */+	at91_set_A_periph(AT91_PIN_PB19, 0);		/* DTR1 */+	at91_set_A_periph(AT91_PIN_PB20, 1);		/* TXD1 */+	at91_set_A_periph(AT91_PIN_PB21, 0);		/* RXD1 */+	at91_set_A_periph(AT91_PIN_PB23, 0);		/* DCD1 */+	at91_set_A_periph(AT91_PIN_PB24, 0);		/* CTS1 */+	at91_set_A_periph(AT91_PIN_PB25, 0);		/* DSR1 */+	at91_set_A_periph(AT91_PIN_PB26, 0);		/* RTS1 */+}++static struct resource uart2_resources[] = {+	[0] = {+		.start	= AT91RM9200_BASE_US2,+		.end	= AT91RM9200_BASE_US2 + SZ_16K - 1,+		.flags	= IORESOURCE_MEM,+	},+	[1] = {+		.start	= AT91RM9200_ID_US2,+		.end	= AT91RM9200_ID_US2,+		.flags	= IORESOURCE_IRQ,+	},+};++static struct at91_uart_data uart2_data = {+	.use_dma_tx	= 1,+	.use_dma_rx	= 1,+};++static struct platform_device at91rm9200_uart2_device = {+	.name		= "at91_usart",+	.id		= 3,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -