|
@@ -92,3 +92,162 @@ static struct spi_board_info ek_spi_devices[] = {
|
|
|
|
|
|
/*
|
|
/*
|
|
* MCI (SD/MMC)
|
|
* MCI (SD/MMC)
|
|
|
|
+ */
|
|
|
|
+static struct mci_platform_data __initdata mci0_data = {
|
|
|
|
+ .slot[0] = {
|
|
|
|
+ .bus_width = 4,
|
|
|
|
+ .detect_pin = AT91_PIN_PD10,
|
|
|
|
+ .wp_pin = -EINVAL,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct mci_platform_data __initdata mci1_data = {
|
|
|
|
+ .slot[0] = {
|
|
|
|
+ .bus_width = 4,
|
|
|
|
+ .detect_pin = AT91_PIN_PD11,
|
|
|
|
+ .wp_pin = AT91_PIN_PD29,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * MACB Ethernet device
|
|
|
|
+ */
|
|
|
|
+static struct macb_platform_data __initdata ek_macb_data = {
|
|
|
|
+ .phy_irq_pin = AT91_PIN_PD5,
|
|
|
|
+ .is_rmii = 1,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * NAND flash
|
|
|
|
+ */
|
|
|
|
+static struct mtd_partition __initdata ek_nand_partition[] = {
|
|
|
|
+ {
|
|
|
|
+ .name = "Partition 1",
|
|
|
|
+ .offset = 0,
|
|
|
|
+ .size = SZ_64M,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "Partition 2",
|
|
|
|
+ .offset = MTDPART_OFS_NXTBLK,
|
|
|
|
+ .size = MTDPART_SIZ_FULL,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* det_pin is not connected */
|
|
|
|
+static struct atmel_nand_data __initdata ek_nand_data = {
|
|
|
|
+ .ale = 21,
|
|
|
|
+ .cle = 22,
|
|
|
|
+ .rdy_pin = AT91_PIN_PC8,
|
|
|
|
+ .enable_pin = AT91_PIN_PC14,
|
|
|
|
+ .det_pin = -EINVAL,
|
|
|
|
+ .ecc_mode = NAND_ECC_SOFT,
|
|
|
|
+ .on_flash_bbt = 1,
|
|
|
|
+ .parts = ek_nand_partition,
|
|
|
|
+ .num_parts = ARRAY_SIZE(ek_nand_partition),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
|
|
|
+ .ncs_read_setup = 0,
|
|
|
|
+ .nrd_setup = 2,
|
|
|
|
+ .ncs_write_setup = 0,
|
|
|
|
+ .nwe_setup = 2,
|
|
|
|
+
|
|
|
|
+ .ncs_read_pulse = 4,
|
|
|
|
+ .nrd_pulse = 4,
|
|
|
|
+ .ncs_write_pulse = 4,
|
|
|
|
+ .nwe_pulse = 4,
|
|
|
|
+
|
|
|
|
+ .read_cycle = 7,
|
|
|
|
+ .write_cycle = 7,
|
|
|
|
+
|
|
|
|
+ .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
|
|
|
|
+ .tdf_cycles = 3,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void __init ek_add_device_nand(void)
|
|
|
|
+{
|
|
|
|
+ ek_nand_data.bus_width_16 = board_have_nand_16bit();
|
|
|
|
+ /* setup bus-width (8 or 16) */
|
|
|
|
+ if (ek_nand_data.bus_width_16)
|
|
|
|
+ ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
|
|
|
|
+ else
|
|
|
|
+ ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
|
|
|
|
+
|
|
|
|
+ /* configure chip-select 3 (NAND) */
|
|
|
|
+ sam9_smc_configure(0, 3, &ek_nand_smc_config);
|
|
|
|
+
|
|
|
|
+ at91_add_device_nand(&ek_nand_data);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * ISI
|
|
|
|
+ */
|
|
|
|
+static struct isi_platform_data __initdata isi_data = {
|
|
|
|
+ .frate = ISI_CFG1_FRATE_CAPTURE_ALL,
|
|
|
|
+ /* to use codec and preview path simultaneously */
|
|
|
|
+ .full_mode = 1,
|
|
|
|
+ .data_width_flags = ISI_DATAWIDTH_8 | ISI_DATAWIDTH_10,
|
|
|
|
+ /* ISI_MCK is provided by programmable clock or external clock */
|
|
|
|
+ .mck_hz = 25000000,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * soc-camera OV2640
|
|
|
|
+ */
|
|
|
|
+#if defined(CONFIG_SOC_CAMERA_OV2640) || \
|
|
|
|
+ defined(CONFIG_SOC_CAMERA_OV2640_MODULE)
|
|
|
|
+static unsigned long isi_camera_query_bus_param(struct soc_camera_link *link)
|
|
|
|
+{
|
|
|
|
+ /* ISI board for ek using default 8-bits connection */
|
|
|
|
+ return SOCAM_DATAWIDTH_8;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int i2c_camera_power(struct device *dev, int on)
|
|
|
|
+{
|
|
|
|
+ /* enable or disable the camera */
|
|
|
|
+ pr_debug("%s: %s the camera\n", __func__, on ? "ENABLE" : "DISABLE");
|
|
|
|
+ at91_set_gpio_output(AT91_PIN_PD13, !on);
|
|
|
|
+
|
|
|
|
+ if (!on)
|
|
|
|
+ goto out;
|
|
|
|
+
|
|
|
|
+ /* If enabled, give a reset impulse */
|
|
|
|
+ at91_set_gpio_output(AT91_PIN_PD12, 0);
|
|
|
|
+ msleep(20);
|
|
|
|
+ at91_set_gpio_output(AT91_PIN_PD12, 1);
|
|
|
|
+ msleep(100);
|
|
|
|
+
|
|
|
|
+out:
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct i2c_board_info i2c_camera = {
|
|
|
|
+ I2C_BOARD_INFO("ov2640", 0x30),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct soc_camera_link iclink_ov2640 = {
|
|
|
|
+ .bus_id = 0,
|
|
|
|
+ .board_info = &i2c_camera,
|
|
|
|
+ .i2c_adapter_id = 0,
|
|
|
|
+ .power = i2c_camera_power,
|
|
|
|
+ .query_bus_param = isi_camera_query_bus_param,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device isi_ov2640 = {
|
|
|
|
+ .name = "soc-camera-pdrv",
|
|
|
|
+ .id = 0,
|
|
|
|
+ .dev = {
|
|
|
|
+ .platform_data = &iclink_ov2640,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * LCD Controller
|
|
|
|
+ */
|
|
|
|
+#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
|