> +static void tmio_mmc_reset(struct tmio_mmc_host *host) > +{ > + /* FIXME - should we set stop clock reg here */ > + sd_ctrl_write16(host, CTL_RESET_SD, 0x0000); > + sd_ctrl_write16(host, CTL_RESET_SDIO, 0x0000); > + usleep_range(10000, 11000); > + sd_ctrl_write16(host, CTL_RESET_SD, 0x0001); > + sd_ctrl_write16(host, CTL_RESET_SDIO, 0x0001); > + usleep_range(10000, 11000); > + > + if (host->pdata->flags & TMIO_MMC_SDIO_IRQ) { > + sd_ctrl_write16(host, CTL_SDIO_IRQ_MASK, host->sdio_irq_mask); > + sd_ctrl_write16(host, CTL_TRANSACTION_CTL, 0x0001); > + } > +} Yes, looks much safer now. > + host->reset = tmio_mmc_reset; So, you populate the new pointer here... > + if (!_host->reset) > + _host->reset = tmio_mmc_reset; ... and here. But it seems never used anywhere? Or am I missing something?