Lines Matching full:spi

2 /* CAN bus driver for Microchip 251x/25625 CAN Controller with SPI Interface
43 #include <linux/spi/spi.h>
46 /* SPI interface instruction set */
197 /* Buffer size required for the largest SPI transfer (i.e., reading a
231 struct spi_device *spi; member
234 struct mutex mcp_lock; /* SPI device lock */
263 static inline int mcp251x_is_##_model(struct spi_device *spi) \
265 struct mcp251x_priv *priv = spi_get_drvdata(spi); \
285 * registers via SPI is not really different conceptually than using
296 static int mcp251x_spi_trans(struct spi_device *spi, int len) in mcp251x_spi_trans() argument
298 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_spi_trans()
311 ret = spi_sync(spi, &m); in mcp251x_spi_trans()
313 dev_err(&spi->dev, "spi transfer failed: ret = %d\n", ret); in mcp251x_spi_trans()
317 static u8 mcp251x_read_reg(struct spi_device *spi, u8 reg) in mcp251x_read_reg() argument
319 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_read_reg()
325 if (spi->controller->flags & SPI_CONTROLLER_HALF_DUPLEX) { in mcp251x_read_reg()
326 spi_write_then_read(spi, priv->spi_tx_buf, 2, &val, 1); in mcp251x_read_reg()
328 mcp251x_spi_trans(spi, 3); in mcp251x_read_reg()
335 static void mcp251x_read_2regs(struct spi_device *spi, u8 reg, u8 *v1, u8 *v2) in mcp251x_read_2regs() argument
337 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_read_2regs()
342 if (spi->controller->flags & SPI_CONTROLLER_HALF_DUPLEX) { in mcp251x_read_2regs()
345 spi_write_then_read(spi, priv->spi_tx_buf, 2, val, 2); in mcp251x_read_2regs()
349 mcp251x_spi_trans(spi, 4); in mcp251x_read_2regs()
356 static void mcp251x_write_reg(struct spi_device *spi, u8 reg, u8 val) in mcp251x_write_reg() argument
358 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_write_reg()
364 mcp251x_spi_trans(spi, 3); in mcp251x_write_reg()
367 static void mcp251x_write_2regs(struct spi_device *spi, u8 reg, u8 v1, u8 v2) in mcp251x_write_2regs() argument
369 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_write_2regs()
376 mcp251x_spi_trans(spi, 4); in mcp251x_write_2regs()
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 u8 mcp251x_read_stat(struct spi_device *spi) in mcp251x_read_stat() argument
394 return mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK; in mcp251x_read_stat()
441 mcp251x_write_bits(priv->spi, BFPCTRL, val, val); in mcp251x_gpio_request()
462 mcp251x_write_bits(priv->spi, BFPCTRL, val, 0); in mcp251x_gpio_free()
491 val = mcp251x_read_reg(priv->spi, reg); in mcp251x_gpio_get()
506 val = mcp251x_read_reg(priv->spi, TXRTSCTRL); in mcp251x_gpio_get_multiple()
511 val = mcp251x_read_reg(priv->spi, BFPCTRL); in mcp251x_gpio_get_multiple()
531 mcp251x_write_bits(priv->spi, BFPCTRL, mask, val); in mcp251x_gpio_set()
555 mcp251x_write_bits(priv->spi, BFPCTRL, mask, val); in mcp251x_gpio_set_multiple()
562 static void mcp251x_gpio_restore(struct spi_device *spi) in mcp251x_gpio_restore() argument
564 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_gpio_restore()
566 mcp251x_write_reg(spi, BFPCTRL, priv->reg_bfpctrl); in mcp251x_gpio_restore()
573 if (!device_property_present(&priv->spi->dev, "gpio-controller")) in mcp251x_gpio_setup()
577 gpio->label = priv->spi->modalias; in mcp251x_gpio_setup()
578 gpio->parent = &priv->spi->dev; in mcp251x_gpio_setup()
592 gpio->of_node = priv->spi->dev.of_node; in mcp251x_gpio_setup()
595 return devm_gpiochip_add_data(&priv->spi->dev, gpio, priv); in mcp251x_gpio_setup()
598 static inline void mcp251x_gpio_restore(struct spi_device *spi) in mcp251x_gpio_restore() argument
608 static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf, in mcp251x_hw_tx_frame() argument
611 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_tx_frame()
613 if (mcp251x_is_2510(spi)) { in mcp251x_hw_tx_frame()
617 mcp251x_write_reg(spi, TXBCTRL(tx_buf_idx) + i, in mcp251x_hw_tx_frame()
621 mcp251x_spi_trans(spi, TXBDAT_OFF + len); in mcp251x_hw_tx_frame()
625 static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame, in mcp251x_hw_tx() argument
628 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_tx()
649 mcp251x_hw_tx_frame(spi, buf, frame->can_dlc, tx_buf_idx); in mcp251x_hw_tx()
653 mcp251x_spi_trans(priv->spi, 1); in mcp251x_hw_tx()
656 static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf, in mcp251x_hw_rx_frame() argument
659 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_rx_frame()
661 if (mcp251x_is_2510(spi)) { in mcp251x_hw_rx_frame()
665 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i); in mcp251x_hw_rx_frame()
669 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i); in mcp251x_hw_rx_frame()
672 if (spi->controller->flags & SPI_CONTROLLER_HALF_DUPLEX) { in mcp251x_hw_rx_frame()
673 spi_write_then_read(spi, priv->spi_tx_buf, 1, in mcp251x_hw_rx_frame()
679 mcp251x_spi_trans(spi, SPI_TRANSFER_BUF_LEN); in mcp251x_hw_rx_frame()
685 static void mcp251x_hw_rx(struct spi_device *spi, int buf_idx) in mcp251x_hw_rx() argument
687 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_rx()
694 dev_err(&spi->dev, "cannot allocate RX skb\n"); in mcp251x_hw_rx()
699 mcp251x_hw_rx_frame(spi, buf, buf_idx); in mcp251x_hw_rx()
734 static void mcp251x_hw_sleep(struct spi_device *spi) in mcp251x_hw_sleep() argument
736 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_SLEEP); in mcp251x_hw_sleep()
740 static int mcp251x_hw_wake(struct spi_device *spi) in mcp251x_hw_wake() argument
746 disable_irq(spi->irq); in mcp251x_hw_wake()
747 mcp251x_write_2regs(spi, CANINTE, CANINTE_WAKIE, CANINTF_WAKIF); in mcp251x_hw_wake()
753 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_CONF); in mcp251x_hw_wake()
756 ret = mcp251x_read_stat_poll_timeout(spi, value, value == CANCTRL_REQOP_CONF, in mcp251x_hw_wake()
760 dev_err(&spi->dev, "MCP251x didn't enter in config mode\n"); in mcp251x_hw_wake()
765 mcp251x_write_2regs(spi, CANINTE, 0x00, 0x00); in mcp251x_hw_wake()
766 enable_irq(spi->irq); in mcp251x_hw_wake()
775 struct spi_device *spi = priv->spi; in mcp251x_hard_start_xmit() local
778 dev_warn(&spi->dev, "hard_xmit called while tx busy\n"); in mcp251x_hard_start_xmit()
799 /* We have to delay work since SPI I/O may sleep */ in mcp251x_do_set_mode()
813 static int mcp251x_set_normal_mode(struct spi_device *spi) in mcp251x_set_normal_mode() argument
815 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_set_normal_mode()
820 mcp251x_write_reg(spi, CANINTE, in mcp251x_set_normal_mode()
826 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LOOPBACK); in mcp251x_set_normal_mode()
829 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LISTEN_ONLY); in mcp251x_set_normal_mode()
832 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_NORMAL); in mcp251x_set_normal_mode()
835 ret = mcp251x_read_stat_poll_timeout(spi, value, value == 0, in mcp251x_set_normal_mode()
839 dev_err(&spi->dev, "MCP251x didn't enter in normal mode\n"); in mcp251x_set_normal_mode()
851 struct spi_device *spi = priv->spi; in mcp251x_do_set_bittiming() local
853 mcp251x_write_reg(spi, CNF1, ((bt->sjw - 1) << CNF1_SJW_SHIFT) | in mcp251x_do_set_bittiming()
855 mcp251x_write_reg(spi, CNF2, CNF2_BTLMODE | in mcp251x_do_set_bittiming()
860 mcp251x_write_bits(spi, CNF3, CNF3_PHSEG2_MASK, in mcp251x_do_set_bittiming()
862 dev_dbg(&spi->dev, "CNF: 0x%02x 0x%02x 0x%02x\n", in mcp251x_do_set_bittiming()
863 mcp251x_read_reg(spi, CNF1), in mcp251x_do_set_bittiming()
864 mcp251x_read_reg(spi, CNF2), in mcp251x_do_set_bittiming()
865 mcp251x_read_reg(spi, CNF3)); in mcp251x_do_set_bittiming()
870 static int mcp251x_setup(struct net_device *net, struct spi_device *spi) in mcp251x_setup() argument
874 mcp251x_write_reg(spi, RXBCTRL(0), in mcp251x_setup()
876 mcp251x_write_reg(spi, RXBCTRL(1), in mcp251x_setup()
881 static int mcp251x_hw_reset(struct spi_device *spi) in mcp251x_hw_reset() argument
883 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_hw_reset()
891 ret = mcp251x_spi_trans(spi, 1); in mcp251x_hw_reset()
899 ret = mcp251x_read_stat_poll_timeout(spi, value, value == CANCTRL_REQOP_CONF, in mcp251x_hw_reset()
903 dev_err(&spi->dev, "MCP251x didn't enter in conf mode after reset\n"); in mcp251x_hw_reset()
907 static int mcp251x_hw_probe(struct spi_device *spi) in mcp251x_hw_probe() argument
912 ret = mcp251x_hw_reset(spi); in mcp251x_hw_probe()
916 ctrl = mcp251x_read_reg(spi, CANCTRL); in mcp251x_hw_probe()
918 dev_dbg(&spi->dev, "CANCTRL 0x%02x\n", ctrl); in mcp251x_hw_probe()
941 struct spi_device *spi = priv->spi; in mcp251x_stop() local
946 free_irq(spi->irq, priv); in mcp251x_stop()
953 mcp251x_write_2regs(spi, CANINTE, 0x00, 0x00); in mcp251x_stop()
955 mcp251x_write_reg(spi, TXBCTRL(0), 0); in mcp251x_stop()
958 mcp251x_hw_sleep(spi); in mcp251x_stop()
990 struct spi_device *spi = priv->spi; in mcp251x_tx_work_handler() local
1003 mcp251x_hw_tx(spi, frame, 0); in mcp251x_tx_work_handler()
1016 struct spi_device *spi = priv->spi; in mcp251x_restart_work_handler() local
1022 mcp251x_hw_reset(spi); in mcp251x_restart_work_handler()
1023 mcp251x_setup(net, spi); in mcp251x_restart_work_handler()
1024 mcp251x_gpio_restore(spi); in mcp251x_restart_work_handler()
1026 mcp251x_hw_wake(spi); in mcp251x_restart_work_handler()
1030 mcp251x_set_normal_mode(spi); in mcp251x_restart_work_handler()
1034 mcp251x_set_normal_mode(spi); in mcp251x_restart_work_handler()
1037 mcp251x_hw_sleep(spi); in mcp251x_restart_work_handler()
1044 mcp251x_write_reg(spi, TXBCTRL(0), 0); in mcp251x_restart_work_handler()
1055 struct spi_device *spi = priv->spi; in mcp251x_can_ist() local
1065 mcp251x_read_2regs(spi, CANINTF, &intf, &eflag); in mcp251x_can_ist()
1072 mcp251x_hw_rx(spi, 0); in mcp251x_can_ist()
1076 if (mcp251x_is_2510(spi)) in mcp251x_can_ist()
1077 mcp251x_write_bits(spi, CANINTF, in mcp251x_can_ist()
1083 mcp251x_hw_rx(spi, 1); in mcp251x_can_ist()
1085 if (mcp251x_is_2510(spi)) in mcp251x_can_ist()
1093 mcp251x_write_bits(spi, CANINTF, clear_intf, 0x00); in mcp251x_can_ist()
1096 mcp251x_write_bits(spi, EFLG, eflag, 0x00); in mcp251x_can_ist()
1161 mcp251x_hw_sleep(spi); in mcp251x_can_ist()
1187 struct spi_device *spi = priv->spi; in mcp251x_open() local
1193 dev_err(&spi->dev, "unable to set initial baudrate!\n"); in mcp251x_open()
1204 if (!dev_fwnode(&spi->dev)) in mcp251x_open()
1207 ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist, in mcp251x_open()
1208 flags | IRQF_ONESHOT, dev_name(&spi->dev), in mcp251x_open()
1211 dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq); in mcp251x_open()
1224 ret = mcp251x_hw_wake(spi); in mcp251x_open()
1227 ret = mcp251x_setup(net, spi); in mcp251x_open()
1230 ret = mcp251x_set_normal_mode(spi); in mcp251x_open()
1244 free_irq(spi->irq, priv); in mcp251x_open()
1245 mcp251x_hw_sleep(spi); in mcp251x_open()
1292 MODULE_DEVICE_TABLE(spi, mcp251x_id_table);
1294 static int mcp251x_can_probe(struct spi_device *spi) in mcp251x_can_probe() argument
1296 const void *match = device_get_match_data(&spi->dev); in mcp251x_can_probe()
1303 clk = devm_clk_get_optional(&spi->dev, NULL); in mcp251x_can_probe()
1309 device_property_read_u32(&spi->dev, "clock-frequency", &freq); in mcp251x_can_probe()
1336 priv->model = spi_get_device_id(spi)->driver_data; in mcp251x_can_probe()
1340 spi_set_drvdata(spi, priv); in mcp251x_can_probe()
1342 /* Configure the SPI bus */ in mcp251x_can_probe()
1343 spi->bits_per_word = 8; in mcp251x_can_probe()
1344 if (mcp251x_is_2510(spi)) in mcp251x_can_probe()
1345 spi->max_speed_hz = spi->max_speed_hz ? : 5 * 1000 * 1000; in mcp251x_can_probe()
1347 spi->max_speed_hz = spi->max_speed_hz ? : 10 * 1000 * 1000; in mcp251x_can_probe()
1348 ret = spi_setup(spi); in mcp251x_can_probe()
1352 priv->power = devm_regulator_get_optional(&spi->dev, "vdd"); in mcp251x_can_probe()
1353 priv->transceiver = devm_regulator_get_optional(&spi->dev, "xceiver"); in mcp251x_can_probe()
1364 priv->spi = spi; in mcp251x_can_probe()
1367 priv->spi_tx_buf = devm_kzalloc(&spi->dev, SPI_TRANSFER_BUF_LEN, in mcp251x_can_probe()
1374 priv->spi_rx_buf = devm_kzalloc(&spi->dev, SPI_TRANSFER_BUF_LEN, in mcp251x_can_probe()
1381 SET_NETDEV_DEV(net, &spi->dev); in mcp251x_can_probe()
1384 ret = mcp251x_hw_probe(spi); in mcp251x_can_probe()
1387 dev_err(&spi->dev, "Cannot initialize MCP%x. Wrong wiring?\n", in mcp251x_can_probe()
1392 mcp251x_hw_sleep(spi); in mcp251x_can_probe()
1416 dev_err(&spi->dev, "Probe failed, err=%d\n", -ret); in mcp251x_can_probe()
1420 static int mcp251x_can_remove(struct spi_device *spi) in mcp251x_can_remove() argument
1422 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_can_remove()
1438 struct spi_device *spi = to_spi_device(dev); in mcp251x_can_suspend() local
1439 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_can_suspend()
1443 disable_irq(spi->irq); in mcp251x_can_suspend()
1450 mcp251x_hw_sleep(spi); in mcp251x_can_suspend()
1465 struct spi_device *spi = to_spi_device(dev); in mcp251x_can_resume() local
1466 struct mcp251x_priv *priv = spi_get_drvdata(spi); in mcp251x_can_resume()
1479 enable_irq(spi->irq); in mcp251x_can_resume()