• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/net/can/

Lines Matching refs:spi

76 #include <linux/spi/spi.h>
228 struct spi_device *spi;
280 static int mcp251x_spi_trans(struct spi_device *spi, int len)
282 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
302 ret = spi_sync(spi, &m);
304 dev_err(&spi->dev, "spi transfer failed: ret = %d\n", ret);
308 static u8 mcp251x_read_reg(struct spi_device *spi, uint8_t reg)
310 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
316 mcp251x_spi_trans(spi, 3);
322 static void mcp251x_write_reg(struct spi_device *spi, u8 reg, uint8_t val)
324 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
330 mcp251x_spi_trans(spi, 3);
333 static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
336 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
343 mcp251x_spi_trans(spi, 4);
346 static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf,
349 struct mcp251x_platform_data *pdata = spi->dev.platform_data;
350 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
356 mcp251x_write_reg(spi, TXBCTRL(tx_buf_idx) + i,
360 mcp251x_spi_trans(spi, TXBDAT_OFF + len);
364 static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame,
387 mcp251x_hw_tx_frame(spi, buf, frame->can_dlc, tx_buf_idx);
388 mcp251x_write_reg(spi, TXBCTRL(tx_buf_idx), TXBCTRL_TXREQ);
391 static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf,
394 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
395 struct mcp251x_platform_data *pdata = spi->dev.platform_data;
401 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i);
405 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i);
408 mcp251x_spi_trans(spi, SPI_TRANSFER_BUF_LEN);
413 static void mcp251x_hw_rx(struct spi_device *spi, int buf_idx)
415 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
422 dev_err(&spi->dev, "cannot allocate RX skb\n");
427 mcp251x_hw_rx_frame(spi, buf, buf_idx);
457 static void mcp251x_hw_sleep(struct spi_device *spi)
459 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_SLEEP);
466 struct spi_device *spi = priv->spi;
469 dev_warn(&spi->dev, "hard_xmit called while tx busy\n");
504 static int mcp251x_set_normal_mode(struct spi_device *spi)
506 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
510 mcp251x_write_reg(spi, CANINTE,
516 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LOOPBACK);
519 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LISTEN_ONLY);
522 mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_NORMAL);
526 while (mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK) {
529 dev_err(&spi->dev, "MCP251x didn't"
543 struct spi_device *spi = priv->spi;
545 mcp251x_write_reg(spi, CNF1, ((bt->sjw - 1) << CNF1_SJW_SHIFT) |
547 mcp251x_write_reg(spi, CNF2, CNF2_BTLMODE |
552 mcp251x_write_bits(spi, CNF3, CNF3_PHSEG2_MASK,
554 dev_info(&spi->dev, "CNF: 0x%02x 0x%02x 0x%02x\n",
555 mcp251x_read_reg(spi, CNF1),
556 mcp251x_read_reg(spi, CNF2),
557 mcp251x_read_reg(spi, CNF3));
563 struct spi_device *spi)
567 mcp251x_write_reg(spi, RXBCTRL(0),
569 mcp251x_write_reg(spi, RXBCTRL(1),
574 static int mcp251x_hw_reset(struct spi_device *spi)
576 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
581 ret = spi_write(spi, priv->spi_tx_buf, 1);
583 dev_err(&spi->dev, "reset failed: ret = %d\n", ret);
590 while ((mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK)
594 dev_err(&spi->dev, "MCP251x didn't"
602 static int mcp251x_hw_probe(struct spi_device *spi)
606 mcp251x_hw_reset(spi);
614 st1 = mcp251x_read_reg(spi, CANSTAT) & 0xEE;
615 st2 = mcp251x_read_reg(spi, CANCTRL) & 0x17;
617 dev_dbg(&spi->dev, "CANSTAT 0x%02x CANCTRL 0x%02x\n", st1, st2);
626 struct spi_device *spi = priv->spi;
627 struct mcp251x_platform_data *pdata = spi->dev.platform_data;
629 free_irq(spi->irq, priv);
630 mcp251x_hw_sleep(spi);
639 struct spi_device *spi = priv->spi;
640 struct mcp251x_platform_data *pdata = spi->dev.platform_data;
645 free_irq(spi->irq, priv);
652 mcp251x_write_reg(spi, CANINTE, 0x00);
653 mcp251x_write_reg(spi, CANINTF, 0x00);
655 mcp251x_write_reg(spi, TXBCTRL(0), 0);
658 mcp251x_hw_sleep(spi);
690 struct spi_device *spi = priv->spi;
703 mcp251x_hw_tx(spi, frame, 0);
716 struct spi_device *spi = priv->spi;
722 mcp251x_hw_reset(spi);
723 mcp251x_setup(net, priv, spi);
725 mcp251x_set_normal_mode(spi);
729 mcp251x_set_normal_mode(spi);
732 mcp251x_hw_sleep(spi);
740 mcp251x_write_reg(spi, TXBCTRL(0), 0);
751 struct spi_device *spi = priv->spi;
757 u8 intf = mcp251x_read_reg(spi, CANINTF);
762 mcp251x_hw_rx(spi, 0);
764 mcp251x_write_bits(spi, CANINTF, intf & CANINTF_RX0IF,
769 mcp251x_hw_rx(spi, 1);
771 mcp251x_write_bits(spi, CANINTF, intf, 0x00);
773 eflag = mcp251x_read_reg(spi, EFLG);
774 mcp251x_write_reg(spi, EFLG, 0x00);
833 mcp251x_hw_sleep(spi);
859 struct spi_device *spi = priv->spi;
860 struct mcp251x_platform_data *pdata = spi->dev.platform_data;
865 dev_err(&spi->dev, "unable to set initial baudrate!\n");
877 ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist,
880 dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq);
891 ret = mcp251x_hw_reset(spi);
896 ret = mcp251x_setup(net, priv, spi);
901 ret = mcp251x_set_normal_mode(spi);
919 static int __devinit mcp251x_can_probe(struct spi_device *spi)
923 struct mcp251x_platform_data *pdata = spi->dev.platform_data;
924 int model = spi_get_device_id(spi)->driver_data;
951 dev_set_drvdata(&spi->dev, priv);
953 priv->spi = spi;
958 spi->dev.coherent_dma_mask = ~0;
964 priv->spi_tx_buf = dma_alloc_coherent(&spi->dev,
999 pdata->board_specific_setup(spi);
1001 SET_NETDEV_DEV(net, &spi->dev);
1004 spi->mode = SPI_MODE_0;
1005 spi->bits_per_word = 8;
1006 spi_setup(spi);
1009 if (!mcp251x_hw_probe(spi)) {
1010 dev_info(&spi->dev, "Probe failed\n");
1013 mcp251x_hw_sleep(spi);
1020 dev_info(&spi->dev, "probed\n");
1032 dma_free_coherent(&spi->dev, PAGE_SIZE,
1037 dev_err(&spi->dev, "probe failed\n");
1042 static int __devexit mcp251x_can_remove(struct spi_device *spi)
1044 struct mcp251x_platform_data *pdata = spi->dev.platform_data;
1045 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
1052 dma_free_coherent(&spi->dev, PAGE_SIZE,
1066 static int mcp251x_can_suspend(struct spi_device *spi, pm_message_t state)
1068 struct mcp251x_platform_data *pdata = spi->dev.platform_data;
1069 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
1073 disable_irq(spi->irq);
1081 mcp251x_hw_sleep(spi);
1097 static int mcp251x_can_resume(struct spi_device *spi)
1099 struct mcp251x_platform_data *pdata = spi->dev.platform_data;
1100 struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
1115 enable_irq(spi->irq);
1130 MODULE_DEVICE_TABLE(spi, mcp251x_id_table);