Lines Matching refs:wcnss

123 	struct wcnss_ctrl *wcnss = dev_get_drvdata(&rpdev->dev);
131 dev_err(wcnss->dev,
137 dev_info(wcnss->dev, "WCNSS Version %d.%d %d.%d\n",
141 complete(&wcnss->ack);
145 dev_err(wcnss->dev,
151 wcnss->ack_status = nvresp->status;
152 complete(&wcnss->ack);
155 dev_dbg(wcnss->dev, "cold boot complete\n");
156 complete(&wcnss->cbc);
159 dev_info(wcnss->dev, "unknown message type %d\n", hdr->type);
168 * @wcnss: wcnss ctrl driver context
170 static int wcnss_request_version(struct wcnss_ctrl *wcnss)
177 ret = rpmsg_send(wcnss->channel, &msg, sizeof(msg));
181 ret = wait_for_completion_timeout(&wcnss->ack, WCNSS_CBC_TIMEOUT);
183 dev_err(wcnss->dev, "timeout waiting for version response\n");
192 * @wcnss: wcnss_ctrl state handle
197 static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
209 ret = request_firmware(&fw, NVBIN_FILE, wcnss->dev);
211 dev_err(wcnss->dev, "Failed to load nv file %s: %d\n",
235 ret = rpmsg_send(wcnss->channel, req, req->hdr.len);
237 dev_err(wcnss->dev, "failed to send smd packet\n");
248 ret = wait_for_completion_timeout(&wcnss->ack, WCNSS_REQUEST_TIMEOUT);
250 dev_err(wcnss->dev, "timeout waiting for nv upload ack\n");
253 *expect_cbc = wcnss->ack_status == WCNSS_ACK_COLD_BOOTING;
267 * @wcnss: wcnss handle, retrieved from drvdata
271 struct rpmsg_endpoint *qcom_wcnss_open_channel(void *wcnss, const char *name, rpmsg_rx_cb_t cb, void *priv)
274 struct wcnss_ctrl *_wcnss = wcnss;
286 struct wcnss_ctrl *wcnss = container_of(work, struct wcnss_ctrl, probe_work);
290 ret = wcnss_request_version(wcnss);
294 ret = wcnss_download_nv(wcnss, &expect_cbc);
300 ret = wait_for_completion_timeout(&wcnss->cbc, WCNSS_REQUEST_TIMEOUT);
302 dev_err(wcnss->dev, "expected cold boot completion\n");
305 of_platform_populate(wcnss->dev->of_node, NULL, NULL, wcnss->dev);
310 struct wcnss_ctrl *wcnss;
312 wcnss = devm_kzalloc(&rpdev->dev, sizeof(*wcnss), GFP_KERNEL);
313 if (!wcnss)
316 wcnss->dev = &rpdev->dev;
317 wcnss->channel = rpdev->ept;
319 init_completion(&wcnss->ack);
320 init_completion(&wcnss->cbc);
321 INIT_WORK(&wcnss->probe_work, wcnss_async_probe);
323 dev_set_drvdata(&rpdev->dev, wcnss);
325 schedule_work(&wcnss->probe_work);
332 struct wcnss_ctrl *wcnss = dev_get_drvdata(&rpdev->dev);
334 cancel_work_sync(&wcnss->probe_work);
339 { .compatible = "qcom,wcnss", },