Lines Matching refs:wilc

57 static int wilc_spi_reset(struct wilc *wilc);
161 static int wilc_parse_gpios(struct wilc *wilc)
163 struct spi_device *spi = to_spi_device(wilc->dev);
164 struct wilc_spi *spi_priv = wilc->bus_data;
186 static void wilc_wlan_power(struct wilc *wilc, bool on)
188 struct wilc_spi *spi_priv = wilc->bus_data;
208 struct wilc *wilc;
215 ret = wilc_cfg80211_init(&wilc, &spi->dev, WILC_HIF_SPI, &wilc_hif_spi);
219 spi_set_drvdata(spi, wilc);
220 wilc->dev = &spi->dev;
221 wilc->bus_data = spi_priv;
222 wilc->dev_irq_num = spi->irq;
224 ret = wilc_parse_gpios(wilc);
228 wilc->rtc_clk = devm_clk_get_optional(&spi->dev, "rtc");
229 if (IS_ERR(wilc->rtc_clk)) {
230 ret = PTR_ERR(wilc->rtc_clk);
233 clk_prepare_enable(wilc->rtc_clk);
238 wilc_netdev_cleanup(wilc);
246 struct wilc *wilc = spi_get_drvdata(spi);
247 struct wilc_spi *spi_priv = wilc->bus_data;
249 clk_disable_unprepare(wilc->rtc_clk);
250 wilc_netdev_cleanup(wilc);
278 static int wilc_spi_tx(struct wilc *wilc, u8 *b, u32 len)
280 struct spi_device *spi = to_spi_device(wilc->dev);
321 static int wilc_spi_rx(struct wilc *wilc, u8 *rb, u32 rlen)
323 struct spi_device *spi = to_spi_device(wilc->dev);
363 static int wilc_spi_tx_rx(struct wilc *wilc, u8 *wb, u8 *rb, u32 rlen)
365 struct spi_device *spi = to_spi_device(wilc->dev);
400 static int spi_data_write(struct wilc *wilc, u8 *b, u32 sz)
402 struct spi_device *spi = to_spi_device(wilc->dev);
403 struct wilc_spi *spi_priv = wilc->bus_data;
431 if (wilc_spi_tx(wilc, &cmd, 1)) {
441 if (wilc_spi_tx(wilc, &b[ix], nbytes)) {
455 if (wilc_spi_tx(wilc, crc, 2)) {
482 static int wilc_spi_single_read(struct wilc *wilc, u8 cmd, u32 adr, void *b,
485 struct spi_device *spi = to_spi_device(wilc->dev);
486 struct wilc_spi *spi_priv = wilc->bus_data;
529 if (wilc_spi_tx_rx(wilc, wb, rb, cmd_len + resp_len)) {
577 static int wilc_spi_write_cmd(struct wilc *wilc, u8 cmd, u32 adr, u32 data,
580 struct spi_device *spi = to_spi_device(wilc->dev);
581 struct wilc_spi *spi_priv = wilc->bus_data;
626 if (wilc_spi_tx_rx(wilc, wb, rb, cmd_len + resp_len)) {
652 static int wilc_spi_dma_rw(struct wilc *wilc, u8 cmd, u32 adr, u8 *b, u32 sz)
654 struct spi_device *spi = to_spi_device(wilc->dev);
655 struct wilc_spi *spi_priv = wilc->bus_data;
703 if (wilc_spi_tx_rx(wilc, wb, rb, cmd_len + resp_len)) {
736 if (wilc_spi_rx(wilc, &rsp, 1)) {
748 if (wilc_spi_rx(wilc, &b[ix], nbytes)) {
758 if (wilc_spi_rx(wilc, crc, 2)) {
779 static int wilc_spi_special_cmd(struct wilc *wilc, u8 cmd)
781 struct spi_device *spi = to_spi_device(wilc->dev);
782 struct wilc_spi *spi_priv = wilc->bus_data;
812 if (wilc_spi_tx_rx(wilc, wb, rb, cmd_len + resp_len)) {
834 static void wilc_spi_reset_cmd_sequence(struct wilc *wl, u8 attempt, u32 addr)
847 static int wilc_spi_read_reg(struct wilc *wilc, u32 addr, u32 *data)
849 struct spi_device *spi = to_spi_device(wilc->dev);
862 result = wilc_spi_single_read(wilc, cmd, addr, data, clockless);
873 wilc_spi_reset_cmd_sequence(wilc, i, addr);
879 static int wilc_spi_read(struct wilc *wilc, u32 addr, u8 *buf, u32 size)
881 struct spi_device *spi = to_spi_device(wilc->dev);
889 result = wilc_spi_dma_rw(wilc, CMD_DMA_EXT_READ, addr,
896 wilc_spi_reset_cmd_sequence(wilc, i, addr);
902 static int spi_internal_write(struct wilc *wilc, u32 adr, u32 dat)
904 struct spi_device *spi = to_spi_device(wilc->dev);
909 result = wilc_spi_write_cmd(wilc, CMD_INTERNAL_WRITE, adr,
915 wilc_spi_reset_cmd_sequence(wilc, i, adr);
921 static int spi_internal_read(struct wilc *wilc, u32 adr, u32 *data)
923 struct spi_device *spi = to_spi_device(wilc->dev);
924 struct wilc_spi *spi_priv = wilc->bus_data;
929 result = wilc_spi_single_read(wilc, CMD_INTERNAL_READ, adr,
938 wilc_spi_reset_cmd_sequence(wilc, i, adr);
950 static int wilc_spi_write_reg(struct wilc *wilc, u32 addr, u32 data)
952 struct spi_device *spi = to_spi_device(wilc->dev);
965 result = wilc_spi_write_cmd(wilc, cmd, addr, data, clockless);
974 wilc_spi_reset_cmd_sequence(wilc, i, addr);
979 static int spi_data_rsp(struct wilc *wilc, u8 cmd)
981 struct spi_device *spi = to_spi_device(wilc->dev);
997 result = wilc_spi_rx(wilc, rsp, sizeof(rsp));
1025 static int wilc_spi_write(struct wilc *wilc, u32 addr, u8 *buf, u32 size)
1027 struct spi_device *spi = to_spi_device(wilc->dev);
1038 result = wilc_spi_dma_rw(wilc, CMD_DMA_EXT_WRITE, addr,
1043 wilc_spi_reset_cmd_sequence(wilc, i, addr);
1050 result = spi_data_write(wilc, buf, size);
1053 wilc_spi_reset_cmd_sequence(wilc, i, addr);
1060 result = spi_data_rsp(wilc, CMD_DMA_EXT_WRITE);
1063 wilc_spi_reset_cmd_sequence(wilc, i, addr);
1077 static int wilc_spi_reset(struct wilc *wilc)
1079 struct spi_device *spi = to_spi_device(wilc->dev);
1080 struct wilc_spi *spi_priv = wilc->bus_data;
1083 result = wilc_spi_special_cmd(wilc, CMD_RESET);
1090 static bool wilc_spi_is_init(struct wilc *wilc)
1092 struct wilc_spi *spi_priv = wilc->bus_data;
1097 static int wilc_spi_deinit(struct wilc *wilc)
1099 struct wilc_spi *spi_priv = wilc->bus_data;
1102 wilc_wlan_power(wilc, false);
1106 static int wilc_spi_init(struct wilc *wilc, bool resume)
1108 struct spi_device *spi = to_spi_device(wilc->dev);
1109 struct wilc_spi *spi_priv = wilc->bus_data;
1116 ret = wilc_spi_read_reg(wilc, WILC_CHIPID, &chipid);
1123 wilc_wlan_power(wilc, true);
1138 ret = spi_internal_read(wilc, WILC_SPI_PROTOCOL_OFFSET, &reg);
1163 ret = spi_internal_write(wilc, WILC_SPI_PROTOCOL_OFFSET, reg);
1166 "[wilc spi %d]: Failed internal write reg\n",
1175 spi_internal_read(wilc, WILC_SPI_PROTOCOL_OFFSET, &reg);
1182 ret = wilc_spi_read_reg(wilc, WILC_CHIPID, &chipid);
1193 static int wilc_spi_read_size(struct wilc *wilc, u32 *size)
1197 ret = spi_internal_read(wilc,
1204 static int wilc_spi_read_int(struct wilc *wilc, u32 *int_status)
1206 return spi_internal_read(wilc, WILC_SPI_INT_STATUS - WILC_SPI_REG_BASE,
1210 static int wilc_spi_clear_int_ext(struct wilc *wilc, u32 val)
1217 ret = spi_internal_write(wilc,
1223 ret = spi_internal_read(wilc,
1234 static int wilc_spi_sync_ext(struct wilc *wilc, int nint)
1236 struct spi_device *spi = to_spi_device(wilc->dev);
1248 ret = wilc_spi_read_reg(wilc, WILC_PIN_MUX_0, &reg);
1255 ret = wilc_spi_write_reg(wilc, WILC_PIN_MUX_0, reg);
1265 ret = wilc_spi_read_reg(wilc, WILC_INTR_ENABLE, &reg);
1275 ret = wilc_spi_write_reg(wilc, WILC_INTR_ENABLE, reg);
1282 ret = wilc_spi_read_reg(wilc, WILC_INTR2_ENABLE, &reg);
1292 ret = wilc_spi_write_reg(wilc, WILC_INTR2_ENABLE, reg);