Lines Matching refs:spi

245 	struct spi_device *spi;  member
275 static inline int mcp251x_is_##_model(struct spi_device *spi) \
277 struct mcp251x_priv *priv = spi_get_drvdata(spi); \
311 static int mcp251x_spi_trans(struct spi_device *spi, int len) in mcp251x_spi_trans() argument
313 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_spi_trans()
333 ret = spi_sync(spi, &m); in mcp251x_spi_trans()
335 dev_err(&spi->dev, "spi transfer failed: ret = %d\n", ret); in mcp251x_spi_trans()
339 static u8 mcp251x_read_reg(struct spi_device *spi, uint8_t reg) in mcp251x_read_reg() argument
341 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_read_reg()
347 mcp251x_spi_trans(spi, 3); in mcp251x_read_reg()
353 static void mcp251x_read_2regs(struct spi_device *spi, uint8_t reg, in mcp251x_read_2regs() argument
356 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_read_2regs()
361 mcp251x_spi_trans(spi, 4); in mcp251x_read_2regs()
367 static void mcp251x_write_reg(struct spi_device *spi, u8 reg, uint8_t val) in mcp251x_write_reg() argument
369 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_write_reg()
375 mcp251x_spi_trans(spi, 3); in mcp251x_write_reg()
378 static void mcp251x_write_bits(struct spi_device *spi, u8 reg, in mcp251x_write_bits() argument
381 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_write_bits()
388 mcp251x_spi_trans(spi, 4); in mcp251x_write_bits()
391 static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf, in mcp251x_hw_tx_frame() argument
394 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_tx_frame()
396 if (mcp251x_is_2510(spi)) { in mcp251x_hw_tx_frame()
400 mcp251x_write_reg(spi, TXBCTRL(tx_buf_idx) + i, in mcp251x_hw_tx_frame()
404 mcp251x_spi_trans(spi, TXBDAT_OFF + len); in mcp251x_hw_tx_frame()
408 static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame, in mcp251x_hw_tx() argument
411 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_tx()
432 mcp251x_hw_tx_frame(spi, buf, frame->can_dlc, tx_buf_idx); in mcp251x_hw_tx()
436 mcp251x_spi_trans(priv->spi, 1); in mcp251x_hw_tx()
439 static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf, in mcp251x_hw_rx_frame() argument
442 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_rx_frame()
444 if (mcp251x_is_2510(spi)) { in mcp251x_hw_rx_frame()
448 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i); in mcp251x_hw_rx_frame()
452 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i); in mcp251x_hw_rx_frame()
455 mcp251x_spi_trans(spi, SPI_TRANSFER_BUF_LEN); in mcp251x_hw_rx_frame()
460 static void mcp251x_hw_rx(struct spi_device *spi, int buf_idx) in mcp251x_hw_rx() argument
462 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_rx()
469 dev_err(&spi->dev, "cannot allocate RX skb\n"); in mcp251x_hw_rx()
474 mcp251x_hw_rx_frame(spi, buf, buf_idx); in mcp251x_hw_rx()
509 static void mcp251x_hw_sleep(struct spi_device *spi) in mcp251x_hw_sleep() argument
511 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_SLEEP); in mcp251x_hw_sleep()
518 struct spi_device *spi = priv->spi; in mcp251x_hard_start_xmit() local
521 dev_warn(&spi->dev, "hard_xmit called while tx busy\n"); in mcp251x_hard_start_xmit()
556 static int mcp251x_set_normal_mode(struct spi_device *spi) in mcp251x_set_normal_mode() argument
558 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_set_normal_mode()
562 mcp251x_write_reg(spi, CANINTE, in mcp251x_set_normal_mode()
568 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LOOPBACK); in mcp251x_set_normal_mode()
571 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LISTEN_ONLY); in mcp251x_set_normal_mode()
574 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_NORMAL); in mcp251x_set_normal_mode()
578 while (mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK) { in mcp251x_set_normal_mode()
581 dev_err(&spi->dev, "MCP251x didn't" in mcp251x_set_normal_mode()
595 struct spi_device *spi = priv->spi; in mcp251x_do_set_bittiming() local
597 mcp251x_write_reg(spi, CNF1, ((bt->sjw - 1) << CNF1_SJW_SHIFT) | in mcp251x_do_set_bittiming()
599 mcp251x_write_reg(spi, CNF2, CNF2_BTLMODE | in mcp251x_do_set_bittiming()
604 mcp251x_write_bits(spi, CNF3, CNF3_PHSEG2_MASK, in mcp251x_do_set_bittiming()
606 dev_dbg(&spi->dev, "CNF: 0x%02x 0x%02x 0x%02x\n", in mcp251x_do_set_bittiming()
607 mcp251x_read_reg(spi, CNF1), in mcp251x_do_set_bittiming()
608 mcp251x_read_reg(spi, CNF2), in mcp251x_do_set_bittiming()
609 mcp251x_read_reg(spi, CNF3)); in mcp251x_do_set_bittiming()
615 struct spi_device *spi) in mcp251x_setup() argument
619 mcp251x_write_reg(spi, RXBCTRL(0), in mcp251x_setup()
621 mcp251x_write_reg(spi, RXBCTRL(1), in mcp251x_setup()
626 static int mcp251x_hw_reset(struct spi_device *spi) in mcp251x_hw_reset() argument
628 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_reset()
636 ret = mcp251x_spi_trans(spi, 1); in mcp251x_hw_reset()
643 reg = mcp251x_read_reg(spi, CANSTAT); in mcp251x_hw_reset()
650 static int mcp251x_hw_probe(struct spi_device *spi) in mcp251x_hw_probe() argument
655 ret = mcp251x_hw_reset(spi); in mcp251x_hw_probe()
659 ctrl = mcp251x_read_reg(spi, CANCTRL); in mcp251x_hw_probe()
661 dev_dbg(&spi->dev, "CANCTRL 0x%02x\n", ctrl); in mcp251x_hw_probe()
684 struct spi_device *spi = priv->spi; in mcp251x_open_clean() local
686 free_irq(spi->irq, priv); in mcp251x_open_clean()
687 mcp251x_hw_sleep(spi); in mcp251x_open_clean()
695 struct spi_device *spi = priv->spi; in mcp251x_stop() local
700 free_irq(spi->irq, priv); in mcp251x_stop()
707 mcp251x_write_reg(spi, CANINTE, 0x00); in mcp251x_stop()
708 mcp251x_write_reg(spi, CANINTF, 0x00); in mcp251x_stop()
710 mcp251x_write_reg(spi, TXBCTRL(0), 0); in mcp251x_stop()
713 mcp251x_hw_sleep(spi); in mcp251x_stop()
745 struct spi_device *spi = priv->spi; in mcp251x_tx_work_handler() local
758 mcp251x_hw_tx(spi, frame, 0); in mcp251x_tx_work_handler()
771 struct spi_device *spi = priv->spi; in mcp251x_restart_work_handler() local
776 mcp251x_hw_reset(spi); in mcp251x_restart_work_handler()
777 mcp251x_setup(net, priv, spi); in mcp251x_restart_work_handler()
779 mcp251x_set_normal_mode(spi); in mcp251x_restart_work_handler()
783 mcp251x_set_normal_mode(spi); in mcp251x_restart_work_handler()
786 mcp251x_hw_sleep(spi); in mcp251x_restart_work_handler()
794 mcp251x_write_reg(spi, TXBCTRL(0), 0); in mcp251x_restart_work_handler()
805 struct spi_device *spi = priv->spi; in mcp251x_can_ist() local
815 mcp251x_read_2regs(spi, CANINTF, &intf, &eflag); in mcp251x_can_ist()
822 mcp251x_hw_rx(spi, 0); in mcp251x_can_ist()
827 if (mcp251x_is_2510(spi)) in mcp251x_can_ist()
828 mcp251x_write_bits(spi, CANINTF, CANINTF_RX0IF, 0x00); in mcp251x_can_ist()
833 mcp251x_hw_rx(spi, 1); in mcp251x_can_ist()
835 if (mcp251x_is_2510(spi)) in mcp251x_can_ist()
843 mcp251x_write_bits(spi, CANINTF, clear_intf, 0x00); in mcp251x_can_ist()
846 mcp251x_write_bits(spi, EFLG, eflag, 0x00); in mcp251x_can_ist()
910 mcp251x_hw_sleep(spi); in mcp251x_can_ist()
937 struct spi_device *spi = priv->spi; in mcp251x_open() local
943 dev_err(&spi->dev, "unable to set initial baudrate!\n"); in mcp251x_open()
954 ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist, in mcp251x_open()
957 dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq); in mcp251x_open()
967 ret = mcp251x_hw_reset(spi); in mcp251x_open()
972 ret = mcp251x_setup(net, priv, spi); in mcp251x_open()
977 ret = mcp251x_set_normal_mode(spi); in mcp251x_open()
1023 MODULE_DEVICE_TABLE(spi, mcp251x_id_table);
1025 static int mcp251x_can_probe(struct spi_device *spi) in mcp251x_can_probe() argument
1028 &spi->dev); in mcp251x_can_probe()
1029 struct mcp251x_platform_data *pdata = dev_get_platdata(&spi->dev); in mcp251x_can_probe()
1035 clk = devm_clk_get(&spi->dev, NULL); in mcp251x_can_probe()
1072 priv->model = spi_get_device_id(spi)->driver_data; in mcp251x_can_probe()
1076 spi_set_drvdata(spi, priv); in mcp251x_can_probe()
1079 spi->bits_per_word = 8; in mcp251x_can_probe()
1080 if (mcp251x_is_2510(spi)) in mcp251x_can_probe()
1081 spi->max_speed_hz = spi->max_speed_hz ? : 5 * 1000 * 1000; in mcp251x_can_probe()
1083 spi->max_speed_hz = spi->max_speed_hz ? : 10 * 1000 * 1000; in mcp251x_can_probe()
1084 ret = spi_setup(spi); in mcp251x_can_probe()
1088 priv->power = devm_regulator_get(&spi->dev, "vdd"); in mcp251x_can_probe()
1089 priv->transceiver = devm_regulator_get(&spi->dev, "xceiver"); in mcp251x_can_probe()
1100 priv->spi = spi; in mcp251x_can_probe()
1105 spi->dev.coherent_dma_mask = ~0; in mcp251x_can_probe()
1111 priv->spi_tx_buf = dmam_alloc_coherent(&spi->dev, in mcp251x_can_probe()
1128 priv->spi_tx_buf = devm_kzalloc(&spi->dev, SPI_TRANSFER_BUF_LEN, in mcp251x_can_probe()
1134 priv->spi_rx_buf = devm_kzalloc(&spi->dev, SPI_TRANSFER_BUF_LEN, in mcp251x_can_probe()
1142 SET_NETDEV_DEV(net, &spi->dev); in mcp251x_can_probe()
1145 ret = mcp251x_hw_probe(spi); in mcp251x_can_probe()
1149 mcp251x_hw_sleep(spi); in mcp251x_can_probe()
1172 static int mcp251x_can_remove(struct spi_device *spi) in mcp251x_can_remove() argument
1174 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_can_remove()
1191 struct spi_device *spi = to_spi_device(dev); in mcp251x_can_suspend() local
1192 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_can_suspend()
1196 disable_irq(spi->irq); in mcp251x_can_suspend()
1204 mcp251x_hw_sleep(spi); in mcp251x_can_suspend()
1221 struct spi_device *spi = to_spi_device(dev); in mcp251x_can_resume() local
1222 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_can_resume()
1235 enable_irq(spi->irq); in mcp251x_can_resume()