Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5265a85 authored by Ravi Aravamudhan's avatar Ravi Aravamudhan
Browse files

diag: Initialize control channel workqueues correctly



Diag driver initializes the control channel workqueues after
registering with SMD. In some cases, the driver can be notified
of channel open before the intialization is complete. This path
initializes the control channel workqueues before registering
with SMD.

Change-Id: If84a22fd1d7113a55b8801e1087a7c9cd986472f
Signed-off-by: default avatarRavi Aravamudhan <aravamud@codeaurora.org>
parent 3e5d75b2
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -2958,12 +2958,13 @@ static int __init diagchar_init(void)
	ret = diagfwd_bridge_init();
	if (ret)
		goto fail;
	ret = diagfwd_peripheral_init();
	ret = diagfwd_cntl_init();
	if (ret)
		goto fail;
	ret = diagfwd_cntl_init();
	ret = diagfwd_peripheral_init();
	if (ret)
		goto fail;
	diagfwd_cntl_channel_init();
	driver->dci_state = diag_dci_init();
	pr_debug("diagchar initializing ..\n");
	driver->num = 1;
+7 −4
Original line number Diff line number Diff line
@@ -1246,8 +1246,6 @@ int diag_send_buffering_wm_values(uint8_t peripheral,

int diagfwd_cntl_init(void)
{
	uint8_t peripheral;

	reg_dirty = 0;
	driver->polling_reg_flag = 0;
	driver->log_on_demand_support = 1;
@@ -1263,12 +1261,17 @@ int diagfwd_cntl_init(void)
	if (!driver->cntl_wq)
		return -ENOMEM;

	return 0;
}

void diagfwd_cntl_channel_init(void)
{
	uint8_t peripheral;

	for (peripheral = 0; peripheral < NUM_PERIPHERALS; peripheral++) {
		diagfwd_early_open(peripheral);
		diagfwd_open(peripheral, TYPE_CNTL);
	}

	return 0;
}

void diagfwd_cntl_exit(void)
+1 −0
Original line number Diff line number Diff line
@@ -261,6 +261,7 @@ struct diag_ctrl_set_wq_val {
} __packed;

int diagfwd_cntl_init(void);
void diagfwd_cntl_channel_init(void);
void diagfwd_cntl_exit(void);
void diag_cntl_channel_open(struct diagfwd_info *p_info);
void diag_cntl_channel_close(struct diagfwd_info *p_info);