#ifdef CONFIG_I2C1_RK29\r
static struct i2c_board_info __initdata board_i2c1_devices[] = {\r
#if defined (CONFIG_RK1000_CONTROL1)\r
- {\r
- .type = "rk1000_control",\r
- .addr = 0x40,\r
- .flags = 0,\r
- },\r
+ {\r
+ .type = "rk1000_control",\r
+ .addr = 0x40,\r
+ .flags = 0,\r
+ },\r
+#endif\r
+#if defined (CONFIG_SENSORS_AK8973)\r
+ {\r
+ .type = "ak8973",\r
+ .addr = 0x1c,\r
+ .flags = 0,\r
+ },\r
+#endif\r
+#if defined (CONFIG_SENSORS_AK8973)\r
+ {\r
+ .type = "ak8975",\r
+ .addr = 0x1c,\r
+ .flags = 0,\r
+ },\r
#endif\r
-\r
};\r
#endif\r
\r
return 0;\r
}\r
\r
-//#define CONFIG_SDMMC0_USE_DMA\r
+#define CONFIG_SDMMC0_USE_DMA\r
struct rk29_sdmmc_platform_data default_sdmmc0_data = {\r
- .num_slots = 1,\r
.host_ocr_avail = (MMC_VDD_27_28|MMC_VDD_28_29|MMC_VDD_29_30|\r
MMC_VDD_30_31|MMC_VDD_31_32|MMC_VDD_32_33| \r
MMC_VDD_33_34|MMC_VDD_34_35| MMC_VDD_35_36),\r
rk29_mux_api_set(GPIO1C4_SDMMC1DATA1_NAME, GPIO1H_SDMMC1_DATA1);\r
rk29_mux_api_set(GPIO1C5_SDMMC1DATA2_NAME, GPIO1H_SDMMC1_DATA2);\r
rk29_mux_api_set(GPIO1C6_SDMMC1DATA3_NAME, GPIO1H_SDMMC1_DATA3);\r
+ rk29_mux_api_set(GPIO1C0_UART0CTSN_SDMMC1DETECTN_NAME, GPIO1H_SDMMC1_DETECT_N);\r
return 0;\r
}\r
\r
struct rk29_sdmmc_platform_data default_sdmmc1_data = {\r
- .num_slots = 1,\r
.host_ocr_avail = (MMC_VDD_26_27|MMC_VDD_27_28|MMC_VDD_28_29|\r
MMC_VDD_29_30|MMC_VDD_30_31|MMC_VDD_31_32|\r
MMC_VDD_32_33|MMC_VDD_33_34),\r
{
struct rk29_sdmmc *host = arg;
struct mmc_data *data = host->data;
-
+ printk("Enter:%s-----%d dma complete\n",__FUNCTION__,__LINE__);
if(host->use_dma == 0)
return;
dev_vdbg(&host->pdev->dev, "DMA complete\n");
static int rk29_sdmmc_submit_data_dma(struct rk29_sdmmc *host, struct mmc_data *data)
{
struct scatterlist *sg;
- unsigned int direction;
+ unsigned int i,direction;
if(host->use_dma == 0)
return -ENOSYS;
return -EINVAL;
if (data->blksz & 3)
return -EINVAL;
-
- for_each_sg(data->sg, sg, data->sg_len, host->dma_chn) {
+ for_each_sg(data->sg, sg, data->sg_len, i) {
if (sg->offset & 3 || sg->length & 3)
return -EINVAL;
}
-
if (data->flags & MMC_DATA_READ)
direction = RK29_DMASRC_HW;
else
- direction = RK29_DMASRC_MEM;
+ direction = RK29_DMASRC_MEM;
dma_map_sg(&host->pdev->dev, data->sg, data->sg_len,
- (data->flags & MMC_DATA_READ)? DMA_FROM_DEVICE : DMA_TO_DEVICE);
+ (data->flags & MMC_DATA_READ)? DMA_FROM_DEVICE : DMA_TO_DEVICE);
rk29_dma_devconfig(host->dma_chn, direction, (unsigned long )(host->regs+SDMMC_DATA));
rk29_dma_enqueue(host->dma_chn, NULL, data->sg->dma_address, data->sg->length);
rk29_sdmmc_write(host->regs, SDMMC_CTRL, (rk29_sdmmc_read(host->regs, SDMMC_CTRL))|SDMMC_CTRL_DMA_ENABLE);// enable dma
- rk29_dma_ctrl(host->dma_chn, RK29_DMAF_AUTOSTART);
+ rk29_dma_ctrl(host->dma_chn, RK29_DMAOP_START);
printk("Enter:%s-----%d DMA DATA START\n",__FUNCTION__,__LINE__);
return 0;
}
if (!regs)
return -ENXIO;
-
irq = platform_get_irq(pdev, 0);
if (irq < 0)
return irq;
host->regs = ioremap(regs->start, regs->end - regs->start);
if (!host->regs)
goto err_freemap;
+ memcpy(host->dma_name, pdata->dma_name, 8);
host->use_dma = pdata->use_dma;
if(host->use_dma){
- if(strncmp(host->dma_name, "sdio", strlen("sdio")) == 1)
- host->dma_chn = rk29_dma_request(DMACH_SDIO, &rk29_dma_sdio1_client, NULL);
- if(strncmp(host->dma_name, "sd_mmc", strlen("sd_mmc")) == 1)
- host->dma_chn = rk29_dma_request(DMACH_SDMMC, &rk29_dma_sdmmc0_client, NULL);
+ if(strncmp(host->dma_name, "sdio", strlen("sdio")) == 0){
+ rk29_dma_request(DMACH_SDIO, &rk29_dma_sdio1_client, NULL);
+ host->dma_chn = DMACH_SDIO;
+ }
+ if(strncmp(host->dma_name, "sd_mmc", strlen("sd_mmc")) == 0){
+ rk29_dma_request(DMACH_SDMMC, &rk29_dma_sdmmc0_client, NULL);
+ host->dma_chn = DMACH_SDMMC;
+ }
rk29_dma_config(host->dma_chn, 16);
- rk29_dma_setflags(host->dma_chn, RK29_DMAF_AUTOSTART);
rk29_dma_set_buffdone_fn(host->dma_chn, rk29_sdmmc_dma_complete);
}
host->bus_hz = 25000000; ////cgu_get_clk_freq(CGU_SB_SD_MMC_CCLK_IN_ID);
if (ret)
goto err_dmaunmap;
- platform_set_drvdata(pdev, host);
- memcpy(host->dma_name, pdata->dma_name, 8);
+ platform_set_drvdata(pdev, host);
mmc->ops = &rk29_sdmmc_ops[pdev->id];
mmc->f_min = host->bus_hz/510;
mmc->f_max = host->bus_hz/20; //max f is clock to mmc_clk/2
rk29_sdmmc_write(host->regs, SDMMC_CLKENA,1);
///rk29_sdmmc_write(host->regs, SDMMC_CLKDIV,2);
dev_info(&pdev->dev, "RK29 SDMMC controller at irq %d\n", irq);
-
return 0;
err_dmaunmap:
if(host->use_dma){
- if(strncmp(host->dma_name, "sdio", strlen("sdio")) == 1)
+ if(strncmp(host->dma_name, "sdio", strlen("sdio")) == 0)
rk29_dma_free(DMACH_SDIO, &rk29_dma_sdio1_client);
- if(strncmp(host->dma_name, "sd_mmc", strlen("sd_mmc")) == 1)
+ if(strncmp(host->dma_name, "sd_mmc", strlen("sd_mmc")) == 0)
rk29_dma_free(DMACH_SDMMC, &rk29_dma_sdmmc0_client);
}
err_freemap:
free_irq(platform_get_irq(pdev, 0), host);
if(host->use_dma){
- if(strncmp(host->dma_name, "sdio", strlen("sdio")) == 1)
+ if(strncmp(host->dma_name, "sdio", strlen("sdio")) == 0)
rk29_dma_free(DMACH_SDIO, &rk29_dma_sdio1_client);
- if(strncmp(host->dma_name, "sd_mmc", strlen("sd_mmc")) == 1)
+ if(strncmp(host->dma_name, "sd_mmc", strlen("sd_mmc")) == 0)
rk29_dma_free(DMACH_SDMMC, &rk29_dma_sdmmc0_client);
}
iounmap(host->regs);