Lines Matching refs:card

109 static inline unsigned int if_cs_read8(struct if_cs_card *card, uint reg)  in if_cs_read8()  argument
111 unsigned int val = ioread8(card->iobase + reg); in if_cs_read8()
116 static inline unsigned int if_cs_read16(struct if_cs_card *card, uint reg) in if_cs_read16() argument
118 unsigned int val = ioread16(card->iobase + reg); in if_cs_read16()
124 struct if_cs_card *card, in if_cs_read16_rep() argument
132 ioread16_rep(card->iobase + reg, buf, count); in if_cs_read16_rep()
135 static inline void if_cs_write8(struct if_cs_card *card, uint reg, u8 val) in if_cs_write8() argument
139 iowrite8(val, card->iobase + reg); in if_cs_write8()
142 static inline void if_cs_write16(struct if_cs_card *card, uint reg, u16 val) in if_cs_write16() argument
146 iowrite16(val, card->iobase + reg); in if_cs_write16()
150 struct if_cs_card *card, in if_cs_write16_rep() argument
158 iowrite16_rep(card->iobase + reg, buf, count); in if_cs_write16_rep()
174 static int if_cs_poll_while_fw_download(struct if_cs_card *card, uint addr, u8 reg) in if_cs_poll_while_fw_download() argument
179 u8 val = if_cs_read8(card, addr); in if_cs_poll_while_fw_download()
337 static inline void if_cs_enable_ints(struct if_cs_card *card) in if_cs_enable_ints() argument
340 if_cs_write16(card, IF_CS_HOST_INT_MASK, 0); in if_cs_enable_ints()
343 static inline void if_cs_disable_ints(struct if_cs_card *card) in if_cs_disable_ints() argument
346 if_cs_write16(card, IF_CS_HOST_INT_MASK, IF_CS_BIT_MASK); in if_cs_disable_ints()
354 struct if_cs_card *card = (struct if_cs_card *)priv->card; in if_cs_send_cmd() local
359 if_cs_disable_ints(card); in if_cs_send_cmd()
363 u16 status = if_cs_read16(card, IF_CS_CARD_STATUS); in if_cs_send_cmd()
373 if_cs_write16(card, IF_CS_CMD_LEN, nb); in if_cs_send_cmd()
375 if_cs_write16_rep(card, IF_CS_CMD, buf, nb / 2); in if_cs_send_cmd()
378 if_cs_write8(card, IF_CS_CMD, buf[nb-1]); in if_cs_send_cmd()
382 if_cs_write16(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND); in if_cs_send_cmd()
386 if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND); in if_cs_send_cmd()
390 if_cs_enable_ints(card); in if_cs_send_cmd()
400 struct if_cs_card *card = (struct if_cs_card *)priv->card; in if_cs_send_data() local
404 if_cs_disable_ints(card); in if_cs_send_data()
406 status = if_cs_read16(card, IF_CS_CARD_STATUS); in if_cs_send_data()
409 if_cs_write16(card, IF_CS_WRITE_LEN, nb); in if_cs_send_data()
412 if_cs_write16_rep(card, IF_CS_WRITE, buf, nb / 2); in if_cs_send_data()
414 if_cs_write8(card, IF_CS_WRITE, buf[nb-1]); in if_cs_send_data()
416 if_cs_write16(card, IF_CS_HOST_STATUS, IF_CS_BIT_TX); in if_cs_send_data()
417 if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_TX); in if_cs_send_data()
418 if_cs_enable_ints(card); in if_cs_send_data()
435 status = if_cs_read16(priv->card, IF_CS_CARD_STATUS); in if_cs_receive_cmdres()
442 *len = if_cs_read16(priv->card, IF_CS_RESP_LEN); in if_cs_receive_cmdres()
451 if_cs_read16_rep(priv->card, IF_CS_RESP, data, *len/sizeof(u16)); in if_cs_receive_cmdres()
453 data[*len-1] = if_cs_read8(priv->card, IF_CS_RESP); in if_cs_receive_cmdres()
478 len = if_cs_read16(priv->card, IF_CS_READ_LEN); in if_cs_receive_data()
495 if_cs_read16_rep(priv->card, IF_CS_READ, data, len/sizeof(u16)); in if_cs_receive_data()
497 data[len-1] = if_cs_read8(priv->card, IF_CS_READ); in if_cs_receive_data()
500 if_cs_write16(priv->card, IF_CS_HOST_STATUS, IF_CS_BIT_RX); in if_cs_receive_data()
501 if_cs_write16(priv->card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_RX); in if_cs_receive_data()
510 struct if_cs_card *card = data; in if_cs_interrupt() local
511 struct lbs_private *priv = card->priv; in if_cs_interrupt()
517 cause = if_cs_read16(card, IF_CS_CARD_INT_CAUSE); in if_cs_interrupt()
527 card->priv->surpriseremoved = 1; in if_cs_interrupt()
563 u16 status = if_cs_read16(priv->card, IF_CS_CARD_STATUS); in if_cs_interrupt()
564 if_cs_write16(priv->card, IF_CS_HOST_INT_CAUSE, in if_cs_interrupt()
570 if_cs_write16(card, IF_CS_CARD_INT_CAUSE, cause & IF_CS_BIT_MASK); in if_cs_interrupt()
588 static int if_cs_prog_helper(struct if_cs_card *card, const struct firmware *fw) in if_cs_prog_helper() argument
601 if (card->align_regs) in if_cs_prog_helper()
602 scratch = if_cs_read16(card, IF_CS_SCRATCH) >> 8; in if_cs_prog_helper()
604 scratch = if_cs_read8(card, IF_CS_SCRATCH); in if_cs_prog_helper()
635 if_cs_write16(card, IF_CS_CMD_LEN, count); in if_cs_prog_helper()
639 if_cs_write16_rep(card, IF_CS_CMD, in if_cs_prog_helper()
647 if_cs_write8(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND); in if_cs_prog_helper()
653 if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND); in if_cs_prog_helper()
659 ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_STATUS, in if_cs_prog_helper()
679 static int if_cs_prog_real(struct if_cs_card *card, const struct firmware *fw) in if_cs_prog_real() argument
690 ret = if_cs_poll_while_fw_download(card, IF_CS_SQ_READ_LOW, in if_cs_prog_real()
698 len = if_cs_read16(card, IF_CS_SQ_READ_LOW); in if_cs_prog_real()
716 if_cs_write16(card, IF_CS_CMD_LEN, len); in if_cs_prog_real()
718 if_cs_write16_rep(card, IF_CS_CMD, in if_cs_prog_real()
721 if_cs_write8(card, IF_CS_HOST_STATUS, IF_CS_BIT_COMMAND); in if_cs_prog_real()
722 if_cs_write16(card, IF_CS_HOST_INT_CAUSE, IF_CS_BIT_COMMAND); in if_cs_prog_real()
724 ret = if_cs_poll_while_fw_download(card, IF_CS_CARD_STATUS, in if_cs_prog_real()
732 ret = if_cs_poll_while_fw_download(card, IF_CS_SCRATCH, 0x5a); in if_cs_prog_real()
745 struct if_cs_card *card = priv->card; in if_cs_prog_firmware() local
753 ret = if_cs_prog_helper(card, helper); in if_cs_prog_firmware()
754 if (ret == 0 && (card->model != MODEL_8305)) in if_cs_prog_firmware()
755 ret = if_cs_prog_real(card, mainfw); in if_cs_prog_firmware()
760 ret = request_irq(card->p_dev->irq, if_cs_interrupt, in if_cs_prog_firmware()
761 IRQF_SHARED, DRV_NAME, card); in if_cs_prog_firmware()
771 if_cs_write16(card, IF_CS_CARD_INT_CAUSE, IF_CS_BIT_MASK); in if_cs_prog_firmware()
772 if_cs_enable_ints(card); in if_cs_prog_firmware()
778 free_irq(card->p_dev->irq, card); in if_cs_prog_firmware()
819 struct if_cs_card *card = p_dev->priv; in if_cs_release() local
823 free_irq(p_dev->irq, card); in if_cs_release()
825 if (card->iobase) in if_cs_release()
826 ioport_unmap(card->iobase); in if_cs_release()
851 struct if_cs_card *card; in if_cs_probe() local
855 card = kzalloc(sizeof(struct if_cs_card), GFP_KERNEL); in if_cs_probe()
856 if (!card) in if_cs_probe()
859 card->p_dev = p_dev; in if_cs_probe()
860 p_dev->priv = card; in if_cs_probe()
878 card->iobase = ioport_map(p_dev->resource[0]->start, in if_cs_probe()
880 if (!card->iobase) { in if_cs_probe()
899 card->align_regs = false; in if_cs_probe()
901 card->model = get_model(p_dev->manf_id, p_dev->card_id); in if_cs_probe()
902 if (card->model == MODEL_UNKNOWN) { in if_cs_probe()
910 prod_id = if_cs_read8(card, IF_CS_PRODUCT_ID); in if_cs_probe()
911 if (card->model == MODEL_8305) { in if_cs_probe()
912 card->align_regs = true; in if_cs_probe()
920 if ((card->model == MODEL_8381) && prod_id < IF_CS_CF8381_B3_REV) { in if_cs_probe()
926 if ((card->model == MODEL_8385) && prod_id < IF_CS_CF8385_B1_REV) { in if_cs_probe()
933 priv = lbs_add_card(card, &p_dev->dev); in if_cs_probe()
940 card->priv = priv; in if_cs_probe()
941 priv->card = card; in if_cs_probe()
948 ret = lbs_get_firmware_async(priv, &p_dev->dev, card->model, fw_table, in if_cs_probe()
960 ioport_unmap(card->iobase); in if_cs_probe()
971 struct if_cs_card *card = p_dev->priv; in if_cs_detach() local
975 lbs_stop_card(card->priv); in if_cs_detach()
976 lbs_remove_card(card->priv); in if_cs_detach()
977 if_cs_disable_ints(card); in if_cs_detach()
979 kfree(card); in if_cs_detach()