Skip to content

Commit

Permalink
mmc: core: Export mmc_get_ext_csd()
Browse files Browse the repository at this point in the history
Callers of mmc_send_ext_csd() will be able to decrease code duplication
by using mmc_get_ext_csd() instead. Let's make it available.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
  • Loading branch information
Ulf Hansson committed Nov 10, 2014
1 parent 2fd322a commit e21aa51
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 31 deletions.
31 changes: 0 additions & 31 deletions drivers/mmc/core/mmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -177,37 +177,6 @@ static int mmc_decode_csd(struct mmc_card *card)
return 0;
}

/*
* Read extended CSD.
*/
static int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd)
{
int err;
u8 *ext_csd;

if (!card || !new_ext_csd)
return -EINVAL;

if (!mmc_can_ext_csd(card))
return -EOPNOTSUPP;

/*
* As the ext_csd is so large and mostly unused, we don't store the
* raw block in mmc_card.
*/
ext_csd = kmalloc(512, GFP_KERNEL);
if (!ext_csd)
return -ENOMEM;

err = mmc_send_ext_csd(card, ext_csd);
if (err)
kfree(ext_csd);
else
*new_ext_csd = ext_csd;

return err;
}

static void mmc_select_card_type(struct mmc_card *card)
{
struct mmc_host *host = card->host;
Expand Down
29 changes: 29 additions & 0 deletions drivers/mmc/core/mmc_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,35 @@ int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd)
}
EXPORT_SYMBOL_GPL(mmc_send_ext_csd);

int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd)
{
int err;
u8 *ext_csd;

if (!card || !new_ext_csd)
return -EINVAL;

if (!mmc_can_ext_csd(card))
return -EOPNOTSUPP;

/*
* As the ext_csd is so large and mostly unused, we don't store the
* raw block in mmc_card.
*/
ext_csd = kmalloc(512, GFP_KERNEL);
if (!ext_csd)
return -ENOMEM;

err = mmc_send_ext_csd(card, ext_csd);
if (err)
kfree(ext_csd);
else
*new_ext_csd = ext_csd;

return err;
}
EXPORT_SYMBOL_GPL(mmc_get_ext_csd);

int mmc_spi_read_ocr(struct mmc_host *host, int highcap, u32 *ocrp)
{
struct mmc_command cmd = {0};
Expand Down
1 change: 1 addition & 0 deletions include/linux/mmc/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ extern int __mmc_switch(struct mmc_card *, u8, u8, u8, unsigned int, bool,
bool, bool);
extern int mmc_switch(struct mmc_card *, u8, u8, u8, unsigned int);
extern int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd);
extern int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd);

#define MMC_ERASE_ARG 0x00000000
#define MMC_SECURE_ERASE_ARG 0x80000000
Expand Down

0 comments on commit e21aa51

Please sign in to comment.