ds1wm_resources[0].start >>= asic->bus_shift;
        ds1wm_resources[0].end   >>= asic->bus_shift;
 
-       asic3_cell_ds1wm.platform_data = &asic3_cell_ds1wm;
-       asic3_cell_ds1wm.data_size = sizeof(asic3_cell_ds1wm);
-
        /* MMC */
        asic->tmio_cnf = ioremap((ASIC3_SD_CONFIG_BASE >> asic->bus_shift) +
                                 mem_sdio->start, 0x400 >> asic->bus_shift);
        asic3_mmc_resources[0].start >>= asic->bus_shift;
        asic3_mmc_resources[0].end   >>= asic->bus_shift;
 
-       asic3_cell_mmc.platform_data = &asic3_cell_mmc;
-       asic3_cell_mmc.data_size = sizeof(asic3_cell_mmc);
-
        ret = mfd_add_devices(&pdev->dev, pdev->id,
                        &asic3_cell_ds1wm, 1, mem, asic->irq_base);
        if (ret < 0)
 
 
 static void tmio_mmc_clk_stop(struct tmio_mmc_host *host)
 {
-       struct mfd_cell *cell = host->pdev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(host->pdev);
        struct tmio_mmc_data *pdata = cell->driver_data;
 
        /*
 
 static void tmio_mmc_clk_start(struct tmio_mmc_host *host)
 {
-       struct mfd_cell *cell = host->pdev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(host->pdev);
        struct tmio_mmc_data *pdata = cell->driver_data;
 
        sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, 0x0100 |
 static irqreturn_t tmio_mmc_irq(int irq, void *devid)
 {
        struct tmio_mmc_host *host = devid;
-       struct mfd_cell *cell = host->pdev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(host->pdev);
        struct tmio_mmc_data *pdata = cell->driver_data;
        unsigned int ireg, irq_mask, status;
        unsigned int sdio_ireg, sdio_irq_mask, sdio_status;
        struct scatterlist *sg = host->sg_ptr, *sg_tmp;
        struct dma_async_tx_descriptor *desc = NULL;
        struct dma_chan *chan = host->chan_rx;
-       struct mfd_cell *cell = host->pdev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(host->pdev);
        struct tmio_mmc_data *pdata = cell->driver_data;
        dma_cookie_t cookie;
        int ret, i;
        struct scatterlist *sg = host->sg_ptr, *sg_tmp;
        struct dma_async_tx_descriptor *desc = NULL;
        struct dma_chan *chan = host->chan_tx;
-       struct mfd_cell *cell = host->pdev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(host->pdev);
        struct tmio_mmc_data *pdata = cell->driver_data;
        dma_cookie_t cookie;
        int ret, i;
 static int tmio_mmc_start_data(struct tmio_mmc_host *host,
        struct mmc_data *data)
 {
-       struct mfd_cell *cell = host->pdev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(host->pdev);
        struct tmio_mmc_data *pdata = cell->driver_data;
 
        pr_debug("setup data transfer: blocksize %08x  nr_blocks %d\n",
 static int tmio_mmc_get_ro(struct mmc_host *mmc)
 {
        struct tmio_mmc_host *host = mmc_priv(mmc);
-       struct mfd_cell *cell = host->pdev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(host->pdev);
        struct tmio_mmc_data *pdata = cell->driver_data;
 
        return ((pdata->flags & TMIO_MMC_WRPROTECT_DISABLE) ||
 static int tmio_mmc_get_cd(struct mmc_host *mmc)
 {
        struct tmio_mmc_host *host = mmc_priv(mmc);
-       struct mfd_cell *cell = host->pdev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(host->pdev);
        struct tmio_mmc_data *pdata = cell->driver_data;
 
        if (!pdata->get_cd)
 #ifdef CONFIG_PM
 static int tmio_mmc_suspend(struct platform_device *dev, pm_message_t state)
 {
-       struct mfd_cell *cell = (struct mfd_cell *)dev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(dev);
        struct mmc_host *mmc = platform_get_drvdata(dev);
        int ret;
 
 
 static int tmio_mmc_resume(struct platform_device *dev)
 {
-       struct mfd_cell *cell = (struct mfd_cell *)dev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(dev);
        struct mmc_host *mmc = platform_get_drvdata(dev);
        int ret = 0;
 
 
 static int __devinit tmio_mmc_probe(struct platform_device *dev)
 {
-       struct mfd_cell *cell = (struct mfd_cell *)dev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(dev);
        struct tmio_mmc_data *pdata;
        struct resource *res_ctl;
        struct tmio_mmc_host *host;
 
 static int __devexit tmio_mmc_remove(struct platform_device *dev)
 {
-       struct mfd_cell *cell = (struct mfd_cell *)dev->dev.platform_data;
+       struct mfd_cell *cell = mfd_get_cell(dev);
        struct mmc_host *mmc = platform_get_drvdata(dev);
 
        platform_set_drvdata(dev, NULL);