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

Commit 86d03a0f authored by Rupesh Gujare's avatar Rupesh Gujare Committed by Greg Kroah-Hartman
Browse files

staging: ozwpan: isoc latency for audio burst



Set audio latency. This fixes issue where audio clips heard during
link outage.

Signed-off-by: default avatarRupesh Gujare <rgujare@ozmodevices.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5494ebdf
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -24,12 +24,6 @@
/*------------------------------------------------------------------------------
 */
#define OZ_MAX_TX_POOL_SIZE	6
/* Maximum number of uncompleted isoc frames that can be pending in network.
 */
#define OZ_MAX_SUBMITTED_ISOC	16
/* Maximum number of uncompleted isoc frames that can be pending in Tx Queue.
 */
#define OZ_MAX_TX_QUEUE_ISOC	32
/*------------------------------------------------------------------------------
 */
static struct oz_tx_frame *oz_tx_frame_alloc(struct oz_pd *pd);
@@ -854,7 +848,7 @@ int oz_send_isoc_unit(struct oz_pd *pd, u8 ep_num, u8 *data, int len)
		if (!(pd->mode & OZ_F_ISOC_ANYTIME)) {
			struct oz_tx_frame *isoc_unit = NULL;
			int nb = pd->nb_queued_isoc_frames;
			if (nb >= OZ_MAX_TX_QUEUE_ISOC) {
			if (nb >= pd->isoc_latency) {
				oz_trace2(OZ_TRACE_TX_FRAMES,
						"Dropping ISOC Unit nb= %d\n",
									nb);
+1 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ struct oz_pd {
	u8		heartbeat_requested;
	u8		mode;
	u8		ms_per_isoc;
	unsigned	isoc_latency;
	unsigned	max_stream_buffering;
	int		nb_queued_frames;
	int		nb_queued_isoc_frames;
+13 −0
Original line number Diff line number Diff line
@@ -220,6 +220,19 @@ static struct oz_pd *oz_connect_req(struct oz_pd *cur_pd, struct oz_elt *elt,
		pd->ms_per_isoc = body->ms_per_isoc;
		if (!pd->ms_per_isoc)
			pd->ms_per_isoc = 4;

		switch (body->ms_isoc_latency & OZ_LATENCY_MASK) {
		case OZ_ONE_MS_LATENCY:
			pd->isoc_latency = (body->ms_isoc_latency &
					~OZ_LATENCY_MASK) / pd->ms_per_isoc;
			break;
		case OZ_TEN_MS_LATENCY:
			pd->isoc_latency = ((body->ms_isoc_latency &
				~OZ_LATENCY_MASK) * 10) / pd->ms_per_isoc;
			break;
		default:
			pd->isoc_latency = OZ_MAX_TX_QUEUE_ISOC;
		}
	}
	if (body->max_len_div16)
		pd->max_tx_size = ((u16)body->max_len_div16)<<4;
+6 −0
Original line number Diff line number Diff line
@@ -30,6 +30,12 @@
/* Maximun sizes of tx frames. */
#define OZ_MAX_TX_SIZE		1514

/* Maximum number of uncompleted isoc frames that can be pending in network. */
#define OZ_MAX_SUBMITTED_ISOC	16

/* Maximum number of uncompleted isoc frames that can be pending in Tx Queue. */
#define OZ_MAX_TX_QUEUE_ISOC	32

/* Application handler functions.
 */
typedef int (*oz_app_init_fn_t)(void);
+5 −1
Original line number Diff line number Diff line
@@ -65,6 +65,10 @@ struct oz_hdr {

#define OZ_LAST_PN_HALF_CYCLE	127

#define OZ_LATENCY_MASK		0xc0
#define OZ_ONE_MS_LATENCY	0x40
#define OZ_TEN_MS_LATENCY	0x80

/* Connect request data structure.
 */
struct oz_elt_connect_req {
@@ -73,7 +77,7 @@ struct oz_elt_connect_req {
	u8	pd_info;
	u8	session_id;
	u8	presleep;
	u8	resv2;
	u8	ms_isoc_latency;
	u8	host_vendor;
	u8	keep_alive;
	u16	apps;