Lines Matching refs:host

138 static inline int mmc_cs_off(struct mmc_spi_host *host)  in mmc_cs_off()  argument
141 return spi_setup(host->spi); in mmc_cs_off()
144 static int mmc_spi_readbytes(struct mmc_spi_host *host, unsigned int len) in mmc_spi_readbytes() argument
146 if (len > sizeof(*host->data)) { in mmc_spi_readbytes()
151 host->status.len = len; in mmc_spi_readbytes()
153 return spi_sync_locked(host->spi, &host->readback); in mmc_spi_readbytes()
156 static int mmc_spi_skip(struct mmc_spi_host *host, unsigned long timeout, in mmc_spi_skip() argument
159 u8 *cp = host->data->status; in mmc_spi_skip()
166 status = mmc_spi_readbytes(host, n); in mmc_spi_skip()
182 mmc_spi_wait_unbusy(struct mmc_spi_host *host, unsigned long timeout) in mmc_spi_wait_unbusy() argument
184 return mmc_spi_skip(host, timeout, sizeof(host->data->status), 0); in mmc_spi_wait_unbusy()
187 static int mmc_spi_readtoken(struct mmc_spi_host *host, unsigned long timeout) in mmc_spi_readtoken() argument
189 return mmc_spi_skip(host, timeout, 1, 0xff); in mmc_spi_readtoken()
214 static int mmc_spi_response_get(struct mmc_spi_host *host, in mmc_spi_response_get() argument
218 u8 *cp = host->data->status; in mmc_spi_response_get()
219 u8 *end = cp + host->t.len; in mmc_spi_response_get()
238 cp = host->data->status; in mmc_spi_response_get()
253 value = mmc_spi_readbytes(host, 1); in mmc_spi_response_get()
270 value = mmc_spi_readbytes(host, 1); in mmc_spi_response_get()
273 cp = host->data->status; in mmc_spi_response_get()
315 mmc_spi_wait_unbusy(host, msecs_to_jiffies(timeout_ms)); in mmc_spi_response_get()
325 value = mmc_spi_readbytes(host, 1); in mmc_spi_response_get()
328 cp = host->data->status; in mmc_spi_response_get()
348 value = mmc_spi_readbytes(host, 1); in mmc_spi_response_get()
351 cp = host->data->status; in mmc_spi_response_get()
369 dev_dbg(&host->spi->dev, "bad response type %04x\n", in mmc_spi_response_get()
377 dev_dbg(&host->spi->dev, in mmc_spi_response_get()
387 mmc_cs_off(host); in mmc_spi_response_get()
398 mmc_spi_command_send(struct mmc_spi_host *host, in mmc_spi_command_send() argument
402 struct scratch *data = host->data; in mmc_spi_command_send()
476 dev_dbg(&host->spi->dev, " CMD%d, resp %s\n", in mmc_spi_command_send()
480 spi_message_init(&host->m); in mmc_spi_command_send()
482 t = &host->t; in mmc_spi_command_send()
487 spi_message_add_tail(t, &host->m); in mmc_spi_command_send()
489 status = spi_sync_locked(host->spi, &host->m); in mmc_spi_command_send()
491 dev_dbg(&host->spi->dev, " ... write returned %d\n", status); in mmc_spi_command_send()
497 return mmc_spi_response_get(host, cmd, cs_on); in mmc_spi_command_send()
509 mmc_spi_setup_data_message(struct mmc_spi_host *host, bool multiple, bool write) in mmc_spi_setup_data_message() argument
512 struct scratch *scratch = host->data; in mmc_spi_setup_data_message()
514 spi_message_init(&host->m); in mmc_spi_setup_data_message()
520 t = &host->token; in mmc_spi_setup_data_message()
528 spi_message_add_tail(t, &host->m); in mmc_spi_setup_data_message()
534 t = &host->t; in mmc_spi_setup_data_message()
536 t->tx_buf = host->ones; in mmc_spi_setup_data_message()
538 spi_message_add_tail(t, &host->m); in mmc_spi_setup_data_message()
540 t = &host->crc; in mmc_spi_setup_data_message()
547 t->tx_buf = host->ones; in mmc_spi_setup_data_message()
550 spi_message_add_tail(t, &host->m); in mmc_spi_setup_data_message()
567 t = &host->early_status; in mmc_spi_setup_data_message()
570 t->tx_buf = host->ones; in mmc_spi_setup_data_message()
573 spi_message_add_tail(t, &host->m); in mmc_spi_setup_data_message()
590 mmc_spi_writeblock(struct mmc_spi_host *host, struct spi_transfer *t, in mmc_spi_writeblock() argument
593 struct spi_device *spi = host->spi; in mmc_spi_writeblock()
595 struct scratch *scratch = host->data; in mmc_spi_writeblock()
598 if (host->mmc->use_spi_crc) in mmc_spi_writeblock()
601 status = spi_sync_locked(spi, &host->m); in mmc_spi_writeblock()
664 return mmc_spi_wait_unbusy(host, timeout); in mmc_spi_writeblock()
684 mmc_spi_readblock(struct mmc_spi_host *host, struct spi_transfer *t, in mmc_spi_readblock() argument
687 struct spi_device *spi = host->spi; in mmc_spi_readblock()
689 struct scratch *scratch = host->data; in mmc_spi_readblock()
696 status = mmc_spi_readbytes(host, 1); in mmc_spi_readblock()
701 status = mmc_spi_readtoken(host, timeout); in mmc_spi_readblock()
718 status = spi_sync_locked(spi, &host->m); in mmc_spi_readblock()
745 if (host->mmc->use_spi_crc) { in mmc_spi_readblock()
768 mmc_spi_data_do(struct mmc_spi_host *host, struct mmc_command *cmd, in mmc_spi_data_do() argument
771 struct spi_device *spi = host->spi; in mmc_spi_data_do()
781 mmc_spi_setup_data_message(host, multiple, write); in mmc_spi_data_do()
782 t = &host->t; in mmc_spi_data_do()
815 status = mmc_spi_writeblock(host, t, timeout); in mmc_spi_data_do()
817 status = mmc_spi_readblock(host, t, timeout); in mmc_spi_data_do()
849 struct scratch *scratch = host->data; in mmc_spi_data_do()
860 INIT_LIST_HEAD(&host->m.transfers); in mmc_spi_data_do()
861 list_add(&host->early_status.transfer_list, in mmc_spi_data_do()
862 &host->m.transfers); in mmc_spi_data_do()
867 host->early_status.tx_buf = host->early_status.rx_buf; in mmc_spi_data_do()
868 host->early_status.len = statlen; in mmc_spi_data_do()
870 tmp = spi_sync_locked(spi, &host->m); in mmc_spi_data_do()
885 tmp = mmc_spi_wait_unbusy(host, timeout); in mmc_spi_data_do()
899 struct mmc_spi_host *host = mmc_priv(mmc); in mmc_spi_request() local
912 dev_dbg(&host->spi->dev, "bogus command\n"); in mmc_spi_request()
919 dev_dbg(&host->spi->dev, "bogus STOP command\n"); in mmc_spi_request()
926 mmc_request_done(host->mmc, mrq); in mmc_spi_request()
933 spi_bus_lock(host->spi->controller); in mmc_spi_request()
937 status = mmc_spi_command_send(host, mrq, mrq->cmd, mrq->data != NULL); in mmc_spi_request()
939 mmc_spi_data_do(host, mrq->cmd, mrq->data, mrq->data->blksz); in mmc_spi_request()
952 status = mmc_spi_command_send(host, mrq, &stop, 0); in mmc_spi_request()
959 status = mmc_spi_command_send(host, mrq, mrq->stop, 0); in mmc_spi_request()
961 mmc_cs_off(host); in mmc_spi_request()
965 spi_bus_unlock(host->spi->controller); in mmc_spi_request()
967 mmc_request_done(host->mmc, mrq); in mmc_spi_request()
978 static void mmc_spi_initsequence(struct mmc_spi_host *host) in mmc_spi_initsequence() argument
983 mmc_spi_wait_unbusy(host, msecs_to_jiffies(MMC_SPI_INIT_TIMEOUT_MS)); in mmc_spi_initsequence()
984 mmc_spi_readbytes(host, 10); in mmc_spi_initsequence()
1005 host->spi->mode ^= SPI_CS_HIGH; in mmc_spi_initsequence()
1006 if (spi_setup(host->spi) != 0) { in mmc_spi_initsequence()
1008 dev_warn(&host->spi->dev, in mmc_spi_initsequence()
1010 host->spi->mode ^= SPI_CS_HIGH; in mmc_spi_initsequence()
1012 mmc_spi_readbytes(host, 18); in mmc_spi_initsequence()
1014 host->spi->mode ^= SPI_CS_HIGH; in mmc_spi_initsequence()
1015 if (spi_setup(host->spi) != 0) { in mmc_spi_initsequence()
1017 dev_err(&host->spi->dev, in mmc_spi_initsequence()
1035 struct mmc_spi_host *host = mmc_priv(mmc); in mmc_spi_set_ios() local
1037 if (host->power_mode != ios->power_mode) { in mmc_spi_set_ios()
1040 canpower = host->pdata && host->pdata->setpower; in mmc_spi_set_ios()
1042 dev_dbg(&host->spi->dev, "power %s (%d)%s\n", in mmc_spi_set_ios()
1054 host->pdata->setpower(&host->spi->dev, in mmc_spi_set_ios()
1057 msleep(host->powerup_msecs); in mmc_spi_set_ios()
1063 mmc_spi_initsequence(host); in mmc_spi_set_ios()
1078 host->spi->mode &= ~(SPI_CPOL|SPI_CPHA); in mmc_spi_set_ios()
1079 mres = spi_setup(host->spi); in mmc_spi_set_ios()
1081 dev_dbg(&host->spi->dev, in mmc_spi_set_ios()
1084 if (spi_write(host->spi, &nullbyte, 1) < 0) in mmc_spi_set_ios()
1085 dev_dbg(&host->spi->dev, in mmc_spi_set_ios()
1099 host->spi->mode |= (SPI_CPOL|SPI_CPHA); in mmc_spi_set_ios()
1100 mres = spi_setup(host->spi); in mmc_spi_set_ios()
1102 dev_dbg(&host->spi->dev, in mmc_spi_set_ios()
1107 host->power_mode = ios->power_mode; in mmc_spi_set_ios()
1110 if (host->spi->max_speed_hz != ios->clock && ios->clock != 0) { in mmc_spi_set_ios()
1113 host->spi->max_speed_hz = ios->clock; in mmc_spi_set_ios()
1114 status = spi_setup(host->spi); in mmc_spi_set_ios()
1115 dev_dbg(&host->spi->dev, " clock to %d Hz, %d\n", in mmc_spi_set_ios()
1116 host->spi->max_speed_hz, status); in mmc_spi_set_ios()
1137 struct mmc_spi_host *host = mmc_priv(mmc); in mmc_spi_detect_irq() local
1138 u16 delay_msec = max(host->pdata->detect_delay, (u16)100); in mmc_spi_detect_irq()
1148 struct mmc_spi_host *host; in mmc_spi_probe() local
1188 mmc = devm_mmc_alloc_host(&spi->dev, sizeof(*host)); in mmc_spi_probe()
1214 host = mmc_priv(mmc); in mmc_spi_probe()
1215 host->mmc = mmc; in mmc_spi_probe()
1216 host->spi = spi; in mmc_spi_probe()
1218 host->ones = ones; in mmc_spi_probe()
1225 host->pdata = mmc_spi_get_pdata(spi); in mmc_spi_probe()
1226 if (host->pdata) in mmc_spi_probe()
1227 mmc->ocr_avail = host->pdata->ocr_mask; in mmc_spi_probe()
1232 if (host->pdata && host->pdata->setpower) { in mmc_spi_probe()
1233 host->powerup_msecs = host->pdata->powerup_msecs; in mmc_spi_probe()
1234 if (!host->powerup_msecs || host->powerup_msecs > 250) in mmc_spi_probe()
1235 host->powerup_msecs = 250; in mmc_spi_probe()
1239 host->data = kmalloc_obj(*host->data); in mmc_spi_probe()
1240 if (!host->data) in mmc_spi_probe()
1244 spi_message_init(&host->readback); in mmc_spi_probe()
1246 spi_message_add_tail(&host->status, &host->readback); in mmc_spi_probe()
1247 host->status.tx_buf = host->ones; in mmc_spi_probe()
1248 host->status.rx_buf = &host->data->status; in mmc_spi_probe()
1249 host->status.cs_change = 1; in mmc_spi_probe()
1252 if (host->pdata && host->pdata->init) { in mmc_spi_probe()
1253 status = host->pdata->init(&spi->dev, mmc_spi_detect_irq, mmc); in mmc_spi_probe()
1259 if (host->pdata) { in mmc_spi_probe()
1260 mmc->caps |= host->pdata->caps; in mmc_spi_probe()
1261 mmc->caps2 |= host->pdata->caps2; in mmc_spi_probe()
1296 (host->pdata && host->pdata->setpower) in mmc_spi_probe()
1305 kfree(host->data); in mmc_spi_probe()
1317 struct mmc_spi_host *host = mmc_priv(mmc); in mmc_spi_remove() local
1320 if (host->pdata && host->pdata->exit) in mmc_spi_remove()
1321 host->pdata->exit(&spi->dev, mmc); in mmc_spi_remove()
1325 kfree(host->data); in mmc_spi_remove()
1326 kfree(host->ones); in mmc_spi_remove()