Lines Matching defs:host
23 #include <linux/mmc/host.h>
139 static inline int mmc_cs_off(struct mmc_spi_host *host)
142 return spi_setup(host->spi);
145 static int mmc_spi_readbytes(struct mmc_spi_host *host, unsigned int len)
147 if (len > sizeof(*host->data)) {
152 host->status.len = len;
154 return spi_sync_locked(host->spi, &host->readback);
157 static int mmc_spi_skip(struct mmc_spi_host *host, unsigned long timeout,
160 u8 *cp = host->data->status;
167 status = mmc_spi_readbytes(host, n);
190 mmc_spi_wait_unbusy(struct mmc_spi_host *host, unsigned long timeout)
192 return mmc_spi_skip(host, timeout, sizeof(host->data->status), 0);
195 static int mmc_spi_readtoken(struct mmc_spi_host *host, unsigned long timeout)
197 return mmc_spi_skip(host, timeout, 1, 0xff);
222 static int mmc_spi_response_get(struct mmc_spi_host *host,
226 u8 *cp = host->data->status;
227 u8 *end = cp + host->t.len;
250 cp = host->data->status;
265 value = mmc_spi_readbytes(host, 1);
282 value = mmc_spi_readbytes(host, 1);
285 cp = host->data->status;
327 mmc_spi_wait_unbusy(host, msecs_to_jiffies(timeout_ms));
337 value = mmc_spi_readbytes(host, 1);
340 cp = host->data->status;
360 value = mmc_spi_readbytes(host, 1);
363 cp = host->data->status;
381 dev_dbg(&host->spi->dev, "bad response type %04x\n",
389 dev_dbg(&host->spi->dev, "%s: resp %04x %08x\n",
398 mmc_cs_off(host);
409 mmc_spi_command_send(struct mmc_spi_host *host,
413 struct scratch *data = host->data;
487 dev_dbg(&host->spi->dev, " mmc_spi: CMD%d, resp %s\n",
491 spi_message_init(&host->m);
493 t = &host->t;
498 spi_message_add_tail(t, &host->m);
500 status = spi_sync_locked(host->spi, &host->m);
502 dev_dbg(&host->spi->dev, " ... write returned %d\n", status);
508 return mmc_spi_response_get(host, cmd, cs_on);
521 struct mmc_spi_host *host,
526 struct scratch *scratch = host->data;
528 spi_message_init(&host->m);
534 t = &host->token;
542 spi_message_add_tail(t, &host->m);
548 t = &host->t;
550 t->tx_buf = host->ones;
552 spi_message_add_tail(t, &host->m);
554 t = &host->crc;
561 t->tx_buf = host->ones;
564 spi_message_add_tail(t, &host->m);
581 t = &host->early_status;
584 t->tx_buf = host->ones;
587 spi_message_add_tail(t, &host->m);
604 mmc_spi_writeblock(struct mmc_spi_host *host, struct spi_transfer *t,
607 struct spi_device *spi = host->spi;
609 struct scratch *scratch = host->data;
612 if (host->mmc->use_spi_crc)
615 status = spi_sync_locked(spi, &host->m);
649 /* host shall then issue MMC_STOP_TRANSMISSION */
653 /* host shall then issue MMC_STOP_TRANSMISSION,
678 return mmc_spi_wait_unbusy(host, timeout);
698 mmc_spi_readblock(struct mmc_spi_host *host, struct spi_transfer *t,
701 struct spi_device *spi = host->spi;
703 struct scratch *scratch = host->data;
710 status = mmc_spi_readbytes(host, 1);
715 status = mmc_spi_readtoken(host, timeout);
732 status = spi_sync_locked(spi, &host->m);
759 if (host->mmc->use_spi_crc) {
782 mmc_spi_data_do(struct mmc_spi_host *host, struct mmc_command *cmd,
785 struct spi_device *spi = host->spi;
795 mmc_spi_setup_data_message(host, multiple, direction);
796 t = &host->t;
826 dev_dbg(&host->spi->dev,
832 status = mmc_spi_writeblock(host, t, timeout);
834 status = mmc_spi_readblock(host, t, timeout);
866 struct scratch *scratch = host->data;
877 INIT_LIST_HEAD(&host->m.transfers);
878 list_add(&host->early_status.transfer_list,
879 &host->m.transfers);
884 host->early_status.tx_buf = host->early_status.rx_buf;
885 host->early_status.len = statlen;
887 tmp = spi_sync_locked(spi, &host->m);
902 tmp = mmc_spi_wait_unbusy(host, timeout);
916 struct mmc_spi_host *host = mmc_priv(mmc);
929 dev_dbg(&host->spi->dev, "bogus command\n");
936 dev_dbg(&host->spi->dev, "bogus STOP command\n");
943 mmc_request_done(host->mmc, mrq);
950 spi_bus_lock(host->spi->master);
954 status = mmc_spi_command_send(host, mrq, mrq->cmd, mrq->data != NULL);
956 mmc_spi_data_do(host, mrq->cmd, mrq->data, mrq->data->blksz);
969 status = mmc_spi_command_send(host, mrq, &stop, 0);
976 status = mmc_spi_command_send(host, mrq, mrq->stop, 0);
978 mmc_cs_off(host);
982 spi_bus_unlock(host->spi->master);
984 mmc_request_done(host->mmc, mrq);
995 static void mmc_spi_initsequence(struct mmc_spi_host *host)
1000 mmc_spi_wait_unbusy(host, msecs_to_jiffies(MMC_SPI_INIT_TIMEOUT_MS));
1001 mmc_spi_readbytes(host, 10);
1022 host->spi->mode ^= SPI_CS_HIGH;
1023 if (spi_setup(host->spi) != 0) {
1025 dev_warn(&host->spi->dev,
1027 host->spi->mode ^= SPI_CS_HIGH;
1029 mmc_spi_readbytes(host, 18);
1031 host->spi->mode ^= SPI_CS_HIGH;
1032 if (spi_setup(host->spi) != 0) {
1034 dev_err(&host->spi->dev,
1052 struct mmc_spi_host *host = mmc_priv(mmc);
1054 if (host->power_mode != ios->power_mode) {
1057 canpower = host->pdata && host->pdata->setpower;
1059 dev_dbg(&host->spi->dev, "mmc_spi: power %s (%d)%s\n",
1071 host->pdata->setpower(&host->spi->dev,
1074 msleep(host->powerup_msecs);
1080 mmc_spi_initsequence(host);
1095 host->spi->mode &= ~(SPI_CPOL|SPI_CPHA);
1096 mres = spi_setup(host->spi);
1098 dev_dbg(&host->spi->dev,
1101 if (spi_write(host->spi, &nullbyte, 1) < 0)
1102 dev_dbg(&host->spi->dev,
1116 host->spi->mode |= (SPI_CPOL|SPI_CPHA);
1117 mres = spi_setup(host->spi);
1119 dev_dbg(&host->spi->dev,
1124 host->power_mode = ios->power_mode;
1127 if (host->spi->max_speed_hz != ios->clock && ios->clock != 0) {
1130 host->spi->max_speed_hz = ios->clock;
1131 status = spi_setup(host->spi);
1132 dev_dbg(&host->spi->dev,
1134 host->spi->max_speed_hz, status);
1155 struct mmc_spi_host *host = mmc_priv(mmc);
1156 u16 delay_msec = max(host->pdata->detect_delay, (u16)100);
1166 struct mmc_spi_host *host;
1206 mmc = mmc_alloc_host(sizeof(*host), &spi->dev);
1229 host = mmc_priv(mmc);
1230 host->mmc = mmc;
1231 host->spi = spi;
1233 host->ones = ones;
1238 host->pdata = mmc_spi_get_pdata(spi);
1239 if (host->pdata)
1240 mmc->ocr_avail = host->pdata->ocr_mask;
1245 if (host->pdata && host->pdata->setpower) {
1246 host->powerup_msecs = host->pdata->powerup_msecs;
1247 if (!host->powerup_msecs || host->powerup_msecs > 250)
1248 host->powerup_msecs = 250;
1254 host->data = kmalloc(sizeof(*host->data), GFP_KERNEL);
1255 if (!host->data)
1259 spi_message_init(&host->readback);
1261 spi_message_add_tail(&host->status, &host->readback);
1262 host->status.tx_buf = host->ones;
1263 host->status.rx_buf = &host->data->status;
1264 host->status.cs_change = 1;
1267 if (host->pdata && host->pdata->init) {
1268 status = host->pdata->init(&spi->dev, mmc_spi_detect_irq, mmc);
1274 if (host->pdata) {
1275 mmc->caps |= host->pdata->caps;
1276 mmc->caps2 |= host->pdata->caps2;
1308 dev_info(&spi->dev, "SD/MMC host %s%s%s%s\n",
1311 (host->pdata && host->pdata->setpower)
1320 kfree(host->data);
1333 struct mmc_spi_host *host = mmc_priv(mmc);
1336 if (host->pdata && host->pdata->exit)
1337 host->pdata->exit(&spi->dev, mmc);
1341 kfree(host->data);
1342 kfree(host->ones);
1368 MODULE_DESCRIPTION("SPI SD/MMC host driver");