Commit 3386a43a authored by Daniel DeGrasse's avatar Daniel DeGrasse Committed by Fabio Baltieri
Browse files

disk_access: reference count initialization calls for disks



Reference count initialization calls for disks. This changes the
behavior of the disk_access_init() function, such that disks will no
longer be initialized again if the first disk access init call
succeeds.

Disk access is reference counted in preparation for supporting disk
de-initialization, where a balanced number of disk de-initialization
calls with disk initialization calls will de-initialize the disk.

Also, remove code in disk drivers that was already checking against
duplicate disk_access_init() calls.

Signed-off-by: default avatarDaniel DeGrasse <daniel.degrasse@nxp.com>
parent 3c41820d
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -38,11 +38,6 @@ static int disk_mmc_access_init(struct disk_info *disk)
	struct mmc_data *data = dev->data;
	int ret;

	if (data->status == SD_OK) {
		/* Called twice, don't reinit */
		return 0;
	}

	ret = sd_init(cfg->host_controller, &data->card);
	if (ret) {
		data->status = SD_ERROR;
+0 −4
Original line number Diff line number Diff line
@@ -265,10 +265,6 @@ static int stm32_sdmmc_access_init(struct disk_info *disk)
	struct stm32_sdmmc_priv *priv = dev->data;
	int err;

	if (priv->status == DISK_STATUS_OK) {
		return 0;
	}

	if (priv->status == DISK_STATUS_NOMEDIA) {
		return -ENODEV;
	}
+0 −5
Original line number Diff line number Diff line
@@ -37,11 +37,6 @@ static int disk_sdmmc_access_init(struct disk_info *disk)
	struct sdmmc_data *data = dev->data;
	int ret;

	if (data->status == SD_OK) {
		/* Called twice, don't reinit */
		return 0;
	}

	if (!sd_is_card_present(cfg->host_controller)) {
		return DISK_STATUS_NOMEDIA;
	}
+2 −0
Original line number Diff line number Diff line
@@ -77,6 +77,8 @@ struct disk_info {
	const struct disk_operations *ops;
	/** Device associated to this disk */
	const struct device *dev;
	/** Internally used disk reference count */
	uint16_t refcnt;
};

/**
+3 −0
Original line number Diff line number Diff line
@@ -41,6 +41,9 @@ extern "C" {
 * This call is made by the consumer before doing any IO calls so that the
 * disk or the backing device can do any initialization.
 *
 * Disk initialization is reference counted, so only the first successful call
 * to initialize a uninitialized disk will actually initialize the disk
 *
 * @param[in] pdrv          Disk name
 *
 * @return 0 on success, negative errno code on fail
Loading