| .. | .. |
|---|
| 81 | 81 | return ret; |
|---|
| 82 | 82 | } |
|---|
| 83 | 83 | |
|---|
| 84 | | -int |
|---|
| 85 | | -qcaspi_write_register(struct qcaspi *qca, u16 reg, u16 value) |
|---|
| 84 | +static int |
|---|
| 85 | +__qcaspi_write_register(struct qcaspi *qca, u16 reg, u16 value) |
|---|
| 86 | 86 | { |
|---|
| 87 | 87 | __be16 tx_data[2]; |
|---|
| 88 | 88 | struct spi_transfer transfer[2]; |
|---|
| .. | .. |
|---|
| 117 | 117 | |
|---|
| 118 | 118 | return ret; |
|---|
| 119 | 119 | } |
|---|
| 120 | + |
|---|
| 121 | +int |
|---|
| 122 | +qcaspi_write_register(struct qcaspi *qca, u16 reg, u16 value, int retry) |
|---|
| 123 | +{ |
|---|
| 124 | + int ret, i = 0; |
|---|
| 125 | + u16 confirmed; |
|---|
| 126 | + |
|---|
| 127 | + do { |
|---|
| 128 | + ret = __qcaspi_write_register(qca, reg, value); |
|---|
| 129 | + if (ret) |
|---|
| 130 | + return ret; |
|---|
| 131 | + |
|---|
| 132 | + if (!retry) |
|---|
| 133 | + return 0; |
|---|
| 134 | + |
|---|
| 135 | + ret = qcaspi_read_register(qca, reg, &confirmed); |
|---|
| 136 | + if (ret) |
|---|
| 137 | + return ret; |
|---|
| 138 | + |
|---|
| 139 | + ret = confirmed != value; |
|---|
| 140 | + if (!ret) |
|---|
| 141 | + return 0; |
|---|
| 142 | + |
|---|
| 143 | + i++; |
|---|
| 144 | + qca->stats.write_verify_failed++; |
|---|
| 145 | + |
|---|
| 146 | + } while (i <= retry); |
|---|
| 147 | + |
|---|
| 148 | + return ret; |
|---|
| 149 | +} |
|---|