|
@@ -899,3 +899,194 @@ static struct platform_device fsi_device = {
|
|
|
static struct asoc_simple_dai_init_info fsi2_ak4643_init_info = {
|
|
|
.fmt = SND_SOC_DAIFMT_LEFT_J,
|
|
|
.codec_daifmt = SND_SOC_DAIFMT_CBM_CFM,
|
|
|
+ .cpu_daifmt = SND_SOC_DAIFMT_CBS_CFS,
|
|
|
+ .sysclk = 11289600,
|
|
|
+};
|
|
|
+
|
|
|
+static struct asoc_simple_card_info fsi2_ak4643_info = {
|
|
|
+ .name = "AK4643",
|
|
|
+ .card = "FSI2A-AK4643",
|
|
|
+ .cpu_dai = "fsia-dai",
|
|
|
+ .codec = "ak4642-codec.0-0013",
|
|
|
+ .platform = "sh_fsi2",
|
|
|
+ .codec_dai = "ak4642-hifi",
|
|
|
+ .init = &fsi2_ak4643_init_info,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device fsi_ak4643_device = {
|
|
|
+ .name = "asoc-simple-card",
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &fsi2_ak4643_info,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+/* FLCTL */
|
|
|
+static struct mtd_partition nand_partition_info[] = {
|
|
|
+ {
|
|
|
+ .name = "system",
|
|
|
+ .offset = 0,
|
|
|
+ .size = 128 * 1024 * 1024,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "userdata",
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ .size = 256 * 1024 * 1024,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "cache",
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ .size = 128 * 1024 * 1024,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource nand_flash_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .start = 0xe6a30000,
|
|
|
+ .end = 0xe6a3009b,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .start = evt2irq(0x0d80), /* flstei: status error irq */
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct sh_flctl_platform_data nand_flash_data = {
|
|
|
+ .parts = nand_partition_info,
|
|
|
+ .nr_parts = ARRAY_SIZE(nand_partition_info),
|
|
|
+ .flcmncr_val = CLK_16B_12L_4H | TYPESEL_SET
|
|
|
+ | SHBUSSEL | SEL_16BIT | SNAND_E,
|
|
|
+ .use_holden = 1,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device nand_flash_device = {
|
|
|
+ .name = "sh_flctl",
|
|
|
+ .resource = nand_flash_resources,
|
|
|
+ .num_resources = ARRAY_SIZE(nand_flash_resources),
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &nand_flash_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * The card detect pin of the top SD/MMC slot (CN7) is active low and is
|
|
|
+ * connected to GPIO A22 of SH7372 (GPIO_PORT41).
|
|
|
+ */
|
|
|
+static int slot_cn7_get_cd(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ return !gpio_get_value(GPIO_PORT41);
|
|
|
+}
|
|
|
+
|
|
|
+/* SDHI0 */
|
|
|
+static struct sh_mobile_sdhi_info sdhi0_info = {
|
|
|
+ .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
|
|
|
+ .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX,
|
|
|
+ .tmio_flags = TMIO_MMC_USE_GPIO_CD,
|
|
|
+ .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ,
|
|
|
+ .cd_gpio = GPIO_PORT172,
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource sdhi0_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .name = "SDHI0",
|
|
|
+ .start = 0xe6850000,
|
|
|
+ .end = 0xe68500ff,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .start = evt2irq(0x0e00) /* SDHI0_SDHI0I0 */,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+ [2] = {
|
|
|
+ .start = evt2irq(0x0e20) /* SDHI0_SDHI0I1 */,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+ [3] = {
|
|
|
+ .start = evt2irq(0x0e40) /* SDHI0_SDHI0I2 */,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device sdhi0_device = {
|
|
|
+ .name = "sh_mobile_sdhi",
|
|
|
+ .num_resources = ARRAY_SIZE(sdhi0_resources),
|
|
|
+ .resource = sdhi0_resources,
|
|
|
+ .id = 0,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &sdhi0_info,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+#if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
|
|
|
+/* SDHI1 */
|
|
|
+static struct sh_mobile_sdhi_info sdhi1_info = {
|
|
|
+ .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX,
|
|
|
+ .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX,
|
|
|
+ .tmio_ocr_mask = MMC_VDD_165_195,
|
|
|
+ .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE,
|
|
|
+ .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
|
|
|
+ MMC_CAP_NEEDS_POLL,
|
|
|
+ .get_cd = slot_cn7_get_cd,
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource sdhi1_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .name = "SDHI1",
|
|
|
+ .start = 0xe6860000,
|
|
|
+ .end = 0xe68600ff,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .name = SH_MOBILE_SDHI_IRQ_CARD_DETECT,
|
|
|
+ .start = evt2irq(0x0e80), /* SDHI1_SDHI1I0 */
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+ [2] = {
|
|
|
+ .name = SH_MOBILE_SDHI_IRQ_SDCARD,
|
|
|
+ .start = evt2irq(0x0ea0), /* SDHI1_SDHI1I1 */
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+ [3] = {
|
|
|
+ .name = SH_MOBILE_SDHI_IRQ_SDIO,
|
|
|
+ .start = evt2irq(0x0ec0), /* SDHI1_SDHI1I2 */
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device sdhi1_device = {
|
|
|
+ .name = "sh_mobile_sdhi",
|
|
|
+ .num_resources = ARRAY_SIZE(sdhi1_resources),
|
|
|
+ .resource = sdhi1_resources,
|
|
|
+ .id = 1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &sdhi1_info,
|
|
|
+ },
|
|
|
+};
|
|
|
+#endif
|
|
|
+
|
|
|
+/*
|
|
|
+ * The card detect pin of the top SD/MMC slot (CN23) is active low and is
|
|
|
+ * connected to GPIO SCIFB_SCK of SH7372 (GPIO_PORT162).
|
|
|
+ */
|
|
|
+static int slot_cn23_get_cd(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ return !gpio_get_value(GPIO_PORT162);
|
|
|
+}
|
|
|
+
|
|
|
+/* SDHI2 */
|
|
|
+static struct sh_mobile_sdhi_info sdhi2_info = {
|
|
|
+ .dma_slave_tx = SHDMA_SLAVE_SDHI2_TX,
|
|
|
+ .dma_slave_rx = SHDMA_SLAVE_SDHI2_RX,
|
|
|
+ .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE,
|
|
|
+ .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
|
|
|
+ MMC_CAP_NEEDS_POLL,
|
|
|
+ .get_cd = slot_cn23_get_cd,
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource sdhi2_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .name = "SDHI2",
|
|
|
+ .start = 0xe6870000,
|
|
|
+ .end = 0xe68700ff,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|