|
@@ -99,22 +99,24 @@ static u32
|
|
|
qcaspi_write_burst(struct qcaspi *qca, u8 *src, u32 len)
|
|
|
{
|
|
|
__be16 cmd;
|
|
|
- struct spi_message *msg = &qca->spi_msg2;
|
|
|
- struct spi_transfer *transfer = &qca->spi_xfer2[0];
|
|
|
+ struct spi_message msg;
|
|
|
+ struct spi_transfer transfer[2];
|
|
|
int ret;
|
|
|
|
|
|
+ memset(&transfer, 0, sizeof(transfer));
|
|
|
+ spi_message_init(&msg);
|
|
|
+
|
|
|
cmd = cpu_to_be16(QCA7K_SPI_WRITE | QCA7K_SPI_EXTERNAL);
|
|
|
- transfer->tx_buf = &cmd;
|
|
|
- transfer->rx_buf = NULL;
|
|
|
- transfer->len = QCASPI_CMD_LEN;
|
|
|
- transfer = &qca->spi_xfer2[1];
|
|
|
- transfer->tx_buf = src;
|
|
|
- transfer->rx_buf = NULL;
|
|
|
- transfer->len = len;
|
|
|
+ transfer[0].tx_buf = &cmd;
|
|
|
+ transfer[0].len = QCASPI_CMD_LEN;
|
|
|
+ transfer[1].tx_buf = src;
|
|
|
+ transfer[1].len = len;
|
|
|
|
|
|
- ret = spi_sync(qca->spi_dev, msg);
|
|
|
+ spi_message_add_tail(&transfer[0], &msg);
|
|
|
+ spi_message_add_tail(&transfer[1], &msg);
|
|
|
+ ret = spi_sync(qca->spi_dev, &msg);
|
|
|
|
|
|
- if (ret || (msg->actual_length != QCASPI_CMD_LEN + len)) {
|
|
|
+ if (ret || (msg.actual_length != QCASPI_CMD_LEN + len)) {
|
|
|
qcaspi_spi_error(qca);
|
|
|
return 0;
|
|
|
}
|
|
@@ -125,17 +127,20 @@ qcaspi_write_burst(struct qcaspi *qca, u8 *src, u32 len)
|
|
|
static u32
|
|
|
qcaspi_write_legacy(struct qcaspi *qca, u8 *src, u32 len)
|
|
|
{
|
|
|
- struct spi_message *msg = &qca->spi_msg1;
|
|
|
- struct spi_transfer *transfer = &qca->spi_xfer1;
|
|
|
+ struct spi_message msg;
|
|
|
+ struct spi_transfer transfer;
|
|
|
int ret;
|
|
|
|
|
|
- transfer->tx_buf = src;
|
|
|
- transfer->rx_buf = NULL;
|
|
|
- transfer->len = len;
|
|
|
+ memset(&transfer, 0, sizeof(transfer));
|
|
|
+ spi_message_init(&msg);
|
|
|
+
|
|
|
+ transfer.tx_buf = src;
|
|
|
+ transfer.len = len;
|
|
|
|
|
|
- ret = spi_sync(qca->spi_dev, msg);
|
|
|
+ spi_message_add_tail(&transfer, &msg);
|
|
|
+ ret = spi_sync(qca->spi_dev, &msg);
|
|
|
|
|
|
- if (ret || (msg->actual_length != len)) {
|
|
|
+ if (ret || (msg.actual_length != len)) {
|
|
|
qcaspi_spi_error(qca);
|
|
|
return 0;
|
|
|
}
|
|
@@ -146,23 +151,25 @@ qcaspi_write_legacy(struct qcaspi *qca, u8 *src, u32 len)
|
|
|
static u32
|
|
|
qcaspi_read_burst(struct qcaspi *qca, u8 *dst, u32 len)
|
|
|
{
|
|
|
- struct spi_message *msg = &qca->spi_msg2;
|
|
|
+ struct spi_message msg;
|
|
|
__be16 cmd;
|
|
|
- struct spi_transfer *transfer = &qca->spi_xfer2[0];
|
|
|
+ struct spi_transfer transfer[2];
|
|
|
int ret;
|
|
|
|
|
|
+ memset(&transfer, 0, sizeof(transfer));
|
|
|
+ spi_message_init(&msg);
|
|
|
+
|
|
|
cmd = cpu_to_be16(QCA7K_SPI_READ | QCA7K_SPI_EXTERNAL);
|
|
|
- transfer->tx_buf = &cmd;
|
|
|
- transfer->rx_buf = NULL;
|
|
|
- transfer->len = QCASPI_CMD_LEN;
|
|
|
- transfer = &qca->spi_xfer2[1];
|
|
|
- transfer->tx_buf = NULL;
|
|
|
- transfer->rx_buf = dst;
|
|
|
- transfer->len = len;
|
|
|
+ transfer[0].tx_buf = &cmd;
|
|
|
+ transfer[0].len = QCASPI_CMD_LEN;
|
|
|
+ transfer[1].rx_buf = dst;
|
|
|
+ transfer[1].len = len;
|
|
|
|
|
|
- ret = spi_sync(qca->spi_dev, msg);
|
|
|
+ spi_message_add_tail(&transfer[0], &msg);
|
|
|
+ spi_message_add_tail(&transfer[1], &msg);
|
|
|
+ ret = spi_sync(qca->spi_dev, &msg);
|
|
|
|
|
|
- if (ret || (msg->actual_length != QCASPI_CMD_LEN + len)) {
|
|
|
+ if (ret || (msg.actual_length != QCASPI_CMD_LEN + len)) {
|
|
|
qcaspi_spi_error(qca);
|
|
|
return 0;
|
|
|
}
|
|
@@ -173,17 +180,20 @@ qcaspi_read_burst(struct qcaspi *qca, u8 *dst, u32 len)
|
|
|
static u32
|
|
|
qcaspi_read_legacy(struct qcaspi *qca, u8 *dst, u32 len)
|
|
|
{
|
|
|
- struct spi_message *msg = &qca->spi_msg1;
|
|
|
- struct spi_transfer *transfer = &qca->spi_xfer1;
|
|
|
+ struct spi_message msg;
|
|
|
+ struct spi_transfer transfer;
|
|
|
int ret;
|
|
|
|
|
|
- transfer->tx_buf = NULL;
|
|
|
- transfer->rx_buf = dst;
|
|
|
- transfer->len = len;
|
|
|
+ memset(&transfer, 0, sizeof(transfer));
|
|
|
+ spi_message_init(&msg);
|
|
|
|
|
|
- ret = spi_sync(qca->spi_dev, msg);
|
|
|
+ transfer.rx_buf = dst;
|
|
|
+ transfer.len = len;
|
|
|
|
|
|
- if (ret || (msg->actual_length != len)) {
|
|
|
+ spi_message_add_tail(&transfer, &msg);
|
|
|
+ ret = spi_sync(qca->spi_dev, &msg);
|
|
|
+
|
|
|
+ if (ret || (msg.actual_length != len)) {
|
|
|
qcaspi_spi_error(qca);
|
|
|
return 0;
|
|
|
}
|
|
@@ -195,19 +205,23 @@ static int
|
|
|
qcaspi_tx_cmd(struct qcaspi *qca, u16 cmd)
|
|
|
{
|
|
|
__be16 tx_data;
|
|
|
- struct spi_message *msg = &qca->spi_msg1;
|
|
|
- struct spi_transfer *transfer = &qca->spi_xfer1;
|
|
|
+ struct spi_message msg;
|
|
|
+ struct spi_transfer transfer;
|
|
|
int ret;
|
|
|
|
|
|
+ memset(&transfer, 0, sizeof(transfer));
|
|
|
+
|
|
|
+ spi_message_init(&msg);
|
|
|
+
|
|
|
tx_data = cpu_to_be16(cmd);
|
|
|
- transfer->len = sizeof(tx_data);
|
|
|
- transfer->tx_buf = &tx_data;
|
|
|
- transfer->rx_buf = NULL;
|
|
|
+ transfer.len = sizeof(cmd);
|
|
|
+ transfer.tx_buf = &tx_data;
|
|
|
+ spi_message_add_tail(&transfer, &msg);
|
|
|
|
|
|
- ret = spi_sync(qca->spi_dev, msg);
|
|
|
+ ret = spi_sync(qca->spi_dev, &msg);
|
|
|
|
|
|
if (!ret)
|
|
|
- ret = msg->status;
|
|
|
+ ret = msg.status;
|
|
|
|
|
|
if (ret)
|
|
|
qcaspi_spi_error(qca);
|
|
@@ -835,16 +849,6 @@ qcaspi_netdev_setup(struct net_device *dev)
|
|
|
qca = netdev_priv(dev);
|
|
|
memset(qca, 0, sizeof(struct qcaspi));
|
|
|
|
|
|
- memset(&qca->spi_xfer1, 0, sizeof(struct spi_transfer));
|
|
|
- memset(&qca->spi_xfer2, 0, sizeof(struct spi_transfer) * 2);
|
|
|
-
|
|
|
- spi_message_init(&qca->spi_msg1);
|
|
|
- spi_message_add_tail(&qca->spi_xfer1, &qca->spi_msg1);
|
|
|
-
|
|
|
- spi_message_init(&qca->spi_msg2);
|
|
|
- spi_message_add_tail(&qca->spi_xfer2[0], &qca->spi_msg2);
|
|
|
- spi_message_add_tail(&qca->spi_xfer2[1], &qca->spi_msg2);
|
|
|
-
|
|
|
memset(&qca->txr, 0, sizeof(qca->txr));
|
|
|
qca->txr.count = TX_RING_MAX_LEN;
|
|
|
}
|