At present the MMC subsystem maintains its own list of MMC devices. This cannot work with driver model, which needs to maintain this itself. Move the list code into a separate 'legacy' file. The core MMC code remains, and will be shared with the driver-model implementation. Signed-off-by: Simon Glass <sjg@chromium.org>master
parent
cffe5d86cf
commit
c40fdca6b7
@ -0,0 +1,108 @@ |
||||
/*
|
||||
* Copyright (C) 2016 Google, Inc |
||||
* Written by Simon Glass <sjg@chromium.org> |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <mmc.h> |
||||
|
||||
static struct list_head mmc_devices; |
||||
static int cur_dev_num = -1; |
||||
|
||||
struct mmc *find_mmc_device(int dev_num) |
||||
{ |
||||
struct mmc *m; |
||||
struct list_head *entry; |
||||
|
||||
list_for_each(entry, &mmc_devices) { |
||||
m = list_entry(entry, struct mmc, link); |
||||
|
||||
if (m->block_dev.devnum == dev_num) |
||||
return m; |
||||
} |
||||
|
||||
#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) |
||||
printf("MMC Device %d not found\n", dev_num); |
||||
#endif |
||||
|
||||
return NULL; |
||||
} |
||||
|
||||
int mmc_get_next_devnum(void) |
||||
{ |
||||
return cur_dev_num++; |
||||
} |
||||
|
||||
struct blk_desc *mmc_get_blk_desc(struct mmc *mmc) |
||||
{ |
||||
return &mmc->block_dev; |
||||
} |
||||
|
||||
int get_mmc_num(void) |
||||
{ |
||||
return cur_dev_num; |
||||
} |
||||
|
||||
void mmc_do_preinit(void) |
||||
{ |
||||
struct mmc *m; |
||||
struct list_head *entry; |
||||
|
||||
list_for_each(entry, &mmc_devices) { |
||||
m = list_entry(entry, struct mmc, link); |
||||
|
||||
#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT |
||||
mmc_set_preinit(m, 1); |
||||
#endif |
||||
if (m->preinit) |
||||
mmc_start_init(m); |
||||
} |
||||
} |
||||
|
||||
void mmc_list_init(void) |
||||
{ |
||||
INIT_LIST_HEAD(&mmc_devices); |
||||
cur_dev_num = 0; |
||||
} |
||||
|
||||
void mmc_list_add(struct mmc *mmc) |
||||
{ |
||||
INIT_LIST_HEAD(&mmc->link); |
||||
|
||||
list_add_tail(&mmc->link, &mmc_devices); |
||||
} |
||||
|
||||
#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) |
||||
void print_mmc_devices(char separator) |
||||
{ |
||||
struct mmc *m; |
||||
struct list_head *entry; |
||||
char *mmc_type; |
||||
|
||||
list_for_each(entry, &mmc_devices) { |
||||
m = list_entry(entry, struct mmc, link); |
||||
|
||||
if (m->has_init) |
||||
mmc_type = IS_SD(m) ? "SD" : "eMMC"; |
||||
else |
||||
mmc_type = NULL; |
||||
|
||||
printf("%s: %d", m->cfg->name, m->block_dev.devnum); |
||||
if (mmc_type) |
||||
printf(" (%s)", mmc_type); |
||||
|
||||
if (entry->next != &mmc_devices) { |
||||
printf("%c", separator); |
||||
if (separator != '\n') |
||||
puts(" "); |
||||
} |
||||
} |
||||
|
||||
printf("\n"); |
||||
} |
||||
|
||||
#else |
||||
void print_mmc_devices(char separator) { } |
||||
#endif |
Loading…
Reference in new issue