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);
183 mmc_spi_wait_unbusy(struct mmc_spi_host *host, unsigned long timeout)
185 return mmc_spi_skip(host, timeout, sizeof(host->data->status), 0);
188 static int mmc_spi_readtoken(struct mmc_spi_host *host, unsigned long timeout)
190 return mmc_spi_skip(host, timeout, 1, 0xff);
215 static int mmc_spi_response_get(struct mmc_spi_host *host,
219 u8 *cp = host->data->status;
220 u8 *end = cp + host->t.len;
243 cp = host->data->status;
258 value = mmc_spi_readbytes(host, 1);
275 value = mmc_spi_readbytes(host, 1);
278 cp = host->data->status;
320 mmc_spi_wait_unbusy(host, msecs_to_jiffies(timeout_ms));
330 value = mmc_spi_readbytes(host, 1);
333 cp = host->data->status;
353 value = mmc_spi_readbytes(host, 1);
356 cp = host->data->status;
374 dev_dbg(&host->spi->dev, "bad response type %04x\n",
382 dev_dbg(&host->spi->dev, "%s: resp %04x %08x\n",
391 mmc_cs_off(host);
402 mmc_spi_command_send(struct mmc_spi_host *host,
406 struct scratch *data = host->data;
480 dev_dbg(&host->spi->dev, " CMD%d, resp %s\n",
484 spi_message_init(&host->m);
486 t = &host->t;
491 spi_message_add_tail(t, &host->m);
493 status = spi_sync_locked(host->spi, &host->m);
495 dev_dbg(&host->spi->dev, " ... write returned %d\n", status);
501 return mmc_spi_response_get(host, cmd, cs_on);
514 struct mmc_spi_host *host,
519 struct scratch *scratch = host->data;
521 spi_message_init(&host->m);
527 t = &host->token;
535 spi_message_add_tail(t, &host->m);
541 t = &host->t;
543 t->tx_buf = host->ones;
545 spi_message_add_tail(t, &host->m);
547 t = &host->crc;
554 t->tx_buf = host->ones;
557 spi_message_add_tail(t, &host->m);
574 t = &host->early_status;
577 t->tx_buf = host->ones;
580 spi_message_add_tail(t, &host->m);
597 mmc_spi_writeblock(struct mmc_spi_host *host, struct spi_transfer *t,
600 struct spi_device *spi = host->spi;
602 struct scratch *scratch = host->data;
605 if (host->mmc->use_spi_crc)
608 status = spi_sync_locked(spi, &host->m);
642 /* host shall then issue MMC_STOP_TRANSMISSION */
646 /* host shall then issue MMC_STOP_TRANSMISSION,
671 return mmc_spi_wait_unbusy(host, timeout);
691 mmc_spi_readblock(struct mmc_spi_host *host, struct spi_transfer *t,
694 struct spi_device *spi = host->spi;
696 struct scratch *scratch = host->data;
703 status = mmc_spi_readbytes(host, 1);
708 status = mmc_spi_readtoken(host, timeout);
725 status = spi_sync_locked(spi, &host->m);
752 if (host->mmc->use_spi_crc) {
775 mmc_spi_data_do(struct mmc_spi_host *host, struct mmc_command *cmd,
778 struct spi_device *spi = host->spi;
788 mmc_spi_setup_data_message(host, multiple, direction);
789 t = &host->t;
822 status = mmc_spi_writeblock(host, t, timeout);
824 status = mmc_spi_readblock(host, t, timeout);
854 struct scratch *scratch = host->data;
865 INIT_LIST_HEAD(&host->m.transfers);
866 list_add(&host->early_status.transfer_list,
867 &host->m.transfers);
872 host->early_status.tx_buf = host->early_status.rx_buf;
873 host->early_status.len = statlen;
875 tmp = spi_sync_locked(spi, &host->m);
890 tmp = mmc_spi_wait_unbusy(host, timeout);
904 struct mmc_spi_host *host = mmc_priv(mmc);
917 dev_dbg(&host->spi->dev, "bogus command\n");
924 dev_dbg(&host->spi->dev, "bogus STOP command\n");
931 mmc_request_done(host->mmc, mrq);
938 spi_bus_lock(host->spi->master);
942 status = mmc_spi_command_send(host, mrq, mrq->cmd, mrq->data != NULL);
944 mmc_spi_data_do(host, mrq->cmd, mrq->data, mrq->data->blksz);
957 status = mmc_spi_command_send(host, mrq, &stop, 0);
964 status = mmc_spi_command_send(host, mrq, mrq->stop, 0);
966 mmc_cs_off(host);
970 spi_bus_unlock(host->spi->master);
972 mmc_request_done(host->mmc, mrq);
983 static void mmc_spi_initsequence(struct mmc_spi_host *host)
988 mmc_spi_wait_unbusy(host, msecs_to_jiffies(MMC_SPI_INIT_TIMEOUT_MS));
989 mmc_spi_readbytes(host, 10);
1010 host->spi->mode ^= SPI_CS_HIGH;
1011 if (spi_setup(host->spi) != 0) {
1013 dev_warn(&host->spi->dev,
1015 host->spi->mode ^= SPI_CS_HIGH;
1017 mmc_spi_readbytes(host, 18);
1019 host->spi->mode ^= SPI_CS_HIGH;
1020 if (spi_setup(host->spi) != 0) {
1022 dev_err(&host->spi->dev,
1040 struct mmc_spi_host *host = mmc_priv(mmc);
1042 if (host->power_mode != ios->power_mode) {
1045 canpower = host->pdata && host->pdata->setpower;
1047 dev_dbg(&host->spi->dev, "power %s (%d)%s\n",
1059 host->pdata->setpower(&host->spi->dev,
1062 msleep(host->powerup_msecs);
1068 mmc_spi_initsequence(host);
1083 host->spi->mode &= ~(SPI_CPOL|SPI_CPHA);
1084 mres = spi_setup(host->spi);
1086 dev_dbg(&host->spi->dev,
1089 if (spi_write(host->spi, &nullbyte, 1) < 0)
1090 dev_dbg(&host->spi->dev,
1104 host->spi->mode |= (SPI_CPOL|SPI_CPHA);
1105 mres = spi_setup(host->spi);
1107 dev_dbg(&host->spi->dev,
1112 host->power_mode = ios->power_mode;
1115 if (host->spi->max_speed_hz != ios->clock && ios->clock != 0) {
1118 host->spi->max_speed_hz = ios->clock;
1119 status = spi_setup(host->spi);
1120 dev_dbg(&host->spi->dev, " clock to %d Hz, %d\n",
1121 host->spi->max_speed_hz, status);
1142 struct mmc_spi_host *host = mmc_priv(mmc);
1143 u16 delay_msec = max(host->pdata->detect_delay, (u16)100);
1153 struct mmc_spi_host *host;
1193 mmc = mmc_alloc_host(sizeof(*host), &spi->dev);
1216 host = mmc_priv(mmc);
1217 host->mmc = mmc;
1218 host->spi = spi;
1220 host->ones = ones;
1227 host->pdata = mmc_spi_get_pdata(spi);
1228 if (host->pdata)
1229 mmc->ocr_avail = host->pdata->ocr_mask;
1234 if (host->pdata && host->pdata->setpower) {
1235 host->powerup_msecs = host->pdata->powerup_msecs;
1236 if (!host->powerup_msecs || host->powerup_msecs > 250)
1237 host->powerup_msecs = 250;
1241 host->data = kmalloc(sizeof(*host->data), GFP_KERNEL);
1242 if (!host->data)
1246 spi_message_init(&host->readback);
1248 spi_message_add_tail(&host->status, &host->readback);
1249 host->status.tx_buf = host->ones;
1250 host->status.rx_buf = &host->data->status;
1251 host->status.cs_change = 1;
1254 if (host->pdata && host->pdata->init) {
1255 status = host->pdata->init(&spi->dev, mmc_spi_detect_irq, mmc);
1261 if (host->pdata) {
1262 mmc->caps |= host->pdata->caps;
1263 mmc->caps2 |= host->pdata->caps2;
1295 dev_info(&spi->dev, "SD/MMC host %s%s%s%s\n",
1298 (host->pdata && host->pdata->setpower)
1307 kfree(host->data);
1320 struct mmc_spi_host *host = mmc_priv(mmc);
1323 if (host->pdata && host->pdata->exit)
1324 host->pdata->exit(&spi->dev, mmc);
1328 kfree(host->data);
1329 kfree(host->ones);
1361 MODULE_DESCRIPTION("SPI SD/MMC host driver");