Bluetooth: Controller: Cleanup Periodic Adv Channel Map Update

Remove redundant code and cleanup Periodic Advertising
Channel Map Update implementation.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
diff --git a/subsys/bluetooth/controller/ll_sw/ull_adv_sync.c b/subsys/bluetooth/controller/ll_sw/ull_adv_sync.c
index b44477c..5f99324 100644
--- a/subsys/bluetooth/controller/ll_sw/ull_adv_sync.c
+++ b/subsys/bluetooth/controller/ll_sw/ull_adv_sync.c
@@ -1268,7 +1268,6 @@
 	struct pdu_adv *pdu_prev;
 	struct ll_adv_set *adv;
 	struct pdu_adv *pdu;
-	uint8_t others_len;
 	uint8_t acad_len;
 	uint8_t *others;
 	uint8_t ter_idx;
@@ -1299,12 +1298,6 @@
 	/* Dev assert if ACAD empty */
 	LL_ASSERT(hdr_data[ULL_ADV_HDR_DATA_LEN_OFFSET]);
 
-	/* Get the pointer, prev content and size of current ACAD */
-	err = ull_adv_sync_pdu_set_clear(lll_sync, pdu_prev, pdu,
-					 ULL_ADV_PDU_HDR_FIELD_ACAD, 0U,
-					 &hdr_data);
-	LL_ASSERT(!err);
-
 	/* Find the Channel Map Update Indication */
 	acad_len = hdr_data[ULL_ADV_HDR_DATA_LEN_OFFSET];
 	len = acad_len;
@@ -1334,8 +1327,7 @@
 	ad_len += 1U;
 	others = ad + ad_len;
 	acad_len -= ad_len;
-	others_len = acad_len - (ad - acad);
-	(void)memmove(ad, others, others_len);
+	(void)memmove(ad, others, acad_len);
 
 	/* Adjust the next PDU for ACAD length, this is done by using the next
 	 * PDU to copy ACAD into same next PDU.
@@ -1729,19 +1721,22 @@
 
 	/* Add/Retain/Remove ACAD */
 	if (hdr_add_fields & ULL_ADV_PDU_HDR_FIELD_ACAD) {
+		/* remember the new acad data len */
 		acad_len = *(uint8_t *)hdr_data;
-		/* If zero length ACAD then do not reduce ACAD but return
-		 * return previous ACAD length.
-		 */
-		if (!acad_len) {
-			acad_len = acad_len_prev;
-		}
+
 		/* return prev ACAD length */
 		*(uint8_t *)hdr_data = acad_len_prev;
-		hdr_data = (uint8_t *)hdr_data + 1;
+		hdr_data = (uint8_t *)hdr_data + sizeof(acad_len);
+
 		/* return the pointer to ACAD offset */
 		(void)memcpy(hdr_data, &ter_dptr, sizeof(ter_dptr));
 		hdr_data = (uint8_t *)hdr_data + sizeof(ter_dptr);
+
+		/* unchanged acad */
+		if (!acad_len) {
+			acad_len = acad_len_prev;
+		}
+
 		ter_dptr += acad_len;
 	} else if (!(hdr_rem_fields & ULL_ADV_PDU_HDR_FIELD_ACAD)) {
 		acad_len = acad_len_prev;
@@ -1802,6 +1797,8 @@
 		return BT_HCI_ERR_PACKET_TOO_LONG;
 	}
 
+	LL_ASSERT(ter_len <= (PDU_AC_EXT_HEADER_SIZE_MIN + PDU_AC_EXT_HEADER_SIZE_MAX));
+
 	/* set the tertiary extended header and PDU length */
 	ull_adv_aux_hdr_len_fill(ter_com_hdr, ter_len);
 	ter_pdu->len = ter_len + ad_len;
@@ -2108,7 +2105,7 @@
 	/* Try to allocate ACAD for channel map update indication, previous
 	 * ACAD length with be returned back.
 	 */
-	hdr_data[ULL_ADV_HDR_DATA_LEN_OFFSET] = sizeof(*chm_upd_ind) + 2U;
+	hdr_data[ULL_ADV_HDR_DATA_LEN_OFFSET] = 0U;
 	err = ull_adv_sync_pdu_set_clear(lll_sync, pdu_prev, pdu,
 					 ULL_ADV_PDU_HDR_FIELD_ACAD, 0U,
 					 &hdr_data);
@@ -2116,20 +2113,18 @@
 		return err;
 	}
 
-	/* Check if there are other ACAD data previously */
+	/* Check if there are other ACAD data previously and append to end of
+	 * other ACAD already present.
+	 */
 	acad_len_prev = hdr_data[ULL_ADV_HDR_DATA_LEN_OFFSET];
-	if (acad_len_prev) {
-		/* Append to end of other ACAD already present */
-		hdr_data[ULL_ADV_HDR_DATA_LEN_OFFSET] = acad_len_prev +
-							sizeof(*chm_upd_ind) +
-							2U;
-
-		err = ull_adv_sync_pdu_set_clear(lll_sync, pdu_prev, pdu,
-						 ULL_ADV_PDU_HDR_FIELD_ACAD, 0U,
-						 &hdr_data);
-		if (err) {
-			return err;
-		}
+	hdr_data[ULL_ADV_HDR_DATA_LEN_OFFSET] = acad_len_prev +
+						sizeof(*chm_upd_ind) +
+						2U;
+	err = ull_adv_sync_pdu_set_clear(lll_sync, pdu_prev, pdu,
+					 ULL_ADV_PDU_HDR_FIELD_ACAD, 0U,
+					 &hdr_data);
+	if (err) {
+		return err;
 	}
 
 	/* Populate the AD data length and opcode */