Merge tag 'lsk-v4.4-16.06-android'
[firefly-linux-kernel-4.4.55.git] / drivers / mmc / card / block.c
index ba3f31f9aa84cdd0a9d700f7bdcfb64c4aa592e8..bfa7a62cb85c1142fcfe54a31959953d88e4542b 100644 (file)
@@ -2041,8 +2041,7 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq,
                do_data_tag = (card->ext_csd.data_tag_unit_size) &&
                        (prq->cmd_flags & REQ_META) &&
                        (rq_data_dir(prq) == WRITE) &&
-                       ((brq->data.blocks * brq->data.blksz) >=
-                        card->ext_csd.data_tag_unit_size);
+                       blk_rq_bytes(prq) >= card->ext_csd.data_tag_unit_size;
                /* Argument of CMD23 */
                packed_cmd_hdr[(i * 2)] =
                        (do_rel_wr ? MMC_CMD23_ARG_REL_WR : 0) |
@@ -2857,6 +2856,7 @@ static const struct mmc_fixup blk_fixups[] =
        END_FIXUP
 };
 
+extern struct mmc_card *this_card;
 static int mmc_blk_probe(struct mmc_card *card)
 {
        struct mmc_blk_data *md, *part_md;
@@ -2885,6 +2885,15 @@ static int mmc_blk_probe(struct mmc_card *card)
 
        dev_set_drvdata(&card->dev, md);
 
+       #if defined(CONFIG_MMC_DW_ROCKCHIP)
+       if (card->host->restrict_caps & RESTRICT_CARD_TYPE_EMMC) {
+               this_card = card;
+               md->disk->emmc_disk = 1;
+       } else {
+               md->disk->emmc_disk = 0;
+       }
+       #endif
+
        if (mmc_add_disk(md))
                goto out;
 
@@ -2917,6 +2926,11 @@ static void mmc_blk_remove(struct mmc_card *card)
 {
        struct mmc_blk_data *md = dev_get_drvdata(&card->dev);
 
+       #if defined(CONFIG_MMC_DW_ROCKCHIP)
+       if (card->host->restrict_caps & RESTRICT_CARD_TYPE_EMMC)
+               this_card = NULL;
+       #endif
+
        mmc_blk_remove_parts(card, md);
        pm_runtime_get_sync(&card->dev);
        mmc_claim_host(card->host);