Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit adf66a0d authored by Pierre Ossman's avatar Pierre Ossman
Browse files

mmc: improve error code feedback



Now that we use "normal" error codes, improve the reporting and response
to error codes in the core.

Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
parent 17b0429d
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -176,13 +176,19 @@ static int mmc_read_ext_csd(struct mmc_card *card)
	ext_csd = kmalloc(512, GFP_KERNEL);
	if (!ext_csd) {
		printk(KERN_ERR "%s: could not allocate a buffer to "
			"receive the ext_csd. mmc v4 cards will be "
			"treated as v3.\n", mmc_hostname(card->host));
			"receive the ext_csd.\n", mmc_hostname(card->host));
		return -ENOMEM;
	}

	err = mmc_send_ext_csd(card, ext_csd);
	if (err) {
		/*
		 * We all hosts that cannot perform the command
		 * to fail more gracefully
		 */
		if (err != -EINVAL)
			goto out;

		/*
		 * High capacity cards should have this "magic" size
		 * stored in their CSD.
@@ -199,6 +205,7 @@ static int mmc_read_ext_csd(struct mmc_card *card)
				mmc_hostname(card->host));
			err = 0;
		}

		goto out;
	}

@@ -269,8 +276,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
		goto err;

	if (oldcard) {
		if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
		if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) {
			err = -ENOENT;
			goto err;
		}

		card = oldcard;
	} else {
@@ -278,8 +287,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
		 * Allocate card structure.
		 */
		card = mmc_alloc_card(host);
		if (IS_ERR(card))
		if (IS_ERR(card)) {
			err = PTR_ERR(card);
			goto err;
		}

		card->type = MMC_TYPE_MMC;
		card->rca = 1;
@@ -304,10 +315,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
			goto free_card;

		err = mmc_decode_csd(card);
		if (err < 0)
		if (err)
			goto free_card;
		err = mmc_decode_cid(card);
		if (err < 0)
		if (err)
			goto free_card;
	}

@@ -379,7 +390,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
		mmc_remove_card(card);
err:

	return -EIO;
	return err;
}

/*
@@ -587,6 +598,6 @@ int mmc_attach_mmc(struct mmc_host *host, u32 ocr)
	printk(KERN_ERR "%s: error %d whilst initialising MMC card\n",
		mmc_hostname(host), err);

	return 0;
	return err;
}
+17 −5
Original line number Diff line number Diff line
@@ -213,10 +213,18 @@ static int mmc_read_switch(struct mmc_card *card)

	err = mmc_sd_switch(card, 0, 0, 1, status);
	if (err) {
		/*
		 * We all hosts that cannot perform the command
		 * to fail more gracefully
		 */
		if (err != -EINVAL)
			goto out;

		printk(KERN_WARNING "%s: problem reading switch "
			"capabilities, performance might suffer.\n",
			mmc_hostname(card->host));
		err = 0;

		goto out;
	}

@@ -324,8 +332,10 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
		goto err;

	if (oldcard) {
		if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
		if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) {
			err = -ENOENT;
			goto err;
		}

		card = oldcard;
	} else {
@@ -333,8 +343,10 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
		 * Allocate card structure.
		 */
		card = mmc_alloc_card(host);
		if (IS_ERR(card))
		if (IS_ERR(card)) {
			err = PTR_ERR(card);
			goto err;
		}

		card->type = MMC_TYPE_SD;
		memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
@@ -358,7 +370,7 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
			goto free_card;

		err = mmc_decode_csd(card);
		if (err < 0)
		if (err)
			goto free_card;

		mmc_decode_cid(card);
@@ -449,7 +461,7 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
		mmc_remove_card(card);
err:

	return -EIO;
	return err;
}

/*
@@ -666,6 +678,6 @@ int mmc_attach_sd(struct mmc_host *host, u32 ocr)
	printk(KERN_ERR "%s: error %d whilst initialising SD card\n",
		mmc_hostname(host), err);

	return 0;
	return err;
}