Lines Matching refs:host

22 #include <linux/mmc/host.h>
138 static inline int mmc_cs_off(struct mmc_spi_host *host)
141 return spi_setup(host->spi);
144 static int mmc_spi_readbytes(struct mmc_spi_host *host, unsigned int len)
146 if (len > sizeof(*host->data)) {
151 host->status.len = len;
153 return spi_sync_locked(host->spi, &host->readback);
156 static int mmc_spi_skip(struct mmc_spi_host *host, unsigned long timeout,
159 u8 *cp = host->data->status;
166 status = mmc_spi_readbytes(host, n);
182 mmc_spi_wait_unbusy(struct mmc_spi_host *host, unsigned long timeout)
184 return mmc_spi_skip(host, timeout, sizeof(host->data->status), 0);
187 static int mmc_spi_readtoken(struct mmc_spi_host *host, unsigned long timeout)
189 return mmc_spi_skip(host, timeout, 1, 0xff);
214 static int mmc_spi_response_get(struct mmc_spi_host *host,
218 u8 *cp = host->data->status;
219 u8 *end = cp + host->t.len;
242 cp = host->data->status;
257 value = mmc_spi_readbytes(host, 1);
274 value = mmc_spi_readbytes(host, 1);
277 cp = host->data->status;
319 mmc_spi_wait_unbusy(host, msecs_to_jiffies(timeout_ms));
329 value = mmc_spi_readbytes(host, 1);
332 cp = host->data->status;
352 value = mmc_spi_readbytes(host, 1);
355 cp = host->data->status;
373 dev_dbg(&host->spi->dev, "bad response type %04x\n",
381 dev_dbg(&host->spi->dev, "%s: resp %04x %08x\n",
390 mmc_cs_off(host);
401 mmc_spi_command_send(struct mmc_spi_host *host,
405 struct scratch *data = host->data;
479 dev_dbg(&host->spi->dev, " CMD%d, resp %s\n",
483 spi_message_init(&host->m);
485 t = &host->t;
490 spi_message_add_tail(t, &host->m);
492 status = spi_sync_locked(host->spi, &host->m);
494 dev_dbg(&host->spi->dev, " ... write returned %d\n", status);
500 return mmc_spi_response_get(host, cmd, cs_on);
512 mmc_spi_setup_data_message(struct mmc_spi_host *host, bool multiple, bool write)
515 struct scratch *scratch = host->data;
517 spi_message_init(&host->m);
523 t = &host->token;
531 spi_message_add_tail(t, &host->m);
537 t = &host->t;
539 t->tx_buf = host->ones;
541 spi_message_add_tail(t, &host->m);
543 t = &host->crc;
550 t->tx_buf = host->ones;
553 spi_message_add_tail(t, &host->m);
570 t = &host->early_status;
573 t->tx_buf = host->ones;
576 spi_message_add_tail(t, &host->m);
593 mmc_spi_writeblock(struct mmc_spi_host *host, struct spi_transfer *t,
596 struct spi_device *spi = host->spi;
598 struct scratch *scratch = host->data;
601 if (host->mmc->use_spi_crc)
604 status = spi_sync_locked(spi, &host->m);
638 /* host shall then issue MMC_STOP_TRANSMISSION */
642 /* host shall then issue MMC_STOP_TRANSMISSION,
667 return mmc_spi_wait_unbusy(host, timeout);
687 mmc_spi_readblock(struct mmc_spi_host *host, struct spi_transfer *t,
690 struct spi_device *spi = host->spi;
692 struct scratch *scratch = host->data;
699 status = mmc_spi_readbytes(host, 1);
704 status = mmc_spi_readtoken(host, timeout);
721 status = spi_sync_locked(spi, &host->m);
748 if (host->mmc->use_spi_crc) {
771 mmc_spi_data_do(struct mmc_spi_host *host, struct mmc_command *cmd,
774 struct spi_device *spi = host->spi;
784 mmc_spi_setup_data_message(host, multiple, write);
785 t = &host->t;
818 status = mmc_spi_writeblock(host, t, timeout);
820 status = mmc_spi_readblock(host, t, timeout);
852 struct scratch *scratch = host->data;
863 INIT_LIST_HEAD(&host->m.transfers);
864 list_add(&host->early_status.transfer_list,
865 &host->m.transfers);
870 host->early_status.tx_buf = host->early_status.rx_buf;
871 host->early_status.len = statlen;
873 tmp = spi_sync_locked(spi, &host->m);
888 tmp = mmc_spi_wait_unbusy(host, timeout);
902 struct mmc_spi_host *host = mmc_priv(mmc);
915 dev_dbg(&host->spi->dev, "bogus command\n");
922 dev_dbg(&host->spi->dev, "bogus STOP command\n");
929 mmc_request_done(host->mmc, mrq);
936 spi_bus_lock(host->spi->controller);
940 status = mmc_spi_command_send(host, mrq, mrq->cmd, mrq->data != NULL);
942 mmc_spi_data_do(host, mrq->cmd, mrq->data, mrq->data->blksz);
955 status = mmc_spi_command_send(host, mrq, &stop, 0);
962 status = mmc_spi_command_send(host, mrq, mrq->stop, 0);
964 mmc_cs_off(host);
968 spi_bus_unlock(host->spi->controller);
970 mmc_request_done(host->mmc, mrq);
981 static void mmc_spi_initsequence(struct mmc_spi_host *host)
986 mmc_spi_wait_unbusy(host, msecs_to_jiffies(MMC_SPI_INIT_TIMEOUT_MS));
987 mmc_spi_readbytes(host, 10);
1008 host->spi->mode ^= SPI_CS_HIGH;
1009 if (spi_setup(host->spi) != 0) {
1011 dev_warn(&host->spi->dev,
1013 host->spi->mode ^= SPI_CS_HIGH;
1015 mmc_spi_readbytes(host, 18);
1017 host->spi->mode ^= SPI_CS_HIGH;
1018 if (spi_setup(host->spi) != 0) {
1020 dev_err(&host->spi->dev,
1038 struct mmc_spi_host *host = mmc_priv(mmc);
1040 if (host->power_mode != ios->power_mode) {
1043 canpower = host->pdata && host->pdata->setpower;
1045 dev_dbg(&host->spi->dev, "power %s (%d)%s\n",
1057 host->pdata->setpower(&host->spi->dev,
1060 msleep(host->powerup_msecs);
1066 mmc_spi_initsequence(host);
1081 host->spi->mode &= ~(SPI_CPOL|SPI_CPHA);
1082 mres = spi_setup(host->spi);
1084 dev_dbg(&host->spi->dev,
1087 if (spi_write(host->spi, &nullbyte, 1) < 0)
1088 dev_dbg(&host->spi->dev,
1102 host->spi->mode |= (SPI_CPOL|SPI_CPHA);
1103 mres = spi_setup(host->spi);
1105 dev_dbg(&host->spi->dev,
1110 host->power_mode = ios->power_mode;
1113 if (host->spi->max_speed_hz != ios->clock && ios->clock != 0) {
1116 host->spi->max_speed_hz = ios->clock;
1117 status = spi_setup(host->spi);
1118 dev_dbg(&host->spi->dev, " clock to %d Hz, %d\n",
1119 host->spi->max_speed_hz, status);
1140 struct mmc_spi_host *host = mmc_priv(mmc);
1141 u16 delay_msec = max(host->pdata->detect_delay, (u16)100);
1151 struct mmc_spi_host *host;
1191 mmc = mmc_alloc_host(sizeof(*host), &spi->dev);
1214 host = mmc_priv(mmc);
1215 host->mmc = mmc;
1216 host->spi = spi;
1218 host->ones = ones;
1225 host->pdata = mmc_spi_get_pdata(spi);
1226 if (host->pdata)
1227 mmc->ocr_avail = host->pdata->ocr_mask;
1232 if (host->pdata && host->pdata->setpower) {
1233 host->powerup_msecs = host->pdata->powerup_msecs;
1234 if (!host->powerup_msecs || host->powerup_msecs > 250)
1235 host->powerup_msecs = 250;
1239 host->data = kmalloc(sizeof(*host->data), GFP_KERNEL);
1240 if (!host->data)
1244 spi_message_init(&host->readback);
1246 spi_message_add_tail(&host->status, &host->readback);
1247 host->status.tx_buf = host->ones;
1248 host->status.rx_buf = &host->data->status;
1249 host->status.cs_change = 1;
1252 if (host->pdata && host->pdata->init) {
1253 status = host->pdata->init(&spi->dev, mmc_spi_detect_irq, mmc);
1259 if (host->pdata) {
1260 mmc->caps |= host->pdata->caps;
1261 mmc->caps2 |= host->pdata->caps2;
1293 dev_info(&spi->dev, "SD/MMC host %s%s%s%s\n",
1296 (host->pdata && host->pdata->setpower)
1305 kfree(host->data);
1318 struct mmc_spi_host *host = mmc_priv(mmc);
1321 if (host->pdata && host->pdata->exit)
1322 host->pdata->exit(&spi->dev, mmc);
1326 kfree(host->data);
1327 kfree(host->ones);
1359 MODULE_DESCRIPTION("SPI SD/MMC host driver");