Lines Matching full:wilc

35  * For CMD_SINGLE_READ and CMD_INTERNAL_READ, WILC may insert one or
57 static int wilc_spi_reset(struct wilc *wilc);
58 static int wilc_spi_configure_bus_protocol(struct wilc *wilc);
59 static int wilc_validate_chipid(struct wilc *wilc);
163 static int wilc_parse_gpios(struct wilc *wilc) in wilc_parse_gpios() argument
165 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_parse_gpios()
166 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_parse_gpios()
188 static void wilc_wlan_power(struct wilc *wilc, bool on) in wilc_wlan_power() argument
190 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_wlan_power()
211 struct wilc *wilc; in wilc_bus_probe() local
218 ret = wilc_cfg80211_init(&wilc, &spi->dev, WILC_HIF_SPI, &wilc_hif_spi); in wilc_bus_probe()
222 spi_set_drvdata(spi, wilc); in wilc_bus_probe()
223 wilc->dev = &spi->dev; in wilc_bus_probe()
224 wilc->bus_data = spi_priv; in wilc_bus_probe()
225 wilc->dev_irq_num = spi->irq; in wilc_bus_probe()
227 ret = wilc_parse_gpios(wilc); in wilc_bus_probe()
231 wilc->rtc_clk = devm_clk_get_optional_enabled(&spi->dev, "rtc"); in wilc_bus_probe()
232 if (IS_ERR(wilc->rtc_clk)) { in wilc_bus_probe()
233 ret = PTR_ERR(wilc->rtc_clk); in wilc_bus_probe()
242 wilc_wlan_power(wilc, true); in wilc_bus_probe()
244 ret = wilc_spi_configure_bus_protocol(wilc); in wilc_bus_probe()
248 ret = wilc_get_chipid(wilc); in wilc_bus_probe()
252 ret = wilc_cfg80211_register(wilc); in wilc_bus_probe()
256 ret = wilc_load_mac_from_nv(wilc); in wilc_bus_probe()
262 wilc_wlan_power(wilc, false); in wilc_bus_probe()
263 vif = wilc_netdev_ifc_init(wilc, "wlan%d", WILC_STATION_MODE, in wilc_bus_probe()
272 wiphy_unregister(wilc->wiphy); in wilc_bus_probe()
274 wilc_wlan_power(wilc, false); in wilc_bus_probe()
276 wilc_netdev_cleanup(wilc); in wilc_bus_probe()
277 wiphy_free(wilc->wiphy); in wilc_bus_probe()
285 struct wilc *wilc = spi_get_drvdata(spi); in wilc_bus_remove() local
286 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_bus_remove()
288 wilc_netdev_cleanup(wilc); in wilc_bus_remove()
289 wiphy_unregister(wilc->wiphy); in wilc_bus_remove()
290 wiphy_free(wilc->wiphy); in wilc_bus_remove()
319 static int wilc_spi_tx(struct wilc *wilc, u8 *b, u32 len) in wilc_spi_tx() argument
321 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_tx()
361 static int wilc_spi_rx(struct wilc *wilc, u8 *rb, u32 rlen) in wilc_spi_rx() argument
363 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_rx()
402 static int wilc_spi_tx_rx(struct wilc *wilc, u8 *wb, u8 *rb, u32 rlen) in wilc_spi_tx_rx() argument
404 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_tx_rx()
437 static int spi_data_write(struct wilc *wilc, u8 *b, u32 sz) in spi_data_write() argument
439 struct spi_device *spi = to_spi_device(wilc->dev); in spi_data_write()
440 struct wilc_spi *spi_priv = wilc->bus_data; in spi_data_write()
468 if (wilc_spi_tx(wilc, &cmd, 1)) { in spi_data_write()
478 if (wilc_spi_tx(wilc, &b[ix], nbytes)) { in spi_data_write()
492 if (wilc_spi_tx(wilc, crc, 2)) { in spi_data_write()
519 static int wilc_spi_single_read(struct wilc *wilc, u8 cmd, u32 adr, void *b, in wilc_spi_single_read() argument
522 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_single_read()
523 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_spi_single_read()
566 if (wilc_spi_tx_rx(wilc, wb, rb, cmd_len + resp_len)) { in wilc_spi_single_read()
614 static int wilc_spi_write_cmd(struct wilc *wilc, u8 cmd, u32 adr, u32 data, in wilc_spi_write_cmd() argument
617 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_write_cmd()
618 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_spi_write_cmd()
663 if (wilc_spi_tx_rx(wilc, wb, rb, cmd_len + resp_len)) { in wilc_spi_write_cmd()
689 static int wilc_spi_dma_rw(struct wilc *wilc, u8 cmd, u32 adr, u8 *b, u32 sz) in wilc_spi_dma_rw() argument
691 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_dma_rw()
692 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_spi_dma_rw()
740 if (wilc_spi_tx_rx(wilc, wb, rb, cmd_len + resp_len)) { in wilc_spi_dma_rw()
773 if (wilc_spi_rx(wilc, &rsp, 1)) { in wilc_spi_dma_rw()
785 if (wilc_spi_rx(wilc, &b[ix], nbytes)) { in wilc_spi_dma_rw()
795 if (wilc_spi_rx(wilc, crc, 2)) { in wilc_spi_dma_rw()
816 static int wilc_spi_special_cmd(struct wilc *wilc, u8 cmd) in wilc_spi_special_cmd() argument
818 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_special_cmd()
819 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_spi_special_cmd()
849 if (wilc_spi_tx_rx(wilc, wb, rb, cmd_len + resp_len)) { in wilc_spi_special_cmd()
871 static void wilc_spi_reset_cmd_sequence(struct wilc *wl, u8 attempt, u32 addr) in wilc_spi_reset_cmd_sequence()
884 static int wilc_spi_read_reg(struct wilc *wilc, u32 addr, u32 *data) in wilc_spi_read_reg() argument
886 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_read_reg()
899 result = wilc_spi_single_read(wilc, cmd, addr, data, clockless); in wilc_spi_read_reg()
910 wilc_spi_reset_cmd_sequence(wilc, i, addr); in wilc_spi_read_reg()
916 static int wilc_spi_read(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_spi_read() argument
918 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_read()
926 result = wilc_spi_dma_rw(wilc, CMD_DMA_EXT_READ, addr, in wilc_spi_read()
933 wilc_spi_reset_cmd_sequence(wilc, i, addr); in wilc_spi_read()
939 static int spi_internal_write(struct wilc *wilc, u32 adr, u32 dat) in spi_internal_write() argument
941 struct spi_device *spi = to_spi_device(wilc->dev); in spi_internal_write()
946 result = wilc_spi_write_cmd(wilc, CMD_INTERNAL_WRITE, adr, in spi_internal_write()
952 wilc_spi_reset_cmd_sequence(wilc, i, adr); in spi_internal_write()
958 static int spi_internal_read(struct wilc *wilc, u32 adr, u32 *data) in spi_internal_read() argument
960 struct spi_device *spi = to_spi_device(wilc->dev); in spi_internal_read()
961 struct wilc_spi *spi_priv = wilc->bus_data; in spi_internal_read()
966 result = wilc_spi_single_read(wilc, CMD_INTERNAL_READ, adr, in spi_internal_read()
975 wilc_spi_reset_cmd_sequence(wilc, i, adr); in spi_internal_read()
987 static int wilc_spi_write_reg(struct wilc *wilc, u32 addr, u32 data) in wilc_spi_write_reg() argument
989 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_write_reg()
1002 result = wilc_spi_write_cmd(wilc, cmd, addr, data, clockless); in wilc_spi_write_reg()
1011 wilc_spi_reset_cmd_sequence(wilc, i, addr); in wilc_spi_write_reg()
1016 static int spi_data_rsp(struct wilc *wilc, u8 cmd) in spi_data_rsp() argument
1018 struct spi_device *spi = to_spi_device(wilc->dev); in spi_data_rsp()
1034 result = wilc_spi_rx(wilc, rsp, sizeof(rsp)); in spi_data_rsp()
1062 static int wilc_spi_write(struct wilc *wilc, u32 addr, u8 *buf, u32 size) in wilc_spi_write() argument
1064 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_write()
1075 result = wilc_spi_dma_rw(wilc, CMD_DMA_EXT_WRITE, addr, in wilc_spi_write()
1080 wilc_spi_reset_cmd_sequence(wilc, i, addr); in wilc_spi_write()
1087 result = spi_data_write(wilc, buf, size); in wilc_spi_write()
1090 wilc_spi_reset_cmd_sequence(wilc, i, addr); in wilc_spi_write()
1097 result = spi_data_rsp(wilc, CMD_DMA_EXT_WRITE); in wilc_spi_write()
1100 wilc_spi_reset_cmd_sequence(wilc, i, addr); in wilc_spi_write()
1114 static int wilc_spi_reset(struct wilc *wilc) in wilc_spi_reset() argument
1116 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_reset()
1117 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_spi_reset()
1120 result = wilc_spi_special_cmd(wilc, CMD_RESET); in wilc_spi_reset()
1127 static bool wilc_spi_is_init(struct wilc *wilc) in wilc_spi_is_init() argument
1129 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_spi_is_init()
1134 static int wilc_spi_deinit(struct wilc *wilc) in wilc_spi_deinit() argument
1136 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_spi_deinit()
1139 wilc_wlan_power(wilc, false); in wilc_spi_deinit()
1143 static int wilc_spi_init(struct wilc *wilc, bool resume) in wilc_spi_init() argument
1145 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_spi_init()
1150 if (wilc_validate_chipid(wilc) == 0) in wilc_spi_init()
1154 wilc_wlan_power(wilc, true); in wilc_spi_init()
1156 ret = wilc_spi_configure_bus_protocol(wilc); in wilc_spi_init()
1158 wilc_wlan_power(wilc, false); in wilc_spi_init()
1167 static int wilc_spi_configure_bus_protocol(struct wilc *wilc) in wilc_spi_configure_bus_protocol() argument
1169 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_configure_bus_protocol()
1170 struct wilc_spi *spi_priv = wilc->bus_data; in wilc_spi_configure_bus_protocol()
1183 ret = spi_internal_read(wilc, WILC_SPI_PROTOCOL_OFFSET, &reg); in wilc_spi_configure_bus_protocol()
1208 ret = spi_internal_write(wilc, WILC_SPI_PROTOCOL_OFFSET, reg); in wilc_spi_configure_bus_protocol()
1211 "[wilc spi %d]: Failed internal write reg\n", in wilc_spi_configure_bus_protocol()
1220 spi_internal_read(wilc, WILC_SPI_PROTOCOL_OFFSET, &reg); in wilc_spi_configure_bus_protocol()
1227 static int wilc_validate_chipid(struct wilc *wilc) in wilc_validate_chipid() argument
1229 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_validate_chipid()
1236 ret = wilc_spi_read_reg(wilc, WILC_CHIPID, &chipid); in wilc_validate_chipid()
1248 static int wilc_spi_read_size(struct wilc *wilc, u32 *size) in wilc_spi_read_size() argument
1252 ret = spi_internal_read(wilc, in wilc_spi_read_size()
1259 static int wilc_spi_read_int(struct wilc *wilc, u32 *int_status) in wilc_spi_read_int() argument
1261 return spi_internal_read(wilc, WILC_SPI_INT_STATUS - WILC_SPI_REG_BASE, in wilc_spi_read_int()
1265 static int wilc_spi_clear_int_ext(struct wilc *wilc, u32 val) in wilc_spi_clear_int_ext() argument
1272 ret = spi_internal_write(wilc, in wilc_spi_clear_int_ext()
1278 ret = spi_internal_read(wilc, in wilc_spi_clear_int_ext()
1289 static int wilc_spi_sync_ext(struct wilc *wilc, int nint) in wilc_spi_sync_ext() argument
1291 struct spi_device *spi = to_spi_device(wilc->dev); in wilc_spi_sync_ext()
1303 ret = wilc_spi_read_reg(wilc, WILC_PIN_MUX_0, &reg); in wilc_spi_sync_ext()
1310 ret = wilc_spi_write_reg(wilc, WILC_PIN_MUX_0, reg); in wilc_spi_sync_ext()
1320 ret = wilc_spi_read_reg(wilc, WILC_INTR_ENABLE, &reg); in wilc_spi_sync_ext()
1330 ret = wilc_spi_write_reg(wilc, WILC_INTR_ENABLE, reg); in wilc_spi_sync_ext()
1337 ret = wilc_spi_read_reg(wilc, WILC_INTR2_ENABLE, &reg); in wilc_spi_sync_ext()
1347 ret = wilc_spi_write_reg(wilc, WILC_INTR2_ENABLE, reg); in wilc_spi_sync_ext()