> +static int tmio_mmc_execute_tuning(struct mmc_host *mmc, u32 opcode)
> +{
> + struct tmio_mmc_host *host = mmc_priv(mmc);
> + unsigned int num;
> + int i, ret = 0;
> + bool *tap;
> +
> + if (!host->init_tuning || !host->select_tuning)
Check host->prepare_tuning, too?
> + /* Tuning is not supported */
> + goto out;
> +
> + num = host->init_tuning(host);
> + if (!num)
> + /* Tuning is not supported */
> + goto out;
> +
> + tap = kmalloc(num * 2 * sizeof(*tap), GFP_KERNEL);
> + if (!tap) {
> + ret = -ENOMEM;
> + goto out;
> + }
> +
> + /* Issue CMD19 twice for each tap */
> + for (i = 0; i < 2 * num; i++) {
> + if (host->prepare_tuning)
> + host->prepare_tuning(host, i % num);
> +
> + ret = mmc_send_tuning(mmc, opcode, NULL);
> + if (ret && ret != -EILSEQ)
> + goto err_free;
> + tap[i] = (ret != 0);
> +
> + mdelay(1);
> + }
> +
> + ret = host->select_tuning(host, tap, num * 2);
> +
> +err_free:
> + kfree(tap);
> +out:
> + if (ret < 0) {
> + dev_warn(&host->pdev->dev, "Tuning procedure failed\n");
> + tmio_mmc_hw_reset(mmc);
> + } else {
> + host->mmc->retune_period = 0;
> + }
> +
> + return ret;
> +
Unnecessary blank line