Lines Matching refs:spi

246 	struct spi_device *spi;  member
276 static inline int mcp251x_is_##_model(struct spi_device *spi) \
278 struct mcp251x_priv *priv = spi_get_drvdata(spi); \
312 static int mcp251x_spi_trans(struct spi_device *spi, int len) in mcp251x_spi_trans() argument
314 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_spi_trans()
334 ret = spi_sync(spi, &m); in mcp251x_spi_trans()
336 dev_err(&spi->dev, "spi transfer failed: ret = %d\n", ret); in mcp251x_spi_trans()
340 static u8 mcp251x_read_reg(struct spi_device *spi, uint8_t reg) in mcp251x_read_reg() argument
342 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_read_reg()
348 mcp251x_spi_trans(spi, 3); in mcp251x_read_reg()
354 static void mcp251x_read_2regs(struct spi_device *spi, uint8_t reg, in mcp251x_read_2regs() argument
357 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_read_2regs()
362 mcp251x_spi_trans(spi, 4); in mcp251x_read_2regs()
368 static void mcp251x_write_reg(struct spi_device *spi, u8 reg, uint8_t val) in mcp251x_write_reg() argument
370 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_write_reg()
376 mcp251x_spi_trans(spi, 3); in mcp251x_write_reg()
379 static void mcp251x_write_bits(struct spi_device *spi, u8 reg, in mcp251x_write_bits() argument
382 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_write_bits()
389 mcp251x_spi_trans(spi, 4); in mcp251x_write_bits()
392 static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf, in mcp251x_hw_tx_frame() argument
395 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_tx_frame()
397 if (mcp251x_is_2510(spi)) { in mcp251x_hw_tx_frame()
401 mcp251x_write_reg(spi, TXBCTRL(tx_buf_idx) + i, in mcp251x_hw_tx_frame()
405 mcp251x_spi_trans(spi, TXBDAT_OFF + len); in mcp251x_hw_tx_frame()
409 static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame, in mcp251x_hw_tx() argument
412 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_tx()
433 mcp251x_hw_tx_frame(spi, buf, frame->can_dlc, tx_buf_idx); in mcp251x_hw_tx()
437 mcp251x_spi_trans(priv->spi, 1); in mcp251x_hw_tx()
440 static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf, in mcp251x_hw_rx_frame() argument
443 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_rx_frame()
445 if (mcp251x_is_2510(spi)) { in mcp251x_hw_rx_frame()
449 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i); in mcp251x_hw_rx_frame()
453 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i); in mcp251x_hw_rx_frame()
456 mcp251x_spi_trans(spi, SPI_TRANSFER_BUF_LEN); in mcp251x_hw_rx_frame()
461 static void mcp251x_hw_rx(struct spi_device *spi, int buf_idx) in mcp251x_hw_rx() argument
463 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_rx()
470 dev_err(&spi->dev, "cannot allocate RX skb\n"); in mcp251x_hw_rx()
475 mcp251x_hw_rx_frame(spi, buf, buf_idx); in mcp251x_hw_rx()
510 static void mcp251x_hw_sleep(struct spi_device *spi) in mcp251x_hw_sleep() argument
512 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_SLEEP); in mcp251x_hw_sleep()
519 struct spi_device *spi = priv->spi; in mcp251x_hard_start_xmit() local
522 dev_warn(&spi->dev, "hard_xmit called while tx busy\n"); in mcp251x_hard_start_xmit()
557 static int mcp251x_set_normal_mode(struct spi_device *spi) in mcp251x_set_normal_mode() argument
559 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_set_normal_mode()
563 mcp251x_write_reg(spi, CANINTE, in mcp251x_set_normal_mode()
569 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LOOPBACK); in mcp251x_set_normal_mode()
572 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LISTEN_ONLY); in mcp251x_set_normal_mode()
575 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_NORMAL); in mcp251x_set_normal_mode()
579 while (mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK) { in mcp251x_set_normal_mode()
582 dev_err(&spi->dev, "MCP251x didn't" in mcp251x_set_normal_mode()
596 struct spi_device *spi = priv->spi; in mcp251x_do_set_bittiming() local
598 mcp251x_write_reg(spi, CNF1, ((bt->sjw - 1) << CNF1_SJW_SHIFT) | in mcp251x_do_set_bittiming()
600 mcp251x_write_reg(spi, CNF2, CNF2_BTLMODE | in mcp251x_do_set_bittiming()
605 mcp251x_write_bits(spi, CNF3, CNF3_PHSEG2_MASK, in mcp251x_do_set_bittiming()
607 dev_dbg(&spi->dev, "CNF: 0x%02x 0x%02x 0x%02x\n", in mcp251x_do_set_bittiming()
608 mcp251x_read_reg(spi, CNF1), in mcp251x_do_set_bittiming()
609 mcp251x_read_reg(spi, CNF2), in mcp251x_do_set_bittiming()
610 mcp251x_read_reg(spi, CNF3)); in mcp251x_do_set_bittiming()
616 struct spi_device *spi) in mcp251x_setup() argument
620 mcp251x_write_reg(spi, RXBCTRL(0), in mcp251x_setup()
622 mcp251x_write_reg(spi, RXBCTRL(1), in mcp251x_setup()
627 static int mcp251x_hw_reset(struct spi_device *spi) in mcp251x_hw_reset() argument
629 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_reset()
637 ret = mcp251x_spi_trans(spi, 1); in mcp251x_hw_reset()
644 reg = mcp251x_read_reg(spi, CANSTAT); in mcp251x_hw_reset()
651 static int mcp251x_hw_probe(struct spi_device *spi) in mcp251x_hw_probe() argument
656 ret = mcp251x_hw_reset(spi); in mcp251x_hw_probe()
660 ctrl = mcp251x_read_reg(spi, CANCTRL); in mcp251x_hw_probe()
662 dev_dbg(&spi->dev, "CANCTRL 0x%02x\n", ctrl); in mcp251x_hw_probe()
685 struct spi_device *spi = priv->spi; in mcp251x_open_clean() local
687 free_irq(spi->irq, priv); in mcp251x_open_clean()
688 mcp251x_hw_sleep(spi); in mcp251x_open_clean()
696 struct spi_device *spi = priv->spi; in mcp251x_stop() local
701 free_irq(spi->irq, priv); in mcp251x_stop()
708 mcp251x_write_reg(spi, CANINTE, 0x00); in mcp251x_stop()
709 mcp251x_write_reg(spi, CANINTF, 0x00); in mcp251x_stop()
711 mcp251x_write_reg(spi, TXBCTRL(0), 0); in mcp251x_stop()
714 mcp251x_hw_sleep(spi); in mcp251x_stop()
746 struct spi_device *spi = priv->spi; in mcp251x_tx_work_handler() local
759 mcp251x_hw_tx(spi, frame, 0); in mcp251x_tx_work_handler()
772 struct spi_device *spi = priv->spi; in mcp251x_restart_work_handler() local
777 mcp251x_hw_reset(spi); in mcp251x_restart_work_handler()
778 mcp251x_setup(net, priv, spi); in mcp251x_restart_work_handler()
780 mcp251x_set_normal_mode(spi); in mcp251x_restart_work_handler()
784 mcp251x_set_normal_mode(spi); in mcp251x_restart_work_handler()
787 mcp251x_hw_sleep(spi); in mcp251x_restart_work_handler()
795 mcp251x_write_reg(spi, TXBCTRL(0), 0); in mcp251x_restart_work_handler()
806 struct spi_device *spi = priv->spi; in mcp251x_can_ist() local
816 mcp251x_read_2regs(spi, CANINTF, &intf, &eflag); in mcp251x_can_ist()
823 mcp251x_hw_rx(spi, 0); in mcp251x_can_ist()
828 if (mcp251x_is_2510(spi)) in mcp251x_can_ist()
829 mcp251x_write_bits(spi, CANINTF, CANINTF_RX0IF, 0x00); in mcp251x_can_ist()
834 mcp251x_hw_rx(spi, 1); in mcp251x_can_ist()
836 if (mcp251x_is_2510(spi)) in mcp251x_can_ist()
844 mcp251x_write_bits(spi, CANINTF, clear_intf, 0x00); in mcp251x_can_ist()
847 mcp251x_write_bits(spi, EFLG, eflag, 0x00); in mcp251x_can_ist()
911 mcp251x_hw_sleep(spi); in mcp251x_can_ist()
938 struct spi_device *spi = priv->spi; in mcp251x_open() local
944 dev_err(&spi->dev, "unable to set initial baudrate!\n"); in mcp251x_open()
955 ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist, in mcp251x_open()
958 dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq); in mcp251x_open()
968 ret = mcp251x_hw_reset(spi); in mcp251x_open()
973 ret = mcp251x_setup(net, priv, spi); in mcp251x_open()
978 ret = mcp251x_set_normal_mode(spi); in mcp251x_open()
1024 MODULE_DEVICE_TABLE(spi, mcp251x_id_table);
1026 static int mcp251x_can_probe(struct spi_device *spi) in mcp251x_can_probe() argument
1029 &spi->dev); in mcp251x_can_probe()
1030 struct mcp251x_platform_data *pdata = dev_get_platdata(&spi->dev); in mcp251x_can_probe()
1036 clk = devm_clk_get(&spi->dev, NULL); in mcp251x_can_probe()
1073 priv->model = spi_get_device_id(spi)->driver_data; in mcp251x_can_probe()
1077 spi_set_drvdata(spi, priv); in mcp251x_can_probe()
1080 spi->bits_per_word = 8; in mcp251x_can_probe()
1081 if (mcp251x_is_2510(spi)) in mcp251x_can_probe()
1082 spi->max_speed_hz = spi->max_speed_hz ? : 5 * 1000 * 1000; in mcp251x_can_probe()
1084 spi->max_speed_hz = spi->max_speed_hz ? : 10 * 1000 * 1000; in mcp251x_can_probe()
1085 ret = spi_setup(spi); in mcp251x_can_probe()
1089 priv->power = devm_regulator_get_optional(&spi->dev, "vdd"); in mcp251x_can_probe()
1090 priv->transceiver = devm_regulator_get_optional(&spi->dev, "xceiver"); in mcp251x_can_probe()
1101 priv->spi = spi; in mcp251x_can_probe()
1106 spi->dev.coherent_dma_mask = ~0; in mcp251x_can_probe()
1112 priv->spi_tx_buf = dmam_alloc_coherent(&spi->dev, in mcp251x_can_probe()
1129 priv->spi_tx_buf = devm_kzalloc(&spi->dev, SPI_TRANSFER_BUF_LEN, in mcp251x_can_probe()
1135 priv->spi_rx_buf = devm_kzalloc(&spi->dev, SPI_TRANSFER_BUF_LEN, in mcp251x_can_probe()
1143 SET_NETDEV_DEV(net, &spi->dev); in mcp251x_can_probe()
1146 ret = mcp251x_hw_probe(spi); in mcp251x_can_probe()
1150 mcp251x_hw_sleep(spi); in mcp251x_can_probe()
1173 static int mcp251x_can_remove(struct spi_device *spi) in mcp251x_can_remove() argument
1175 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_can_remove()
1192 struct spi_device *spi = to_spi_device(dev); in mcp251x_can_suspend() local
1193 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_can_suspend()
1197 disable_irq(spi->irq); in mcp251x_can_suspend()
1205 mcp251x_hw_sleep(spi); in mcp251x_can_suspend()
1222 struct spi_device *spi = to_spi_device(dev); in mcp251x_can_resume() local
1223 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_can_resume()
1236 enable_irq(spi->irq); in mcp251x_can_resume()