Lines Matching defs:spi
43 #include <linux/spi/spi.h>
231 struct spi_device *spi;
264 static inline int mcp251x_is_##_model(struct spi_device *spi) \
266 struct mcp251x_priv *priv = spi_get_drvdata(spi); \
297 static int mcp251x_spi_trans(struct spi_device *spi, int len)
299 struct mcp251x_priv *priv = spi_get_drvdata(spi);
312 ret = spi_sync(spi, &m);
314 dev_err(&spi->dev, "spi transfer failed: ret = %d\n", ret);
318 static int mcp251x_spi_write(struct spi_device *spi, int len)
320 struct mcp251x_priv *priv = spi_get_drvdata(spi);
323 ret = spi_write(spi, priv->spi_tx_buf, len);
325 dev_err(&spi->dev, "spi write failed: ret = %d\n", ret);
330 static u8 mcp251x_read_reg(struct spi_device *spi, u8 reg)
332 struct mcp251x_priv *priv = spi_get_drvdata(spi);
338 if (spi->controller->flags & SPI_CONTROLLER_HALF_DUPLEX) {
339 spi_write_then_read(spi, priv->spi_tx_buf, 2, &val, 1);
341 mcp251x_spi_trans(spi, 3);
348 static void mcp251x_read_2regs(struct spi_device *spi, u8 reg, u8 *v1, u8 *v2)
350 struct mcp251x_priv *priv = spi_get_drvdata(spi);
355 if (spi->controller->flags & SPI_CONTROLLER_HALF_DUPLEX) {
358 spi_write_then_read(spi, priv->spi_tx_buf, 2, val, 2);
362 mcp251x_spi_trans(spi, 4);
369 static void mcp251x_write_reg(struct spi_device *spi, u8 reg, u8 val)
371 struct mcp251x_priv *priv = spi_get_drvdata(spi);
377 mcp251x_spi_write(spi, 3);
380 static void mcp251x_write_2regs(struct spi_device *spi, u8 reg, u8 v1, u8 v2)
382 struct mcp251x_priv *priv = spi_get_drvdata(spi);
389 mcp251x_spi_write(spi, 4);
392 static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
395 struct mcp251x_priv *priv = spi_get_drvdata(spi);
402 mcp251x_spi_write(spi, 4);
405 static u8 mcp251x_read_stat(struct spi_device *spi)
407 return mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK;
454 mcp251x_write_bits(priv->spi, BFPCTRL, val, val);
475 mcp251x_write_bits(priv->spi, BFPCTRL, val, 0);
504 val = mcp251x_read_reg(priv->spi, reg);
519 val = mcp251x_read_reg(priv->spi, TXRTSCTRL);
524 val = mcp251x_read_reg(priv->spi, BFPCTRL);
544 mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
568 mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
575 static void mcp251x_gpio_restore(struct spi_device *spi)
577 struct mcp251x_priv *priv = spi_get_drvdata(spi);
579 mcp251x_write_reg(spi, BFPCTRL, priv->reg_bfpctrl);
586 if (!device_property_present(&priv->spi->dev, "gpio-controller"))
590 gpio->label = priv->spi->modalias;
591 gpio->parent = &priv->spi->dev;
605 return devm_gpiochip_add_data(&priv->spi->dev, gpio, priv);
608 static inline void mcp251x_gpio_restore(struct spi_device *spi)
618 static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf,
621 struct mcp251x_priv *priv = spi_get_drvdata(spi);
623 if (mcp251x_is_2510(spi)) {
627 mcp251x_write_reg(spi, TXBCTRL(tx_buf_idx) + i,
631 mcp251x_spi_write(spi, TXBDAT_OFF + len);
635 static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame,
638 struct mcp251x_priv *priv = spi_get_drvdata(spi);
659 mcp251x_hw_tx_frame(spi, buf, frame->len, tx_buf_idx);
663 mcp251x_spi_write(priv->spi, 1);
666 static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf,
669 struct mcp251x_priv *priv = spi_get_drvdata(spi);
671 if (mcp251x_is_2510(spi)) {
675 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i);
679 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i);
682 if (spi->controller->flags & SPI_CONTROLLER_HALF_DUPLEX) {
683 spi_write_then_read(spi, priv->spi_tx_buf, 1,
689 mcp251x_spi_trans(spi, SPI_TRANSFER_BUF_LEN);
695 static void mcp251x_hw_rx(struct spi_device *spi, int buf_idx)
697 struct mcp251x_priv *priv = spi_get_drvdata(spi);
704 dev_err(&spi->dev, "cannot allocate RX skb\n");
709 mcp251x_hw_rx_frame(spi, buf, buf_idx);
744 static void mcp251x_hw_sleep(struct spi_device *spi)
746 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_SLEEP);
750 static int mcp251x_hw_wake(struct spi_device *spi)
756 disable_irq(spi->irq);
757 mcp251x_write_2regs(spi, CANINTE, CANINTE_WAKIE, CANINTF_WAKIF);
763 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_CONF);
766 ret = mcp251x_read_stat_poll_timeout(spi, value, value == CANCTRL_REQOP_CONF,
770 dev_err(&spi->dev, "MCP251x didn't enter in config mode\n");
775 mcp251x_write_2regs(spi, CANINTE, 0x00, 0x00);
776 enable_irq(spi->irq);
785 struct spi_device *spi = priv->spi;
788 dev_warn(&spi->dev, "hard_xmit called while tx busy\n");
823 static int mcp251x_set_normal_mode(struct spi_device *spi)
825 struct mcp251x_priv *priv = spi_get_drvdata(spi);
830 mcp251x_write_reg(spi, CANINTE,
836 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LOOPBACK);
839 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LISTEN_ONLY);
842 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_NORMAL);
845 ret = mcp251x_read_stat_poll_timeout(spi, value, value == 0,
849 dev_err(&spi->dev, "MCP251x didn't enter in normal mode\n");
861 struct spi_device *spi = priv->spi;
863 mcp251x_write_reg(spi, CNF1, ((bt->sjw - 1) << CNF1_SJW_SHIFT) |
865 mcp251x_write_reg(spi, CNF2, CNF2_BTLMODE |
870 mcp251x_write_bits(spi, CNF3, CNF3_PHSEG2_MASK,
872 dev_dbg(&spi->dev, "CNF: 0x%02x 0x%02x 0x%02x\n",
873 mcp251x_read_reg(spi, CNF1),
874 mcp251x_read_reg(spi, CNF2),
875 mcp251x_read_reg(spi, CNF3));
880 static int mcp251x_setup(struct net_device *net, struct spi_device *spi)
884 mcp251x_write_reg(spi, RXBCTRL(0),
886 mcp251x_write_reg(spi, RXBCTRL(1),
891 static int mcp251x_hw_reset(struct spi_device *spi)
893 struct mcp251x_priv *priv = spi_get_drvdata(spi);
901 ret = mcp251x_spi_write(spi, 1);
909 ret = mcp251x_read_stat_poll_timeout(spi, value, value == CANCTRL_REQOP_CONF,
913 dev_err(&spi->dev, "MCP251x didn't enter in conf mode after reset\n");
917 static int mcp251x_hw_probe(struct spi_device *spi)
922 ret = mcp251x_hw_reset(spi);
926 ctrl = mcp251x_read_reg(spi, CANCTRL);
928 dev_dbg(&spi->dev, "CANCTRL 0x%02x\n", ctrl);
951 struct spi_device *spi = priv->spi;
956 free_irq(spi->irq, priv);
961 mcp251x_write_2regs(spi, CANINTE, 0x00, 0x00);
963 mcp251x_write_reg(spi, TXBCTRL(0), 0);
966 mcp251x_hw_sleep(spi);
996 struct spi_device *spi = priv->spi;
1009 mcp251x_hw_tx(spi, frame, 0);
1022 struct spi_device *spi = priv->spi;
1028 mcp251x_hw_reset(spi);
1029 mcp251x_setup(net, spi);
1030 mcp251x_gpio_restore(spi);
1032 mcp251x_hw_wake(spi);
1036 mcp251x_set_normal_mode(spi);
1040 mcp251x_set_normal_mode(spi);
1043 mcp251x_hw_sleep(spi);
1050 mcp251x_write_reg(spi, TXBCTRL(0), 0);
1061 struct spi_device *spi = priv->spi;
1071 mcp251x_read_2regs(spi, CANINTF, &intf, &eflag);
1075 mcp251x_hw_rx(spi, 0);
1079 if (mcp251x_is_2510(spi))
1080 mcp251x_write_bits(spi, CANINTF,
1088 mcp251x_read_2regs(spi, CANINTF, &intf1, &eflag1);
1098 mcp251x_hw_rx(spi, 1);
1100 if (mcp251x_is_2510(spi))
1111 mcp251x_write_bits(spi, CANINTF, clear_intf, 0x00);
1114 mcp251x_write_bits(spi, EFLG, eflag, 0x00);
1179 mcp251x_hw_sleep(spi);
1204 struct spi_device *spi = priv->spi;
1210 dev_err(&spi->dev, "unable to set initial baudrate!\n");
1221 if (!dev_fwnode(&spi->dev))
1224 ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist,
1225 flags | IRQF_ONESHOT, dev_name(&spi->dev),
1228 dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq);
1232 ret = mcp251x_hw_wake(spi);
1235 ret = mcp251x_setup(net, spi);
1238 ret = mcp251x_set_normal_mode(spi);
1248 free_irq(spi->irq, priv);
1249 mcp251x_hw_sleep(spi);
1300 MODULE_DEVICE_TABLE(spi, mcp251x_id_table);
1302 static int mcp251x_can_probe(struct spi_device *spi)
1304 const void *match = device_get_match_data(&spi->dev);
1311 clk = devm_clk_get_optional(&spi->dev, NULL);
1317 device_property_read_u32(&spi->dev, "clock-frequency", &freq);
1345 priv->model = spi_get_device_id(spi)->driver_data;
1349 spi_set_drvdata(spi, priv);
1352 spi->bits_per_word = 8;
1353 if (mcp251x_is_2510(spi))
1354 spi->max_speed_hz = spi->max_speed_hz ? : 5 * 1000 * 1000;
1356 spi->max_speed_hz = spi->max_speed_hz ? : 10 * 1000 * 1000;
1357 ret = spi_setup(spi);
1361 priv->power = devm_regulator_get_optional(&spi->dev, "vdd");
1362 priv->transceiver = devm_regulator_get_optional(&spi->dev, "xceiver");
1382 priv->spi = spi;
1385 priv->spi_tx_buf = devm_kzalloc(&spi->dev, SPI_TRANSFER_BUF_LEN,
1392 priv->spi_rx_buf = devm_kzalloc(&spi->dev, SPI_TRANSFER_BUF_LEN,
1399 SET_NETDEV_DEV(net, &spi->dev);
1402 ret = mcp251x_hw_probe(spi);
1405 dev_err(&spi->dev, "Cannot initialize MCP%x. Wrong wiring?\n",
1410 mcp251x_hw_sleep(spi);
1437 dev_err(&spi->dev, "Probe failed, err=%d\n", -ret);
1441 static void mcp251x_can_remove(struct spi_device *spi)
1443 struct mcp251x_priv *priv = spi_get_drvdata(spi);
1460 struct spi_device *spi = to_spi_device(dev);
1461 struct mcp251x_priv *priv = spi_get_drvdata(spi);
1465 disable_irq(spi->irq);
1472 mcp251x_hw_sleep(spi);
1487 struct spi_device *spi = to_spi_device(dev);
1488 struct mcp251x_priv *priv = spi_get_drvdata(spi);
1501 enable_irq(spi->irq);