Lines Matching +full:spi +full:- +full:rx +full:- +full:bus +full:- +full:width

27 #include <linux/spi/spi.h>
32 * struct ks8851_rxctrl - KS8851 driver rx control
33 * @mchash: Multicast hash-table data.
38 * such as the multicast hash-filter and the receive register settings. This
50 * union ks8851_tx_hdr - tx header data
52 * @txw: The header as 16bit, little-endian words
64 * struct ks8851_net - KS8851 driver private data
66 * @spidev: The spi device we're bound to.
70 * @rxctrl: RX settings for @rxctrl_work.
73 * @rxctrl_work: Work queue for updating RX mode and multicast lists
75 * @spi_msg1: pre-setup SPI transfer with one message, @spi_xfer1.
76 * @spi_msg2: pre-setup SPI transfer with two messages, @spi_xfer2.
77 * @txh: Space for generating packet TX header in DMA-able data
78 * @rxd: Space for receiving SPI data, in DMA-able space.
79 * @txd: Space for transmitting SPI data, in DMA-able space.
86 * @eeprom: 93CX6 EEPROM state for accessing on-board EEPROM.
91 * the DMA has been de-asserted.
97 * We align the buffers we may use for rx/tx to ensure that if the SPI driver
139 /* shift for byte-enable data */
142 /* turn register number and byte-enable mask into data for start of packet */
145 /* SPI register read/write calls.
147 * All these calls issue SPI transactions to access the chip's registers. They
149 * chip is busy transferring packet data (RX/TX FIFO accesses).
153 * ks8851_wrreg16 - write 16bit register value to chip
162 struct spi_transfer *xfer = &ks->spi_xfer1; in ks8851_wrreg16()
163 struct spi_message *msg = &ks->spi_msg1; in ks8851_wrreg16()
170 xfer->tx_buf = txb; in ks8851_wrreg16()
171 xfer->rx_buf = NULL; in ks8851_wrreg16()
172 xfer->len = 4; in ks8851_wrreg16()
174 ret = spi_sync(ks->spidev, msg); in ks8851_wrreg16()
176 netdev_err(ks->netdev, "spi_sync() failed\n"); in ks8851_wrreg16()
180 * ks8851_wrreg8 - write 8bit register value to chip
189 struct spi_transfer *xfer = &ks->spi_xfer1; in ks8851_wrreg8()
190 struct spi_message *msg = &ks->spi_msg1; in ks8851_wrreg8()
200 xfer->tx_buf = txb; in ks8851_wrreg8()
201 xfer->rx_buf = NULL; in ks8851_wrreg8()
202 xfer->len = 3; in ks8851_wrreg8()
204 ret = spi_sync(ks->spidev, msg); in ks8851_wrreg8()
206 netdev_err(ks->netdev, "spi_sync() failed\n"); in ks8851_wrreg8()
210 * ks8851_rx_1msg - select whether to use one or two messages for spi read
213 * Return whether to generate a single message with a tx and rx buffer
214 * supplied to spi_sync(), or alternatively send the tx and rx buffers
220 * This currently always returns true until we add some per-device data passed
229 * ks8851_rdreg - issue read register command and return the data
232 * @rxb: The RX buffer to return the result into
235 * This is the low level read call that issues the necessary spi message(s)
243 __le16 *txb = (__le16 *)ks->txd; in ks8851_rdreg()
244 u8 *trx = ks->rxd; in ks8851_rdreg()
250 msg = &ks->spi_msg1; in ks8851_rdreg()
251 xfer = &ks->spi_xfer1; in ks8851_rdreg()
253 xfer->tx_buf = txb; in ks8851_rdreg()
254 xfer->rx_buf = trx; in ks8851_rdreg()
255 xfer->len = rxl + 2; in ks8851_rdreg()
257 msg = &ks->spi_msg2; in ks8851_rdreg()
258 xfer = ks->spi_xfer2; in ks8851_rdreg()
260 xfer->tx_buf = txb; in ks8851_rdreg()
261 xfer->rx_buf = NULL; in ks8851_rdreg()
262 xfer->len = 2; in ks8851_rdreg()
265 xfer->tx_buf = NULL; in ks8851_rdreg()
266 xfer->rx_buf = trx; in ks8851_rdreg()
267 xfer->len = rxl; in ks8851_rdreg()
270 ret = spi_sync(ks->spidev, msg); in ks8851_rdreg()
272 netdev_err(ks->netdev, "read: spi_sync() failed\n"); in ks8851_rdreg()
280 * ks8851_rdreg8 - read 8 bit register from device
295 * ks8851_rdreg16 - read 16 bit register from device
303 __le16 rx = 0; in ks8851_rdreg16() local
305 ks8851_rdreg(ks, MK_OP(reg & 2 ? 0xC : 0x3, reg), (u8 *)&rx, 2); in ks8851_rdreg16()
306 return le16_to_cpu(rx); in ks8851_rdreg16()
310 * ks8851_rdreg32 - read 32 bit register from device
320 __le32 rx = 0; in ks8851_rdreg32() local
324 ks8851_rdreg(ks, MK_OP(0xf, reg), (u8 *)&rx, 4); in ks8851_rdreg32()
325 return le32_to_cpu(rx); in ks8851_rdreg32()
329 * ks8851_soft_reset - issue one of the soft reset to the device
333 * Issue the relevant soft-reset command to the device's GRR register
350 * ks8851_set_powermode - set power mode of the device
360 netif_dbg(ks, hw, ks->netdev, "setting power mode %d\n", pwrmode); in ks8851_set_powermode()
370 * ks8851_write_mac_addr - write mac address to device registers
383 mutex_lock(&ks->lock); in ks8851_write_mac_addr()
391 ks8851_wrreg8(ks, KS_MAR(i), dev->dev_addr[i]); in ks8851_write_mac_addr()
395 mutex_unlock(&ks->lock); in ks8851_write_mac_addr()
401 * ks8851_read_mac_addr - read mac address from device registers
411 mutex_lock(&ks->lock); in ks8851_read_mac_addr()
414 dev->dev_addr[i] = ks8851_rdreg8(ks, KS_MAR(i)); in ks8851_read_mac_addr()
416 mutex_unlock(&ks->lock); in ks8851_read_mac_addr()
420 * ks8851_init_mac - initialise the mac address
430 struct net_device *dev = ks->netdev; in ks8851_init_mac()
433 if (ks->rc_ccr & CCR_EEPROM) { in ks8851_init_mac()
435 if (is_valid_ether_addr(dev->dev_addr)) in ks8851_init_mac()
438 netdev_err(ks->netdev, "invalid mac address read %pM\n", in ks8851_init_mac()
439 dev->dev_addr); in ks8851_init_mac()
442 random_ether_addr(dev->dev_addr); in ks8851_init_mac()
447 * ks8851_irq - device interrupt handler
459 schedule_work(&ks->irq_work); in ks8851_irq()
464 * ks8851_rdfifo - read data from the receive fifo
474 struct spi_transfer *xfer = ks->spi_xfer2; in ks8851_rdfifo()
475 struct spi_message *msg = &ks->spi_msg2; in ks8851_rdfifo()
479 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rdfifo()
485 xfer->tx_buf = txb; in ks8851_rdfifo()
486 xfer->rx_buf = NULL; in ks8851_rdfifo()
487 xfer->len = 1; in ks8851_rdfifo()
490 xfer->rx_buf = buff; in ks8851_rdfifo()
491 xfer->tx_buf = NULL; in ks8851_rdfifo()
492 xfer->len = len; in ks8851_rdfifo()
494 ret = spi_sync(ks->spidev, msg); in ks8851_rdfifo()
496 netdev_err(ks->netdev, "%s: spi_sync() failed\n", __func__); in ks8851_rdfifo()
500 * ks8851_dbg_dumpkkt - dump initial packet contents to debug
508 netdev_dbg(ks->netdev, in ks8851_dbg_dumpkkt()
516 * ks8851_rx_pkts - receive packets from the host
534 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rx_pkts()
542 * This form of operation would require us to hold the SPI bus' in ks8851_rx_pkts()
547 for (; rxfc != 0; rxfc--) { in ks8851_rx_pkts()
552 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rx_pkts()
553 "rx: stat 0x%04x, len 0x%04x\n", rxstat, rxlen); in ks8851_rx_pkts()
560 /* start the packet dma process, and set auto-dequeue rx */ in ks8851_rx_pkts()
562 ks->rc_rxqcr | RXQCR_SDA | RXQCR_ADRFE); in ks8851_rx_pkts()
567 rxlen -= 4; in ks8851_rx_pkts()
569 skb = netdev_alloc_skb_ip_align(ks->netdev, rxalign); in ks8851_rx_pkts()
578 rxpkt = skb_put(skb, rxlen) - 8; in ks8851_rx_pkts()
585 skb->protocol = eth_type_trans(skb, ks->netdev); in ks8851_rx_pkts()
588 ks->netdev->stats.rx_packets++; in ks8851_rx_pkts()
589 ks->netdev->stats.rx_bytes += rxlen; in ks8851_rx_pkts()
593 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr); in ks8851_rx_pkts()
598 * ks8851_irq_work - work queue handler for dealing with interrupt requests
614 mutex_lock(&ks->lock); in ks8851_irq_work()
618 netif_dbg(ks, intr, ks->netdev, in ks8851_irq_work()
644 ks->tx_space = ks8851_rdreg16(ks, KS_TXMIR); in ks8851_irq_work()
646 netif_dbg(ks, intr, ks->netdev, in ks8851_irq_work()
647 "%s: txspace %d\n", __func__, ks->tx_space); in ks8851_irq_work()
654 dev_err(&ks->spidev->dev, "%s: spi bus error\n", __func__); in ks8851_irq_work()
661 /* the datasheet says to disable the rx interrupt during in ks8851_irq_work()
662 * packet read-out, however we're masking the interrupt in ks8851_irq_work()
663 * from the device so do not bother masking just the RX in ks8851_irq_work()
669 /* if something stopped the rx process, probably due to wanting in ks8851_irq_work()
670 * to change the rx settings, then do something about restarting in ks8851_irq_work()
673 struct ks8851_rxctrl *rxc = &ks->rxctrl; in ks8851_irq_work()
676 ks8851_wrreg16(ks, KS_MAHTR0, rxc->mchash[0]); in ks8851_irq_work()
677 ks8851_wrreg16(ks, KS_MAHTR1, rxc->mchash[1]); in ks8851_irq_work()
678 ks8851_wrreg16(ks, KS_MAHTR2, rxc->mchash[2]); in ks8851_irq_work()
679 ks8851_wrreg16(ks, KS_MAHTR3, rxc->mchash[3]); in ks8851_irq_work()
681 ks8851_wrreg16(ks, KS_RXCR2, rxc->rxcr2); in ks8851_irq_work()
682 ks8851_wrreg16(ks, KS_RXCR1, rxc->rxcr1); in ks8851_irq_work()
685 mutex_unlock(&ks->lock); in ks8851_irq_work()
688 netif_wake_queue(ks->netdev); in ks8851_irq_work()
690 enable_irq(ks->netdev->irq); in ks8851_irq_work()
694 * calc_txlen - calculate size of message to send packet
706 * ks8851_wrpkt - write packet to TX FIFO
718 struct spi_transfer *xfer = ks->spi_xfer2; in ks8851_wrpkt()
719 struct spi_message *msg = &ks->spi_msg2; in ks8851_wrpkt()
723 netif_dbg(ks, tx_queued, ks->netdev, "%s: skb %p, %d@%p, irq %d\n", in ks8851_wrpkt()
724 __func__, txp, txp->len, txp->data, irq); in ks8851_wrpkt()
726 fid = ks->fid++; in ks8851_wrpkt()
733 ks->txh.txb[1] = KS_SPIOP_TXFIFO; in ks8851_wrpkt()
734 ks->txh.txw[1] = cpu_to_le16(fid); in ks8851_wrpkt()
735 ks->txh.txw[2] = cpu_to_le16(txp->len); in ks8851_wrpkt()
737 xfer->tx_buf = &ks->txh.txb[1]; in ks8851_wrpkt()
738 xfer->rx_buf = NULL; in ks8851_wrpkt()
739 xfer->len = 5; in ks8851_wrpkt()
742 xfer->tx_buf = txp->data; in ks8851_wrpkt()
743 xfer->rx_buf = NULL; in ks8851_wrpkt()
744 xfer->len = ALIGN(txp->len, 4); in ks8851_wrpkt()
746 ret = spi_sync(ks->spidev, msg); in ks8851_wrpkt()
748 netdev_err(ks->netdev, "%s: spi_sync() failed\n", __func__); in ks8851_wrpkt()
752 * ks8851_done_tx - update and then free skbuff after transmitting
758 struct net_device *dev = ks->netdev; in ks8851_done_tx()
760 dev->stats.tx_bytes += txb->len; in ks8851_done_tx()
761 dev->stats.tx_packets++; in ks8851_done_tx()
767 * ks8851_tx_work - process tx packet(s)
777 bool last = skb_queue_empty(&ks->txq); in ks8851_tx_work()
779 mutex_lock(&ks->lock); in ks8851_tx_work()
782 txb = skb_dequeue(&ks->txq); in ks8851_tx_work()
783 last = skb_queue_empty(&ks->txq); in ks8851_tx_work()
786 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_SDA); in ks8851_tx_work()
788 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr); in ks8851_tx_work()
795 mutex_unlock(&ks->lock); in ks8851_tx_work()
799 * ks8851_net_open - open network device
811 mutex_lock(&ks->lock); in ks8851_net_open()
813 netif_dbg(ks, ifup, ks->netdev, "opening\n"); in ks8851_net_open()
818 /* issue a soft reset to the RX/TX QMU to put it into a known in ks8851_net_open()
829 /* auto-increment tx data, reset tx pointer */ in ks8851_net_open()
838 RXCR1_RXE)); /* enable rx block */ in ks8851_net_open()
848 ks->rc_rxqcr = (RXQCR_RXFCTE | /* IRQ on frame count exceeded */ in ks8851_net_open()
852 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr); in ks8851_net_open()
858 IRQ_RXI | /* RX done */ \ in ks8851_net_open()
859 IRQ_SPIBEI | /* SPI bus error */ \ in ks8851_net_open()
861 IRQ_RXPSI) /* RX process stop */ in ks8851_net_open()
863 ks->rc_ier = STD_IRQ; in ks8851_net_open()
867 netif_start_queue(ks->netdev); in ks8851_net_open()
869 netif_dbg(ks, ifup, ks->netdev, "network device up\n"); in ks8851_net_open()
871 mutex_unlock(&ks->lock); in ks8851_net_open()
876 * ks8851_net_stop - close network device
880 * work, shutdown the RX and TX process and then place the chip into a low
891 mutex_lock(&ks->lock); in ks8851_net_stop()
894 flush_work(&ks->irq_work); in ks8851_net_stop()
895 flush_work(&ks->tx_work); in ks8851_net_stop()
896 flush_work(&ks->rxctrl_work); in ks8851_net_stop()
902 /* shutdown RX process */ in ks8851_net_stop()
912 while (!skb_queue_empty(&ks->txq)) { in ks8851_net_stop()
913 struct sk_buff *txb = skb_dequeue(&ks->txq); in ks8851_net_stop()
915 netif_dbg(ks, ifdown, ks->netdev, in ks8851_net_stop()
921 mutex_unlock(&ks->lock); in ks8851_net_stop()
926 * ks8851_start_xmit - transmit packet
942 unsigned needed = calc_txlen(skb->len); in ks8851_start_xmit()
945 netif_dbg(ks, tx_queued, ks->netdev, in ks8851_start_xmit()
946 "%s: skb %p, %d@%p\n", __func__, skb, skb->len, skb->data); in ks8851_start_xmit()
948 spin_lock(&ks->statelock); in ks8851_start_xmit()
950 if (needed > ks->tx_space) { in ks8851_start_xmit()
954 ks->tx_space -= needed; in ks8851_start_xmit()
955 skb_queue_tail(&ks->txq, skb); in ks8851_start_xmit()
958 spin_unlock(&ks->statelock); in ks8851_start_xmit()
959 schedule_work(&ks->tx_work); in ks8851_start_xmit()
965 * ks8851_rxctrl_work - work handler to change rx mode
981 mutex_lock(&ks->lock); in ks8851_rxctrl_work()
986 mutex_unlock(&ks->lock); in ks8851_rxctrl_work()
996 if (dev->flags & IFF_PROMISC) { in ks8851_set_rx_mode()
1000 } else if (dev->flags & IFF_ALLMULTI) { in ks8851_set_rx_mode()
1005 } else if (dev->flags & IFF_MULTICAST && !netdev_mc_empty(dev)) { in ks8851_set_rx_mode()
1012 crc = ether_crc(ETH_ALEN, ha->addr); in ks8851_set_rx_mode()
1013 crc >>= (32 - 6); /* get top six bits */ in ks8851_set_rx_mode()
1026 RXCR1_RXE | /* RX process enable */ in ks8851_set_rx_mode()
1033 spin_lock(&ks->statelock); in ks8851_set_rx_mode()
1035 if (memcmp(&rxctrl, &ks->rxctrl, sizeof(rxctrl)) != 0) { in ks8851_set_rx_mode()
1036 memcpy(&ks->rxctrl, &rxctrl, sizeof(ks->rxctrl)); in ks8851_set_rx_mode()
1037 schedule_work(&ks->rxctrl_work); in ks8851_set_rx_mode()
1040 spin_unlock(&ks->statelock); in ks8851_set_rx_mode()
1048 return -EBUSY; in ks8851_set_mac_address()
1050 if (!is_valid_ether_addr(sa->sa_data)) in ks8851_set_mac_address()
1051 return -EADDRNOTAVAIL; in ks8851_set_mac_address()
1053 memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN); in ks8851_set_mac_address()
1062 return -EINVAL; in ks8851_net_ioctl()
1064 return generic_mii_ioctl(&ks->mii, if_mii(req), cmd, NULL); in ks8851_net_ioctl()
1083 strlcpy(di->driver, "KS8851", sizeof(di->driver)); in ks8851_get_drvinfo()
1084 strlcpy(di->version, "1.00", sizeof(di->version)); in ks8851_get_drvinfo()
1085 strlcpy(di->bus_info, dev_name(dev->dev.parent), sizeof(di->bus_info)); in ks8851_get_drvinfo()
1091 return ks->msg_enable; in ks8851_get_msglevel()
1097 ks->msg_enable = to; in ks8851_set_msglevel()
1103 return mii_ethtool_gset(&ks->mii, cmd); in ks8851_get_settings()
1109 return mii_ethtool_sset(&ks->mii, cmd); in ks8851_set_settings()
1115 return mii_link_ok(&ks->mii); in ks8851_get_link()
1121 return mii_nway_restart(&ks->mii); in ks8851_nway_reset()
1128 struct ks8851_net *ks = ee->data; in ks8851_eeprom_regread()
1133 ee->reg_data_out = (val & EEPCR_EESB) ? 1 : 0; in ks8851_eeprom_regread()
1134 ee->reg_data_clock = (val & EEPCR_EESCK) ? 1 : 0; in ks8851_eeprom_regread()
1135 ee->reg_chip_select = (val & EEPCR_EECS) ? 1 : 0; in ks8851_eeprom_regread()
1140 struct ks8851_net *ks = ee->data; in ks8851_eeprom_regwrite()
1141 unsigned val = EEPCR_EESA; /* default - eeprom access on */ in ks8851_eeprom_regwrite()
1143 if (ee->drive_data) in ks8851_eeprom_regwrite()
1145 if (ee->reg_data_in) in ks8851_eeprom_regwrite()
1147 if (ee->reg_data_clock) in ks8851_eeprom_regwrite()
1149 if (ee->reg_chip_select) in ks8851_eeprom_regwrite()
1156 * ks8851_eeprom_claim - claim device EEPROM and activate the interface
1164 if (!(ks->rc_ccr & CCR_EEPROM)) in ks8851_eeprom_claim()
1165 return -ENOENT; in ks8851_eeprom_claim()
1167 mutex_lock(&ks->lock); in ks8851_eeprom_claim()
1175 * ks8851_eeprom_release - release the EEPROM interface
1185 mutex_unlock(&ks->lock); in ks8851_eeprom_release()
1194 int offset = ee->offset; in ks8851_set_eeprom()
1195 int len = ee->len; in ks8851_set_eeprom()
1200 return -EINVAL; in ks8851_set_eeprom()
1202 if (ee->magic != KS_EEPROM_MAGIC) in ks8851_set_eeprom()
1203 return -EINVAL; in ks8851_set_eeprom()
1206 return -ENOENT; in ks8851_set_eeprom()
1208 eeprom_93cx6_wren(&ks->eeprom, true); in ks8851_set_eeprom()
1213 eeprom_93cx6_read(&ks->eeprom, offset/2, &tmp); in ks8851_set_eeprom()
1223 eeprom_93cx6_write(&ks->eeprom, offset/2, tmp); in ks8851_set_eeprom()
1224 eeprom_93cx6_wren(&ks->eeprom, false); in ks8851_set_eeprom()
1235 int offset = ee->offset; in ks8851_get_eeprom()
1236 int len = ee->len; in ks8851_get_eeprom()
1240 return -EINVAL; in ks8851_get_eeprom()
1243 return -ENOENT; in ks8851_get_eeprom()
1245 ee->magic = KS_EEPROM_MAGIC; in ks8851_get_eeprom()
1247 eeprom_93cx6_multiread(&ks->eeprom, offset/2, (__le16 *)data, len/2); in ks8851_get_eeprom()
1258 return ks->rc_ccr & CCR_EEPROM ? 128 : 0; in ks8851_get_eeprom_len()
1277 * ks8851_phy_reg - convert MII register into a KS8851 register
1305 * ks8851_phy_read - MII interface PHY register read.
1311 * device does not support all the MII registers, the non-existent values
1316 * caller. The mii-tool that the driver was tested with takes any -ve error
1329 mutex_lock(&ks->lock); in ks8851_phy_read()
1331 mutex_unlock(&ks->lock); in ks8851_phy_read()
1344 mutex_lock(&ks->lock); in ks8851_phy_write()
1346 mutex_unlock(&ks->lock); in ks8851_phy_write()
1351 * ks8851_read_selftest - read the selftest memory info.
1354 * Read and check the TX/RX memory selftest information.
1365 netdev_warn(ks->netdev, "Memory selftest not finished\n"); in ks8851_read_selftest()
1370 netdev_err(ks->netdev, "TX memory selftest fail\n"); in ks8851_read_selftest()
1375 netdev_err(ks->netdev, "RX memory selftest fail\n"); in ks8851_read_selftest()
1382 /* driver bus management functions */
1385 static int ks8851_suspend(struct spi_device *spi, pm_message_t state) in ks8851_suspend() argument
1387 struct ks8851_net *ks = dev_get_drvdata(&spi->dev); in ks8851_suspend()
1388 struct net_device *dev = ks->netdev; in ks8851_suspend()
1398 static int ks8851_resume(struct spi_device *spi) in ks8851_resume() argument
1400 struct ks8851_net *ks = dev_get_drvdata(&spi->dev); in ks8851_resume()
1401 struct net_device *dev = ks->netdev; in ks8851_resume()
1415 static int __devinit ks8851_probe(struct spi_device *spi) in ks8851_probe() argument
1423 dev_err(&spi->dev, "failed to alloc ethernet device\n"); in ks8851_probe()
1424 return -ENOMEM; in ks8851_probe()
1427 spi->bits_per_word = 8; in ks8851_probe()
1431 ks->netdev = ndev; in ks8851_probe()
1432 ks->spidev = spi; in ks8851_probe()
1433 ks->tx_space = 6144; in ks8851_probe()
1435 mutex_init(&ks->lock); in ks8851_probe()
1436 spin_lock_init(&ks->statelock); in ks8851_probe()
1438 INIT_WORK(&ks->tx_work, ks8851_tx_work); in ks8851_probe()
1439 INIT_WORK(&ks->irq_work, ks8851_irq_work); in ks8851_probe()
1440 INIT_WORK(&ks->rxctrl_work, ks8851_rxctrl_work); in ks8851_probe()
1442 /* initialise pre-made spi transfer messages */ in ks8851_probe()
1444 spi_message_init(&ks->spi_msg1); in ks8851_probe()
1445 spi_message_add_tail(&ks->spi_xfer1, &ks->spi_msg1); in ks8851_probe()
1447 spi_message_init(&ks->spi_msg2); in ks8851_probe()
1448 spi_message_add_tail(&ks->spi_xfer2[0], &ks->spi_msg2); in ks8851_probe()
1449 spi_message_add_tail(&ks->spi_xfer2[1], &ks->spi_msg2); in ks8851_probe()
1453 ks->eeprom.data = ks; in ks8851_probe()
1454 ks->eeprom.width = PCI_EEPROM_WIDTH_93C46; in ks8851_probe()
1455 ks->eeprom.register_read = ks8851_eeprom_regread; in ks8851_probe()
1456 ks->eeprom.register_write = ks8851_eeprom_regwrite; in ks8851_probe()
1459 ks->mii.dev = ndev; in ks8851_probe()
1460 ks->mii.phy_id = 1, in ks8851_probe()
1461 ks->mii.phy_id_mask = 1; in ks8851_probe()
1462 ks->mii.reg_num_mask = 0xf; in ks8851_probe()
1463 ks->mii.mdio_read = ks8851_phy_read; in ks8851_probe()
1464 ks->mii.mdio_write = ks8851_phy_write; in ks8851_probe()
1466 dev_info(&spi->dev, "message enable is %d\n", msg_enable); in ks8851_probe()
1469 ks->msg_enable = netif_msg_init(msg_enable, (NETIF_MSG_DRV | in ks8851_probe()
1473 skb_queue_head_init(&ks->txq); in ks8851_probe()
1476 SET_NETDEV_DEV(ndev, &spi->dev); in ks8851_probe()
1478 dev_set_drvdata(&spi->dev, ks); in ks8851_probe()
1480 ndev->if_port = IF_PORT_100BASET; in ks8851_probe()
1481 ndev->netdev_ops = &ks8851_netdev_ops; in ks8851_probe()
1482 ndev->irq = spi->irq; in ks8851_probe()
1487 /* simple check for a valid chip being connected to the bus */ in ks8851_probe()
1490 dev_err(&spi->dev, "failed to read device ID\n"); in ks8851_probe()
1491 ret = -ENODEV; in ks8851_probe()
1496 ks->rc_ccr = ks8851_rdreg16(ks, KS_CCR); in ks8851_probe()
1498 if (ks->rc_ccr & CCR_EEPROM) in ks8851_probe()
1499 ks->eeprom_size = 128; in ks8851_probe()
1501 ks->eeprom_size = 0; in ks8851_probe()
1506 ret = request_irq(spi->irq, ks8851_irq, IRQF_TRIGGER_LOW, in ks8851_probe()
1507 ndev->name, ks); in ks8851_probe()
1509 dev_err(&spi->dev, "failed to get irq\n"); in ks8851_probe()
1515 dev_err(&spi->dev, "failed to register network device\n"); in ks8851_probe()
1521 ndev->dev_addr, ndev->irq, in ks8851_probe()
1522 ks->rc_ccr & CCR_EEPROM ? "has" : "no"); in ks8851_probe()
1528 free_irq(ndev->irq, ndev); in ks8851_probe()
1536 static int __devexit ks8851_remove(struct spi_device *spi) in ks8851_remove() argument
1538 struct ks8851_net *priv = dev_get_drvdata(&spi->dev); in ks8851_remove()
1541 dev_info(&spi->dev, "remove\n"); in ks8851_remove()
1543 unregister_netdev(priv->netdev); in ks8851_remove()
1544 free_irq(spi->irq, priv); in ks8851_remove()
1545 free_netdev(priv->netdev); in ks8851_remove()
1580 MODULE_ALIAS("spi:ks8851");